tas-uell-sdk 0.0.5 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -51
- package/esm2020/lib/components/tas-avatar/tas-avatar.component.mjs +75 -0
- package/esm2020/lib/components/tas-btn/tas-btn.component.mjs +146 -61
- package/esm2020/lib/components/tas-floating-call/tas-floating-call.component.mjs +48 -23
- package/esm2020/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.mjs +109 -0
- package/esm2020/lib/components/tas-videocall/tas-videocall.component.mjs +217 -20
- package/esm2020/lib/components/tas-waiting-room/tas-waiting-room.component.mjs +226 -160
- package/esm2020/lib/config/tas.config.mjs +1 -1
- package/esm2020/lib/interfaces/tas.interfaces.mjs +45 -2
- package/esm2020/lib/services/geolocation.service.mjs +56 -0
- package/esm2020/lib/services/tas.service.mjs +400 -34
- package/esm2020/lib/tas-uell-sdk.module.mjs +25 -21
- package/esm2020/public-api.mjs +4 -1
- package/fesm2015/tas-uell-sdk.mjs +1323 -302
- package/fesm2015/tas-uell-sdk.mjs.map +1 -1
- package/fesm2020/tas-uell-sdk.mjs +1307 -300
- package/fesm2020/tas-uell-sdk.mjs.map +1 -1
- package/lib/components/tas-avatar/tas-avatar.component.d.ts +9 -0
- package/lib/components/tas-btn/tas-btn.component.d.ts +35 -15
- package/lib/components/tas-floating-call/tas-floating-call.component.d.ts +5 -1
- package/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.d.ts +33 -0
- package/lib/components/tas-videocall/tas-videocall.component.d.ts +49 -3
- package/lib/components/tas-waiting-room/tas-waiting-room.component.d.ts +50 -35
- package/lib/config/tas.config.d.ts +7 -0
- package/lib/interfaces/tas.interfaces.d.ts +127 -35
- package/lib/services/geolocation.service.d.ts +24 -0
- package/lib/services/tas.service.d.ts +98 -9
- package/lib/tas-uell-sdk.module.d.ts +6 -3
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/src/lib/styles/tas-global.scss +27 -28
- package/INSTALL_AND_TEST.md +0 -427
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Component, Input } from
|
|
2
|
-
import { Subscription } from
|
|
3
|
-
import { ViewMode } from
|
|
4
|
-
import { TasWaitingRoomComponent } from
|
|
5
|
-
import { TasVideocallComponent } from
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import { TasRoomType, ViewMode, TasBusinessRole, } from '../../interfaces/tas.interfaces';
|
|
4
|
+
import { TasWaitingRoomComponent } from '../tas-waiting-room/tas-waiting-room.component';
|
|
5
|
+
import { TasVideocallComponent } from '../tas-videocall/tas-videocall.component';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
8
8
|
import * as i2 from "../../services/tas.service";
|
|
@@ -11,107 +11,192 @@ export class TasButtonComponent {
|
|
|
11
11
|
constructor(modalService, tasService) {
|
|
12
12
|
this.modalService = modalService;
|
|
13
13
|
this.tasService = tasService;
|
|
14
|
-
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
|
|
18
|
-
this.
|
|
19
|
-
|
|
20
|
-
this.existingSessionId = "";
|
|
21
|
-
/** Optional: Custom button text */
|
|
22
|
-
this.buttonText = "Iniciar TAS";
|
|
14
|
+
// Status endpoint params
|
|
15
|
+
this.roomType = TasRoomType.TAS;
|
|
16
|
+
this.businessRole = TasBusinessRole.USER;
|
|
17
|
+
// Style customization
|
|
18
|
+
this.variant = 'default';
|
|
19
|
+
this.buttonLabel = 'Iniciar TAS';
|
|
23
20
|
this.isLoading = false;
|
|
21
|
+
// Status check state
|
|
22
|
+
this.isCheckingStatus = false;
|
|
23
|
+
this.isStatusError = false;
|
|
24
|
+
this.statusErrorMessage = '';
|
|
25
|
+
this.isJoinable = false; // Tracks joinable field from status response
|
|
24
26
|
this.subscriptions = new Subscription();
|
|
25
27
|
this.currentModalRef = null;
|
|
26
28
|
this.videoCallModalRef = null;
|
|
29
|
+
this.statusPollingInterval = null;
|
|
30
|
+
this.STATUS_POLL_INTERVAL_MS = 30000; // 30 seconds
|
|
27
31
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
/** Whether user is backoffice (or admin/manager) */
|
|
33
|
+
get isBackoffice() {
|
|
34
|
+
return (this.businessRole === TasBusinessRole.BACKOFFICE ||
|
|
35
|
+
this.businessRole === TasBusinessRole.ADMIN_MANAGER ||
|
|
36
|
+
this.businessRole === TasBusinessRole.MANAGER);
|
|
37
|
+
}
|
|
38
|
+
/** Whether the button should be disabled */
|
|
39
|
+
get isDisabled() {
|
|
40
|
+
return this.isLoading || this.isStatusError || !this.isJoinable;
|
|
41
|
+
}
|
|
42
|
+
/** Reason why the button is disabled (for tooltip) */
|
|
43
|
+
get disabledReason() {
|
|
44
|
+
if (this.isLoading) {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
if (this.isStatusError) {
|
|
48
|
+
return this.statusErrorMessage || 'Error al verificar el estado';
|
|
31
49
|
}
|
|
50
|
+
if (!this.isJoinable) {
|
|
51
|
+
return 'Todavía no es el horario de la llamada';
|
|
52
|
+
}
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
ngOnInit() {
|
|
32
56
|
// Subscribe to viewMode to handle PiP return
|
|
33
|
-
this.subscriptions.add(this.tasService.viewMode$.subscribe(mode => {
|
|
34
|
-
// Reopen video call modal when returning from PiP
|
|
35
|
-
if (mode === ViewMode.FULLSCREEN &&
|
|
36
|
-
this.tasService.isCallActive() &&
|
|
37
|
-
!this.videoCallModalRef) {
|
|
38
|
-
const sessionId = this.tasService.sessionId;
|
|
39
|
-
const token = this.tasService.token;
|
|
40
|
-
if (sessionId && token) {
|
|
41
|
-
this.openVideoCallModal(true);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
57
|
+
this.subscriptions.add(this.tasService.viewMode$.subscribe((mode) => {
|
|
44
58
|
// When entering PiP, clear the videoCallModalRef since modal will close
|
|
45
59
|
if (mode === ViewMode.PIP) {
|
|
46
60
|
this.videoCallModalRef = null;
|
|
47
61
|
}
|
|
48
62
|
}));
|
|
63
|
+
// Start status checking
|
|
64
|
+
this.startStatusPolling();
|
|
49
65
|
}
|
|
50
66
|
ngOnDestroy() {
|
|
51
67
|
this.subscriptions.unsubscribe();
|
|
68
|
+
this.stopStatusPolling();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Start polling status every 30 seconds
|
|
72
|
+
*/
|
|
73
|
+
startStatusPolling() {
|
|
74
|
+
// Initial status check
|
|
75
|
+
this.checkStatus();
|
|
76
|
+
// Set up periodic polling
|
|
77
|
+
this.statusPollingInterval = setInterval(() => {
|
|
78
|
+
this.checkStatus();
|
|
79
|
+
}, this.STATUS_POLL_INTERVAL_MS);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Stop status polling
|
|
83
|
+
*/
|
|
84
|
+
stopStatusPolling() {
|
|
85
|
+
if (this.statusPollingInterval) {
|
|
86
|
+
clearInterval(this.statusPollingInterval);
|
|
87
|
+
this.statusPollingInterval = null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check status endpoint to determine if button should be enabled
|
|
92
|
+
*/
|
|
93
|
+
checkStatus() {
|
|
94
|
+
// Skip if required inputs are not available
|
|
95
|
+
if (!this.tenant || !this.entityId) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
this.isCheckingStatus = true;
|
|
99
|
+
this.statusErrorMessage = '';
|
|
100
|
+
this.subscriptions.add(this.tasService.getProxyVideoStatus({
|
|
101
|
+
roomType: this.roomType,
|
|
102
|
+
entityId: this.entityId,
|
|
103
|
+
tenant: this.tenant,
|
|
104
|
+
businessRole: this.businessRole,
|
|
105
|
+
}).subscribe({
|
|
106
|
+
next: (response) => {
|
|
107
|
+
// Check if response is actually an error (some HTTP adapters return errors in next)
|
|
108
|
+
// Also check for undefined/null or missing content
|
|
109
|
+
const isErrorResponse = !response ||
|
|
110
|
+
!response.content ||
|
|
111
|
+
response?.ok === false ||
|
|
112
|
+
response?.status >= 400 ||
|
|
113
|
+
response?.error ||
|
|
114
|
+
response?.name === 'HttpErrorResponse';
|
|
115
|
+
if (isErrorResponse) {
|
|
116
|
+
this.isCheckingStatus = false;
|
|
117
|
+
this.isStatusError = true;
|
|
118
|
+
this.statusErrorMessage = response?.error?.message || response?.message || 'Error checking status';
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.isCheckingStatus = false;
|
|
122
|
+
this.isStatusError = false;
|
|
123
|
+
this.statusErrorMessage = '';
|
|
124
|
+
// Update joinable state from response
|
|
125
|
+
this.isJoinable = response.content?.joinable ?? false;
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
error: (err) => {
|
|
129
|
+
this.isCheckingStatus = false;
|
|
130
|
+
this.isStatusError = true;
|
|
131
|
+
this.statusErrorMessage = err?.error?.message || err?.message || 'Error checking status';
|
|
132
|
+
},
|
|
133
|
+
}));
|
|
52
134
|
}
|
|
53
135
|
onClick() {
|
|
54
|
-
if (!this.
|
|
55
|
-
|
|
136
|
+
if (!this.tenant || !this.currentUser?.name) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!this.entityId) {
|
|
56
140
|
return;
|
|
57
141
|
}
|
|
58
142
|
this.openWaitingRoomModal();
|
|
59
143
|
}
|
|
60
144
|
openWaitingRoomModal() {
|
|
61
145
|
this.currentModalRef = this.modalService.open(TasWaitingRoomComponent, {
|
|
62
|
-
size:
|
|
63
|
-
windowClass:
|
|
64
|
-
backdrop:
|
|
146
|
+
size: 'lg',
|
|
147
|
+
windowClass: 'tas-waiting-room-modal',
|
|
148
|
+
backdrop: 'static',
|
|
65
149
|
keyboard: false,
|
|
66
|
-
centered: true
|
|
150
|
+
centered: true,
|
|
67
151
|
});
|
|
68
152
|
// Pass all necessary inputs to the waiting room component
|
|
69
|
-
this.currentModalRef.componentInstance.
|
|
70
|
-
this.currentModalRef.componentInstance.
|
|
71
|
-
this.currentModalRef.componentInstance.
|
|
153
|
+
this.currentModalRef.componentInstance.roomType = this.roomType;
|
|
154
|
+
this.currentModalRef.componentInstance.entityId = this.entityId;
|
|
155
|
+
this.currentModalRef.componentInstance.tenant = this.tenant;
|
|
156
|
+
this.currentModalRef.componentInstance.businessRole = this.businessRole;
|
|
72
157
|
this.currentModalRef.componentInstance.currentUser = this.currentUser;
|
|
73
|
-
this.currentModalRef.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.currentModalRef.result.then(() => { this.currentModalRef = null; }, () => { this.currentModalRef = null; });
|
|
158
|
+
this.currentModalRef.result.then(() => {
|
|
159
|
+
this.currentModalRef = null;
|
|
160
|
+
}, () => {
|
|
161
|
+
this.currentModalRef = null;
|
|
162
|
+
});
|
|
79
163
|
}
|
|
80
164
|
openVideoCallModal(isReturningFromPip = false) {
|
|
81
165
|
this.videoCallModalRef = this.modalService.open(TasVideocallComponent, {
|
|
82
166
|
size: 'xl',
|
|
83
167
|
windowClass: 'tas-video-modal',
|
|
84
168
|
backdrop: 'static',
|
|
85
|
-
keyboard: false
|
|
169
|
+
keyboard: false,
|
|
86
170
|
});
|
|
87
171
|
this.videoCallModalRef.componentInstance.sessionId = this.tasService.sessionId;
|
|
88
172
|
this.videoCallModalRef.componentInstance.token = this.tasService.token;
|
|
173
|
+
this.videoCallModalRef.componentInstance.businessRole = this.businessRole;
|
|
89
174
|
this.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;
|
|
90
|
-
this.videoCallModalRef.result.then(() => {
|
|
175
|
+
this.videoCallModalRef.result.then(() => {
|
|
176
|
+
this.videoCallModalRef = null;
|
|
177
|
+
}, () => {
|
|
178
|
+
this.videoCallModalRef = null;
|
|
179
|
+
});
|
|
91
180
|
}
|
|
92
181
|
}
|
|
93
|
-
TasButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
94
|
-
TasButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
182
|
+
TasButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasButtonComponent, deps: [{ token: i1.NgbModal }, { token: i2.TasService }], target: i0.ɵɵFactoryTarget.Component });
|
|
183
|
+
TasButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasButtonComponent, selector: "tas-btn", inputs: { roomType: "roomType", entityId: "entityId", tenant: "tenant", businessRole: "businessRole", currentUser: "currentUser", variant: "variant", buttonLabel: "buttonLabel" }, ngImport: i0, template: "<span\n [ngbTooltip]=\"isDisabled && disabledReason ? disabledReason : null\"\n container=\"body\"\n placement=\"top\"\n tooltipClass=\"tas-btn-tooltip\"\n>\n <button\n type=\"button\"\n class=\"btn btn-primary tas-btn\"\n [class.tas-btn--teal]=\"variant === 'teal'\"\n (click)=\"onClick()\"\n [disabled]=\"isDisabled\"\n >\n <i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n <span *ngIf=\"!isLoading\">{{ buttonLabel }}</span>\n <span *ngIf=\"isLoading\">Processing...</span>\n </button>\n</span>\n", styles: [":host{display:inline-block}.tas-btn{background-color:#ee316b!important;color:#fff!important;border-color:#ee316b!important;margin-right:24px;display:flex;padding:6px 14px;justify-content:center;align-items:center;gap:7px;flex-shrink:0;flex-grow:0}.tas-btn:disabled{background-color:#ccc!important;border-color:#ccc!important;cursor:not-allowed}.tas-btn:hover:not(:disabled){background-color:#d62a5f!important;border-color:#d62a5f!important}.tas-btn i{margin-right:5px}.tas-btn--teal{background-color:#0097a7!important;border-color:#0097a7!important;border-radius:24px;padding:10px 24px;font-weight:500;margin-right:0}.tas-btn--teal:hover:not(:disabled){background-color:#00838f!important;border-color:#00838f!important}\n"], directives: [{ type: i1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
184
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasButtonComponent, decorators: [{
|
|
96
185
|
type: Component,
|
|
97
|
-
args: [{ selector:
|
|
98
|
-
}], ctorParameters: function () { return [{ type: i1.NgbModal }, { type: i2.TasService }]; }, propDecorators: {
|
|
186
|
+
args: [{ selector: 'tas-btn', template: "<span\n [ngbTooltip]=\"isDisabled && disabledReason ? disabledReason : null\"\n container=\"body\"\n placement=\"top\"\n tooltipClass=\"tas-btn-tooltip\"\n>\n <button\n type=\"button\"\n class=\"btn btn-primary tas-btn\"\n [class.tas-btn--teal]=\"variant === 'teal'\"\n (click)=\"onClick()\"\n [disabled]=\"isDisabled\"\n >\n <i class=\"fa fa-video-camera\" aria-hidden=\"true\" *ngIf=\"!isLoading\"></i>\n <span *ngIf=\"!isLoading\">{{ buttonLabel }}</span>\n <span *ngIf=\"isLoading\">Processing...</span>\n </button>\n</span>\n", styles: [":host{display:inline-block}.tas-btn{background-color:#ee316b!important;color:#fff!important;border-color:#ee316b!important;margin-right:24px;display:flex;padding:6px 14px;justify-content:center;align-items:center;gap:7px;flex-shrink:0;flex-grow:0}.tas-btn:disabled{background-color:#ccc!important;border-color:#ccc!important;cursor:not-allowed}.tas-btn:hover:not(:disabled){background-color:#d62a5f!important;border-color:#d62a5f!important}.tas-btn i{margin-right:5px}.tas-btn--teal{background-color:#0097a7!important;border-color:#0097a7!important;border-radius:24px;padding:10px 24px;font-weight:500;margin-right:0}.tas-btn--teal:hover:not(:disabled){background-color:#00838f!important;border-color:#00838f!important}\n"] }]
|
|
187
|
+
}], ctorParameters: function () { return [{ type: i1.NgbModal }, { type: i2.TasService }]; }, propDecorators: { roomType: [{
|
|
99
188
|
type: Input
|
|
100
|
-
}],
|
|
189
|
+
}], entityId: [{
|
|
101
190
|
type: Input
|
|
102
|
-
}],
|
|
191
|
+
}], tenant: [{
|
|
103
192
|
type: Input
|
|
104
|
-
}],
|
|
193
|
+
}], businessRole: [{
|
|
105
194
|
type: Input
|
|
106
|
-
}],
|
|
107
|
-
type: Input
|
|
108
|
-
}], regularUserIds: [{
|
|
109
|
-
type: Input
|
|
110
|
-
}], moderatorUserIds: [{
|
|
195
|
+
}], currentUser: [{
|
|
111
196
|
type: Input
|
|
112
|
-
}],
|
|
197
|
+
}], variant: [{
|
|
113
198
|
type: Input
|
|
114
|
-
}],
|
|
199
|
+
}], buttonLabel: [{
|
|
115
200
|
type: Input
|
|
116
201
|
}] } });
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWJ0bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQWtCLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7OztBQVFqRixNQUFNLE9BQU8sa0JBQWtCO0lBcUI5QixZQUNTLFlBQXNCLEVBQ3RCLFVBQXNCO1FBRHRCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF0QnRCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLFlBQU8sR0FBVyxNQUFNLENBQUM7UUFDekIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUd0QixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5QixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFFekMsc0ZBQXNGO1FBQzdFLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUV4QyxtQ0FBbUM7UUFDMUIsZUFBVSxHQUFXLGFBQWEsQ0FBQztRQUVyQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUF1QixJQUFJLENBQUM7UUFDM0Msc0JBQWlCLEdBQXVCLElBQUksQ0FBQztJQUtsRCxDQUFDO0lBRUosUUFBUTtRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7U0FDN0Y7UUFFRCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQyxrREFBa0Q7WUFDbEQsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLFVBQVU7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFO2dCQUM5QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2dCQUNwQyxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDOUI7YUFDRDtZQUVELHdFQUF3RTtZQUN4RSxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO2FBQzlCO1FBQ0YsQ0FBQyxDQUFDLENBQ0YsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTztRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3pELE9BQU87U0FDUDtRQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxvQkFBb0I7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUN0RSxJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSx3QkFBd0I7WUFDckMsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUVILDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1RSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUVoRix1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFFbEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMvQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDdEMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMscUJBQThCLEtBQUs7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3RFLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDL0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFFakYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ3hDLENBQUM7SUFDSCxDQUFDOzsrR0E3R1csa0JBQWtCO21HQUFsQixrQkFBa0IseVVDYi9CLGtVQVVBOzJGREdhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDQyxTQUFTO3dIQUtWLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVGFzQ3VycmVudFVzZXIsIFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdGFzLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRhc1dhaXRpbmdSb29tQ29tcG9uZW50IH0gZnJvbSBcIi4uL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRhc1ZpZGVvY2FsbENvbXBvbmVudCB9IGZyb20gXCIuLi90YXMtdmlkZW9jYWxsL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Rhcy5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJ0YXMtYnRuXCIsXG5cdHRlbXBsYXRlVXJsOiBcIi4vdGFzLWJ0bi5jb21wb25lbnQuaHRtbFwiLFxuXHRzdHlsZVVybHM6IFtcIi4vdGFzLWJ0bi5jb21wb25lbnQuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFzQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHRASW5wdXQoKSBhcHBvaW50bWVudElkOiBudW1iZXIgPSAxO1xuXHRASW5wdXQoKSBwcm9kdWN0OiBzdHJpbmcgPSBcInVlbGxcIjtcblx0QElucHV0KCkgdGVuYW50SWQ6IHN0cmluZyA9IFwiXCI7XG5cdEBJbnB1dCgpIGN1cnJlbnRVc2VyITogVGFzQ3VycmVudFVzZXI7XG5cdEBJbnB1dCgpIG93bmVyVXNlcklkcyE6IG51bWJlcltdO1xuXHRASW5wdXQoKSByZWd1bGFyVXNlcklkczogbnVtYmVyW10gPSBbXTtcblx0QElucHV0KCkgbW9kZXJhdG9yVXNlcklkczogbnVtYmVyW10gPSBbXTtcblx0XG5cdC8qKiBPcHRpb25hbDogSWYgcHJvdmlkZWQsIHNraXBzIHJvb20gY3JlYXRpb24gYW5kIGdvZXMgZGlyZWN0bHkgdG8gZ2V0dGluZyBhIHRva2VuICovXG5cdEBJbnB1dCgpIGV4aXN0aW5nU2Vzc2lvbklkOiBzdHJpbmcgPSBcIlwiO1xuXHRcblx0LyoqIE9wdGlvbmFsOiBDdXN0b20gYnV0dG9uIHRleHQgKi9cblx0QElucHV0KCkgYnV0dG9uVGV4dDogc3RyaW5nID0gXCJJbmljaWFyIFRBU1wiO1xuXHRcblx0cHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xuXHRcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXHRwcml2YXRlIGN1cnJlbnRNb2RhbFJlZjogTmdiTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSB2aWRlb0NhbGxNb2RhbFJlZjogTmdiTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG5cdFx0cHJpdmF0ZSB0YXNTZXJ2aWNlOiBUYXNTZXJ2aWNlXG5cdCkge31cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMub3duZXJVc2VySWRzIHx8IHRoaXMub3duZXJVc2VySWRzLmxlbmd0aCAhPT0gMSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCd0YXMtYnRuOiBvd25lclVzZXJJZHMgaW5wdXQgaXMgcmVxdWlyZWQgYW5kIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSB1c2VyJyk7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIFN1YnNjcmliZSB0byB2aWV3TW9kZSB0byBoYW5kbGUgUGlQIHJldHVyblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2Uudmlld01vZGUkLnN1YnNjcmliZShtb2RlID0+IHtcblx0XHRcdFx0Ly8gUmVvcGVuIHZpZGVvIGNhbGwgbW9kYWwgd2hlbiByZXR1cm5pbmcgZnJvbSBQaVBcblx0XHRcdFx0aWYgKG1vZGUgPT09IFZpZXdNb2RlLkZVTExTQ1JFRU4gJiYgXG5cdFx0XHRcdFx0dGhpcy50YXNTZXJ2aWNlLmlzQ2FsbEFjdGl2ZSgpICYmIFxuXHRcdFx0XHRcdCF0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2Vzc2lvbklkID0gdGhpcy50YXNTZXJ2aWNlLnNlc3Npb25JZDtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudGFzU2VydmljZS50b2tlbjtcblx0XHRcdFx0XHRpZiAoc2Vzc2lvbklkICYmIHRva2VuKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5WaWRlb0NhbGxNb2RhbCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdC8vIFdoZW4gZW50ZXJpbmcgUGlQLCBjbGVhciB0aGUgdmlkZW9DYWxsTW9kYWxSZWYgc2luY2UgbW9kYWwgd2lsbCBjbG9zZVxuXHRcdFx0XHRpZiAobW9kZSA9PT0gVmlld01vZGUuUElQKSB7XG5cdFx0XHRcdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuXHR9XG5cblx0b25DbGljaygpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMudGVuYW50SWQgfHwgIXRoaXMuY3VycmVudFVzZXI/Lm5hbWUpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJUZW5hbnQgSUQgb3IgY3VycmVudCB1c2VyIG5vdCBhdmFpbGFibGVcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5vcGVuV2FpdGluZ1Jvb21Nb2RhbCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvcGVuV2FpdGluZ1Jvb21Nb2RhbCgpOiB2b2lkIHtcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGFzV2FpdGluZ1Jvb21Db21wb25lbnQsIHtcblx0XHRcdHNpemU6IFwibGdcIixcblx0XHRcdHdpbmRvd0NsYXNzOiBcInRhcy13YWl0aW5nLXJvb20tbW9kYWxcIixcblx0XHRcdGJhY2tkcm9wOiBcInN0YXRpY1wiLFxuXHRcdFx0a2V5Ym9hcmQ6IGZhbHNlLFxuXHRcdFx0Y2VudGVyZWQ6IHRydWVcblx0XHR9KTtcblxuXHRcdC8vIFBhc3MgYWxsIG5lY2Vzc2FyeSBpbnB1dHMgdG8gdGhlIHdhaXRpbmcgcm9vbSBjb21wb25lbnRcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5hcHBvaW50bWVudElkID0gdGhpcy5hcHBvaW50bWVudElkO1xuXHRcdHRoaXMuY3VycmVudE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnByb2R1Y3QgPSB0aGlzLnByb2R1Y3Q7XG5cdFx0dGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGVuYW50SWQgPSB0aGlzLnRlbmFudElkO1xuXHRcdHRoaXMuY3VycmVudE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlcjtcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5vd25lclVzZXJJZHMgPSB0aGlzLm93bmVyVXNlcklkcztcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5yZWd1bGFyVXNlcklkcyA9IHRoaXMucmVndWxhclVzZXJJZHM7XG5cdFx0dGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UubW9kZXJhdG9yVXNlcklkcyA9IHRoaXMubW9kZXJhdG9yVXNlcklkcztcblx0XHRcblx0XHQvLyBQYXNzIGV4aXN0aW5nIHNlc3Npb24gSUQgaWYgcHJvdmlkZWRcblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5leGlzdGluZ1Nlc3Npb25JZCA9IHRoaXMuZXhpc3RpbmdTZXNzaW9uSWQ7XG5cblx0XHR0aGlzLmN1cnJlbnRNb2RhbFJlZi5yZXN1bHQudGhlbihcblx0XHRcdCgpID0+IHsgdGhpcy5jdXJyZW50TW9kYWxSZWYgPSBudWxsOyB9LFxuXHRcdFx0KCkgPT4geyB0aGlzLmN1cnJlbnRNb2RhbFJlZiA9IG51bGw7IH1cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBvcGVuVmlkZW9DYWxsTW9kYWwoaXNSZXR1cm5pbmdGcm9tUGlwOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcblx0XHR0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUYXNWaWRlb2NhbGxDb21wb25lbnQsIHtcblx0XHRcdHNpemU6ICd4bCcsXG5cdFx0XHR3aW5kb3dDbGFzczogJ3Rhcy12aWRlby1tb2RhbCcsXG5cdFx0XHRiYWNrZHJvcDogJ3N0YXRpYycsXG5cdFx0XHRrZXlib2FyZDogZmFsc2Vcblx0XHR9KTtcblxuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2Vzc2lvbklkID0gdGhpcy50YXNTZXJ2aWNlLnNlc3Npb25JZDtcblx0XHR0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRva2VuID0gdGhpcy50YXNTZXJ2aWNlLnRva2VuO1xuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNSZXR1cm5pbmdGcm9tUGlwID0gaXNSZXR1cm5pbmdGcm9tUGlwO1xuXG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5yZXN1bHQudGhlbihcblx0XHRcdCgpID0+IHsgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7IH0sXG5cdFx0XHQoKSA9PiB7IHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSBudWxsOyB9XG5cdFx0KTtcblx0fVxufVxuIiwiPGJ1dHRvblxuXHR0eXBlPVwiYnV0dG9uXCJcblx0Y2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGFzLWJ0blwiXG5cdChjbGljayk9XCJvbkNsaWNrKClcIlxuXHRbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbj5cblx0PGkgY2xhc3M9XCJmYSBmYS12aWRlby1jYW1lcmFcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj48L2k+XG5cdDxzcGFuICpuZ0lmPVwiIWlzTG9hZGluZ1wiPiB7eyBidXR0b25UZXh0IH19PC9zcGFuPlxuXHQ8c3BhbiAqbmdJZj1cImlzTG9hZGluZ1wiPiBQcm9jZXNzaW5nLi4uPC9zcGFuPlxuPC9idXR0b24+XG4iXX0=
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWJ0bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBRUwsV0FBVyxFQUNYLFFBQVEsRUFDUixlQUFlLEdBQ2hCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7O0FBUWpGLE1BQU0sT0FBTyxrQkFBa0I7SUF3RDdCLFlBQ1UsWUFBc0IsRUFDdEIsVUFBc0I7UUFEdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXpEaEMseUJBQXlCO1FBQ2hCLGFBQVEsR0FBZ0IsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUd4QyxpQkFBWSxHQUFvQixlQUFlLENBQUMsSUFBSSxDQUFDO1FBSzlELHNCQUFzQjtRQUNiLFlBQU8sR0FBdUIsU0FBUyxDQUFDO1FBQ3hDLGdCQUFXLEdBQVcsYUFBYSxDQUFDO1FBRXRDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFekIscUJBQXFCO1FBQ2QscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUN4QixlQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsNkNBQTZDO1FBRWhFLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUF1QixJQUFJLENBQUM7UUFDM0Msc0JBQWlCLEdBQXVCLElBQUksQ0FBQztRQUM3QywwQkFBcUIsR0FBMEMsSUFBSSxDQUFDO1FBQzNELDRCQUF1QixHQUFHLEtBQUssQ0FBQyxDQUFDLGFBQWE7SUFpQzVELENBQUM7SUEvQkosb0RBQW9EO0lBQ3BELElBQVcsWUFBWTtRQUNyQixPQUFPLENBQ0wsSUFBSSxDQUFDLFlBQVksS0FBSyxlQUFlLENBQUMsVUFBVTtZQUNoRCxJQUFJLENBQUMsWUFBWSxLQUFLLGVBQWUsQ0FBQyxhQUFhO1lBQ25ELElBQUksQ0FBQyxZQUFZLEtBQUssZUFBZSxDQUFDLE9BQU8sQ0FDOUMsQ0FBQztJQUNKLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELElBQVcsY0FBYztRQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsSUFBSSw4QkFBOEIsQ0FBQztTQUNsRTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU8sd0NBQXdDLENBQUM7U0FDakQ7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFPRCxRQUFRO1FBQ04sNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQyx3RUFBd0U7WUFDeEUsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4Qix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLDBCQUEwQjtRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUM1QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVc7UUFDakIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUM7WUFDbEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDWCxJQUFJLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDdEIsb0ZBQW9GO2dCQUNwRixtREFBbUQ7Z0JBQ25ELE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBUTtvQkFDVCxDQUFDLFFBQVEsQ0FBQyxPQUFPO29CQUNqQixRQUFRLEVBQUUsRUFBRSxLQUFLLEtBQUs7b0JBQ3RCLFFBQVEsRUFBRSxNQUFNLElBQUksR0FBRztvQkFDdkIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsUUFBUSxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQztnQkFFL0QsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7b0JBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksUUFBUSxFQUFFLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQztpQkFDcEc7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7b0JBQzdCLHNDQUFzQztvQkFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUM7aUJBQ3ZEO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQztZQUMzRixDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDM0MsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ3JFLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsS0FBSztZQUNmLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUV0RSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzlCLEdBQUcsRUFBRTtZQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxxQkFBOEIsS0FBSztRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDckUsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDL0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUN2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDMUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBRWpGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNoQyxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7Z0hBck5VLGtCQUFrQjtvR0FBbEIsa0JBQWtCLG1PQ2xCL0IsbWpCQWtCQTs0RkRBYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsU0FBUzt3SEFNVixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JNb2RhbCwgTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFRhc0N1cnJlbnRVc2VyLFxuICBUYXNSb29tVHlwZSxcbiAgVmlld01vZGUsXG4gIFRhc0J1c2luZXNzUm9sZSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudCB9IGZyb20gJy4uL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzVmlkZW9jYWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFzLXZpZGVvY2FsbC90YXMtdmlkZW9jYWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXMtYnRuJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhcy1idG4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YXMtYnRuLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhc0J1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gU3RhdHVzIGVuZHBvaW50IHBhcmFtc1xuICBASW5wdXQoKSByb29tVHlwZTogVGFzUm9vbVR5cGUgPSBUYXNSb29tVHlwZS5UQVM7XG4gIEBJbnB1dCgpIGVudGl0eUlkITogbnVtYmVyO1xuICBASW5wdXQoKSB0ZW5hbnQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVI7XG5cbiAgLy8gVXNlciBpbmZvIGZvciB0b2tlbiByZXF1ZXN0XG4gIEBJbnB1dCgpIGN1cnJlbnRVc2VyITogVGFzQ3VycmVudFVzZXI7XG5cbiAgLy8gU3R5bGUgY3VzdG9taXphdGlvblxuICBASW5wdXQoKSB2YXJpYW50OiAnZGVmYXVsdCcgfCAndGVhbCcgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIGJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnSW5pY2lhciBUQVMnO1xuXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcblxuICAvLyBTdGF0dXMgY2hlY2sgc3RhdGVcbiAgcHVibGljIGlzQ2hlY2tpbmdTdGF0dXMgPSBmYWxzZTtcbiAgcHVibGljIGlzU3RhdHVzRXJyb3IgPSBmYWxzZTtcbiAgcHVibGljIHN0YXR1c0Vycm9yTWVzc2FnZSA9ICcnO1xuICBwdWJsaWMgaXNKb2luYWJsZSA9IGZhbHNlOyAvLyBUcmFja3Mgam9pbmFibGUgZmllbGQgZnJvbSBzdGF0dXMgcmVzcG9uc2VcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgY3VycmVudE1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHZpZGVvQ2FsbE1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0YXR1c1BvbGxpbmdJbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgU1RBVFVTX1BPTExfSU5URVJWQUxfTVMgPSAzMDAwMDsgLy8gMzAgc2Vjb25kc1xuXG4gIC8qKiBXaGV0aGVyIHVzZXIgaXMgYmFja29mZmljZSAob3IgYWRtaW4vbWFuYWdlcikgKi9cbiAgcHVibGljIGdldCBpc0JhY2tvZmZpY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYnVzaW5lc3NSb2xlID09PSBUYXNCdXNpbmVzc1JvbGUuQkFDS09GRklDRSB8fFxuICAgICAgdGhpcy5idXNpbmVzc1JvbGUgPT09IFRhc0J1c2luZXNzUm9sZS5BRE1JTl9NQU5BR0VSIHx8XG4gICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVGFzQnVzaW5lc3NSb2xlLk1BTkFHRVJcbiAgICApO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgKi9cbiAgcHVibGljIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZyB8fCB0aGlzLmlzU3RhdHVzRXJyb3IgfHwgIXRoaXMuaXNKb2luYWJsZTtcbiAgfVxuXG4gIC8qKiBSZWFzb24gd2h5IHRoZSBidXR0b24gaXMgZGlzYWJsZWQgKGZvciB0b29sdGlwKSAqL1xuICBwdWJsaWMgZ2V0IGRpc2FibGVkUmVhc29uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU3RhdHVzRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1c0Vycm9yTWVzc2FnZSB8fCAnRXJyb3IgYWwgdmVyaWZpY2FyIGVsIGVzdGFkbyc7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0pvaW5hYmxlKSB7XG4gICAgICByZXR1cm4gJ1RvZGF2w61hIG5vIGVzIGVsIGhvcmFyaW8gZGUgbGEgbGxhbWFkYSc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcbiAgICBwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFN1YnNjcmliZSB0byB2aWV3TW9kZSB0byBoYW5kbGUgUGlQIHJldHVyblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2Uudmlld01vZGUkLnN1YnNjcmliZSgobW9kZSkgPT4ge1xuICAgICAgICAvLyBXaGVuIGVudGVyaW5nIFBpUCwgY2xlYXIgdGhlIHZpZGVvQ2FsbE1vZGFsUmVmIHNpbmNlIG1vZGFsIHdpbGwgY2xvc2VcbiAgICAgICAgaWYgKG1vZGUgPT09IFZpZXdNb2RlLlBJUCkge1xuICAgICAgICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTdGFydCBzdGF0dXMgY2hlY2tpbmdcbiAgICB0aGlzLnN0YXJ0U3RhdHVzUG9sbGluZygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdG9wU3RhdHVzUG9sbGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBvbGxpbmcgc3RhdHVzIGV2ZXJ5IDMwIHNlY29uZHNcbiAgICovXG4gIHByaXZhdGUgc3RhcnRTdGF0dXNQb2xsaW5nKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWwgc3RhdHVzIGNoZWNrXG4gICAgdGhpcy5jaGVja1N0YXR1cygpO1xuXG4gICAgLy8gU2V0IHVwIHBlcmlvZGljIHBvbGxpbmdcbiAgICB0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2hlY2tTdGF0dXMoKTtcbiAgICB9LCB0aGlzLlNUQVRVU19QT0xMX0lOVEVSVkFMX01TKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHN0YXR1cyBwb2xsaW5nXG4gICAqL1xuICBwcml2YXRlIHN0b3BTdGF0dXNQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHN0YXR1cyBlbmRwb2ludCB0byBkZXRlcm1pbmUgaWYgYnV0dG9uIHNob3VsZCBiZSBlbmFibGVkXG4gICAqL1xuICBwcml2YXRlIGNoZWNrU3RhdHVzKCk6IHZvaWQge1xuICAgIC8vIFNraXAgaWYgcmVxdWlyZWQgaW5wdXRzIGFyZSBub3QgYXZhaWxhYmxlXG4gICAgaWYgKCF0aGlzLnRlbmFudCB8fCAhdGhpcy5lbnRpdHlJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNDaGVja2luZ1N0YXR1cyA9IHRydWU7XG4gICAgdGhpcy5zdGF0dXNFcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2UuZ2V0UHJveHlWaWRlb1N0YXR1cyh7XG4gICAgICAgIHJvb21UeXBlOiB0aGlzLnJvb21UeXBlLFxuICAgICAgICBlbnRpdHlJZDogdGhpcy5lbnRpdHlJZCxcbiAgICAgICAgdGVuYW50OiB0aGlzLnRlbmFudCxcbiAgICAgICAgYnVzaW5lc3NSb2xlOiB0aGlzLmJ1c2luZXNzUm9sZSxcbiAgICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgaXMgYWN0dWFsbHkgYW4gZXJyb3IgKHNvbWUgSFRUUCBhZGFwdGVycyByZXR1cm4gZXJyb3JzIGluIG5leHQpXG4gICAgICAgICAgLy8gQWxzbyBjaGVjayBmb3IgdW5kZWZpbmVkL251bGwgb3IgbWlzc2luZyBjb250ZW50XG4gICAgICAgICAgY29uc3QgaXNFcnJvclJlc3BvbnNlID0gIXJlc3BvbnNlIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFyZXNwb25zZS5jb250ZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U/Lm9rID09PSBmYWxzZSB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZT8uc3RhdHVzID49IDQwMCB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZT8uZXJyb3IgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZT8ubmFtZSA9PT0gJ0h0dHBFcnJvclJlc3BvbnNlJztcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoaXNFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLmlzQ2hlY2tpbmdTdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNTdGF0dXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0Vycm9yTWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvcj8ubWVzc2FnZSB8fCByZXNwb25zZT8ubWVzc2FnZSB8fCAnRXJyb3IgY2hlY2tpbmcgc3RhdHVzJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0NoZWNraW5nU3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzU3RhdHVzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzRXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAvLyBVcGRhdGUgam9pbmFibGUgc3RhdGUgZnJvbSByZXNwb25zZVxuICAgICAgICAgICAgdGhpcy5pc0pvaW5hYmxlID0gcmVzcG9uc2UuY29udGVudD8uam9pbmFibGUgPz8gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDaGVja2luZ1N0YXR1cyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNTdGF0dXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zdGF0dXNFcnJvck1lc3NhZ2UgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCAnRXJyb3IgY2hlY2tpbmcgc3RhdHVzJztcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRlbmFudCB8fCAhdGhpcy5jdXJyZW50VXNlcj8ubmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5lbnRpdHlJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlbldhaXRpbmdSb29tTW9kYWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbldhaXRpbmdSb29tTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50TW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRhc1dhaXRpbmdSb29tQ29tcG9uZW50LCB7XG4gICAgICBzaXplOiAnbGcnLFxuICAgICAgd2luZG93Q2xhc3M6ICd0YXMtd2FpdGluZy1yb29tLW1vZGFsJyxcbiAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gUGFzcyBhbGwgbmVjZXNzYXJ5IGlucHV0cyB0byB0aGUgd2FpdGluZyByb29tIGNvbXBvbmVudFxuICAgIHRoaXMuY3VycmVudE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnJvb21UeXBlID0gdGhpcy5yb29tVHlwZTtcbiAgICB0aGlzLmN1cnJlbnRNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5lbnRpdHlJZCA9IHRoaXMuZW50aXR5SWQ7XG4gICAgdGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGVuYW50ID0gdGhpcy50ZW5hbnQ7XG4gICAgdGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuYnVzaW5lc3NSb2xlID0gdGhpcy5idXNpbmVzc1JvbGU7XG4gICAgdGhpcy5jdXJyZW50TW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY3VycmVudFVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyO1xuXG4gICAgdGhpcy5jdXJyZW50TW9kYWxSZWYucmVzdWx0LnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmlkZW9DYWxsTW9kYWwoaXNSZXR1cm5pbmdGcm9tUGlwOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUYXNWaWRlb2NhbGxDb21wb25lbnQsIHtcbiAgICAgIHNpemU6ICd4bCcsXG4gICAgICB3aW5kb3dDbGFzczogJ3Rhcy12aWRlby1tb2RhbCcsXG4gICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlc3Npb25JZCA9IHRoaXMudGFzU2VydmljZS5zZXNzaW9uSWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b2tlbiA9IHRoaXMudGFzU2VydmljZS50b2tlbjtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmJ1c2luZXNzUm9sZSA9IHRoaXMuYnVzaW5lc3NSb2xlO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNSZXR1cm5pbmdGcm9tUGlwID0gaXNSZXR1cm5pbmdGcm9tUGlwO1xuXG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5yZXN1bHQudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8c3BhblxuICBbbmdiVG9vbHRpcF09XCJpc0Rpc2FibGVkICYmIGRpc2FibGVkUmVhc29uID8gZGlzYWJsZWRSZWFzb24gOiBudWxsXCJcbiAgY29udGFpbmVyPVwiYm9keVwiXG4gIHBsYWNlbWVudD1cInRvcFwiXG4gIHRvb2x0aXBDbGFzcz1cInRhcy1idG4tdG9vbHRpcFwiXG4+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0YXMtYnRuXCJcbiAgICBbY2xhc3MudGFzLWJ0bi0tdGVhbF09XCJ2YXJpYW50ID09PSAndGVhbCdcIlxuICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgPlxuICAgIDxpIGNsYXNzPVwiZmEgZmEtdmlkZW8tY2FtZXJhXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+PC9pPlxuICAgIDxzcGFuICpuZ0lmPVwiIWlzTG9hZGluZ1wiPnt7IGJ1dHRvbkxhYmVsIH19PC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiaXNMb2FkaW5nXCI+UHJvY2Vzc2luZy4uLjwvc3Bhbj5cbiAgPC9idXR0b24+XG48L3NwYW4+XG4iXX0=
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { CallState, ViewMode } from '../../interfaces/tas.interfaces';
|
|
3
|
+
import { TasVideocallComponent } from '../tas-videocall/tas-videocall.component';
|
|
3
4
|
import { Subscription } from 'rxjs';
|
|
4
5
|
import interact from 'interactjs';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../../services/tas.service";
|
|
8
|
+
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
7
9
|
export class TasFloatingCallComponent {
|
|
8
|
-
constructor(tasService) {
|
|
10
|
+
constructor(tasService, modalService) {
|
|
9
11
|
this.tasService = tasService;
|
|
12
|
+
this.modalService = modalService;
|
|
10
13
|
this.isVisible = false;
|
|
11
14
|
this.isMuted = false;
|
|
12
15
|
this.subscriptions = new Subscription();
|
|
16
|
+
this.videoCallModalRef = null;
|
|
13
17
|
// Margin from screen edges (in pixels)
|
|
14
18
|
this.PIP_MARGIN = 20;
|
|
15
19
|
}
|
|
@@ -22,6 +26,7 @@ export class TasFloatingCallComponent {
|
|
|
22
26
|
}
|
|
23
27
|
// Public Methods
|
|
24
28
|
onExpand() {
|
|
29
|
+
this.openVideoCallModal(true);
|
|
25
30
|
this.tasService.exitPipMode();
|
|
26
31
|
}
|
|
27
32
|
onHangUp() {
|
|
@@ -33,23 +38,45 @@ export class TasFloatingCallComponent {
|
|
|
33
38
|
// Private Methods
|
|
34
39
|
setupSubscriptions() {
|
|
35
40
|
// Call state subscription
|
|
36
|
-
this.subscriptions.add(this.tasService.callState$.subscribe(state => {
|
|
41
|
+
this.subscriptions.add(this.tasService.callState$.subscribe((state) => {
|
|
37
42
|
if (state === CallState.DISCONNECTED) {
|
|
38
43
|
this.isVisible = false;
|
|
39
44
|
}
|
|
40
45
|
}));
|
|
41
46
|
// View mode subscription
|
|
42
|
-
this.subscriptions.add(this.tasService.viewMode$.subscribe(mode => {
|
|
47
|
+
this.subscriptions.add(this.tasService.viewMode$.subscribe((mode) => {
|
|
43
48
|
this.isVisible = mode === ViewMode.PIP && this.tasService.isCallActive();
|
|
44
49
|
if (this.isVisible) {
|
|
45
50
|
setTimeout(() => this.initInteract(), 100);
|
|
51
|
+
// Clear modal ref if we enter PiP mode (modal closes itself)
|
|
52
|
+
this.videoCallModalRef = null;
|
|
46
53
|
}
|
|
47
54
|
}));
|
|
48
55
|
// Mute state subscription
|
|
49
|
-
this.subscriptions.add(this.tasService.isMuted$.subscribe(muted => {
|
|
56
|
+
this.subscriptions.add(this.tasService.isMuted$.subscribe((muted) => {
|
|
50
57
|
this.isMuted = muted;
|
|
51
58
|
}));
|
|
52
59
|
}
|
|
60
|
+
openVideoCallModal(isReturningFromPip = false) {
|
|
61
|
+
if (this.videoCallModalRef) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this.videoCallModalRef = this.modalService.open(TasVideocallComponent, {
|
|
65
|
+
size: 'xl',
|
|
66
|
+
windowClass: 'tas-video-modal',
|
|
67
|
+
backdrop: 'static',
|
|
68
|
+
keyboard: false,
|
|
69
|
+
});
|
|
70
|
+
this.videoCallModalRef.componentInstance.sessionId = this.tasService.sessionId;
|
|
71
|
+
this.videoCallModalRef.componentInstance.token = this.tasService.token;
|
|
72
|
+
this.videoCallModalRef.componentInstance.businessRole = this.tasService.businessRole;
|
|
73
|
+
this.videoCallModalRef.componentInstance.isReturningFromPip = isReturningFromPip;
|
|
74
|
+
this.videoCallModalRef.result.then(() => {
|
|
75
|
+
this.videoCallModalRef = null;
|
|
76
|
+
}, () => {
|
|
77
|
+
this.videoCallModalRef = null;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
53
80
|
initInteract() {
|
|
54
81
|
interact('.tas-floating-container').unset();
|
|
55
82
|
// Create restriction area with margin
|
|
@@ -60,17 +87,15 @@ export class TasFloatingCallComponent {
|
|
|
60
87
|
left: margin,
|
|
61
88
|
top: margin,
|
|
62
89
|
right: window.innerWidth - margin,
|
|
63
|
-
bottom: window.innerHeight - margin
|
|
90
|
+
bottom: window.innerHeight - margin,
|
|
64
91
|
};
|
|
65
92
|
},
|
|
66
|
-
elementRect: { left: 0, right: 1, top: 0, bottom: 1 }
|
|
93
|
+
elementRect: { left: 0, right: 1, top: 0, bottom: 1 },
|
|
67
94
|
};
|
|
68
95
|
interact('.tas-floating-container')
|
|
69
96
|
.draggable({
|
|
70
97
|
inertia: true,
|
|
71
|
-
modifiers: [
|
|
72
|
-
interact.modifiers.restrict(restrictToBodyWithMargin)
|
|
73
|
-
],
|
|
98
|
+
modifiers: [interact.modifiers.restrict(restrictToBodyWithMargin)],
|
|
74
99
|
autoScroll: false,
|
|
75
100
|
listeners: {
|
|
76
101
|
move: (event) => {
|
|
@@ -80,8 +105,8 @@ export class TasFloatingCallComponent {
|
|
|
80
105
|
target.style.transform = `translate(${x}px, ${y}px)`;
|
|
81
106
|
target.setAttribute('data-x', String(x));
|
|
82
107
|
target.setAttribute('data-y', String(y));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
108
|
+
},
|
|
109
|
+
},
|
|
85
110
|
})
|
|
86
111
|
.resizable({
|
|
87
112
|
edges: { left: false, right: true, bottom: true, top: false },
|
|
@@ -99,7 +124,7 @@ export class TasFloatingCallComponent {
|
|
|
99
124
|
target.style.transform = `translate(${x}px, ${y}px)`;
|
|
100
125
|
target.setAttribute('data-x', String(x));
|
|
101
126
|
target.setAttribute('data-y', String(y));
|
|
102
|
-
}
|
|
127
|
+
},
|
|
103
128
|
},
|
|
104
129
|
modifiers: [
|
|
105
130
|
interact.modifiers.restrictEdges({
|
|
@@ -107,23 +132,23 @@ export class TasFloatingCallComponent {
|
|
|
107
132
|
left: margin,
|
|
108
133
|
top: margin,
|
|
109
134
|
right: window.innerWidth - margin,
|
|
110
|
-
bottom: window.innerHeight - margin
|
|
111
|
-
}
|
|
135
|
+
bottom: window.innerHeight - margin,
|
|
136
|
+
},
|
|
112
137
|
}),
|
|
113
138
|
interact.modifiers.restrictSize({
|
|
114
139
|
min: { width: 200, height: 130 },
|
|
115
|
-
max: { width: 500, height: 350 }
|
|
140
|
+
max: { width: 500, height: 350 },
|
|
116
141
|
}),
|
|
117
|
-
interact.modifiers.aspectRatio({ ratio: 'preserve' })
|
|
142
|
+
interact.modifiers.aspectRatio({ ratio: 'preserve' }),
|
|
118
143
|
],
|
|
119
|
-
inertia: true
|
|
144
|
+
inertia: true,
|
|
120
145
|
});
|
|
121
146
|
}
|
|
122
147
|
}
|
|
123
|
-
TasFloatingCallComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
124
|
-
TasFloatingCallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
148
|
+
TasFloatingCallComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasFloatingCallComponent, deps: [{ token: i1.TasService }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
+
TasFloatingCallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasFloatingCallComponent, selector: "tas-floating-call", ngImport: i0, template: "<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n <!-- Video content area - shows main video only -->\n <div class=\"floating-content\">\n <!-- Main video container (subscriber if available, otherwise publisher) -->\n <div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n <!-- Bottom controls -->\n <div class=\"floating-controls\">\n <button\n class=\"action-btn expand-btn\"\n (click)=\"onExpand()\"\n title=\"Expand to fullscreen\"\n >\n <i class=\"fa fa-expand\"></i>\n </button>\n <button\n class=\"action-btn mute-btn\"\n [class.muted]=\"isMuted\"\n (click)=\"toggleMute()\"\n [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\"\n >\n <i\n class=\"fa\"\n [class.fa-microphone]=\"!isMuted\"\n [class.fa-microphone-slash]=\"isMuted\"\n ></i>\n </button>\n <button class=\"action-btn hangup-btn\" (click)=\"onHangUp()\" title=\"Hang up call\">\n <i class=\"fa fa-phone\" style=\"transform: rotate(135deg)\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".tas-floating-container{position:fixed;bottom:20px;right:20px;width:280px;height:180px;background:#000;border-radius:12px;box-shadow:0 8px 32px #00000080;z-index:9999;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;transition:opacity .3s ease,visibility .3s ease,box-shadow .2s ease;opacity:0;visibility:hidden;pointer-events:none}.tas-floating-container.visible{opacity:1;visibility:visible;pointer-events:auto}.tas-floating-container:hover{box-shadow:0 8px 32px #00000080,0 0 0 2px #ffffff4d}.floating-content{position:relative;width:100%;height:100%;overflow:hidden}.pip-main-video{position:absolute;top:0;left:0;width:100%;height:100%;background:#000}.pip-main-video ::ng-deep video{width:100%;height:100%;object-fit:cover}.pip-main-video ::ng-deep .OT_subscriber,.pip-main-video ::ng-deep .OT_publisher{width:100%!important;height:100%!important}.pip-main-video ::ng-deep .OT_edge-bar-item,.pip-main-video ::ng-deep .OT_mute,.pip-main-video ::ng-deep .OT_audio-level-meter,.pip-main-video ::ng-deep .OT_bar,.pip-main-video ::ng-deep .OT_name{display:none!important}.floating-controls{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;gap:12px;padding:6px 14px;background:rgba(0,0,0,.7);border-radius:24px;backdrop-filter:blur(8px);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.tas-floating-container:hover .floating-controls{opacity:1;visibility:visible}.action-btn{width:32px;height:32px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px;transition:all .2s ease}.action-btn.expand-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.expand-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn.muted{background:#f39c12;color:#fff}.action-btn.mute-btn.muted:hover{background:#e67e22}.action-btn.hangup-btn{background:#dc3545;color:#fff}.action-btn.hangup-btn:hover{background:#c82333;transform:scale(1.1)}\n"] });
|
|
150
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasFloatingCallComponent, decorators: [{
|
|
126
151
|
type: Component,
|
|
127
|
-
args: [{ selector: 'tas-floating-call', template: "<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n
|
|
128
|
-
}], ctorParameters: function () { return [{ type: i1.TasService }]; } });
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFzLXVlbGwtc2RrL3NyYy9saWIvY29tcG9uZW50cy90YXMtZmxvYXRpbmctY2FsbC90YXMtZmxvYXRpbmctY2FsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1mbG9hdGluZy1jYWxsL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7OztBQU9sQyxNQUFNLE9BQU8sd0JBQXdCO0lBT3BDLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFMbkMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWYsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBdUQzQyx1Q0FBdUM7UUFDdEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztJQXREYSxDQUFDO0lBRS9DLFFBQVE7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixRQUFRO1FBQ1AsSUFBSSxDQUFD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SyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDckQsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2FBQ0Q7WUFDRCxTQUFTLEVBQUU7Z0JBQ1YsUUFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7b0JBQ2hDLEtBQUssRUFBRTt3QkFDTixJQUFJLEVBQUUsTUFBTTt3QkFDWixHQUFHLEVBQUUsTUFBTTt3QkFDWCxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNO3dCQUNqQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNO3FCQUNuQztpQkFDRCxDQUFDO2dCQUNGLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO29CQUMvQixHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7b0JBQ2hDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtpQkFDaEMsQ0FBQztnQkFDRixRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUNyRDtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7cUhBeklXLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLHlEQ1hyQywrZ0NBcUJBOzJGRFZhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsbFN0YXRlLCBWaWV3TW9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGFzLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgaW50ZXJhY3QgZnJvbSAnaW50ZXJhY3Rqcyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3Rhcy1mbG9hdGluZy1jYWxsJyxcblx0dGVtcGxhdGVVcmw6ICcuL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vdGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYXNGbG9hdGluZ0NhbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cblx0cHVibGljIGlzVmlzaWJsZSA9IGZhbHNlO1xuXHRwdWJsaWMgaXNNdXRlZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2UpIHsgfVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuc2V0dXBTdWJzY3JpcHRpb25zKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcblx0XHRpbnRlcmFjdCgnLnRhcy1mbG9hdGluZy1jb250YWluZXInKS51bnNldCgpO1xuXHR9XG5cblx0Ly8gUHVibGljIE1ldGhvZHNcblx0b25FeHBhbmQoKTogdm9pZCB7XG5cdFx0dGhpcy50YXNTZXJ2aWNlLmV4aXRQaXBNb2RlKCk7XG5cdH1cblxuXHRvbkhhbmdVcCgpOiB2b2lkIHtcblx0XHR0aGlzLnRhc1NlcnZpY2UuZGlzY29ubmVjdFNlc3Npb24oKTtcblx0fVxuXG5cdHRvZ2dsZU11dGUoKTogdm9pZCB7XG5cdFx0dGhpcy50YXNTZXJ2aWNlLnRvZ2dsZU11dGUoKTtcblx0fVxuXG5cdC8vIFByaXZhdGUgTWV0aG9kc1xuXHRwcml2YXRlIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcblx0XHQvLyBDYWxsIHN0YXRlIHN1YnNjcmlwdGlvblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuY2FsbFN0YXRlJC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuXHRcdFx0XHRpZiAoc3RhdGUgPT09IENhbGxTdGF0ZS5ESVNDT05ORUNURUQpIHtcblx0XHRcdFx0XHR0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvLyBWaWV3IG1vZGUgc3Vic2NyaXB0aW9uXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLmFkZChcblx0XHRcdHRoaXMudGFzU2VydmljZS52aWV3TW9kZSQuc3Vic2NyaWJlKG1vZGUgPT4ge1xuXHRcdFx0XHR0aGlzLmlzVmlzaWJsZSA9IG1vZGUgPT09IFZpZXdNb2RlLlBJUCAmJiB0aGlzLnRhc1NlcnZpY2UuaXNDYWxsQWN0aXZlKCk7XG5cdFx0XHRcdGlmICh0aGlzLmlzVmlzaWJsZSkge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbml0SW50ZXJhY3QoKSwgMTAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0Ly8gTXV0ZSBzdGF0ZSBzdWJzY3JpcHRpb25cblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuXHRcdFx0dGhpcy50YXNTZXJ2aWNlLmlzTXV0ZWQkLnN1YnNjcmliZShtdXRlZCA9PiB7XG5cdFx0XHRcdHRoaXMuaXNNdXRlZCA9IG11dGVkO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0Ly8gTWFyZ2luIGZyb20gc2NyZWVuIGVkZ2VzIChpbiBwaXhlbHMpXG5cdHByaXZhdGUgcmVhZG9ubHkgUElQX01BUkdJTiA9IDIwO1xuXG5cdHByaXZhdGUgaW5pdEludGVyYWN0KCk6IHZvaWQge1xuXHRcdGludGVyYWN0KCcudGFzLWZsb2F0aW5nLWNvbnRhaW5lcicpLnVuc2V0KCk7XG5cblx0XHQvLyBDcmVhdGUgcmVzdHJpY3Rpb24gYXJlYSB3aXRoIG1hcmdpblxuXHRcdGNvbnN0IG1hcmdpbiA9IHRoaXMuUElQX01BUkdJTjtcblx0XHRjb25zdCByZXN0cmljdFRvQm9keVdpdGhNYXJnaW4gPSB7XG5cdFx0XHRyZXN0cmljdGlvbjogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGxlZnQ6IG1hcmdpbixcblx0XHRcdFx0XHR0b3A6IG1hcmdpbixcblx0XHRcdFx0XHRyaWdodDogd2luZG93LmlubmVyV2lkdGggLSBtYXJnaW4sXG5cdFx0XHRcdFx0Ym90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYXJnaW5cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cdFx0XHRlbGVtZW50UmVjdDogeyBsZWZ0OiAwLCByaWdodDogMSwgdG9wOiAwLCBib3R0b206IDEgfVxuXHRcdH07XG5cblx0XHRpbnRlcmFjdCgnLnRhcy1mbG9hdGluZy1jb250YWluZXInKVxuXHRcdFx0LmRyYWdnYWJsZSh7XG5cdFx0XHRcdGluZXJ0aWE6IHRydWUsXG5cdFx0XHRcdG1vZGlmaWVyczogW1xuXHRcdFx0XHRcdGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdChyZXN0cmljdFRvQm9keVdpdGhNYXJnaW4pXG5cdFx0XHRcdF0sXG5cdFx0XHRcdGF1dG9TY3JvbGw6IGZhbHNlLFxuXHRcdFx0XHRsaXN0ZW5lcnM6IHtcblx0XHRcdFx0XHRtb3ZlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0XHRcdGNvbnN0IHggPSAocGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXgnKSkgfHwgMCkgKyBldmVudC5keDtcblx0XHRcdFx0XHRcdGNvbnN0IHkgPSAocGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXknKSkgfHwgMCkgKyBldmVudC5keTtcblxuXHRcdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYDtcblx0XHRcdFx0XHRcdHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteCcsIFN0cmluZyh4KSk7XG5cdFx0XHRcdFx0XHR0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXknLCBTdHJpbmcoeSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5yZXNpemFibGUoe1xuXHRcdFx0XHRlZGdlczogeyBsZWZ0OiBmYWxzZSwgcmlnaHQ6IHRydWUsIGJvdHRvbTogdHJ1ZSwgdG9wOiBmYWxzZSB9LFxuXHRcdFx0XHRsaXN0ZW5lcnM6IHtcblx0XHRcdFx0XHRtb3ZlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0XHRcdGxldCB4ID0gcGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXgnKSkgfHwgMDtcblx0XHRcdFx0XHRcdGxldCB5ID0gcGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXknKSkgfHwgMDtcblxuXHRcdFx0XHRcdFx0Ly8gVXBkYXRlIGVsZW1lbnQgc2l6ZVxuXHRcdFx0XHRcdFx0dGFyZ2V0LnN0eWxlLndpZHRoID0gYCR7ZXZlbnQucmVjdC53aWR0aH1weGA7XG5cdFx0XHRcdFx0XHR0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7ZXZlbnQucmVjdC5oZWlnaHR9cHhgO1xuXG5cdFx0XHRcdFx0XHQvLyBUcmFuc2xhdGUgd2hlbiByZXNpemluZyBmcm9tIHRvcCBvciBsZWZ0IGVkZ2VzXG5cdFx0XHRcdFx0XHR4ICs9IGV2ZW50LmRlbHRhUmVjdC5sZWZ0O1xuXHRcdFx0XHRcdFx0eSArPSBldmVudC5kZWx0YVJlY3QudG9wO1xuXG5cdFx0XHRcdFx0XHR0YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS14JywgU3RyaW5nKHgpKTtcblx0XHRcdFx0XHRcdHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteScsIFN0cmluZyh5KSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RpZmllcnM6IFtcblx0XHRcdFx0XHRpbnRlcmFjdC5tb2RpZmllcnMucmVzdHJpY3RFZGdlcyh7XG5cdFx0XHRcdFx0XHRvdXRlcjoge1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBtYXJnaW4sXG5cdFx0XHRcdFx0XHRcdHRvcDogbWFyZ2luLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogd2luZG93LmlubmVyV2lkdGggLSBtYXJnaW4sXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogd2luZG93LmlubmVySGVpZ2h0IC0gbWFyZ2luXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0aW50ZXJhY3QubW9kaWZpZXJzLnJlc3RyaWN0U2l6ZSh7XG5cdFx0XHRcdFx0XHRtaW46IHsgd2lkdGg6IDIwMCwgaGVpZ2h0OiAxMzAgfSxcblx0XHRcdFx0XHRcdG1heDogeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDM1MCB9XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0aW50ZXJhY3QubW9kaWZpZXJzLmFzcGVjdFJhdGlvKHsgcmF0aW86ICdwcmVzZXJ2ZScgfSlcblx0XHRcdFx0XSxcblx0XHRcdFx0aW5lcnRpYTogdHJ1ZVxuXHRcdFx0fSk7XG5cdH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cInRhcy1mbG9hdGluZy1jb250YWluZXJcIiBbY2xhc3MudmlzaWJsZV09XCJpc1Zpc2libGVcIj5cblx0PCEtLSBWaWRlbyBjb250ZW50IGFyZWEgLSBzaG93cyBtYWluIHZpZGVvIG9ubHkgLS0+XG5cdDxkaXYgY2xhc3M9XCJmbG9hdGluZy1jb250ZW50XCI+XG5cdFx0PCEtLSBNYWluIHZpZGVvIGNvbnRhaW5lciAoc3Vic2NyaWJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBwdWJsaXNoZXIpIC0tPlxuXHRcdDxkaXYgaWQ9XCJwaXAtbWFpbi12aWRlb1wiIGNsYXNzPVwicGlwLW1haW4tdmlkZW9cIj48L2Rpdj5cblxuXHRcdDwhLS0gQm90dG9tIGNvbnRyb2xzIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJmbG9hdGluZy1jb250cm9sc1wiPlxuXHRcdFx0PGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gZXhwYW5kLWJ0blwiIChjbGljayk9XCJvbkV4cGFuZCgpXCIgdGl0bGU9XCJFeHBhbmQgdG8gZnVsbHNjcmVlblwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiPjwvaT5cblx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PGJ1dHRvbiBjbGFzcz1cImFjdGlvbi1idG4gbXV0ZS1idG5cIiBbY2xhc3MubXV0ZWRdPVwiaXNNdXRlZFwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbdGl0bGVdPVwiaXNNdXRlZCA/ICdVbm11dGUgbWljcm9waG9uZScgOiAnTXV0ZSBtaWNyb3Bob25lJ1wiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhXCIgW2NsYXNzLmZhLW1pY3JvcGhvbmVdPVwiIWlzTXV0ZWRcIiBbY2xhc3MuZmEtbWljcm9waG9uZS1zbGFzaF09XCJpc011dGVkXCI+PC9pPlxuXHRcdFx0PC9idXR0b24+XG5cdFx0XHQ8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBoYW5ndXAtYnRuXCIgKGNsaWNrKT1cIm9uSGFuZ1VwKClcIiB0aXRsZT1cIkhhbmcgdXAgY2FsbFwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXBob25lXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpO1wiPjwvaT5cblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
152
|
+
args: [{ selector: 'tas-floating-call', template: "<div class=\"tas-floating-container\" [class.visible]=\"isVisible\">\n <!-- Video content area - shows main video only -->\n <div class=\"floating-content\">\n <!-- Main video container (subscriber if available, otherwise publisher) -->\n <div id=\"pip-main-video\" class=\"pip-main-video\"></div>\n\n <!-- Bottom controls -->\n <div class=\"floating-controls\">\n <button\n class=\"action-btn expand-btn\"\n (click)=\"onExpand()\"\n title=\"Expand to fullscreen\"\n >\n <i class=\"fa fa-expand\"></i>\n </button>\n <button\n class=\"action-btn mute-btn\"\n [class.muted]=\"isMuted\"\n (click)=\"toggleMute()\"\n [title]=\"isMuted ? 'Unmute microphone' : 'Mute microphone'\"\n >\n <i\n class=\"fa\"\n [class.fa-microphone]=\"!isMuted\"\n [class.fa-microphone-slash]=\"isMuted\"\n ></i>\n </button>\n <button class=\"action-btn hangup-btn\" (click)=\"onHangUp()\" title=\"Hang up call\">\n <i class=\"fa fa-phone\" style=\"transform: rotate(135deg)\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".tas-floating-container{position:fixed;bottom:20px;right:20px;width:280px;height:180px;background:#000;border-radius:12px;box-shadow:0 8px 32px #00000080;z-index:9999;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;transition:opacity .3s ease,visibility .3s ease,box-shadow .2s ease;opacity:0;visibility:hidden;pointer-events:none}.tas-floating-container.visible{opacity:1;visibility:visible;pointer-events:auto}.tas-floating-container:hover{box-shadow:0 8px 32px #00000080,0 0 0 2px #ffffff4d}.floating-content{position:relative;width:100%;height:100%;overflow:hidden}.pip-main-video{position:absolute;top:0;left:0;width:100%;height:100%;background:#000}.pip-main-video ::ng-deep video{width:100%;height:100%;object-fit:cover}.pip-main-video ::ng-deep .OT_subscriber,.pip-main-video ::ng-deep .OT_publisher{width:100%!important;height:100%!important}.pip-main-video ::ng-deep .OT_edge-bar-item,.pip-main-video ::ng-deep .OT_mute,.pip-main-video ::ng-deep .OT_audio-level-meter,.pip-main-video ::ng-deep .OT_bar,.pip-main-video ::ng-deep .OT_name{display:none!important}.floating-controls{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;gap:12px;padding:6px 14px;background:rgba(0,0,0,.7);border-radius:24px;backdrop-filter:blur(8px);opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease}.tas-floating-container:hover .floating-controls{opacity:1;visibility:visible}.action-btn{width:32px;height:32px;border:none;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:13px;transition:all .2s ease}.action-btn.expand-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.expand-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn{background:rgba(255,255,255,.2);color:#fff}.action-btn.mute-btn:hover{background:rgba(255,255,255,.35);transform:scale(1.1)}.action-btn.mute-btn.muted{background:#f39c12;color:#fff}.action-btn.mute-btn.muted:hover{background:#e67e22}.action-btn.hangup-btn{background:#dc3545;color:#fff}.action-btn.hangup-btn:hover{background:#c82333;transform:scale(1.1)}\n"] }]
|
|
153
|
+
}], ctorParameters: function () { return [{ type: i1.TasService }, { type: i2.NgbModal }]; } });
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFzLXVlbGwtc2RrL3NyYy9saWIvY29tcG9uZW50cy90YXMtZmxvYXRpbmctY2FsbC90YXMtZmxvYXRpbmctY2FsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1mbG9hdGluZy1jYWxsL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7QUFPbEMsTUFBTSxPQUFPLHdCQUF3QjtJQU9uQyxZQUNVLFVBQXNCLEVBQ3RCLFlBQXNCO1FBRHRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFSekIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWYsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUF1QixJQUFJLENBQUM7UUF3RnJELHVDQUF1QztRQUN0QixlQUFVLEdBQUcsRUFBRSxDQUFDO0lBcEY5QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FB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b3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFRhc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5pbXBvcnQgeyBDYWxsU3RhdGUsIFZpZXdNb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUYXNWaWRlb2NhbGxDb21wb25lbnQgfSBmcm9tICcuLi90YXMtdmlkZW9jYWxsL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IGludGVyYWN0IGZyb20gJ2ludGVyYWN0anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXMtZmxvYXRpbmctY2FsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXMtZmxvYXRpbmctY2FsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhc0Zsb2F0aW5nQ2FsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIGlzVmlzaWJsZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNNdXRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSB2aWRlb0NhbGxNb2RhbFJlZjogTmdiTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9ucygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgaW50ZXJhY3QoJy50YXMtZmxvYXRpbmctY29udGFpbmVyJykudW5zZXQoKTtcbiAgfVxuXG4gIC8vIFB1YmxpYyBNZXRob2RzXG4gIG9uRXhwYW5kKCk6IHZvaWQge1xuICAgIHRoaXMub3BlblZpZGVvQ2FsbE1vZGFsKHRydWUpO1xuICAgIHRoaXMudGFzU2VydmljZS5leGl0UGlwTW9kZSgpO1xuICB9XG5cbiAgb25IYW5nVXAoKTogdm9pZCB7XG4gICAgdGhpcy50YXNTZXJ2aWNlLmRpc2Nvbm5lY3RTZXNzaW9uKCk7XG4gIH1cblxuICB0b2dnbGVNdXRlKCk6IHZvaWQge1xuICAgIHRoaXMudGFzU2VydmljZS50b2dnbGVNdXRlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlIE1ldGhvZHNcbiAgcHJpdmF0ZSBzZXR1cFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgLy8gQ2FsbCBzdGF0ZSBzdWJzY3JpcHRpb25cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmNhbGxTdGF0ZSQuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUgPT09IENhbGxTdGF0ZS5ESVNDT05ORUNURUQpIHtcbiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBWaWV3IG1vZGUgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS52aWV3TW9kZSQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gbW9kZSA9PT0gVmlld01vZGUuUElQICYmIHRoaXMudGFzU2VydmljZS5pc0NhbGxBY3RpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRJbnRlcmFjdCgpLCAxMDApO1xuICAgICAgICAgIC8vIENsZWFyIG1vZGFsIHJlZiBpZiB3ZSBlbnRlciBQaVAgbW9kZSAobW9kYWwgY2xvc2VzIGl0c2VsZilcbiAgICAgICAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTXV0ZSBzdGF0ZSBzdWJzY3JpcHRpb25cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmlzTXV0ZWQkLnN1YnNjcmliZSgobXV0ZWQpID0+IHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gbXV0ZWQ7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbChpc1JldHVybmluZ0Zyb21QaXA6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGFzVmlkZW9jYWxsQ29tcG9uZW50LCB7XG4gICAgICBzaXplOiAneGwnLFxuICAgICAgd2luZG93Q2xhc3M6ICd0YXMtdmlkZW8tbW9kYWwnLFxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZXNzaW9uSWQgPSB0aGlzLnRhc1NlcnZpY2Uuc2Vzc2lvbklkO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudG9rZW4gPSB0aGlzLnRhc1NlcnZpY2UudG9rZW47XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5idXNpbmVzc1JvbGUgPSB0aGlzLnRhc1NlcnZpY2UuYnVzaW5lc3NSb2xlO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNSZXR1cm5pbmdGcm9tUGlwID0gaXNSZXR1cm5pbmdGcm9tUGlwO1xuXG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5yZXN1bHQudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gTWFyZ2luIGZyb20gc2NyZWVuIGVkZ2VzIChpbiBwaXhlbHMpXG4gIHByaXZhdGUgcmVhZG9ubHkgUElQX01BUkdJTiA9IDIwO1xuXG4gIHByaXZhdGUgaW5pdEludGVyYWN0KCk6IHZvaWQge1xuICAgIGludGVyYWN0KCcudGFzLWZsb2F0aW5nLWNvbnRhaW5lcicpLnVuc2V0KCk7XG5cbiAgICAvLyBDcmVhdGUgcmVzdHJpY3Rpb24gYXJlYSB3aXRoIG1hcmdpblxuICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuUElQX01BUkdJTjtcbiAgICBjb25zdCByZXN0cmljdFRvQm9keVdpdGhNYXJnaW4gPSB7XG4gICAgICByZXN0cmljdGlvbjogKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxlZnQ6IG1hcmdpbixcbiAgICAgICAgICB0b3A6IG1hcmdpbixcbiAgICAgICAgICByaWdodDogd2luZG93LmlubmVyV2lkdGggLSBtYXJnaW4sXG4gICAgICAgICAgYm90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYXJnaW4sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZWxlbWVudFJlY3Q6IHsgbGVmdDogMCwgcmlnaHQ6IDEsIHRvcDogMCwgYm90dG9tOiAxIH0sXG4gICAgfTtcblxuICAgIGludGVyYWN0KCcudGFzLWZsb2F0aW5nLWNvbnRhaW5lcicpXG4gICAgICAuZHJhZ2dhYmxlKHtcbiAgICAgICAgaW5lcnRpYTogdHJ1ZSxcbiAgICAgICAgbW9kaWZpZXJzOiBbaW50ZXJhY3QubW9kaWZpZXJzLnJlc3RyaWN0KHJlc3RyaWN0VG9Cb2R5V2l0aE1hcmdpbildLFxuICAgICAgICBhdXRvU2Nyb2xsOiBmYWxzZSxcbiAgICAgICAgbGlzdGVuZXJzOiB7XG4gICAgICAgICAgbW92ZTogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBjb25zdCB4ID0gKHBhcnNlRmxvYXQodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS14JykpIHx8IDApICsgZXZlbnQuZHg7XG4gICAgICAgICAgICBjb25zdCB5ID0gKHBhcnNlRmxvYXQodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS15JykpIHx8IDApICsgZXZlbnQuZHk7XG5cbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXgnLCBTdHJpbmcoeCkpO1xuICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS15JywgU3RyaW5nKHkpKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5yZXNpemFibGUoe1xuICAgICAgICBlZGdlczogeyBsZWZ0OiBmYWxzZSwgcmlnaHQ6IHRydWUsIGJvdHRvbTogdHJ1ZSwgdG9wOiBmYWxzZSB9LFxuICAgICAgICBsaXN0ZW5lcnM6IHtcbiAgICAgICAgICBtb3ZlOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgIGxldCB4ID0gcGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXgnKSkgfHwgMDtcbiAgICAgICAgICAgIGxldCB5ID0gcGFyc2VGbG9hdCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXknKSkgfHwgMDtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIGVsZW1lbnQgc2l6ZVxuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLndpZHRoID0gYCR7ZXZlbnQucmVjdC53aWR0aH1weGA7XG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gYCR7ZXZlbnQucmVjdC5oZWlnaHR9cHhgO1xuXG4gICAgICAgICAgICAvLyBUcmFuc2xhdGUgd2hlbiByZXNpemluZyBmcm9tIHRvcCBvciBsZWZ0IGVkZ2VzXG4gICAgICAgICAgICB4ICs9IGV2ZW50LmRlbHRhUmVjdC5sZWZ0O1xuICAgICAgICAgICAgeSArPSBldmVudC5kZWx0YVJlY3QudG9wO1xuXG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS14JywgU3RyaW5nKHgpKTtcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteScsIFN0cmluZyh5KSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgICAgaW50ZXJhY3QubW9kaWZpZXJzLnJlc3RyaWN0RWRnZXMoe1xuICAgICAgICAgICAgb3V0ZXI6IHtcbiAgICAgICAgICAgICAgbGVmdDogbWFyZ2luLFxuICAgICAgICAgICAgICB0b3A6IG1hcmdpbixcbiAgICAgICAgICAgICAgcmlnaHQ6IHdpbmRvdy5pbm5lcldpZHRoIC0gbWFyZ2luLFxuICAgICAgICAgICAgICBib3R0b206IHdpbmRvdy5pbm5lckhlaWdodCAtIG1hcmdpbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaW50ZXJhY3QubW9kaWZpZXJzLnJlc3RyaWN0U2l6ZSh7XG4gICAgICAgICAgICBtaW46IHsgd2lkdGg6IDIwMCwgaGVpZ2h0OiAxMzAgfSxcbiAgICAgICAgICAgIG1heDogeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDM1MCB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5hc3BlY3RSYXRpbyh7IHJhdGlvOiAncHJlc2VydmUnIH0pLFxuICAgICAgICBdLFxuICAgICAgICBpbmVydGlhOiB0cnVlLFxuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YXMtZmxvYXRpbmctY29udGFpbmVyXCIgW2NsYXNzLnZpc2libGVdPVwiaXNWaXNpYmxlXCI+XG4gIDwhLS0gVmlkZW8gY29udGVudCBhcmVhIC0gc2hvd3MgbWFpbiB2aWRlbyBvbmx5IC0tPlxuICA8ZGl2IGNsYXNzPVwiZmxvYXRpbmctY29udGVudFwiPlxuICAgIDwhLS0gTWFpbiB2aWRlbyBjb250YWluZXIgKHN1YnNjcmliZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgcHVibGlzaGVyKSAtLT5cbiAgICA8ZGl2IGlkPVwicGlwLW1haW4tdmlkZW9cIiBjbGFzcz1cInBpcC1tYWluLXZpZGVvXCI+PC9kaXY+XG5cbiAgICA8IS0tIEJvdHRvbSBjb250cm9scyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmxvYXRpbmctY29udHJvbHNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnRuIGV4cGFuZC1idG5cIlxuICAgICAgICAoY2xpY2spPVwib25FeHBhbmQoKVwiXG4gICAgICAgIHRpdGxlPVwiRXhwYW5kIHRvIGZ1bGxzY3JlZW5cIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImFjdGlvbi1idG4gbXV0ZS1idG5cIlxuICAgICAgICBbY2xhc3MubXV0ZWRdPVwiaXNNdXRlZFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIlxuICAgICAgICBbdGl0bGVdPVwiaXNNdXRlZCA/ICdVbm11dGUgbWljcm9waG9uZScgOiAnTXV0ZSBtaWNyb3Bob25lJ1wiXG4gICAgICA+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJmYVwiXG4gICAgICAgICAgW2NsYXNzLmZhLW1pY3JvcGhvbmVdPVwiIWlzTXV0ZWRcIlxuICAgICAgICAgIFtjbGFzcy5mYS1taWNyb3Bob25lLXNsYXNoXT1cImlzTXV0ZWRcIlxuICAgICAgICA+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aW9uLWJ0biBoYW5ndXAtYnRuXCIgKGNsaWNrKT1cIm9uSGFuZ1VwKClcIiB0aXRsZT1cIkhhbmcgdXAgY2FsbFwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBob25lXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|