http-request-manager 18.4.4 → 18.4.9

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 (48) hide show
  1. package/esm2022/lib/http-request-manager.module.mjs +14 -3
  2. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +7 -5
  3. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.mjs +92 -0
  4. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.mjs +14 -0
  5. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.mjs +57 -0
  6. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.mjs +107 -0
  7. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.mjs +14 -0
  8. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.mjs +5 -6
  9. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.mjs +14 -36
  10. package/esm2022/lib/http-request-services-demo/request-manager-ws-demo/services/state-request-demo.service.mjs +13 -39
  11. package/esm2022/lib/interceptors/index.mjs +2 -1
  12. package/esm2022/lib/models/database-storage.model.mjs +3 -1
  13. package/esm2022/lib/services/request-manager-services/request.service.mjs +4 -1
  14. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +29 -26
  15. package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +4 -4
  16. package/esm2022/lib/services/store-state-manager-service/store-state-manager.service.mjs +2 -2
  17. package/esm2022/lib/services/utils/encryption/index.mjs +2 -1
  18. package/esm2022/lib/services/utils/encryption/random.mjs +13 -1
  19. package/esm2022/lib/services/utils/index.mjs +2 -1
  20. package/esm2022/lib/services/ws-manager-service/index.mjs +2 -2
  21. package/esm2022/lib/services/ws-manager-service/services/index.mjs +2 -0
  22. package/esm2022/lib/services/ws-manager-service/services/websocket.service.mjs +16 -7
  23. package/fesm2022/http-request-manager.mjs +339 -97
  24. package/fesm2022/http-request-manager.mjs.map +1 -1
  25. package/http-request-manager-18.4.9.tgz +0 -0
  26. package/lib/http-request-manager.module.d.ts +26 -22
  27. package/lib/http-request-services-demo/http-request-services-demo.component.d.ts +3 -1
  28. package/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.d.ts +15 -0
  29. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.d.ts +8 -0
  30. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.d.ts +20 -0
  31. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.d.ts +33 -0
  32. package/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.d.ts +8 -0
  33. package/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.d.ts +3 -5
  34. package/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.d.ts +3 -5
  35. package/lib/http-request-services-demo/request-manager-ws-demo/services/state-request-demo.service.d.ts +1 -5
  36. package/lib/interceptors/index.d.ts +1 -0
  37. package/lib/models/database-storage.model.d.ts +1 -1
  38. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +3 -1
  39. package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +3 -4
  40. package/lib/services/store-state-manager-service/store-state-manager.service.d.ts +1 -1
  41. package/lib/services/utils/encryption/index.d.ts +1 -0
  42. package/lib/services/utils/encryption/random.d.ts +4 -0
  43. package/lib/services/utils/index.d.ts +1 -0
  44. package/lib/services/ws-manager-service/index.d.ts +1 -1
  45. package/lib/services/ws-manager-service/services/index.d.ts +1 -0
  46. package/lib/services/ws-manager-service/services/websocket.service.d.ts +3 -1
  47. package/package.json +1 -1
  48. package/http-request-manager-18.4.4.tgz +0 -0
@@ -0,0 +1,14 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class WsNotificationsComponent {
4
+ constructor() { }
5
+ ngOnInit() {
6
+ }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WsNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: WsNotificationsComponent, selector: "app-ws-notifications", ngImport: i0, template: "<p>\n ws-notifications works!\n</p>\n", styles: [""] }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WsNotificationsComponent, decorators: [{
11
+ type: Component,
12
+ args: [{ selector: 'app-ws-notifications', template: "<p>\n ws-notifications works!\n</p>\n" }]
13
+ }], ctorParameters: () => [] });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3Mtbm90aWZpY2F0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vL2NvbXBvbmVudHMvd3Mtbm90aWZpY2F0aW9ucy93cy1ub3RpZmljYXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvaHR0cC1yZXF1ZXN0LXNlcnZpY2VzLWRlbW8vcmVxdWVzdC1tYW5hZ2VyLXdzLWRlbW8vY29tcG9uZW50cy93cy1ub3RpZmljYXRpb25zL3dzLW5vdGlmaWNhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7QUFPbEQsTUFBTSxPQUFPLHdCQUF3QjtJQUVuQyxnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzsrR0FMVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qiw0RENQckMsd0NBR0E7OzRGRElhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd3Mtbm90aWZpY2F0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi93cy1ub3RpZmljYXRpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd3Mtbm90aWZpY2F0aW9ucy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgV3NOb3RpZmljYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbn1cbiIsIjxwPlxuICB3cy1ub3RpZmljYXRpb25zIHdvcmtzIVxuPC9wPlxuIl19
@@ -1,13 +1,12 @@
1
1
  export class UserData {
2
- constructor(username = '', name = '', email = '', roles = '') {
3
- this.username = username;
2
+ constructor(ldap = '', name = '', email = '') {
3
+ this.ldap = ldap;
4
4
  this.name = name;
5
5
  this.email = email;
6
- this.roles = roles;
7
6
  }
8
7
  static adapt(item) {
9
- const userName = `${item?.givenname} ${item?.surname}`;
10
- return new UserData(item?.sub, userName, item?.email, item?.roles);
8
+ const userName = `${item?.first_name} ${item?.last_name}`;
9
+ return new UserData(item?.ldap, userName, item?.email);
11
10
  }
12
11
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kYXRhLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby9yZXF1ZXN0LW1hbmFnZXItd3MtZGVtby9tb2RlbHMvdXNlci1kYXRhLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxRQUFRO0lBRW5CLFlBQ1MsV0FBVyxFQUFFLEVBQ2IsT0FBTyxFQUFFLEVBQ1QsUUFBUSxFQUFFLEVBQ1YsUUFBUSxFQUFFO1FBSFYsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUNiLFNBQUksR0FBSixJQUFJLENBQUs7UUFDVCxVQUFLLEdBQUwsS0FBSyxDQUFLO1FBQ1YsVUFBSyxHQUFMLEtBQUssQ0FBSztJQUNoQixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFVO1FBRXJCLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUE7UUFFdEQsT0FBTyxJQUFJLFFBQVEsQ0FDakIsSUFBSSxFQUFFLEdBQUcsRUFDVCxRQUFRLEVBQ1IsSUFBSSxFQUFFLEtBQUssRUFDWCxJQUFJLEVBQUUsS0FBSyxDQUNaLENBQUE7SUFFSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFVzZXJEYXRhSW50ZXJmYWNlIHtcbiAgdXNlcm5hbWU6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgZW1haWw6IHN0cmluZ1xuICByb2xlczogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyRGF0YSBpbXBsZW1lbnRzIFVzZXJEYXRhSW50ZXJmYWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdXNlcm5hbWUgPSAnJyxcbiAgICBwdWJsaWMgbmFtZSA9ICcnLFxuICAgIHB1YmxpYyBlbWFpbCA9ICcnLFxuICAgIHB1YmxpYyByb2xlcyA9ICcnLFxuICApIHt9XG5cbiAgc3RhdGljIGFkYXB0KGl0ZW0/OiBhbnkpOiBVc2VyRGF0YSB7XG5cbiAgICBjb25zdCB1c2VyTmFtZSA9IGAke2l0ZW0/LmdpdmVubmFtZX0gJHtpdGVtPy5zdXJuYW1lfWBcblxuICAgIHJldHVybiBuZXcgVXNlckRhdGEoXG4gICAgICBpdGVtPy5zdWIsXG4gICAgICB1c2VyTmFtZSxcbiAgICAgIGl0ZW0/LmVtYWlsLFxuICAgICAgaXRlbT8ucm9sZXMsXG4gICAgKVxuXG4gIH1cblxufVxuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kYXRhLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby9yZXF1ZXN0LW1hbmFnZXItd3MtZGVtby9tb2RlbHMvdXNlci1kYXRhLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sT0FBTyxRQUFRO0lBRW5CLFlBQ1MsT0FBTyxFQUFFLEVBQ1QsT0FBTyxFQUFFLEVBQ1QsUUFBUSxFQUFFO1FBRlYsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNULFNBQUksR0FBSixJQUFJLENBQUs7UUFDVCxVQUFLLEdBQUwsS0FBSyxDQUFLO0lBQ2hCLENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLElBQVU7UUFFckIsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJLEVBQUUsVUFBVSxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQTtRQUV6RCxPQUFPLElBQUksUUFBUSxDQUNqQixJQUFJLEVBQUUsSUFBSSxFQUNWLFFBQVEsRUFDUixJQUFJLEVBQUUsS0FBSyxDQUNaLENBQUE7SUFFSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFVzZXJEYXRhSW50ZXJmYWNlIHtcbiAgbGRhcDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBlbWFpbDogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyRGF0YSBpbXBsZW1lbnRzIFVzZXJEYXRhSW50ZXJmYWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbGRhcCA9ICcnLFxuICAgIHB1YmxpYyBuYW1lID0gJycsXG4gICAgcHVibGljIGVtYWlsID0gJycsXG4gICkge31cblxuICBzdGF0aWMgYWRhcHQoaXRlbT86IGFueSk6IFVzZXJEYXRhIHtcblxuICAgIGNvbnN0IHVzZXJOYW1lID0gYCR7aXRlbT8uZmlyc3RfbmFtZX0gJHtpdGVtPy5sYXN0X25hbWV9YFxuXG4gICAgcmV0dXJuIG5ldyBVc2VyRGF0YShcbiAgICAgIGl0ZW0/LmxkYXAsXG4gICAgICB1c2VyTmFtZSxcbiAgICAgIGl0ZW0/LmVtYWlsLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
@@ -1,19 +1,16 @@
1
1
  import { Component, inject, Input } from '@angular/core';
2
2
  import { FormBuilder, Validators } from '@angular/forms';
3
3
  import { combineLatest, map, EMPTY } from 'rxjs';
4
- import { HTTPManagerService, RandomNumber, ChannelMessage, CommunicationType } from '../../services';
4
+ import { HTTPManagerService, ChannelMessage, CommunicationType } from '../../services';
5
5
  import { StateRequestServiceDemo } from './services/state-request-demo.service';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/common";
8
- import * as i2 from "@angular/forms";
9
- import * as i3 from "@angular/material/button";
10
- import * as i4 from "@angular/material/tabs";
11
- import * as i5 from "@angular/material/form-field";
12
- import * as i6 from "@angular/material/select";
13
- import * as i7 from "@angular/material/core";
14
- import * as i8 from "@angular/material/chips";
15
- import * as i9 from "@angular/material/input";
16
- import * as i10 from "@angular/material/toolbar";
8
+ import * as i2 from "@angular/material/tabs";
9
+ import * as i3 from "@angular/material/progress-bar";
10
+ import * as i4 from "@angular/material/toolbar";
11
+ import * as i5 from "./components/ws-data-control/ws-data-control.component";
12
+ import * as i6 from "./components/ws-notifications/ws-notifications.component";
13
+ import * as i7 from "./components/ws-ai-messaging/ws-ai-messaging.component";
17
14
  export class RequestManagerWsDemoComponent {
18
15
  constructor() {
19
16
  this.httpManagerService = inject(HTTPManagerService);
@@ -29,6 +26,7 @@ export class RequestManagerWsDemoComponent {
29
26
  content: this.fb.control(null, Validators.required),
30
27
  });
31
28
  this.data$ = this.stateRequestServiceDemo.data$;
29
+ this.isPending$ = this.stateRequestServiceDemo.isPending$;
32
30
  this.fromMe = (user, fromUser) => {
33
31
  return user === fromUser;
34
32
  };
@@ -80,25 +78,7 @@ export class RequestManagerWsDemoComponent {
80
78
  return this.toUser.valid;
81
79
  }
82
80
  ngOnInit() {
83
- this.stateRequestServiceDemo.updateConnection(this.server, this.wsServer, this.jwtToken);
84
- this.stateRequestServiceDemo.getData();
85
- }
86
- onGetData() {
87
- this.stateRequestServiceDemo.getData();
88
- }
89
- onAddData() {
90
- this.stateRequestServiceDemo.addData();
91
- }
92
- onUpdateData(data) {
93
- const num = RandomNumber(1000, 9999);
94
- const newData = {
95
- "spiffe": `wavecoders.com/developer/${num}`,
96
- "id": 63,
97
- "last_name": "boni",
98
- "email": "mikeboni@hotmail.com",
99
- "first_name": "mike"
100
- };
101
- this.stateRequestServiceDemo.updateData(newData);
81
+ this.stateRequestServiceDemo.updateConnection(this.server, this.wsServer, this.jwtToken, this.user);
102
82
  }
103
83
  onSendMessage() {
104
84
  this.messages.markAllAsTouched();
@@ -116,21 +96,19 @@ export class RequestManagerWsDemoComponent {
116
96
  this.stateRequestServiceDemo.sendMessage(message);
117
97
  this.content.reset();
118
98
  }
119
- onRemoveData(data) {
120
- const lastRec = data[data.length - 1];
121
- this.stateRequestServiceDemo.deleteData(lastRec);
122
- }
123
99
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestManagerWsDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
124
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RequestManagerWsDemoComponent, selector: "app-request-manager-ws-demo", inputs: { server: "server", wsServer: "wsServer", jwtToken: "jwtToken" }, ngImport: i0, template: "<div style=\"margin: 2rem;\">\n\n <h2 style=\"display: flex;\">\n <span style=\"flex:1\">HTTP Request State Manager - Websockets</span>\n <span *ngIf=\"(connectionStatus$ | async) as connected; else NOT_CONNECTED\">\n WS -\n <span style=\"color: green;\">Connected</span>\n </span>\n <ng-template #NOT_CONNECTED>\n <span style=\"color: red;\">Disconnected {{ attempts$ | async }} - {{ nextRetry$ |async }}</span>\n </ng-template>\n </h2>\n\n <div>\n\n <div *ngIf=\"(user$ | async) as userInfo\">\n <mat-toolbar>\n <div style=\"display: flex; flex:1\">\n <div style=\"flex:1\">{{ userInfo.name }}</div>\n <div>({{ userInfo.username }})</div>\n </div>\n </mat-toolbar>\n </div>\n\n <mat-tab-group animationDuration=\"0ms\">\n\n <mat-tab label=\"WS - Data Control\">\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin: 1rem; display: flex; gap: 1rem; flex-direction: column;\">\n\n <div *ngIf=\"(users$ |async) as users\">\n <mat-chip-set>\n <mat-chip *ngFor=\"let user of users\">\n {{ user.name }}\n </mat-chip>\n </mat-chip-set>\n </div>\n\n <div style=\"display: flex; gap: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onGetData()\">Get Data</button>\n <button mat-stroked-button color=\"accent\" (click)=\"onUpdateData(data)\">Update Data</button>\n <button mat-stroked-button color=\"warn\" (click)=\"onRemoveData(data)\">Remove Data</button>\n <button mat-stroked-button color=\"primary\" (click)=\"onAddData()\">Add Data</button>\n </div>\n\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <div>{{ data | json }}</div>\n <h2>{{ data.length }}</h2>\n </div>\n\n </div>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Messaging\">\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin: 1rem; display: flex; gap: 1rem; flex-direction: column;\">\n\n <div *ngIf=\"(user$ | async) as userInfo\">\n\n <div *ngIf=\"(users$ | async) as users\">\n\n <div style=\"display: flex; gap: 1rem\">\n\n <div style=\"flex:1\" [formGroup]=\"messages\">\n <div style=\"display:flex\">\n <mat-form-field style=\"flex:1\" appearance=\"outline\">\n <mat-label>Users</mat-label>\n <mat-select formControlName=\"toUser\">\n <mat-option value=\"allChannels\" #selectedUser>\n All Users\n </mat-option>\n <mat-option *ngFor=\"let user of users\" [value]=\"user\">\n {{ user.username }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display:flex\">\n <mat-form-field style=\"flex:1\" appearance=\"outline\">\n <mat-label>Send a Message</mat-label>\n <textarea\n matInput placeholder=\"Ex. It makes me feel...\"\n formControlName=\"content\"\n (keydown.enter)=\"onSendMessage(); $event.preventDefault()\"\n [disabled]=\"!isValid\"\n ></textarea>\n </mat-form-field>\n </div>\n <div style=\"display:flex; gap: .5rem;\">\n <div style=\"flex:1\"></div>\n <button mat-stroked-button (click)=\"onSendMessage()\" color=\"warn\">\n Send Alert\n </button>\n <button mat-stroked-button (click)=\"onSendAlert()\">\n Send Message\n </button>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"(chat$ | async) as chat\" style=\"border: thin gray solid; padding: 1rem; margin-top: 1rem;\">\n <!-- <app-messenger-chat\n [user]=\"chat.user\"\n [messages]=\"chat.messages\"\n ></app-messenger-chat> -->\n </div>\n\n </div>\n\n </div>\n\n </div>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Custom Channel Messaging\" [disabled]=\"true\">\n WS - Custom Channel Messaging\n </mat-tab>\n\n </mat-tab-group>\n </div>\n\n</div>\n\n\n<div style=\"margin: 1rem;\">\n <h3>\n user: {{ user$ | async | json}}\n </h3>\n\n <h3>\n users: {{ users$ | async | json}}\n </h3>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i8.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RequestManagerWsDemoComponent, selector: "app-request-manager-ws-demo", inputs: { server: "server", wsServer: "wsServer", jwtToken: "jwtToken", user: "user" }, ngImport: i0, template: "<div style=\"margin: 2rem;\">\n\n <h2 style=\"display: flex;\">\n <span style=\"flex:1\">HTTP Request State Manager - Websockets</span>\n <span *ngIf=\"(connectionStatus$ | async) as connected; else NOT_CONNECTED\">\n WS -\n <span style=\"color: green;\">Connected</span>\n </span>\n <ng-template #NOT_CONNECTED>\n <span style=\"color: red;\">Disconnected {{ attempts$ | async }} - {{ nextRetry$ |async }}</span>\n </ng-template>\n </h2>\n\n <div>\n\n <div *ngIf=\"(user$ | async) as userInfo\">\n <mat-toolbar>\n <div style=\"display: flex; flex:1\">\n <div style=\"flex:1\">{{ userInfo.name }}</div>\n <div>({{ user.ldap }})</div>\n </div>\n </mat-toolbar>\n </div>\n\n <div *ngIf=\"(isPending$ | async)\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <mat-tab-group animationDuration=\"0ms\">\n\n <mat-tab label=\"WS - Data Control\">\n <!-- DATA CONTROL -->\n <app-ws-data-control\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-data-control>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Messaging\">\n\n <!-- <app-ws-messaging\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-messaging> -->\n\n </mat-tab>\n\n <mat-tab label=\"WS - Notifications\" [disabled]=\"true\">\n <app-ws-notifications></app-ws-notifications>\n WS - Custom Messaging\n </mat-tab>\n\n <mat-tab label=\"WS - AI Messaging\" [disabled]=\"true\">\n <app-ws-ai-messaging></app-ws-ai-messaging>\n WS - AI Messaging\n </mat-tab>\n\n </mat-tab-group>\n </div>\n\n</div>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i5.WsDataControlComponent, selector: "app-ws-data-control", inputs: ["server", "wsServer", "jwtToken", "user"] }, { kind: "component", type: i6.WsNotificationsComponent, selector: "app-ws-notifications" }, { kind: "component", type: i7.WsAiMessagingComponent, selector: "app-ws-ai-messaging" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
125
101
  }
126
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestManagerWsDemoComponent, decorators: [{
127
103
  type: Component,
128
- args: [{ selector: 'app-request-manager-ws-demo', template: "<div style=\"margin: 2rem;\">\n\n <h2 style=\"display: flex;\">\n <span style=\"flex:1\">HTTP Request State Manager - Websockets</span>\n <span *ngIf=\"(connectionStatus$ | async) as connected; else NOT_CONNECTED\">\n WS -\n <span style=\"color: green;\">Connected</span>\n </span>\n <ng-template #NOT_CONNECTED>\n <span style=\"color: red;\">Disconnected {{ attempts$ | async }} - {{ nextRetry$ |async }}</span>\n </ng-template>\n </h2>\n\n <div>\n\n <div *ngIf=\"(user$ | async) as userInfo\">\n <mat-toolbar>\n <div style=\"display: flex; flex:1\">\n <div style=\"flex:1\">{{ userInfo.name }}</div>\n <div>({{ userInfo.username }})</div>\n </div>\n </mat-toolbar>\n </div>\n\n <mat-tab-group animationDuration=\"0ms\">\n\n <mat-tab label=\"WS - Data Control\">\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin: 1rem; display: flex; gap: 1rem; flex-direction: column;\">\n\n <div *ngIf=\"(users$ |async) as users\">\n <mat-chip-set>\n <mat-chip *ngFor=\"let user of users\">\n {{ user.name }}\n </mat-chip>\n </mat-chip-set>\n </div>\n\n <div style=\"display: flex; gap: 1rem; margin-bottom: 1rem;\">\n <button mat-stroked-button (click)=\"onGetData()\">Get Data</button>\n <button mat-stroked-button color=\"accent\" (click)=\"onUpdateData(data)\">Update Data</button>\n <button mat-stroked-button color=\"warn\" (click)=\"onRemoveData(data)\">Remove Data</button>\n <button mat-stroked-button color=\"primary\" (click)=\"onAddData()\">Add Data</button>\n </div>\n\n <div style=\"display: flex; gap: 1rem; flex-direction: column;\">\n <div>{{ data | json }}</div>\n <h2>{{ data.length }}</h2>\n </div>\n\n </div>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Messaging\">\n\n <div *ngIf=\"(data$ | async) as data\" style=\"margin: 1rem; display: flex; gap: 1rem; flex-direction: column;\">\n\n <div *ngIf=\"(user$ | async) as userInfo\">\n\n <div *ngIf=\"(users$ | async) as users\">\n\n <div style=\"display: flex; gap: 1rem\">\n\n <div style=\"flex:1\" [formGroup]=\"messages\">\n <div style=\"display:flex\">\n <mat-form-field style=\"flex:1\" appearance=\"outline\">\n <mat-label>Users</mat-label>\n <mat-select formControlName=\"toUser\">\n <mat-option value=\"allChannels\" #selectedUser>\n All Users\n </mat-option>\n <mat-option *ngFor=\"let user of users\" [value]=\"user\">\n {{ user.username }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display:flex\">\n <mat-form-field style=\"flex:1\" appearance=\"outline\">\n <mat-label>Send a Message</mat-label>\n <textarea\n matInput placeholder=\"Ex. It makes me feel...\"\n formControlName=\"content\"\n (keydown.enter)=\"onSendMessage(); $event.preventDefault()\"\n [disabled]=\"!isValid\"\n ></textarea>\n </mat-form-field>\n </div>\n <div style=\"display:flex; gap: .5rem;\">\n <div style=\"flex:1\"></div>\n <button mat-stroked-button (click)=\"onSendMessage()\" color=\"warn\">\n Send Alert\n </button>\n <button mat-stroked-button (click)=\"onSendAlert()\">\n Send Message\n </button>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"(chat$ | async) as chat\" style=\"border: thin gray solid; padding: 1rem; margin-top: 1rem;\">\n <!-- <app-messenger-chat\n [user]=\"chat.user\"\n [messages]=\"chat.messages\"\n ></app-messenger-chat> -->\n </div>\n\n </div>\n\n </div>\n\n </div>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Custom Channel Messaging\" [disabled]=\"true\">\n WS - Custom Channel Messaging\n </mat-tab>\n\n </mat-tab-group>\n </div>\n\n</div>\n\n\n<div style=\"margin: 1rem;\">\n <h3>\n user: {{ user$ | async | json}}\n </h3>\n\n <h3>\n users: {{ users$ | async | json}}\n </h3>\n</div>\n" }]
104
+ args: [{ selector: 'app-request-manager-ws-demo', template: "<div style=\"margin: 2rem;\">\n\n <h2 style=\"display: flex;\">\n <span style=\"flex:1\">HTTP Request State Manager - Websockets</span>\n <span *ngIf=\"(connectionStatus$ | async) as connected; else NOT_CONNECTED\">\n WS -\n <span style=\"color: green;\">Connected</span>\n </span>\n <ng-template #NOT_CONNECTED>\n <span style=\"color: red;\">Disconnected {{ attempts$ | async }} - {{ nextRetry$ |async }}</span>\n </ng-template>\n </h2>\n\n <div>\n\n <div *ngIf=\"(user$ | async) as userInfo\">\n <mat-toolbar>\n <div style=\"display: flex; flex:1\">\n <div style=\"flex:1\">{{ userInfo.name }}</div>\n <div>({{ user.ldap }})</div>\n </div>\n </mat-toolbar>\n </div>\n\n <div *ngIf=\"(isPending$ | async)\">\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n </div>\n\n <mat-tab-group animationDuration=\"0ms\">\n\n <mat-tab label=\"WS - Data Control\">\n <!-- DATA CONTROL -->\n <app-ws-data-control\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-data-control>\n\n </mat-tab>\n\n <mat-tab label=\"WS - Messaging\">\n\n <!-- <app-ws-messaging\n [server]=\"server\"\n [wsServer]=\"wsServer\"\n [jwtToken]=\"jwtToken\"\n [user]=\"user\"\n ></app-ws-messaging> -->\n\n </mat-tab>\n\n <mat-tab label=\"WS - Notifications\" [disabled]=\"true\">\n <app-ws-notifications></app-ws-notifications>\n WS - Custom Messaging\n </mat-tab>\n\n <mat-tab label=\"WS - AI Messaging\" [disabled]=\"true\">\n <app-ws-ai-messaging></app-ws-ai-messaging>\n WS - AI Messaging\n </mat-tab>\n\n </mat-tab-group>\n </div>\n\n</div>\n\n" }]
129
105
  }], propDecorators: { server: [{
130
106
  type: Input
131
107
  }], wsServer: [{
132
108
  type: Input
133
109
  }], jwtToken: [{
134
110
  type: Input
111
+ }], user: [{
112
+ type: Input
135
113
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1tYW5hZ2VyLXdzLWRlbW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby9yZXF1ZXN0LW1hbmFnZXItd3MtZGVtby9yZXF1ZXN0LW1hbmFnZXItd3MtZGVtby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBZSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBYyxhQUFhLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBTyxNQUFNLE1BQU0sQ0FBQztBQUVsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFPaEYsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQU9FLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQy9DLDRCQUF1QixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBRXpELE9BQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFNeEIsVUFBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUE7UUFDMUMsV0FBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUE7UUFFL0MsY0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUE7UUFDbEQsZUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUE7UUFFcEQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQTtRQUV4RCxhQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQU07WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFjLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQy9ELE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBYyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztTQUNqRSxDQUFDLENBQUE7UUFjRixVQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQztRQUUzQyxXQUFNLEdBQUcsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1lBQzFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQTtRQUMxQixDQUFDLENBQUE7UUFFRCwyQkFBc0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsc0JBQXNCLENBQUE7UUFDNUUsaUNBQTRCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLDRCQUE0QixDQUFBO1FBRXhGLFVBQUssR0FBa0QsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUM5RyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUNwRCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFFUixJQUFHLENBQUMsR0FBRyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxLQUFLLENBQUE7WUFFMUIsb0NBQW9DO1lBQ3BDLDZCQUE2QjtZQUM3QixvQ0FBb0M7WUFDcEMsa0NBQWtDO1lBQ2xDLEtBQUs7WUFFTCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUE7WUFFbkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFFOUMsSUFBRyxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUNqQyxpQ0FBaUM7b0JBQ2pDLGNBQWM7b0JBQ2QsMEJBQTBCO29CQUMxQixnQkFBZ0I7b0JBQ2hCLEtBQUs7Z0JBQ1AsQ0FBQztnQkFFRCx5QkFBeUI7Z0JBQ3pCLGtCQUFrQjtnQkFDbEIsb0NBQW9DO2dCQUNwQywyQ0FBMkM7Z0JBQzNDLHlDQUF5QztnQkFDekMsU0FBUztnQkFDVCxnQkFBZ0I7Z0JBQ2hCLGtDQUFrQztnQkFDbEMseUNBQXlDO2dCQUN6Qyx1Q0FBdUM7Z0JBQ3ZDLFNBQVM7Z0JBQ1QsNkJBQTZCO2dCQUM3Qix5QkFBeUI7Z0JBQ3pCLEtBQUs7WUFDUCxDQUFDLENBQUMsQ0FBQTtZQUVGLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFBO1FBRXJDLENBQUMsQ0FBQyxDQUNILENBQUM7S0FvREg7SUFySEMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQWdCLENBQUE7SUFDbkQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFnQixDQUFBO0lBQ3BELENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBO0lBQzFCLENBQUM7SUF5REQsUUFBUTtRQUNOLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN4QyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN4QyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUN4QyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVc7UUFFdEIsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVwQyxNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsRUFBRSw0QkFBNEIsR0FBRyxFQUFFO1lBQzNDLElBQUksRUFBRSxFQUFFO1lBQ1IsV0FBVyxFQUFFLE1BQU07WUFDbkIsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixZQUFZLEVBQUUsTUFBTTtTQUNyQixDQUFBO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUVsRCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTztZQUFFLE9BQU07UUFDakMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN0QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTztZQUFFLE9BQU07UUFDakMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDL0YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUztRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xELENBQUM7K0dBM0lVLDZCQUE2QjttR0FBN0IsNkJBQTZCLDZJQ1oxQyx1c0pBdUlBOzs0RkQzSGEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLDZCQUE2Qjs4QkFXOUIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBtYXAsIEVNUFRZLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSFRUUE1hbmFnZXJTZXJ2aWNlLCBSYW5kb21OdW1iZXIsIENoYW5uZWxNZXNzYWdlLCBDb21tdW5pY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IFN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vIH0gZnJvbSAnLi9zZXJ2aWNlcy9zdGF0ZS1yZXF1ZXN0LWRlbW8uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yZXF1ZXN0LW1hbmFnZXItd3MtZGVtbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXF1ZXN0LW1hbmFnZXItd3MtZGVtby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0TWFuYWdlcldzRGVtb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgaHR0cE1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEhUVFBNYW5hZ2VyU2VydmljZSlcbiAgc3RhdGVSZXF1ZXN0U2VydmljZURlbW8gPSBpbmplY3QoU3RhdGVSZXF1ZXN0U2VydmljZURlbW8pXG5cbiAgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpXG5cbiAgQElucHV0KCkgc2VydmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB3c1NlcnZlciE6IHN0cmluZztcbiAgQElucHV0KCkgand0VG9rZW4hOiBzdHJpbmc7XG5cbiAgdXNlciQgPSB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLnVzZXIkXG4gIHVzZXJzJCA9IHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8udXNlckxpc3QkXG5cbiAgYXR0ZW1wdHMkID0gdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5hdHRlbXB0cyRcbiAgbmV4dFJldHJ5JCA9IHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8ubmV4dFJldHJ5JFxuXG4gIGNvbm5lY3Rpb25TdGF0dXMkID0gdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5zdGF0dXMkXG5cbiAgbWVzc2FnZXMgPSB0aGlzLmZiLmdyb3VwPGFueT4oe1xuICAgIHRvVXNlcjogdGhpcy5mYi5jb250cm9sPHN0cmluZ3xudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBjb250ZW50OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nfG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICB9KVxuXG4gIGdldCB0b1VzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZXMuZ2V0KCd0b1VzZXInKSBhcyBGb3JtQ29udHJvbFxuICB9XG5cbiAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZXMuZ2V0KCdjb250ZW50JykgYXMgRm9ybUNvbnRyb2xcbiAgfVxuXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLnRvVXNlci52YWxpZFxuICB9XG5cbiAgZGF0YSQgPSB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLmRhdGEkO1xuXG4gIGZyb21NZSA9ICh1c2VyOiBzdHJpbmcsIGZyb21Vc2VyOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdXNlciA9PT0gZnJvbVVzZXJcbiAgfVxuXG4gIGNvbW11bmljYXRpb25NZXNzYWdlcyQgPSB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLmNvbW11bmljYXRpb25NZXNzYWdlcyRcbiAgbGF0ZXN0Q29tbXVuaWNhdGlvbk1lc3NhZ2VzJCA9IHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8ubGF0ZXN0Q29tbXVuaWNhdGlvbk1lc3NhZ2VzJFxuXG4gIGNoYXQkOiBPYnNlcnZhYmxlPHsgdXNlcjogYW55LCBtZXNzYWdlczogYW55W119fGFueT4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnVzZXIkLCB0aGlzLmNvbW11bmljYXRpb25NZXNzYWdlcyRdKVxuICAucGlwZShcbiAgICBtYXAoKFt1c2VyLCBtZXNzYWdlc106IGFueSkgPT4gKHsgdXNlciwgbWVzc2FnZXMgfSkpLFxuICAgIG1hcChvYmogPT4ge1xuXG4gICAgICBpZighb2JqLnVzZXIpIHJldHVybiBFTVBUWVxuXG4gICAgICAvLyBjb25zdCBtYWluVXNlciA9IFVzZXJOYW1lLmFkYXB0KHtcbiAgICAgIC8vICAgICBpZDogb2JqLnVzZXIudXNlcm5hbWUsXG4gICAgICAvLyAgICAgZmlyc3Q6IG9iai51c2VyPy5uYW1lPy5maXJzdCxcbiAgICAgIC8vICAgICBsYXN0OiBvYmoudXNlcj8ubmFtZT8ubGFzdCxcbiAgICAgIC8vIH0pXG5cbiAgICAgIGNvbnN0IG1haW5Vc2VyID0gJydcblxuICAgICAgY29uc3QgbWVzc2FnZXMgPSBvYmoubWVzc2FnZXMubWFwKChpdGVtOiBhbnkpID0+IHtcblxuICAgICAgICBpZihpdGVtLnRvVXNlciA9PT0gJ2FsbENoYW5uZWxzJykge1xuICAgICAgICAgIC8vIGl0ZW0udG9Vc2VyID0gVXNlck5hbWUuYWRhcHQoe1xuICAgICAgICAgIC8vICAgICBpZDogJycsXG4gICAgICAgICAgLy8gICAgIGZpcnN0OiAnQWxsIFVzZXJzJyxcbiAgICAgICAgICAvLyAgICAgbGFzdDogJycsXG4gICAgICAgICAgLy8gfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVybiBNZXNzYWdlLmFkYXB0KHtcbiAgICAgICAgLy8gICAgIGZyb21Vc2VyOiB7XG4gICAgICAgIC8vICAgICAgIGlkOiBpdGVtLmZyb21Vc2VyLnVzZXJuYW1lLFxuICAgICAgICAvLyAgICAgICBmaXJzdDogaXRlbS5mcm9tVXNlcj8ubmFtZT8uZmlyc3QsXG4gICAgICAgIC8vICAgICAgIGxhc3Q6IGl0ZW0uZnJvbVVzZXI/Lm5hbWU/Lmxhc3QsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgICAgdG9Vc2VyOiB7XG4gICAgICAgIC8vICAgICAgIGlkOiBpdGVtLnRvVXNlci51c2VybmFtZSxcbiAgICAgICAgLy8gICAgICAgZmlyc3Q6IGl0ZW0udG9Vc2VyPy5uYW1lPy5maXJzdCxcbiAgICAgICAgLy8gICAgICAgbGFzdDogaXRlbS50b1VzZXI/Lm5hbWU/Lmxhc3QsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgICAgY29udGVudDogaXRlbS5jb250ZW50LFxuICAgICAgICAvLyAgICAgZGF0ZTogaXRlbS5pc3N1ZWQsXG4gICAgICAgIC8vIH0pXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4geyB1c2VyOiBtYWluVXNlciwgbWVzc2FnZXMgfVxuXG4gICAgfSlcbiAgKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLnVwZGF0ZUNvbm5lY3Rpb24odGhpcy5zZXJ2ZXIsIHRoaXMud3NTZXJ2ZXIsIHRoaXMuand0VG9rZW4pO1xuICAgIHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8uZ2V0RGF0YSgpXG4gIH1cblxuICBvbkdldERhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5nZXREYXRhKClcbiAgfVxuXG4gIG9uQWRkRGF0YSgpIHtcbiAgICB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLmFkZERhdGEoKVxuICB9XG5cbiAgb25VcGRhdGVEYXRhKGRhdGE6IGFueVtdKSB7XG5cbiAgICBjb25zdCBudW0gPSBSYW5kb21OdW1iZXIoMTAwMCwgOTk5OSlcblxuICAgIGNvbnN0IG5ld0RhdGEgPSB7XG4gICAgICBcInNwaWZmZVwiOiBgd2F2ZWNvZGVycy5jb20vZGV2ZWxvcGVyLyR7bnVtfWAsXG4gICAgICBcImlkXCI6IDYzLFxuICAgICAgXCJsYXN0X25hbWVcIjogXCJib25pXCIsXG4gICAgICBcImVtYWlsXCI6IFwibWlrZWJvbmlAaG90bWFpbC5jb21cIixcbiAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIm1pa2VcIlxuICAgIH1cblxuICAgIHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8udXBkYXRlRGF0YShuZXdEYXRhKVxuXG4gIH1cblxuICBvblNlbmRNZXNzYWdlKCkge1xuICAgIHRoaXMubWVzc2FnZXMubWFya0FsbEFzVG91Y2hlZCgpXG4gICAgaWYgKHRoaXMubWVzc2FnZXMuaW52YWxpZCkgcmV0dXJuXG4gICAgY29uc3QgbWVzc2FnZSA9IENoYW5uZWxNZXNzYWdlLmFkYXB0KHRoaXMubWVzc2FnZXMudmFsdWUpXG4gICAgdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5zZW5kTWVzc2FnZShtZXNzYWdlKVxuICAgIHRoaXMuY29udGVudC5yZXNldCgpXG4gIH1cblxuICBvblNlbmRBbGVydCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VzLm1hcmtBbGxBc1RvdWNoZWQoKVxuICAgIGlmICh0aGlzLm1lc3NhZ2VzLmludmFsaWQpIHJldHVyblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBDaGFubmVsTWVzc2FnZS5hZGFwdCh7IC4uLnRoaXMubWVzc2FnZXMudmFsdWUsIHR5cGU6IENvbW11bmljYXRpb25UeXBlLkFMRVJUIH0pXG4gICAgdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5zZW5kTWVzc2FnZShtZXNzYWdlKVxuICAgIHRoaXMuY29udGVudC5yZXNldCgpXG4gIH1cblxuICBvblJlbW92ZURhdGEoZGF0YTogYW55KSB7XG4gICAgY29uc3QgbGFzdFJlYyA9IGRhdGFbZGF0YS5sZW5ndGggLTFdXG4gICAgdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5kZWxldGVEYXRhKGxhc3RSZWMpXG4gIH1cblxufVxuIiwiPGRpdiBzdHlsZT1cIm1hcmdpbjogMnJlbTtcIj5cblxuICA8aDIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxuICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+SFRUUCBSZXF1ZXN0IFN0YXRlIE1hbmFnZXIgLSBXZWJzb2NrZXRzPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiKGNvbm5lY3Rpb25TdGF0dXMkIHwgYXN5bmMpIGFzIGNvbm5lY3RlZDsgZWxzZSBOT1RfQ09OTkVDVEVEXCI+XG4gICAgICBXUyAtXG4gICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiBncmVlbjtcIj5Db25uZWN0ZWQ8L3NwYW4+XG4gICAgPC9zcGFuPlxuICAgIDxuZy10ZW1wbGF0ZSAjTk9UX0NPTk5FQ1RFRD5cbiAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHJlZDtcIj5EaXNjb25uZWN0ZWQge3sgYXR0ZW1wdHMkIHwgYXN5bmMgfX0gLSB7eyBuZXh0UmV0cnkkIHxhc3luYyB9fTwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2gyPlxuXG4gIDxkaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiKHVzZXIkIHwgYXN5bmMpIGFzIHVzZXJJbmZvXCI+XG4gICAgICA8bWF0LXRvb2xiYXI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4OjFcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxXCI+e3sgdXNlckluZm8ubmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXY+KHt7IHVzZXJJbmZvLnVzZXJuYW1lIH19KTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LXRhYi1ncm91cCBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiPlxuXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIldTIC0gRGF0YSBDb250cm9sXCI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihkYXRhJCB8IGFzeW5jKSBhcyBkYXRhXCIgc3R5bGU9XCJtYXJnaW46IDFyZW07IGRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbTsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIodXNlcnMkIHxhc3luYykgYXMgdXNlcnNcIj5cbiAgICAgICAgICAgIDxtYXQtY2hpcC1zZXQ+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdXNlciBvZiB1c2Vyc1wiPlxuICAgICAgICAgICAgICAgIHt7IHVzZXIubmFtZSB9fVxuICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1zZXQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxcmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cIm9uR2V0RGF0YSgpXCI+R2V0IERhdGE8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIm9uVXBkYXRlRGF0YShkYXRhKVwiPlVwZGF0ZSBEYXRhPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwib25SZW1vdmVEYXRhKGRhdGEpXCI+UmVtb3ZlIERhdGE8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkFkZERhdGEoKVwiPkFkZCBEYXRhPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAxcmVtOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiPlxuICAgICAgICAgICAgPGRpdj57eyBkYXRhIHwganNvbiB9fTwvZGl2PlxuICAgICAgICAgICAgPGgyPnt7IGRhdGEubGVuZ3RoIH19PC9oMj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIldTIC0gTWVzc2FnaW5nXCI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihkYXRhJCB8IGFzeW5jKSBhcyBkYXRhXCIgc3R5bGU9XCJtYXJnaW46IDFyZW07IGRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbTsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIodXNlciQgfCBhc3luYykgYXMgdXNlckluZm9cIj5cblxuICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCIodXNlcnMkIHwgYXN5bmMpIGFzIHVzZXJzXCI+XG5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbVwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MVwiIFtmb3JtR3JvdXBdPVwibWVzc2FnZXNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwiZmxleDoxXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlVzZXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidG9Vc2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImFsbENoYW5uZWxzXCIgI3NlbGVjdGVkVXNlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFVzZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdXNlciBvZiB1c2Vyc1wiIFt2YWx1ZV09XCJ1c2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwiZmxleDoxXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlNlbmQgYSBNZXNzYWdlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkV4LiBJdCBtYWtlcyBtZSBmZWVsLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZW5kTWVzc2FnZSgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzVmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4OyBnYXA6IC41cmVtO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDoxXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJvblNlbmRNZXNzYWdlKClcIiBjb2xvcj1cIndhcm5cIj5cbiAgICAgICAgICAgICAgICAgICAgICBTZW5kIEFsZXJ0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwib25TZW5kQWxlcnQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFNlbmQgTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGNoYXQkIHwgYXN5bmMpIGFzIGNoYXRcIiBzdHlsZT1cImJvcmRlcjogdGhpbiBncmF5IHNvbGlkOyBwYWRkaW5nOiAxcmVtOyBtYXJnaW4tdG9wOiAxcmVtO1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGFwcC1tZXNzZW5nZXItY2hhdFxuICAgICAgICAgICAgICAgICAgW3VzZXJdPVwiY2hhdC51c2VyXCJcbiAgICAgICAgICAgICAgICAgIFttZXNzYWdlc109XCJjaGF0Lm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgICA+PC9hcHAtbWVzc2VuZ2VyLWNoYXQ+IC0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIldTIC0gQ3VzdG9tIENoYW5uZWwgTWVzc2FnaW5nXCIgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgV1MgLSBDdXN0b20gQ2hhbm5lbCBNZXNzYWdpbmdcbiAgICAgIDwvbWF0LXRhYj5cblxuICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuXG5cbjxkaXYgc3R5bGU9XCJtYXJnaW46IDFyZW07XCI+XG4gIDxoMz5cbiAgICB1c2VyOiB7eyB1c2VyJCB8IGFzeW5jIHwganNvbn19XG4gIDwvaDM+XG5cbiAgPGgzPlxuICAgIHVzZXJzOiB7eyB1c2VycyQgfCBhc3luYyB8IGpzb259fVxuICA8L2gzPlxuPC9kaXY+XG4iXX0=
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1tYW5hZ2VyLXdzLWRlbW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby9yZXF1ZXN0LW1hbmFnZXItd3MtZGVtby9yZXF1ZXN0LW1hbmFnZXItd3MtZGVtby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBZSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBYyxhQUFhLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBTyxNQUFNLE1BQU0sQ0FBQztBQUVsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7QUFPaEYsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQU9FLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQy9DLDRCQUF1QixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBRXpELE9BQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFPeEIsVUFBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFL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QkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG1hcCwgRU1QVFksIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBIVFRQTWFuYWdlclNlcnZpY2UsIFJhbmRvbU51bWJlciwgQ2hhbm5lbE1lc3NhZ2UsIENvbW11bmljYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgU3RhdGVSZXF1ZXN0U2VydmljZURlbW8gfSBmcm9tICcuL3NlcnZpY2VzL3N0YXRlLXJlcXVlc3QtZGVtby5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJlcXVlc3QtbWFuYWdlci13cy1kZW1vJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVxdWVzdC1tYW5hZ2VyLXdzLWRlbW8uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNYW5hZ2VyV3NEZW1vQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBodHRwTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoSFRUUE1hbmFnZXJTZXJ2aWNlKVxuICBzdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtbyA9IGluamVjdChTdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtbylcblxuICBmYiA9IGluamVjdChGb3JtQnVpbGRlcilcblxuICBASW5wdXQoKSBzZXJ2ZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdzU2VydmVyITogc3RyaW5nO1xuICBASW5wdXQoKSBqd3RUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgdXNlciE6IGFueTtcblxuICB1c2VyJCA9IHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8udXNlciRcbiAgdXNlcnMkID0gdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby51c2VyTGlzdCRcblxuICBhdHRlbXB0cyQgPSB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLmF0dGVtcHRzJFxuICBuZXh0UmV0cnkkID0gdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5uZXh0UmV0cnkkXG5cbiAgY29ubmVjdGlvblN0YXR1cyQgPSB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLnN0YXR1cyRcblxuICBtZXNzYWdlcyA9IHRoaXMuZmIuZ3JvdXA8YW55Pih7XG4gICAgdG9Vc2VyOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nfG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGNvbnRlbnQ6IHRoaXMuZmIuY29udHJvbDxzdHJpbmd8bnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gIH0pXG5cbiAgZ2V0IHRvVXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlcy5nZXQoJ3RvVXNlcicpIGFzIEZvcm1Db250cm9sXG4gIH1cblxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlcy5nZXQoJ2NvbnRlbnQnKSBhcyBGb3JtQ29udHJvbFxuICB9XG5cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9Vc2VyLnZhbGlkXG4gIH1cblxuICBkYXRhJCA9IHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8uZGF0YSQ7XG4gIGlzUGVuZGluZyQgPSB0aGlzLnN0YXRlUmVxdWVzdFNlcnZpY2VEZW1vLmlzUGVuZGluZyQ7XG5cbiAgZnJvbU1lID0gKHVzZXI6IHN0cmluZywgZnJvbVVzZXI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiB1c2VyID09PSBmcm9tVXNlclxuICB9XG5cbiAgY29tbXVuaWNhdGlvbk1lc3NhZ2VzJCA9IHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8uY29tbXVuaWNhdGlvbk1lc3NhZ2VzJFxuICBsYXRlc3RDb21tdW5pY2F0aW9uTWVzc2FnZXMkID0gdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby5sYXRlc3RDb21tdW5pY2F0aW9uTWVzc2FnZXMkXG5cbiAgY2hhdCQ6IE9ic2VydmFibGU8eyB1c2VyOiBhbnksIG1lc3NhZ2VzOiBhbnlbXX18YW55PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMudXNlciQsIHRoaXMuY29tbXVuaWNhdGlvbk1lc3NhZ2VzJF0pXG4gIC5waXBlKFxuICAgIG1hcCgoW3VzZXIsIG1lc3NhZ2VzXTogYW55KSA9PiAoeyB1c2VyLCBtZXNzYWdlcyB9KSksXG4gICAgbWFwKG9iaiA9PiB7XG5cbiAgICAgIGlmKCFvYmoudXNlcikgcmV0dXJuIEVNUFRZXG5cbiAgICAgIC8vIGNvbnN0IG1haW5Vc2VyID0gVXNlck5hbWUuYWRhcHQoe1xuICAgICAgLy8gICAgIGlkOiBvYmoudXNlci51c2VybmFtZSxcbiAgICAgIC8vICAgICBmaXJzdDogb2JqLnVzZXI/Lm5hbWU/LmZpcnN0LFxuICAgICAgLy8gICAgIGxhc3Q6IG9iai51c2VyPy5uYW1lPy5sYXN0LFxuICAgICAgLy8gfSlcblxuICAgICAgY29uc3QgbWFpblVzZXIgPSAnJ1xuXG4gICAgICBjb25zdCBtZXNzYWdlcyA9IG9iai5tZXNzYWdlcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXG4gICAgICAgIGlmKGl0ZW0udG9Vc2VyID09PSAnYWxsQ2hhbm5lbHMnKSB7XG4gICAgICAgICAgLy8gaXRlbS50b1VzZXIgPSBVc2VyTmFtZS5hZGFwdCh7XG4gICAgICAgICAgLy8gICAgIGlkOiAnJyxcbiAgICAgICAgICAvLyAgICAgZmlyc3Q6ICdBbGwgVXNlcnMnLFxuICAgICAgICAgIC8vICAgICBsYXN0OiAnJyxcbiAgICAgICAgICAvLyB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmV0dXJuIE1lc3NhZ2UuYWRhcHQoe1xuICAgICAgICAvLyAgICAgZnJvbVVzZXI6IHtcbiAgICAgICAgLy8gICAgICAgaWQ6IGl0ZW0uZnJvbVVzZXIudXNlcm5hbWUsXG4gICAgICAgIC8vICAgICAgIGZpcnN0OiBpdGVtLmZyb21Vc2VyPy5uYW1lPy5maXJzdCxcbiAgICAgICAgLy8gICAgICAgbGFzdDogaXRlbS5mcm9tVXNlcj8ubmFtZT8ubGFzdCxcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vICAgICB0b1VzZXI6IHtcbiAgICAgICAgLy8gICAgICAgaWQ6IGl0ZW0udG9Vc2VyLnVzZXJuYW1lLFxuICAgICAgICAvLyAgICAgICBmaXJzdDogaXRlbS50b1VzZXI/Lm5hbWU/LmZpcnN0LFxuICAgICAgICAvLyAgICAgICBsYXN0OiBpdGVtLnRvVXNlcj8ubmFtZT8ubGFzdCxcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vICAgICBjb250ZW50OiBpdGVtLmNvbnRlbnQsXG4gICAgICAgIC8vICAgICBkYXRlOiBpdGVtLmlzc3VlZCxcbiAgICAgICAgLy8gfSlcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB7IHVzZXI6IG1haW5Vc2VyLCBtZXNzYWdlcyB9XG5cbiAgICB9KVxuICApO1xuXG4gIG5nT25Jbml0KCkge1xuICAgICAgdGhpcy5zdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtby51cGRhdGVDb25uZWN0aW9uKHRoaXMuc2VydmVyLCB0aGlzLndzU2VydmVyLCB0aGlzLmp3dFRva2VuLCB0aGlzLnVzZXIpO1xuICB9XG5cbiAgb25TZW5kTWVzc2FnZSgpIHtcbiAgICB0aGlzLm1lc3NhZ2VzLm1hcmtBbGxBc1RvdWNoZWQoKVxuICAgIGlmICh0aGlzLm1lc3NhZ2VzLmludmFsaWQpIHJldHVyblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBDaGFubmVsTWVzc2FnZS5hZGFwdCh0aGlzLm1lc3NhZ2VzLnZhbHVlKVxuICAgIHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8uc2VuZE1lc3NhZ2UobWVzc2FnZSlcbiAgICB0aGlzLmNvbnRlbnQucmVzZXQoKVxuICB9XG5cbiAgb25TZW5kQWxlcnQoKSB7XG4gICAgdGhpcy5tZXNzYWdlcy5tYXJrQWxsQXNUb3VjaGVkKClcbiAgICBpZiAodGhpcy5tZXNzYWdlcy5pbnZhbGlkKSByZXR1cm5cbiAgICBjb25zdCBtZXNzYWdlID0gQ2hhbm5lbE1lc3NhZ2UuYWRhcHQoeyAuLi50aGlzLm1lc3NhZ2VzLnZhbHVlLCB0eXBlOiBDb21tdW5pY2F0aW9uVHlwZS5BTEVSVCB9KVxuICAgIHRoaXMuc3RhdGVSZXF1ZXN0U2VydmljZURlbW8uc2VuZE1lc3NhZ2UobWVzc2FnZSlcbiAgICB0aGlzLmNvbnRlbnQucmVzZXQoKVxuICB9XG5cbn1cbiIsIjxkaXYgc3R5bGU9XCJtYXJnaW46IDJyZW07XCI+XG5cbiAgPGgyIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICA8c3BhbiBzdHlsZT1cImZsZXg6MVwiPkhUVFAgUmVxdWVzdCBTdGF0ZSBNYW5hZ2VyIC0gV2Vic29ja2V0czwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cIihjb25uZWN0aW9uU3RhdHVzJCB8IGFzeW5jKSBhcyBjb25uZWN0ZWQ7IGVsc2UgTk9UX0NPTk5FQ1RFRFwiPlxuICAgICAgV1MgLVxuICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogZ3JlZW47XCI+Q29ubmVjdGVkPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI05PVF9DT05ORUNURUQ+XG4gICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+RGlzY29ubmVjdGVkIHt7IGF0dGVtcHRzJCB8IGFzeW5jIH19IC0ge3sgbmV4dFJldHJ5JCB8YXN5bmMgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9oMj5cblxuICA8ZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIih1c2VyJCB8IGFzeW5jKSBhcyB1c2VySW5mb1wiPlxuICAgICAgPG1hdC10b29sYmFyPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleDoxXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6MVwiPnt7IHVzZXJJbmZvLm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2Pih7eyB1c2VyLmxkYXAgfX0pPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIoaXNQZW5kaW5nJCB8IGFzeW5jKVwiPlxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LXRhYi1ncm91cCBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiPlxuXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIldTIC0gRGF0YSBDb250cm9sXCI+XG4gICAgICAgIDwhLS0gREFUQSBDT05UUk9MIC0tPlxuICAgICAgICA8YXBwLXdzLWRhdGEtY29udHJvbFxuICAgICAgICAgIFtzZXJ2ZXJdPVwic2VydmVyXCJcbiAgICAgICAgICBbd3NTZXJ2ZXJdPVwid3NTZXJ2ZXJcIlxuICAgICAgICAgIFtqd3RUb2tlbl09XCJqd3RUb2tlblwiXG4gICAgICAgICAgW3VzZXJdPVwidXNlclwiXG4gICAgICAgID48L2FwcC13cy1kYXRhLWNvbnRyb2w+XG5cbiAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgPG1hdC10YWIgbGFiZWw9XCJXUyAtIE1lc3NhZ2luZ1wiPlxuXG4gICAgICAgIDwhLS0gPGFwcC13cy1tZXNzYWdpbmdcbiAgICAgICAgICBbc2VydmVyXT1cInNlcnZlclwiXG4gICAgICAgICAgW3dzU2VydmVyXT1cIndzU2VydmVyXCJcbiAgICAgICAgICBband0VG9rZW5dPVwiand0VG9rZW5cIlxuICAgICAgICAgIFt1c2VyXT1cInVzZXJcIlxuICAgICAgICA+PC9hcHAtd3MtbWVzc2FnaW5nPiAtLT5cblxuICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIldTIC0gTm90aWZpY2F0aW9uc1wiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgIDxhcHAtd3Mtbm90aWZpY2F0aW9ucz48L2FwcC13cy1ub3RpZmljYXRpb25zPlxuICAgICAgICBXUyAtIEN1c3RvbSBNZXNzYWdpbmdcbiAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgPG1hdC10YWIgbGFiZWw9XCJXUyAtIEFJIE1lc3NhZ2luZ1wiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgIDxhcHAtd3MtYWktbWVzc2FnaW5nPjwvYXBwLXdzLWFpLW1lc3NhZ2luZz5cbiAgICAgICAgV1MgLSBBSSBNZXNzYWdpbmdcbiAgICAgIDwvbWF0LXRhYj5cblxuICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuXG4iXX0=
@@ -1,28 +1,25 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { UserData } from '../models/user-data.model';
3
3
  import { DatabaseStorage, DataType, RetryOptions } from '../../../models';
4
- import { HTTPManagerStateService, ApiRequest, RequestOptions, RandomNumber } from '../../../services';
4
+ import { HTTPManagerStateService, ApiRequest } from '../../../services';
5
5
  import { OIDCClient } from '../models/oidc-client.model';
6
6
  import * as i0 from "@angular/core";
7
7
  export class StateRequestServiceDemo extends HTTPManagerStateService {
8
8
  constructor() {
9
9
  super(ApiRequest.adapt({
10
- server: 'https://oidc.example.com',
10
+ server: '',
11
11
  retry: RetryOptions.adapt({
12
12
  times: 3,
13
13
  delay: 1,
14
14
  }),
15
15
  adapter: OIDCClient.adapt,
16
16
  ws: {
17
- id: 'WS-MY_DATA',
18
- wsChannels: ['allChannels'],
17
+ id: ``,
18
+ // wsChannels: ['allChannels'],
19
+ // access: ['read,write,delete,update'],
19
20
  wsServer: '',
20
21
  jwtToken: '',
21
- access: ['read,write,delete,update'],
22
- userAdapter: {
23
- id: 'username', // matches adapter in UserData
24
- adapter: UserData.adapt,
25
- },
22
+ user: UserData.adapt(),
26
23
  retry: RetryOptions.adapt({
27
24
  times: 3,
28
25
  delay: 10,
@@ -35,7 +32,7 @@ export class StateRequestServiceDemo extends HTTPManagerStateService {
35
32
  this.attempts$ = this.wsRetryAttempts$;
36
33
  this.nextRetry$ = this.wsNextRetry$;
37
34
  }
38
- updateConnection(server, wsServer, jwtToken) {
35
+ updateConnection(server, wsServer, jwtToken, user) {
39
36
  this.setApiRequestOptions({
40
37
  server,
41
38
  retry: RetryOptions.adapt({
@@ -44,47 +41,24 @@ export class StateRequestServiceDemo extends HTTPManagerStateService {
44
41
  }),
45
42
  adapter: OIDCClient.adapt,
46
43
  ws: {
47
- id: 'WS-MY_DATA',
44
+ id: 'WS-USERS',
48
45
  wsServer,
49
46
  jwtToken,
50
- userAdapter: {
51
- id: 'username', // matches adapter in UserData
52
- adapter: UserData.adapt,
53
- },
47
+ user, // user object
54
48
  retry: RetryOptions.adapt({
55
49
  times: 3,
56
50
  delay: 10,
57
51
  }),
58
52
  }
59
53
  });
60
- }
61
- getData() {
62
- this.fetchRecords(RequestOptions.adapt({ path: ['ai', 'tests'] }));
63
- }
64
- addData() {
65
- const num = RandomNumber(1000, 9999);
66
- const newData = {
67
- "spiffe": `sample.com/developer/${num}`,
68
- "last_name": "boni",
69
- "email": "mikeboni@hotmail.com",
70
- "first_name": "mike"
71
- };
72
- this.createRecord(newData, RequestOptions.adapt({ path: ['ai', 'tests'] }));
54
+ this.userAction$.subscribe(user => {
55
+ console.log('User Action:', user);
56
+ });
73
57
  }
74
58
  sendMessage(data) {
75
59
  console.log('sendMessage', data);
76
60
  this.wsMessaging(data);
77
61
  }
78
- updateData(data) {
79
- const sampleOptions = RequestOptions.adapt({ path: ['ai', 'tests', data.id] });
80
- console.log('updateData', sampleOptions);
81
- this.updateRecord(data, sampleOptions);
82
- }
83
- deleteData(data) {
84
- const sampleOptions = RequestOptions.adapt({ path: ['ai', 'tests', data.id] });
85
- console.log('deleteData', sampleOptions);
86
- this.deleteRecord(sampleOptions);
87
- }
88
62
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StateRequestServiceDemo, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
89
63
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StateRequestServiceDemo, providedIn: 'root' }); }
90
64
  }
@@ -94,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
94
68
  providedIn: 'root'
95
69
  }]
96
70
  }], ctorParameters: () => [] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcmVxdWVzdC1kZW1vLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vL3NlcnZpY2VzL3N0YXRlLXJlcXVlc3QtZGVtby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBa0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN0SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBS3pELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx1QkFBNEI7SUFLdkU7UUFDRSxLQUFLLENBQ0QsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNmLE1BQU0sRUFBRSwwQkFBMEI7WUFDbEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQztZQUNGLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBSztZQUN6QixFQUFFLEVBQUU7Z0JBQ0YsRUFBRSxFQUFFLFlBQVk7Z0JBQ2hCLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFDM0IsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLENBQUMsMEJBQTBCLENBQUM7Z0JBQ3BDLFdBQVcsRUFBRTtvQkFDWCxFQUFFLEVBQUUsVUFBVSxFQUFFLDhCQUE4QjtvQkFDOUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2lCQUN4QjtnQkFDRCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDeEIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsS0FBSyxFQUFFLEVBQUU7aUJBQ1YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxLQUFLLEVBQ2QsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUNwQixLQUFLLEVBQUUsY0FBYztZQUNyQixTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQ0gsQ0FBQTtRQWpDTCxjQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO1FBQ2pDLGVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBaUM1QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsUUFBZ0I7UUFFakUsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3RCLE1BQU07WUFDTixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDeEIsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLENBQUM7YUFDVCxDQUFDO1lBQ0YsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3pCLEVBQUUsRUFBRTtnQkFDRixFQUFFLEVBQUUsWUFBWTtnQkFDaEIsUUFBUTtnQkFDUixRQUFRO2dCQUNSLFdBQVcsRUFBRTtvQkFDWCxFQUFFLEVBQUUsVUFBVSxFQUFFLDhCQUE4QjtvQkFDOUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2lCQUN4QjtnQkFDRCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDeEIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsS0FBSyxFQUFFLEVBQUU7aUJBQ1YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVELE9BQU87UUFFTCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRXBDLE1BQU0sT0FBTyxHQUFPO1lBQ2hCLFFBQVEsRUFBRSx3QkFBd0IsR0FBRyxFQUFFO1lBQ3ZDLFdBQVcsRUFBRSxNQUFNO1lBQ25CLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsWUFBWSxFQUFFLE1BQU07U0FDdkIsQ0FBQTtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFNUUsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFvQjtRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBRXhDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDbEMsQ0FBQzsrR0FuR1EsdUJBQXVCO21IQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tICcuLi9tb2RlbHMvdXNlci1kYXRhLm1vZGVsJztcbmltcG9ydCB7IERhdGFiYXNlU3RvcmFnZSwgRGF0YVR5cGUsIFJldHJ5T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5cbmltcG9ydCB7IEhUVFBNYW5hZ2VyU3RhdGVTZXJ2aWNlLCBBcGlSZXF1ZXN0LCBSZXF1ZXN0T3B0aW9ucywgUmFuZG9tTnVtYmVyLCBDaGFubmVsTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE9JRENDbGllbnQgfSBmcm9tICcuLi9tb2RlbHMvb2lkYy1jbGllbnQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtbyBleHRlbmRzIEhUVFBNYW5hZ2VyU3RhdGVTZXJ2aWNlPGFueT4ge1xuXG4gIGF0dGVtcHRzJCA9IHRoaXMud3NSZXRyeUF0dGVtcHRzJFxuICBuZXh0UmV0cnkkID0gdGhpcy53c05leHRSZXRyeSRcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgICAgQXBpUmVxdWVzdC5hZGFwdCh7XG4gICAgICAgICAgc2VydmVyOiAnaHR0cHM6Ly9vaWRjLmV4YW1wbGUuY29tJyxcbiAgICAgICAgICByZXRyeTogUmV0cnlPcHRpb25zLmFkYXB0KHtcbiAgICAgICAgICAgIHRpbWVzOiAzLFxuICAgICAgICAgICAgZGVsYXk6IDEsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgYWRhcHRlcjogT0lEQ0NsaWVudC5hZGFwdCxcbiAgICAgICAgICB3czoge1xuICAgICAgICAgICAgaWQ6ICdXUy1NWV9EQVRBJyxcbiAgICAgICAgICAgIHdzQ2hhbm5lbHM6IFsnYWxsQ2hhbm5lbHMnXSxcbiAgICAgICAgICAgIHdzU2VydmVyOiAnJyxcbiAgICAgICAgICAgIGp3dFRva2VuOiAnJyxcbiAgICAgICAgICAgIGFjY2VzczogWydyZWFkLHdyaXRlLGRlbGV0ZSx1cGRhdGUnXSxcbiAgICAgICAgICAgIHVzZXJBZGFwdGVyOiB7XG4gICAgICAgICAgICAgIGlkOiAndXNlcm5hbWUnLCAvLyBtYXRjaGVzIGFkYXB0ZXIgaW4gVXNlckRhdGFcbiAgICAgICAgICAgICAgYWRhcHRlcjogVXNlckRhdGEuYWRhcHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmV0cnk6IFJldHJ5T3B0aW9ucy5hZGFwdCh7XG4gICAgICAgICAgICAgIHRpbWVzOiAzLFxuICAgICAgICAgICAgICBkZWxheTogMTAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBEYXRhVHlwZS5BUlJBWSxcbiAgICAgICAgRGF0YWJhc2VTdG9yYWdlLmFkYXB0KHtcbiAgICAgICAgICB0YWJsZTogJ3dzX2RlbW9fZGF0YScsXG4gICAgICAgICAgZXhwaXJlc0luOiAnNW1uJyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICB1cGRhdGVDb25uZWN0aW9uKHNlcnZlcjogc3RyaW5nLCB3c1NlcnZlcjogc3RyaW5nLCBqd3RUb2tlbjogc3RyaW5nKSB7XG5cbiAgICAgIHRoaXMuc2V0QXBpUmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICAgIHNlcnZlcixcbiAgICAgICAgICByZXRyeTogUmV0cnlPcHRpb25zLmFkYXB0KHtcbiAgICAgICAgICAgIHRpbWVzOiAzLFxuICAgICAgICAgICAgZGVsYXk6IDEsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgYWRhcHRlcjogT0lEQ0NsaWVudC5hZGFwdCxcbiAgICAgICAgICB3czoge1xuICAgICAgICAgICAgaWQ6ICdXUy1NWV9EQVRBJyxcbiAgICAgICAgICAgIHdzU2VydmVyLFxuICAgICAgICAgICAgand0VG9rZW4sXG4gICAgICAgICAgICB1c2VyQWRhcHRlcjoge1xuICAgICAgICAgICAgICBpZDogJ3VzZXJuYW1lJywgLy8gbWF0Y2hlcyBhZGFwdGVyIGluIFVzZXJEYXRhXG4gICAgICAgICAgICAgIGFkYXB0ZXI6IFVzZXJEYXRhLmFkYXB0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJldHJ5OiBSZXRyeU9wdGlvbnMuYWRhcHQoe1xuICAgICAgICAgICAgICB0aW1lczogMyxcbiAgICAgICAgICAgICAgZGVsYXk6IDEwLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgfVxuXG4gICAgZ2V0RGF0YSgpIHtcbiAgICAgIHRoaXMuZmV0Y2hSZWNvcmRzKFJlcXVlc3RPcHRpb25zLmFkYXB0KHsgcGF0aDogWydhaScsJ3Rlc3RzJ10gfSkpXG4gICAgfVxuXG4gICAgYWRkRGF0YSgpIHtcblxuICAgICAgY29uc3QgbnVtID0gUmFuZG9tTnVtYmVyKDEwMDAsIDk5OTkpXG5cbiAgICAgIGNvbnN0IG5ld0RhdGEgPSAgICAge1xuICAgICAgICAgIFwic3BpZmZlXCI6IGBzYW1wbGUuY29tL2RldmVsb3Blci8ke251bX1gLFxuICAgICAgICAgIFwibGFzdF9uYW1lXCI6IFwiYm9uaVwiLFxuICAgICAgICAgIFwiZW1haWxcIjogXCJtaWtlYm9uaUBob3RtYWlsLmNvbVwiLFxuICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIm1pa2VcIlxuICAgICAgfVxuXG4gICAgICB0aGlzLmNyZWF0ZVJlY29yZChuZXdEYXRhLCBSZXF1ZXN0T3B0aW9ucy5hZGFwdCh7IHBhdGg6IFsnYWknLCd0ZXN0cyddIH0pKVxuXG4gICAgfVxuXG4gICAgc2VuZE1lc3NhZ2UoZGF0YTogQ2hhbm5lbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzZW5kTWVzc2FnZScsIGRhdGEpXG4gICAgICB0aGlzLndzTWVzc2FnaW5nKGRhdGEpXG4gICAgfVxuXG4gICAgdXBkYXRlRGF0YShkYXRhOiBhbnkpIHtcbiAgICAgIGNvbnN0IHNhbXBsZU9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5hZGFwdCh7IHBhdGg6IFsnYWknLCAndGVzdHMnLCBkYXRhLmlkXSB9KVxuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZURhdGEnLCBzYW1wbGVPcHRpb25zKVxuICAgICAgdGhpcy51cGRhdGVSZWNvcmQoZGF0YSwgc2FtcGxlT3B0aW9ucylcblxuICAgIH1cblxuICAgIGRlbGV0ZURhdGEoZGF0YTogYW55KSB7XG4gICAgICBjb25zdCBzYW1wbGVPcHRpb25zID0gUmVxdWVzdE9wdGlvbnMuYWRhcHQoeyBwYXRoOiBbJ2FpJywgJ3Rlc3RzJywgZGF0YS5pZF0gfSlcbiAgICAgIGNvbnNvbGUubG9nKCdkZWxldGVEYXRhJywgc2FtcGxlT3B0aW9ucylcbiAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKHNhbXBsZU9wdGlvbnMpXG4gICAgfVxuXG59XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtcmVxdWVzdC1kZW1vLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL3JlcXVlc3QtbWFuYWdlci13cy1kZW1vL3NlcnZpY2VzL3N0YXRlLXJlcXVlc3QtZGVtby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQWdELE1BQU0sbUJBQW1CLENBQUM7QUFDdEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUt6RCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsdUJBQTRCO0lBS3JFO1FBQ0EsS0FBSyxDQUNELFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDZixNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN4QixLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQzthQUNULENBQUM7WUFDRixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDekIsRUFBRSxFQUFFO2dCQUNGLEVBQUUsRUFBRSxFQUFFO2dCQUNOLCtCQUErQjtnQkFDL0Isd0NBQXdDO2dCQUN4QyxRQUFRLEVBQUUsRUFBRTtnQkFDWixRQUFRLEVBQUUsRUFBRTtnQkFDWixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDdEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQ3hCLEtBQUssRUFBRSxDQUFDO29CQUNSLEtBQUssRUFBRSxFQUFFO2lCQUNWLENBQUM7YUFDSDtTQUNGLENBQUMsRUFDRixRQUFRLENBQUMsS0FBSyxFQUNkLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDcEIsS0FBSyxFQUFFLGNBQWM7WUFDckIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQyxDQUNILENBQUE7UUE5QkwsY0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtRQUNqQyxlQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtJQThCNUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQUUsSUFBUztRQUU1RSxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDdEIsTUFBTTtZQUNOLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN4QixLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQzthQUNULENBQUM7WUFDRixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDekIsRUFBRSxFQUFFO2dCQUNGLEVBQUUsRUFBRSxVQUFVO2dCQUNkLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixJQUFJLEVBQUUsY0FBYztnQkFDcEIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQ3hCLEtBQUssRUFBRSxDQUFDO29CQUNSLEtBQUssRUFBRSxFQUFFO2lCQUNWLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFvQjtRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hCLENBQUM7K0dBakVRLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tICcuLi9tb2RlbHMvdXNlci1kYXRhLm1vZGVsJztcbmltcG9ydCB7IERhdGFiYXNlU3RvcmFnZSwgRGF0YVR5cGUsIFJldHJ5T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5cbmltcG9ydCB7IEhUVFBNYW5hZ2VyU3RhdGVTZXJ2aWNlLCBBcGlSZXF1ZXN0LCBSZXF1ZXN0T3B0aW9ucywgUmFuZG9tTnVtYmVyLCBDaGFubmVsTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE9JRENDbGllbnQgfSBmcm9tICcuLi9tb2RlbHMvb2lkYy1jbGllbnQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdGF0ZVJlcXVlc3RTZXJ2aWNlRGVtbyBleHRlbmRzIEhUVFBNYW5hZ2VyU3RhdGVTZXJ2aWNlPGFueT4ge1xuXG4gIGF0dGVtcHRzJCA9IHRoaXMud3NSZXRyeUF0dGVtcHRzJFxuICBuZXh0UmV0cnkkID0gdGhpcy53c05leHRSZXRyeSRcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgICBBcGlSZXF1ZXN0LmFkYXB0KHtcbiAgICAgICAgICBzZXJ2ZXI6ICcnLFxuICAgICAgICAgIHJldHJ5OiBSZXRyeU9wdGlvbnMuYWRhcHQoe1xuICAgICAgICAgICAgdGltZXM6IDMsXG4gICAgICAgICAgICBkZWxheTogMSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBhZGFwdGVyOiBPSURDQ2xpZW50LmFkYXB0LFxuICAgICAgICAgIHdzOiB7XG4gICAgICAgICAgICBpZDogYGAsXG4gICAgICAgICAgICAvLyB3c0NoYW5uZWxzOiBbJ2FsbENoYW5uZWxzJ10sXG4gICAgICAgICAgICAvLyBhY2Nlc3M6IFsncmVhZCx3cml0ZSxkZWxldGUsdXBkYXRlJ10sXG4gICAgICAgICAgICB3c1NlcnZlcjogJycsXG4gICAgICAgICAgICBqd3RUb2tlbjogJycsXG4gICAgICAgICAgICB1c2VyOiBVc2VyRGF0YS5hZGFwdCgpLFxuICAgICAgICAgICAgcmV0cnk6IFJldHJ5T3B0aW9ucy5hZGFwdCh7XG4gICAgICAgICAgICAgIHRpbWVzOiAzLFxuICAgICAgICAgICAgICBkZWxheTogMTAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBEYXRhVHlwZS5BUlJBWSxcbiAgICAgICAgRGF0YWJhc2VTdG9yYWdlLmFkYXB0KHtcbiAgICAgICAgICB0YWJsZTogJ3dzX2RlbW9fZGF0YScsXG4gICAgICAgICAgZXhwaXJlc0luOiAnNW1uJyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICB1cGRhdGVDb25uZWN0aW9uKHNlcnZlcjogc3RyaW5nLCB3c1NlcnZlcjogc3RyaW5nLCBqd3RUb2tlbjogc3RyaW5nLCB1c2VyOiBhbnkpIHtcblxuICAgICAgdGhpcy5zZXRBcGlSZXF1ZXN0T3B0aW9ucyh7XG4gICAgICAgICAgc2VydmVyLFxuICAgICAgICAgIHJldHJ5OiBSZXRyeU9wdGlvbnMuYWRhcHQoe1xuICAgICAgICAgICAgdGltZXM6IDMsXG4gICAgICAgICAgICBkZWxheTogMSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBhZGFwdGVyOiBPSURDQ2xpZW50LmFkYXB0LFxuICAgICAgICAgIHdzOiB7XG4gICAgICAgICAgICBpZDogJ1dTLVVTRVJTJyxcbiAgICAgICAgICAgIHdzU2VydmVyLFxuICAgICAgICAgICAgand0VG9rZW4sXG4gICAgICAgICAgICB1c2VyLCAvLyB1c2VyIG9iamVjdFxuICAgICAgICAgICAgcmV0cnk6IFJldHJ5T3B0aW9ucy5hZGFwdCh7XG4gICAgICAgICAgICAgIHRpbWVzOiAzLFxuICAgICAgICAgICAgICBkZWxheTogMTAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy51c2VyQWN0aW9uJC5zdWJzY3JpYmUodXNlciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgQWN0aW9uOicsIHVzZXIpXG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICBzZW5kTWVzc2FnZShkYXRhOiBDaGFubmVsTWVzc2FnZSkge1xuICAgICAgY29uc29sZS5sb2coJ3NlbmRNZXNzYWdlJywgZGF0YSlcbiAgICAgIHRoaXMud3NNZXNzYWdpbmcoZGF0YSlcbiAgICB9XG5cbiAgICAvLyBhZGREYXRhKCkge1xuXG4gICAgLy8gICBjb25zdCBudW0gPSBSYW5kb21OdW1iZXIoMTAwMCwgOTk5OSlcblxuICAgIC8vICAgY29uc3QgbmV3RGF0YSA9ICAgICB7XG4gICAgLy8gICAgICAgXCJzcGlmZmVcIjogYHNhbXBsZS5jb20vZGV2ZWxvcGVyLyR7bnVtfWAsXG4gICAgLy8gICAgICAgXCJsYXN0X25hbWVcIjogXCJib25pXCIsXG4gICAgLy8gICAgICAgXCJlbWFpbFwiOiBcIm1pa2Vib25pQGhvdG1haWwuY29tXCIsXG4gICAgLy8gICAgICAgXCJmaXJzdF9uYW1lXCI6IFwibWlrZVwiXG4gICAgLy8gICB9XG5cbiAgICAvLyAgIHRoaXMuY3JlYXRlUmVjb3JkKG5ld0RhdGEsIFJlcXVlc3RPcHRpb25zLmFkYXB0KHsgcGF0aDogWydhaScsJ3Rlc3RzJ10gfSkpXG5cbiAgICAvLyB9XG5cbiAgICAvLyBnZXREYXRhKCkge1xuICAgIC8vICAgdGhpcy5mZXRjaFJlY29yZHMoUmVxdWVzdE9wdGlvbnMuYWRhcHQoeyBwYXRoOiBbJ2FpJywndGVzdHMnXSB9KSlcbiAgICAvLyB9XG5cbiAgICAvLyB1cGRhdGVEYXRhKGRhdGE6IGFueSkge1xuICAgIC8vICAgY29uc3Qgc2FtcGxlT3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLmFkYXB0KHsgcGF0aDogWydhaScsICd0ZXN0cycsIGRhdGEuaWRdIH0pXG4gICAgLy8gICBjb25zb2xlLmxvZygndXBkYXRlRGF0YScsIHNhbXBsZU9wdGlvbnMpXG4gICAgLy8gICB0aGlzLnVwZGF0ZVJlY29yZChkYXRhLCBzYW1wbGVPcHRpb25zKVxuXG4gICAgLy8gfVxuXG4gICAgLy8gZGVsZXRlRGF0YShkYXRhOiBhbnkpIHtcbiAgICAvLyAgIGNvbnN0IHNhbXBsZU9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5hZGFwdCh7IHBhdGg6IFsnYWknLCAndGVzdHMnLCBkYXRhLmlkXSB9KVxuICAgIC8vICAgY29uc29sZS5sb2coJ2RlbGV0ZURhdGEnLCBzYW1wbGVPcHRpb25zKVxuICAgIC8vICAgdGhpcy5kZWxldGVSZWNvcmQoc2FtcGxlT3B0aW9ucylcbiAgICAvLyB9XG5cbn1cbiJdfQ==
@@ -2,4 +2,5 @@ export * from "./models/index";
2
2
  export * from "./credentials.interceptor";
3
3
  export * from "./request-header.interceptor";
4
4
  export * from "./request-error.interceptor";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2ludGVyY2VwdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLGdCQUFnQixDQUFDO0FBRS9CLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbHMvaW5kZXhcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vY3JlZGVudGlhbHMuaW50ZXJjZXB0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlcXVlc3QtaGVhZGVyLmludGVyY2VwdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXF1ZXN0LWVycm9yLmludGVyY2VwdG9yXCI7XG4iXX0=
5
+ export * from "./proxy-debugger.interceptor";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2ludGVyY2VwdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLGdCQUFnQixDQUFDO0FBRS9CLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCAqIGZyb20gXCIuL21vZGVscy9pbmRleFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jcmVkZW50aWFscy5pbnRlcmNlcHRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVxdWVzdC1oZWFkZXIuaW50ZXJjZXB0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlcXVlc3QtZXJyb3IuaW50ZXJjZXB0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb3h5LWRlYnVnZ2VyLmludGVyY2VwdG9yXCI7XG4iXX0=
@@ -4,7 +4,9 @@ export class DatabaseStorage {
4
4
  this.expiresIn = expiresIn;
5
5
  }
6
6
  static adapt(item) {
7
+ if (!item?.table)
8
+ return;
7
9
  return new DatabaseStorage(item?.table, item?.expiresIn);
8
10
  }
9
11
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2Utc3RvcmFnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvbW9kZWxzL2RhdGFiYXNlLXN0b3JhZ2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFDUyxRQUFRLEVBQUUsRUFDVixTQUFhO1FBRGIsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQUk7SUFDbkIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixPQUFPLElBQUksZUFBZSxDQUN4QixJQUFJLEVBQUUsS0FBSyxFQUNYLElBQUksRUFBRSxTQUFTLENBQ2hCLENBQUE7SUFFSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU3RvcmFnZUludGVyZmFjZSB7XG4gIHRhYmxlOiBzdHJpbmdcbiAgZXhwaXJlc0luOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlU3RvcmFnZSBpbXBsZW1lbnRzIERhdGFiYXNlU3RvcmFnZUludGVyZmFjZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRhYmxlID0gJycsXG4gICAgcHVibGljIGV4cGlyZXNJbjogJycsXG4gICkge31cblxuICBzdGF0aWMgYWRhcHQoaXRlbT86IGFueSk6IERhdGFiYXNlU3RvcmFnZSB7XG5cbiAgICByZXR1cm4gbmV3IERhdGFiYXNlU3RvcmFnZShcbiAgICAgIGl0ZW0/LnRhYmxlLFxuICAgICAgaXRlbT8uZXhwaXJlc0luLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2Utc3RvcmFnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvbW9kZWxzL2RhdGFiYXNlLXN0b3JhZ2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFDUyxRQUFRLEVBQUUsRUFDVixTQUFhO1FBRGIsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGNBQVMsR0FBVCxTQUFTLENBQUk7SUFDbkIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixJQUFHLENBQUMsSUFBSSxFQUFFLEtBQUs7WUFBRSxPQUFNO1FBRXZCLE9BQU8sSUFBSSxlQUFlLENBQ3hCLElBQUksRUFBRSxLQUFLLEVBQ1gsSUFBSSxFQUFFLFNBQVMsQ0FDaEIsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VTdG9yYWdlSW50ZXJmYWNlIHtcbiAgdGFibGU6IHN0cmluZ1xuICBleHBpcmVzSW46IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YWJhc2VTdG9yYWdlIGltcGxlbWVudHMgRGF0YWJhc2VTdG9yYWdlSW50ZXJmYWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFibGUgPSAnJyxcbiAgICBwdWJsaWMgZXhwaXJlc0luOiAnJyxcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogYW55IHtcblxuICAgIGlmKCFpdGVtPy50YWJsZSkgcmV0dXJuXG5cbiAgICByZXR1cm4gbmV3IERhdGFiYXNlU3RvcmFnZShcbiAgICAgIGl0ZW0/LnRhYmxlLFxuICAgICAgaXRlbT8uZXhwaXJlc0luLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
@@ -59,6 +59,9 @@ export class RequestService extends WebsocketService {
59
59
  request(options) {
60
60
  return (source$) => {
61
61
  return source$.pipe(map(data => {
62
+ if (!data || (Array.isArray(data) && data.length === 0)) {
63
+ return data;
64
+ }
62
65
  if (options?.adapter) {
63
66
  return Array.isArray(data)
64
67
  ? data.map((item) => options.adapter(item))
@@ -189,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
189
192
  providedIn: 'root'
190
193
  }]
191
194
  }] });
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBUyxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNekQsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFIcEQ7O1FBS1UsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUV6QixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMzQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUUvQyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFDL0MsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFMUMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3pDLGNBQVMsR0FB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SUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0RCxRQUFRLEdBQUcsMEJBQTBCLENBQUE7UUFDdkMsQ0FBQzthQUNJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsR0FBRyxtRUFBbUUsQ0FBQTtRQUNoRixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFFakIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUFZLEVBQUUsV0FBb0I7UUFFdkQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdEI7Z0JBQ0UsR0FBRyxPQUFPO2dCQUNWLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixZQUFZLEVBQUUsTUFBTTtnQkFDcEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLE1BQU0sRUFBRSxtQkFBbUI7YUFDNUI7WUFDRCxDQUFDLENBQUMsT0FBTyxDQUFBO0lBRVgsQ0FBQzsrR0F2UFUsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWxheSwgZmluYWxpemUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpUmVxdWVzdCB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBQYXRoUXVlcnlTZXJ2aWNlLCBIZWFkZXJzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHJlcXVlc3RTdHJlYW1pbmcgfSBmcm9tICcuL3J4anMtb3BlcmF0b3JzL3JlcXVlc3Qtc3RyZWFtaW5nJztcbmltcG9ydCB7IFdlYnNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi93cy1tYW5hZ2VyLXNlcnZpY2UnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFJlcXVlc3RTZXJ2aWNlIGV4dGVuZHMgV2Vic29ja2V0U2VydmljZSB7XG5cbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpXG5cbiAgcHJpdmF0ZSBwYXRoUXVlcnlTZXJ2aWNlID0gaW5qZWN0KFBhdGhRdWVyeVNlcnZpY2UpXG4gIHByaXZhdGUgaGVhZGVyc1NlcnZpY2UgPSBpbmplY3QoSGVhZGVyc1NlcnZpY2UpXG5cbiAgaXNQZW5kaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgaXNQZW5kaW5nJCA9IHRoaXMuaXNQZW5kaW5nLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJvZ3Jlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcHJvZ3Jlc3MkID0gdGhpcy5wcm9ncmVzcy5hc09ic2VydmFibGUoKVxuXG4gIGdldFJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkQ29tYmluZWRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiAob3B0aW9ucy5zdHJlYW0pXG4gICAgICAgID8gdGhpcy5odHRwLmdldDxhbnk+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtaW5nKCksXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmFsaXplKClcbiAgICAgICAgKVxuICAgICAgICA6IHRoaXMuaHR0cC5nZXQ8VD4odXJsUGF0aCwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICAgICAgKVxuICB9XG5cbiAgY3JlYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gKG9wdGlvbnMuc3RyZWFtKVxuICAgICAgICA/IHRoaXMuaHR0cC5wb3N0PGFueT4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHJlcXVlc3RTdHJlYW1pbmcoKSxcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluYWxpemUoKVxuICAgICAgICApXG4gICAgICAgIDogdGhpcy5odHRwLnBvc3Q8VD4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICAgICAgKVxuICB9XG5cbiAgdXBkYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgIClcbiAgfVxuXG4gIGRlbGV0ZVJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICB0aGlzLnJlcXVlc3Qob3B0aW9ucyksXG4gICAgKVxuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uc1xuICBwcml2YXRlIGJ1aWxkVXJsUGF0aChvcHRpb25zOiBBcGlSZXF1ZXN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoUXVlcnlTZXJ2aWNlLmJ1aWxkQVBJUGF0aChvcHRpb25zLnNlcnZlciwgb3B0aW9ucy5wYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmhlYWRlcnNTZXJ2aWNlLmdlbmVyYXRlSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zOiBBcGlSZXF1ZXN0KTogYW55IHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzU2VydmljZS5nZW5lcmF0ZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgIHJldHVybiB0aGlzLmNvbWJpbmVIZWFkZXJzKGhlYWRlcnMsIG9wdGlvbnMuc3RyZWFtIHx8IGZhbHNlKVxuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiAoc291cmNlOiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiAoc291cmNlJDogT2JzZXJ2YWJsZTxhbnk+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpXG4gICAgICAgICAgICAgID8gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gb3B0aW9ucy5hZGFwdGVyKGl0ZW0pKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMuYWRhcHRlcihkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkRmlsZVJlcXVlc3Qob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsUGF0aCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgb2JzZXJ2ZTogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzOiB0cnVlIH0pXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuXG4gICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSlcblxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwSGVhZGVyUmVzcG9uc2UpIHtcbiAgICAgICAgICBpZihldmVudC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG93bmxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMFx0U2VudFx0UmVxdWVzdCBoYXMgYmVlbiBzZW50LlxuICAgICAgICAvLyAxXHRVcGxvYWRQcm9ncmVzc1x0VXBsb2FkIGlzIGluIHByb2dyZXNzLlxuICAgICAgICAvLyAyXHRSZXNwb25zZUhlYWRlclx0UmVzcG9uc2UgaGVhZGVycyByZWNlaXZlZC5cbiAgICAgICAgLy8gM1x0RG93bmxvYWRQcm9ncmVzc1x0RG93bmxvYWQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICAgIC8vIDRcdFJlc3BvbnNlXHRSZXNwb25zZSBpcyBmdWxseSByZWNlaXZlZC5cbiAgICAgICAgLy8gNVx0VXNlclx0Q3VzdG9tIHVzZXIgZXZlbnQuXG5cbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG5cbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzczpcblxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChldmVudC50b3RhbCkgPyBNYXRoLnJvdW5kKGV2ZW50LmxvYWRlZCAvIChldmVudC50b3RhbCB8fCAxKSAqIDEwMCkgOiAxMDBcbiAgICAgICAgICB0aGlzLnByb2dyZXNzLm5leHQoc3RhdHVzKVxuICAgICAgICAgIHJldHVybiBzdGF0dXNcblxuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcblxuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZVBhdGggPSAob3B0aW9ucz8uc2F2ZUFzKSA/IG9wdGlvbnMuc2F2ZUFzIDogKG9wdGlvbnMucGF0aCkgPyBvcHRpb25zLnBhdGhbb3B0aW9ucy5wYXRoLmxlbmd0aCAtIDFdIDogW11cbiAgICAgICAgICAgICAgY29uc3QgZmlsZUNvbnRlbnRIZWFkZXIgPSBvcHRpb25zLmZpbGVDb250ZW50SGVhZGVyIHx8ICdDb250ZW50LURpc3Bvc2l0aW9uJ1xuICAgICAgICAgICAgICBjb25zdCBoZWFkZXJfY29udGVudCA9IGV2ZW50LmhlYWRlcnMuZ2V0KGZpbGVDb250ZW50SGVhZGVyKTtcblxuICAgICAgICAgICAgICAvLyBjaGVja3MgaWYgaGVhZGVyX2NvbnRlbnQgaXMgbm90IGVtcHR5IGFuZCBzcGxpdHMgdGhlIGhlYWRlcl9jb250ZW50IHRvIGdldCB0aGUgZmlsZSBuYW1lXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGZpbGVEb3dubG9hZCAtIGNvbnRhaW5zIHRoZSBmaWxlIG5hbWUgYW5kIGV4dGVuc2lvblxuICAgICAgICAgICAgICBjb25zdCBmaWxlID0gKGhlYWRlcl9jb250ZW50KSA/IGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0uc3Vic3RyaW5nKDAsIGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0ubGVuZ3RoKSA6ICcnXG5cbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAoZmlsZSkgPyBmaWxlIDogZmlsZU5hbWVQYXRoXG5cbiAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2F2ZSBGaWxlOiAoZmlsZSBuYW1lIGFuZCBleHRlbnNpb24pIG5vdCBmb3VuZCBpbiBIZWFkZXJzIG9yIFBhdGgnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRGaWxlKGZpbGVOYW1lLCBldmVudC5ib2R5KVxuICAgICAgICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuXG4gICAgICAgICAgICAgIHJldHVybiAxMDBcblxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb3dubG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfVxuXG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbmFsaXplKCk6IChzb3VyY2U6IE9ic2VydmFibGU8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZmlsZTpzdHJpbmcsIGZpbGVEYXRhOiBhbnkpIHtcblxuICAgIGNvbnN0IG5hdmlnYXRvckFueSA9IHdpbmRvdy5uYXZpZ2F0b3IgYXMgYW55XG5cbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLnNwbGl0KCcuJylbMV0udG9Mb3dlckNhc2UoKVxuXG4gICAgdmFyIG5ld0Jsb2IgPSBuZXcgQmxvYihbZmlsZURhdGFdLCB7IHR5cGU6IHRoaXMuY3JlYXRlRmlsZVR5cGUoZXh0ZW5zaW9uKSB9KVxuXG4gICAgaWYgKG5hdmlnYXRvckFueS5tc1NhdmVPck9wZW5CbG9iKSB7XG4gICAgICBuYXZpZ2F0b3JBbnkubXNTYXZlT3JPcGVuQmxvYihuZXdCbG9iLCBmaWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXdCbG9iKVxuICAgICAgbGluay5ocmVmID0gdXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZVxuICAgICAgbGluay5jbGljaygpXG4gICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpbGVUeXBlKGV4dDogYW55KTogc3RyaW5nIHtcblxuICAgIGxldCBmaWxlVHlwZTogc3RyaW5nID0gXCJcIlxuXG4gICAgaWYgKGV4dCA9PSAncGRmJyB8fCBleHQgPT0gJ2NzdicpIHtcbiAgICAgIGZpbGVUeXBlID0gYGFwcGxpY2F0aW9uLyR7ZXh0fWBcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICdqcGVnJyB8fCBleHQgPT0gJ2pwZycgfHwgZXh0ID09ICdwbmcnKSB7XG4gICAgICBmaWxlVHlwZSA9IGBpbWFnZS8ke2V4dH1gXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAndHh0Jykge1xuICAgICAgZmlsZVR5cGUgPSAndGV4dC9wbGFpbidcbiAgICB9XG5cbiAgICBlbHNlIGlmIChleHQgPT0gJ3BwdCcgfHwgZXh0ID09ICdwb3QnIHx8IGV4dCA9PSAncHBzJyB8fCBleHQgPT0gJ3BwYScpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50J1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3BwdHgnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJ1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ2RvYycgfHwgZXh0ID09ICdkb3QnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAnZG9jeCcpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3hscycgfHwgZXh0ID09ICd4bHQnIHx8IGV4dCA9PSAneGxhJykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJ1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3hsc3gnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZVR5cGVcblxuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5lSGVhZGVycyhoZWFkZXJzOiBhbnksIGlzU3RyZWFtaW5nOiBib29sZWFuKSB7XG5cbiAgICByZXR1cm4gKGlzU3RyZWFtaW5nKSA/XG4gICAge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgIEFjY2VwdDogJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgIH1cbiAgICA6IGhlYWRlcnNcblxuICB9XG5cbn1cbiJdfQ==
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBUyxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNekQsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFIcEQ7O1FBS1UsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUV6QixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMzQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUUvQyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFDL0MsZUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFMUMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3pDLGNBQVMsR0FB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O1lBQ3RDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQTtRQUNqQyxDQUFDO2FBQ0ksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdkIsUUFBUSxHQUFHLHlFQUF5RSxDQUFBO1FBQ3RGLENBQUM7YUFDSSxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEQsUUFBUSxHQUFHLDBCQUEwQixDQUFBO1FBQ3ZDLENBQUM7YUFDSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN2QixRQUFRLEdBQUcsbUVBQW1FLENBQUE7UUFDaEYsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFBO0lBRWpCLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBWSxFQUFFLFdBQW9CO1FBRXZELE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3RCO2dCQUNFLEdBQUcsT0FBTztnQkFDVixPQUFPLEVBQUUsUUFBUTtnQkFDakIsWUFBWSxFQUFFLE1BQU07Z0JBQ3BCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixNQUFNLEVBQUUsbUJBQW1CO2FBQzVCO1lBQ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUVYLENBQUM7K0dBMVBVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwSGVhZGVyUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVsYXksIGZpbmFsaXplLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFwaVJlcXVlc3QgfSBmcm9tICcuLi9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtc2VydmljZS9tb2RlbHMvYXBpLXJlcXVlc3QubW9kZWwnO1xuaW1wb3J0IHsgUGF0aFF1ZXJ5U2VydmljZSwgSGVhZGVyc1NlcnZpY2UgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyByZXF1ZXN0U3RyZWFtaW5nIH0gZnJvbSAnLi9yeGpzLW9wZXJhdG9ycy9yZXF1ZXN0LXN0cmVhbWluZyc7XG5pbXBvcnQgeyBXZWJzb2NrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vd3MtbWFuYWdlci1zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0U2VydmljZSBleHRlbmRzIFdlYnNvY2tldFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KVxuXG4gIHByaXZhdGUgcGF0aFF1ZXJ5U2VydmljZSA9IGluamVjdChQYXRoUXVlcnlTZXJ2aWNlKVxuICBwcml2YXRlIGhlYWRlcnNTZXJ2aWNlID0gaW5qZWN0KEhlYWRlcnNTZXJ2aWNlKVxuXG4gIGlzUGVuZGluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXG4gIGlzUGVuZGluZyQgPSB0aGlzLmlzUGVuZGluZy5hc09ic2VydmFibGUoKVxuXG4gIHByb2dyZXNzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApXG4gIHByb2dyZXNzJCA9IHRoaXMucHJvZ3Jlc3MuYXNPYnNlcnZhYmxlKClcblxuICBnZXRSZWNvcmRSZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gKG9wdGlvbnMuc3RyZWFtKVxuICAgICAgICA/IHRoaXMuaHR0cC5nZXQ8YW55Pih1cmxQYXRoLCBoZWFkZXJzKS5waXBlKFxuICAgICAgICAgICAgcmVxdWVzdFN0cmVhbWluZygpLFxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5hbGl6ZSgpXG4gICAgICAgIClcbiAgICAgICAgOiB0aGlzLmh0dHAuZ2V0PFQ+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3Qob3B0aW9ucyksXG4gICAgICAgIClcbiAgfVxuXG4gIGNyZWF0ZVJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCwgZGF0YTogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG5cbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRDb21iaW5lZEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgcmV0dXJuIChvcHRpb25zLnN0cmVhbSlcbiAgICAgICAgPyB0aGlzLmh0dHAucG9zdDxhbnk+KHVybFBhdGgsIGRhdGEsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtaW5nKCksXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmFsaXplKClcbiAgICAgICAgKVxuICAgICAgICA6IHRoaXMuaHR0cC5wb3N0PFQ+KHVybFBhdGgsIGRhdGEsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3Qob3B0aW9ucyksXG4gICAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZVJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCwgZGF0YTogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnk+KHVybFBhdGgsIGRhdGEsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICApXG4gIH1cblxuICBkZWxldGVSZWNvcmRSZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55Pih1cmxQYXRoLCBoZWFkZXJzKS5waXBlKFxuICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgIClcbiAgfVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbnNcbiAgcHJpdmF0ZSBidWlsZFVybFBhdGgob3B0aW9uczogQXBpUmVxdWVzdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFF1ZXJ5U2VydmljZS5idWlsZEFQSVBhdGgob3B0aW9ucy5zZXJ2ZXIsIG9wdGlvbnMucGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSGVhZGVycyhvcHRpb25zOiBBcGlSZXF1ZXN0KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJzU2VydmljZS5nZW5lcmF0ZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb21iaW5lZEhlYWRlcnMob3B0aW9uczogQXBpUmVxdWVzdCk6IGFueSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1NlcnZpY2UuZ2VuZXJhdGVIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICByZXR1cm4gdGhpcy5jb21iaW5lSGVhZGVycyhoZWFkZXJzLCBvcHRpb25zLnN0cmVhbSB8fCBmYWxzZSlcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0KTogKHNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gKHNvdXJjZSQ6IE9ic2VydmFibGU8YW55Pik6IE9ic2VydmFibGU8VD4gPT4ge1xuICAgICAgcmV0dXJuIHNvdXJjZSQucGlwZShcbiAgICAgICAgbWFwKGRhdGEgPT4ge1xuICAgICAgICAgIGlmICghZGF0YSB8fCAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zPy5hZGFwdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhKVxuICAgICAgICAgICAgICA/IGRhdGEubWFwKChpdGVtOiBhbnkpID0+IG9wdGlvbnMuYWRhcHRlcihpdGVtKSlcbiAgICAgICAgICAgICAgOiBvcHRpb25zLmFkYXB0ZXIoZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZEZpbGVSZXF1ZXN0KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybFBhdGgsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicsIG9ic2VydmU6ICdldmVudHMnLCByZXBvcnRQcm9ncmVzczogdHJ1ZSB9KVxuICAgIC5waXBlKFxuICAgICAgbWFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcblxuICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpXG5cbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cEhlYWRlclJlc3BvbnNlKSB7XG4gICAgICAgICAgaWYoZXZlbnQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rvd25sb2FkIGZhaWxlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDBcdFNlbnRcdFJlcXVlc3QgaGFzIGJlZW4gc2VudC5cbiAgICAgICAgLy8gMVx0VXBsb2FkUHJvZ3Jlc3NcdFVwbG9hZCBpcyBpbiBwcm9ncmVzcy5cbiAgICAgICAgLy8gMlx0UmVzcG9uc2VIZWFkZXJcdFJlc3BvbnNlIGhlYWRlcnMgcmVjZWl2ZWQuXG4gICAgICAgIC8vIDNcdERvd25sb2FkUHJvZ3Jlc3NcdERvd25sb2FkIGlzIGluIHByb2dyZXNzLlxuICAgICAgICAvLyA0XHRSZXNwb25zZVx0UmVzcG9uc2UgaXMgZnVsbHkgcmVjZWl2ZWQuXG4gICAgICAgIC8vIDVcdFVzZXJcdEN1c3RvbSB1c2VyIGV2ZW50LlxuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuXG4gICAgICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLkRvd25sb2FkUHJvZ3Jlc3M6XG5cbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSAoZXZlbnQudG90YWwpID8gTWF0aC5yb3VuZChldmVudC5sb2FkZWQgLyAoZXZlbnQudG90YWwgfHwgMSkgKiAxMDApIDogMTAwXG4gICAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHN0YXR1cylcbiAgICAgICAgICByZXR1cm4gc3RhdHVzXG5cbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG5cbiAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWVQYXRoID0gKG9wdGlvbnM/LnNhdmVBcykgPyBvcHRpb25zLnNhdmVBcyA6IChvcHRpb25zLnBhdGgpID8gb3B0aW9ucy5wYXRoW29wdGlvbnMucGF0aC5sZW5ndGggLSAxXSA6IFtdXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVDb250ZW50SGVhZGVyID0gb3B0aW9ucy5maWxlQ29udGVudEhlYWRlciB8fCAnQ29udGVudC1EaXNwb3NpdGlvbidcbiAgICAgICAgICAgICAgY29uc3QgaGVhZGVyX2NvbnRlbnQgPSBldmVudC5oZWFkZXJzLmdldChmaWxlQ29udGVudEhlYWRlcik7XG5cbiAgICAgICAgICAgICAgLy8gY2hlY2tzIGlmIGhlYWRlcl9jb250ZW50IGlzIG5vdCBlbXB0eSBhbmQgc3BsaXRzIHRoZSBoZWFkZXJfY29udGVudCB0byBnZXQgdGhlIGZpbGUgbmFtZVxuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBmaWxlRG93bmxvYWQgLSBjb250YWlucyB0aGUgZmlsZSBuYW1lIGFuZCBleHRlbnNpb25cbiAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IChoZWFkZXJfY29udGVudCkgPyBoZWFkZXJfY29udGVudC5zcGxpdCgnPScpWzFdLnN1YnN0cmluZygwLCBoZWFkZXJfY29udGVudC5zcGxpdCgnPScpWzFdLmxlbmd0aCkgOiAnJ1xuXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gKGZpbGUpID8gZmlsZSA6IGZpbGVOYW1lUGF0aFxuXG4gICAgICAgICAgICAgIGlmIChmaWxlTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhdmUgRmlsZTogKGZpbGUgbmFtZSBhbmQgZXh0ZW5zaW9uKSBub3QgZm91bmQgaW4gSGVhZGVycyBvciBQYXRoJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkRmlsZShmaWxlTmFtZSwgZXZlbnQuYm9keSlcbiAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcblxuICAgICAgICAgICAgICByZXR1cm4gMTAwXG5cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG93bmxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cblxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycilcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaW5hbGl6ZSgpOiAoc291cmNlOiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGZpbmFsaXplKCgpID0+IHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWRGaWxlKGZpbGU6c3RyaW5nLCBmaWxlRGF0YTogYW55KSB7XG5cbiAgICBjb25zdCBuYXZpZ2F0b3JBbnkgPSB3aW5kb3cubmF2aWdhdG9yIGFzIGFueVxuXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5zcGxpdCgnLicpWzFdLnRvTG93ZXJDYXNlKClcblxuICAgIHZhciBuZXdCbG9iID0gbmV3IEJsb2IoW2ZpbGVEYXRhXSwgeyB0eXBlOiB0aGlzLmNyZWF0ZUZpbGVUeXBlKGV4dGVuc2lvbikgfSlcblxuICAgIGlmIChuYXZpZ2F0b3JBbnkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgbmF2aWdhdG9yQW55Lm1zU2F2ZU9yT3BlbkJsb2IobmV3QmxvYiwgZmlsZSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3QmxvYilcbiAgICAgIGxpbmsuaHJlZiA9IHVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVcbiAgICAgIGxpbmsuY2xpY2soKVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGaWxlVHlwZShleHQ6IGFueSk6IHN0cmluZyB7XG5cbiAgICBsZXQgZmlsZVR5cGU6IHN0cmluZyA9IFwiXCJcblxuICAgIGlmIChleHQgPT0gJ3BkZicgfHwgZXh0ID09ICdjc3YnKSB7XG4gICAgICBmaWxlVHlwZSA9IGBhcHBsaWNhdGlvbi8ke2V4dH1gXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAnanBlZycgfHwgZXh0ID09ICdqcGcnIHx8IGV4dCA9PSAncG5nJykge1xuICAgICAgZmlsZVR5cGUgPSBgaW1hZ2UvJHtleHR9YFxuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3R4dCcpIHtcbiAgICAgIGZpbGVUeXBlID0gJ3RleHQvcGxhaW4nXG4gICAgfVxuXG4gICAgZWxzZSBpZiAoZXh0ID09ICdwcHQnIHx8IGV4dCA9PSAncG90JyB8fCBleHQgPT0gJ3BwcycgfHwgZXh0ID09ICdwcGEnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCdcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICdwcHR4Jykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbidcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICdkb2MnIHx8IGV4dCA9PSAnZG90Jykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vbXN3b3JkJ1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ2RvY3gnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCdcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICd4bHMnIHx8IGV4dCA9PSAneGx0JyB8fCBleHQgPT0gJ3hsYScpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCdcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICd4bHN4Jykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGVUeXBlXG5cbiAgfVxuXG4gIHByaXZhdGUgY29tYmluZUhlYWRlcnMoaGVhZGVyczogYW55LCBpc1N0cmVhbWluZzogYm9vbGVhbikge1xuXG4gICAgcmV0dXJuIChpc1N0cmVhbWluZykgP1xuICAgIHtcbiAgICAgIC4uLmhlYWRlcnMsXG4gICAgICBvYnNlcnZlOiAnZXZlbnRzJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICBBY2NlcHQ6ICd0ZXh0L2V2ZW50LXN0cmVhbSdcbiAgICB9XG4gICAgOiBoZWFkZXJzXG5cbiAgfVxuXG59XG4iXX0=