jconsumer-shared 0.0.3 → 1.0.1
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/esm2022/lib/account-service.mjs +158 -9
- package/esm2022/lib/auth-service.mjs +12 -4
- package/esm2022/lib/booking-service.mjs +480 -0
- package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +4 -4
- package/esm2022/lib/common.service.mjs +157 -7
- package/esm2022/lib/confirm/confirm-box.component.mjs +159 -0
- package/esm2022/lib/confirm/confirm-box.module.mjs +62 -0
- package/esm2022/lib/consumer-service.mjs +780 -0
- package/esm2022/lib/currency-service.mjs +12 -0
- package/esm2022/lib/environment.service.mjs +23 -0
- package/esm2022/lib/error-message.module.mjs +23 -0
- package/esm2022/lib/file-service.mjs +25 -19
- package/esm2022/lib/form-message/field-error-display/field-error-display.component.mjs +21 -0
- package/esm2022/lib/form-message/form-message-display.module.mjs +35 -0
- package/esm2022/lib/form-message/form-message-display.service.mjs +44 -0
- package/esm2022/lib/form-message/form-success-display/form-success-display.component.mjs +18 -0
- package/esm2022/lib/group-storage.service.mjs +4 -4
- package/esm2022/lib/i8n.module.mjs +5 -5
- package/esm2022/lib/injector-resolver.mjs +28 -0
- package/esm2022/lib/local-storage.service.mjs +4 -4
- package/esm2022/lib/media-service.mjs +49 -0
- package/esm2022/lib/order.service.mjs +19 -4
- package/esm2022/lib/payment/modes/payment-modes.component.mjs +35 -0
- package/esm2022/lib/payment/modes/payment-modes.module.mjs +24 -0
- package/esm2022/lib/payment/payment.module.mjs +26 -0
- package/esm2022/lib/paytm.service.mjs +131 -0
- package/esm2022/lib/phone-input/phone-input.component.mjs +50 -46
- package/esm2022/lib/phone-input/phone-input.module.mjs +5 -5
- package/esm2022/lib/pipes/autolink/autolink.module.mjs +20 -0
- package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +4 -4
- package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +5 -5
- package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +4 -4
- package/esm2022/lib/pipes/date-format/date-format.module.mjs +19 -0
- package/esm2022/lib/pipes/date-format/date-format.pipe.mjs +42 -0
- package/esm2022/lib/pipes/filter/filter.pipe.mjs +4 -4
- package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +4 -4
- package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +5 -5
- package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +4 -4
- package/esm2022/lib/project-constants.mjs +310 -0
- package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +53 -63
- package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +16 -15
- package/esm2022/lib/questionaire/questionaire-service.mjs +4 -4
- package/esm2022/lib/razorpay.service.mjs +157 -0
- package/esm2022/lib/request-dialog/request-dialog.component.mjs +29 -0
- package/esm2022/lib/request-dialog/request-dialog.module.mjs +24 -0
- package/esm2022/lib/service-meta.mjs +4 -4
- package/esm2022/lib/session-storage.service.mjs +4 -4
- package/esm2022/lib/shared-account.guard.mjs +41 -0
- package/esm2022/lib/shared-account.resolver.mjs +22 -0
- package/esm2022/lib/shared.service.mjs +88 -13
- package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +5 -5
- package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +5 -5
- package/esm2022/lib/skeleton/skeleton-loading.component.mjs +4 -4
- package/esm2022/lib/skeleton/skeleton-loading.module.mjs +5 -5
- package/esm2022/lib/spinner/loading-spinner.component.mjs +4 -4
- package/esm2022/lib/spinner/loading-spinner.module.mjs +5 -5
- package/esm2022/lib/storage.service.mjs +4 -4
- package/esm2022/lib/subscription.service.mjs +4 -4
- package/esm2022/lib/theme.service.mjs +30 -0
- package/esm2022/lib/timezone-converter.mjs +49 -0
- package/esm2022/lib/toast.service.mjs +5 -5
- package/esm2022/lib/twilio-service.mjs +466 -0
- package/esm2022/lib/word-processor.service.mjs +4 -4
- package/esm2022/public-api.mjs +32 -1
- package/fesm2022/jconsumer-shared.mjs +3981 -541
- package/fesm2022/jconsumer-shared.mjs.map +1 -1
- package/jconsumer-shared-1.0.1.tgz +0 -0
- package/lib/account-service.d.ts +41 -2
- package/lib/auth-service.d.ts +1 -0
- package/lib/booking-service.d.ts +101 -0
- package/lib/common.service.d.ts +12 -1
- package/lib/confirm/confirm-box.component.d.ts +43 -0
- package/lib/confirm/confirm-box.module.d.ts +16 -0
- package/lib/consumer-service.d.ts +178 -0
- package/lib/currency-service.d.ts +4 -0
- package/lib/environment.service.d.ts +9 -0
- package/lib/error-message.module.d.ts +7 -0
- package/lib/file-service.d.ts +5 -2
- package/lib/form-message/field-error-display/field-error-display.component.d.ts +8 -0
- package/lib/form-message/form-message-display.module.d.ts +10 -0
- package/lib/form-message/form-message-display.service.d.ts +13 -0
- package/lib/form-message/form-success-display/form-success-display.component.d.ts +7 -0
- package/lib/injector-resolver.d.ts +2 -0
- package/lib/media-service.d.ts +9 -0
- package/lib/order.service.d.ts +4 -0
- package/lib/payment/modes/payment-modes.component.d.ts +15 -0
- package/lib/payment/modes/payment-modes.module.d.ts +9 -0
- package/lib/payment/payment.module.d.ts +7 -0
- package/lib/paytm.service.d.ts +13 -0
- package/lib/phone-input/phone-input.component.d.ts +5 -3
- package/lib/pipes/autolink/autolink.module.d.ts +8 -0
- package/lib/pipes/date-format/date-format.module.d.ts +8 -0
- package/lib/pipes/date-format/date-format.pipe.d.ts +12 -0
- package/lib/project-constants.d.ts +227 -0
- package/lib/questionaire/edit/questionnaire.component.d.ts +8 -9
- package/lib/questionaire/edit/questionnaire.module.d.ts +9 -8
- package/lib/razorpay.service.d.ts +26 -0
- package/lib/request-dialog/request-dialog.component.d.ts +11 -0
- package/lib/request-dialog/request-dialog.module.d.ts +9 -0
- package/lib/shared-account.guard.d.ts +11 -0
- package/lib/shared-account.resolver.d.ts +10 -0
- package/lib/shared.service.d.ts +31 -4
- package/lib/theme.service.d.ts +10 -0
- package/lib/timezone-converter.d.ts +8 -0
- package/lib/twilio-service.d.ts +60 -0
- package/package.json +1 -1
- package/public-api.d.ts +31 -0
- package/jconsumer-shared-0.0.3.tgz +0 -0
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import Video from 'twilio-video';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class TwilioService {
|
|
6
|
+
rendererFactory;
|
|
7
|
+
remoteVideo;
|
|
8
|
+
localVideo;
|
|
9
|
+
previewContainer;
|
|
10
|
+
microphone = true;
|
|
11
|
+
video = true;
|
|
12
|
+
preview = true;
|
|
13
|
+
roomParticipants;
|
|
14
|
+
participantsCount = 0;
|
|
15
|
+
showParticipant = false;
|
|
16
|
+
previewTrack;
|
|
17
|
+
camDeviceCount = 0;
|
|
18
|
+
renderer;
|
|
19
|
+
cameraMode;
|
|
20
|
+
previewTracks;
|
|
21
|
+
timerSubject = new Subject();
|
|
22
|
+
errorSubject = new Subject();
|
|
23
|
+
static signalStrength;
|
|
24
|
+
selectedVideoId;
|
|
25
|
+
activeCamIndex;
|
|
26
|
+
cam1Device;
|
|
27
|
+
cam2Device;
|
|
28
|
+
activeRoom;
|
|
29
|
+
previewTracksClone;
|
|
30
|
+
btnClicked = false;
|
|
31
|
+
loading = false;
|
|
32
|
+
constructor(rendererFactory) {
|
|
33
|
+
this.rendererFactory = rendererFactory;
|
|
34
|
+
this.renderer = rendererFactory.createRenderer(null, null);
|
|
35
|
+
}
|
|
36
|
+
activateTimer(timer) {
|
|
37
|
+
this.timerSubject.next(timer);
|
|
38
|
+
}
|
|
39
|
+
getTimer() {
|
|
40
|
+
return this.timerSubject.asObservable();
|
|
41
|
+
}
|
|
42
|
+
sendError(error) {
|
|
43
|
+
this.errorSubject.next(error);
|
|
44
|
+
}
|
|
45
|
+
getError() {
|
|
46
|
+
return this.errorSubject.asObservable();
|
|
47
|
+
}
|
|
48
|
+
// private static getSignalStrength () {
|
|
49
|
+
// return TwilioService.signalStrength;
|
|
50
|
+
// }
|
|
51
|
+
unmuteVideo() {
|
|
52
|
+
const _this = this;
|
|
53
|
+
_this.previewTracks.forEach(localTrack => {
|
|
54
|
+
if (localTrack.kind === 'video') {
|
|
55
|
+
_this.previewTracksClone.push(localTrack);
|
|
56
|
+
_this.addPreviewTrackToDom(localTrack);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
this.video = true;
|
|
60
|
+
}
|
|
61
|
+
muteVideo() {
|
|
62
|
+
const _this = this;
|
|
63
|
+
_this.previewTracks.forEach(localTrack => {
|
|
64
|
+
if (localTrack.kind === 'video') {
|
|
65
|
+
_this.previewTracksClone.splice(this.previewTracksClone.indexOf(localTrack), 1);
|
|
66
|
+
_this.removePreviewTrackToDom(localTrack);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
this.video = false;
|
|
70
|
+
}
|
|
71
|
+
removePreviewTrackToDom(localTrack) {
|
|
72
|
+
const _this = this;
|
|
73
|
+
if (_this.previewContainer) {
|
|
74
|
+
const localElement = _this.previewContainer.nativeElement;
|
|
75
|
+
while (localElement.firstChild) {
|
|
76
|
+
localElement.removeChild(localElement.firstChild);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
muteAudio() {
|
|
81
|
+
const _this = this;
|
|
82
|
+
_this.previewTracks.forEach(localTrack => {
|
|
83
|
+
if (localTrack.kind === 'audio') {
|
|
84
|
+
_this.previewTracksClone.splice(this.previewTracksClone.indexOf(localTrack), 1);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
this.microphone = false;
|
|
88
|
+
}
|
|
89
|
+
unmuteAudio() {
|
|
90
|
+
const _this = this;
|
|
91
|
+
_this.previewTracks.forEach(localTrack => {
|
|
92
|
+
if (localTrack.kind === 'audio') {
|
|
93
|
+
_this.previewTracksClone.push(localTrack);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
this.microphone = true;
|
|
97
|
+
}
|
|
98
|
+
addPreviewTrackToDom(previewTrack) {
|
|
99
|
+
const _this = this;
|
|
100
|
+
const element = previewTrack.attach();
|
|
101
|
+
_this.renderer.addClass(element, 'rem-video');
|
|
102
|
+
_this.renderer.appendChild(_this.previewContainer.nativeElement, element);
|
|
103
|
+
}
|
|
104
|
+
enableVideo() {
|
|
105
|
+
const _this = this;
|
|
106
|
+
Video.createLocalVideoTrack({
|
|
107
|
+
deviceId: { exact: _this.selectedVideoId }
|
|
108
|
+
}).then(function (localVideoTrack) {
|
|
109
|
+
_this.activeRoom.localParticipant.publishTrack(localVideoTrack);
|
|
110
|
+
console.log(_this.activeRoom.localParticipant.identity + ' added track: ' + localVideoTrack.kind);
|
|
111
|
+
_this.attachTracks([localVideoTrack], _this.localVideo.nativeElement, _this.activeRoom);
|
|
112
|
+
});
|
|
113
|
+
this.video = true;
|
|
114
|
+
}
|
|
115
|
+
disableVideo() {
|
|
116
|
+
const _this = this;
|
|
117
|
+
_this.activeRoom.localParticipant.videoTracks.forEach(publication => {
|
|
118
|
+
publication.track.stop();
|
|
119
|
+
publication.unpublish();
|
|
120
|
+
if (_this.localVideo) {
|
|
121
|
+
const localElement = _this.localVideo.nativeElement;
|
|
122
|
+
while (localElement.firstChild) {
|
|
123
|
+
localElement.removeChild(localElement.firstChild);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
this.video = false;
|
|
128
|
+
}
|
|
129
|
+
mute() {
|
|
130
|
+
this.activeRoom.localParticipant.audioTracks.forEach(function (audioTrack) {
|
|
131
|
+
audioTrack.track.disable();
|
|
132
|
+
});
|
|
133
|
+
this.microphone = false;
|
|
134
|
+
}
|
|
135
|
+
unmute() {
|
|
136
|
+
this.activeRoom.localParticipant.audioTracks.forEach(function (audioTrack) {
|
|
137
|
+
audioTrack.track.enable();
|
|
138
|
+
});
|
|
139
|
+
this.microphone = true;
|
|
140
|
+
}
|
|
141
|
+
// media?
|
|
142
|
+
switchCamera(videoDevices) {
|
|
143
|
+
const _this = this;
|
|
144
|
+
this.activeCamIndex++;
|
|
145
|
+
if (this.activeCamIndex >= videoDevices.length) {
|
|
146
|
+
this.activeCamIndex = 0;
|
|
147
|
+
}
|
|
148
|
+
console.log("Video Devices:", videoDevices);
|
|
149
|
+
console.log("Active Cam Index:", this.activeCamIndex);
|
|
150
|
+
// _this.selectedVideoId =media.deviceId;
|
|
151
|
+
_this.selectedVideoId = videoDevices[this.activeCamIndex].deviceId;
|
|
152
|
+
// if (_this.selectedVideoId === _this.cam1Device) {
|
|
153
|
+
// _this.selectedVideoId = _this.cam2Device;
|
|
154
|
+
// } else {
|
|
155
|
+
// _this.selectedVideoId = _this.cam1Device;
|
|
156
|
+
// }
|
|
157
|
+
const localParticipant = _this.activeRoom.localParticipant;
|
|
158
|
+
const tracks = Array.from(localParticipant.videoTracks.values()).map(function (trackPublication) {
|
|
159
|
+
return trackPublication['track'];
|
|
160
|
+
});
|
|
161
|
+
localParticipant.unpublishTracks(tracks);
|
|
162
|
+
console.log(localParticipant.identity + ' removed track: ' + tracks[0].kind);
|
|
163
|
+
_this.detachTracks(tracks);
|
|
164
|
+
_this.stopTracks(tracks);
|
|
165
|
+
const videoid = _this.selectedVideoId;
|
|
166
|
+
Video.createLocalVideoTrack({
|
|
167
|
+
deviceId: { exact: videoid }
|
|
168
|
+
}).then(function (localVideoTrack) {
|
|
169
|
+
localParticipant.publishTrack(localVideoTrack);
|
|
170
|
+
console.log(localParticipant.identity + ' added track: ' + localVideoTrack.kind);
|
|
171
|
+
_this.attachTracks([localVideoTrack], _this.localVideo.nativeElement, _this.activeRoom);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
connectToRoom(accessToken, options, tracks) {
|
|
175
|
+
// return new Promise(function (resolve, reject) {
|
|
176
|
+
const _this = this;
|
|
177
|
+
console.log("In Connect Room");
|
|
178
|
+
console.log(tracks);
|
|
179
|
+
if (tracks) {
|
|
180
|
+
_this.previewTracks = tracks;
|
|
181
|
+
_this.previewTracksClone = tracks.slice();
|
|
182
|
+
}
|
|
183
|
+
if (_this.previewTracks) {
|
|
184
|
+
options['tracks'] = _this.previewTracks;
|
|
185
|
+
}
|
|
186
|
+
console.log(_this.previewTracks);
|
|
187
|
+
Video.connect(accessToken, options).then((room) => {
|
|
188
|
+
room.localParticipant.setNetworkQualityConfiguration({
|
|
189
|
+
local: 2,
|
|
190
|
+
remote: 1
|
|
191
|
+
});
|
|
192
|
+
_this.preview = false;
|
|
193
|
+
_this.loading = false;
|
|
194
|
+
_this.activeRoom = room;
|
|
195
|
+
if (options['video']) {
|
|
196
|
+
if (!_this.localVideo.nativeElement.querySelector('video')) {
|
|
197
|
+
console.log("in connect method");
|
|
198
|
+
_this.attachParticipantTracks(room.localParticipant, _this.localVideo.nativeElement, room);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
this.btnClicked = false;
|
|
202
|
+
_this.roomJoined(room);
|
|
203
|
+
}, (error) => {
|
|
204
|
+
// reject(error);
|
|
205
|
+
});
|
|
206
|
+
// });
|
|
207
|
+
}
|
|
208
|
+
networkQualityChanged(networkQualityLevel, networkQualityStats) {
|
|
209
|
+
TwilioService.signalStrength = networkQualityLevel;
|
|
210
|
+
console.log({
|
|
211
|
+
1: '▃',
|
|
212
|
+
2: '▃▄',
|
|
213
|
+
3: '▃▄▅',
|
|
214
|
+
4: '▃▄▅▆',
|
|
215
|
+
5: '▃▄▅▆▇'
|
|
216
|
+
}[networkQualityLevel] || '');
|
|
217
|
+
if (networkQualityStats) {
|
|
218
|
+
// Print in console the networkQualityStats, which is non-null only if Network Quality
|
|
219
|
+
// verbosity is 2 (moderate) or greater
|
|
220
|
+
console.log('Network Quality statistics:', networkQualityStats);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Attach the Tracks to the DOM.
|
|
224
|
+
attachTracks(tracks, container, room) {
|
|
225
|
+
const _this = this;
|
|
226
|
+
console.log("attachTracks");
|
|
227
|
+
tracks.forEach(function (track) {
|
|
228
|
+
if (track) {
|
|
229
|
+
console.log(track);
|
|
230
|
+
const element = track.attach();
|
|
231
|
+
_this.renderer.data['id'] = track.sid;
|
|
232
|
+
_this.renderer.addClass(element, 'rem-video');
|
|
233
|
+
_this.renderer.appendChild(container, element);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// Attach the Participant's Tracks to the DOM.
|
|
238
|
+
attachParticipantTracks(participant, container, room) {
|
|
239
|
+
const _this = this;
|
|
240
|
+
var tracks = Array.from(participant.tracks.values()).map(function (trackPublication) {
|
|
241
|
+
return trackPublication['track'];
|
|
242
|
+
});
|
|
243
|
+
console.log("attachParticipantTracks");
|
|
244
|
+
_this.attachTracks(tracks, container, room);
|
|
245
|
+
}
|
|
246
|
+
// Detach the Tracks from the DOM.
|
|
247
|
+
detachTracks(tracks) {
|
|
248
|
+
console.log("detachTracks");
|
|
249
|
+
tracks.forEach(function (track) {
|
|
250
|
+
if (track) {
|
|
251
|
+
track.detach().forEach(function (detachedElement) {
|
|
252
|
+
detachedElement.remove();
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
// Detach the Participant's Tracks from the DOM.
|
|
258
|
+
detachParticipantTracks(participant, room, _this) {
|
|
259
|
+
console.log("detachParticipantTracks");
|
|
260
|
+
var tracks = Array.from(participant.tracks.values()).map(function (trackPublication) {
|
|
261
|
+
return trackPublication['track'];
|
|
262
|
+
});
|
|
263
|
+
_this.detachTracks(tracks, room);
|
|
264
|
+
}
|
|
265
|
+
//
|
|
266
|
+
stopTracks(tracks) {
|
|
267
|
+
console.log("stopTracks");
|
|
268
|
+
tracks.forEach(function (track) {
|
|
269
|
+
if (track) {
|
|
270
|
+
track.stop();
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
// Successfully connected!
|
|
275
|
+
roomJoined(room) {
|
|
276
|
+
const _this = this;
|
|
277
|
+
// Attach the Tracks of the Room's Participants.
|
|
278
|
+
if (!_this.video) {
|
|
279
|
+
_this.disableVideo();
|
|
280
|
+
}
|
|
281
|
+
if (!_this.microphone) {
|
|
282
|
+
_this.mute();
|
|
283
|
+
}
|
|
284
|
+
room.localParticipant.on('networkQualityLevelChanged', this.networkQualityChanged);
|
|
285
|
+
room.participants.forEach((participant) => {
|
|
286
|
+
console.log("Participant:", participant);
|
|
287
|
+
console.log("Already in Room: '" + participant.identity + "'");
|
|
288
|
+
_this.attachParticipantTracks(participant, _this.remoteVideo.nativeElement, room);
|
|
289
|
+
_this.participantsCount = room.participants.size;
|
|
290
|
+
console.log('first:participantsCount:' + _this.participantsCount);
|
|
291
|
+
});
|
|
292
|
+
// When a Participant joins the Room, log the event.
|
|
293
|
+
room.on('participantConnected', function (participant) {
|
|
294
|
+
console.log("Participant:", participant);
|
|
295
|
+
console.log("Joining: '" + participant.identity + "'");
|
|
296
|
+
_this.participantsCount = room.participants.size;
|
|
297
|
+
console.log("connected - Participants:" + room.participants.size);
|
|
298
|
+
if (_this.participantsCount === 0) {
|
|
299
|
+
_this.activateTimer(true);
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
_this.activateTimer(false);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
// When a Participant adds a Track, attach it to the DOM.
|
|
306
|
+
room.on('trackSubscribed', function (track, trackPublication, participant) {
|
|
307
|
+
console.log("Local Participant:", room.localParticipant);
|
|
308
|
+
console.log("Remote Participant:", room.remoteParticipant);
|
|
309
|
+
console.log(participant.identity + ' added track: ' + track.kind);
|
|
310
|
+
_this.participantsCount = room.participants.size;
|
|
311
|
+
console.log("Participants:" + _this.participantsCount);
|
|
312
|
+
// var previewContainer = document.getElementById('remoteVideo');
|
|
313
|
+
_this.attachTracks([track], _this.remoteVideo.nativeElement, room);
|
|
314
|
+
console.log('tracksubscribed');
|
|
315
|
+
if (track.kind === 'video') {
|
|
316
|
+
_this.removeRemoteParticipantDetails(_this.remoteVideo.nativeElement);
|
|
317
|
+
}
|
|
318
|
+
if (_this.participantsCount === 0) {
|
|
319
|
+
_this.activateTimer(true);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
_this.activateTimer(false);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
// When a Participant removes a Track, detach it from the DOM.
|
|
326
|
+
room.on('trackUnsubscribed', function (track, trackPublication, participant) {
|
|
327
|
+
console.log(participant.identity + ' removed track: ' + track.kind);
|
|
328
|
+
_this.detachTracks([track]);
|
|
329
|
+
console.log('trackUnsubscribed');
|
|
330
|
+
if (track.kind === 'video') {
|
|
331
|
+
_this.addRemoteParticipantDetails(_this.remoteVideo.nativeElement, participant);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
room.on('participantReconnecting', remoteParticipant => {
|
|
335
|
+
console.log(remoteParticipant.state, 'reconnecting');
|
|
336
|
+
console.log(`${remoteParticipant.identity} is reconnecting the signaling connection to the Room!`);
|
|
337
|
+
/* Update the RemoteParticipant UI here */
|
|
338
|
+
});
|
|
339
|
+
room.on('participantReconnected', remoteParticipant => {
|
|
340
|
+
console.log(remoteParticipant.state, 'connected');
|
|
341
|
+
console.log(`${remoteParticipant.identity} has reconnected the signaling connection to the Room!`);
|
|
342
|
+
/* Update the RemoteParticipant UI here */
|
|
343
|
+
});
|
|
344
|
+
// When a Participant leaves the Room, detach its Tracks.
|
|
345
|
+
room.on('participantDisconnected', function (participant) {
|
|
346
|
+
console.log("Participant '" + participant.identity + "' left the room");
|
|
347
|
+
_this.detachParticipantTracks(participant, room, _this);
|
|
348
|
+
_this.participantsCount = room.participants.size;
|
|
349
|
+
console.log("disConnected - Participants Size:" + room.participants.size);
|
|
350
|
+
_this.removeRemoteParticipantDetails(_this.remoteVideo.nativeElement);
|
|
351
|
+
_this.activateTimer(true);
|
|
352
|
+
});
|
|
353
|
+
room.on('reconnecting', error => {
|
|
354
|
+
console.log(room.state, 'reconnecting');
|
|
355
|
+
_this.sendError(error);
|
|
356
|
+
_this.participantsCount = room.participants.size;
|
|
357
|
+
console.log("connected - Participants:" + room.participants.size);
|
|
358
|
+
if (_this.participantsCount === 0) {
|
|
359
|
+
_this.activateTimer(true);
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
_this.activateTimer(false);
|
|
363
|
+
}
|
|
364
|
+
/* Update the application UI here */
|
|
365
|
+
});
|
|
366
|
+
room.on('reconnected', () => {
|
|
367
|
+
console.log(room.state, 'connected');
|
|
368
|
+
console.log('Reconnected your signaling and media connections!');
|
|
369
|
+
_this.participantsCount = room.participants.size;
|
|
370
|
+
console.log("connected - Participants:" + room.participants.size);
|
|
371
|
+
if (_this.participantsCount === 0) {
|
|
372
|
+
_this.activateTimer(true);
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
_this.activateTimer(false);
|
|
376
|
+
}
|
|
377
|
+
/* Update the application UI here */
|
|
378
|
+
});
|
|
379
|
+
// Once the LocalParticipant leaves the room, detach the Tracks
|
|
380
|
+
// of all Participants, including that of the LocalParticipant.
|
|
381
|
+
room.on('disconnected', function (room, error) {
|
|
382
|
+
console.log('Left');
|
|
383
|
+
console.log(room.state, 'disconnected');
|
|
384
|
+
console.log("Error:", error);
|
|
385
|
+
_this.sendError(error);
|
|
386
|
+
room.localParticipant.tracks.forEach(publication => {
|
|
387
|
+
publication.track.stop();
|
|
388
|
+
publication.unpublish();
|
|
389
|
+
const attachedElements = publication.track.detach();
|
|
390
|
+
attachedElements.forEach(element => element.remove());
|
|
391
|
+
});
|
|
392
|
+
if (_this.localVideo) {
|
|
393
|
+
const localElement = _this.localVideo.nativeElement;
|
|
394
|
+
while (localElement.firstChild) {
|
|
395
|
+
localElement.removeChild(localElement.firstChild);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
if (_this.remoteVideo) {
|
|
399
|
+
const remoteElement = _this.remoteVideo.nativeElement;
|
|
400
|
+
while (remoteElement.firstChild) {
|
|
401
|
+
remoteElement.removeChild(remoteElement.firstChild);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
_this.participantsCount = room.participants.size;
|
|
405
|
+
_this.disconnect();
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
removeRemoteParticipantDetails(container) {
|
|
409
|
+
const div = document.getElementById('remoteImg');
|
|
410
|
+
if (div) {
|
|
411
|
+
this.renderer.removeChild(container, div);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
addRemoteParticipantDetails(container, participant) {
|
|
415
|
+
const div = document.createElement('div');
|
|
416
|
+
div.setAttribute('id', 'remoteImg');
|
|
417
|
+
const div1 = document.createElement('div');
|
|
418
|
+
div1.setAttribute('class', 'avatar-img');
|
|
419
|
+
div.appendChild(div1);
|
|
420
|
+
const div2 = document.createElement('div');
|
|
421
|
+
div2.setAttribute('class', 'avatar-text');
|
|
422
|
+
const contentDiv = document.createTextNode(participant.identity);
|
|
423
|
+
div2.appendChild(contentDiv);
|
|
424
|
+
div.appendChild(div2);
|
|
425
|
+
// const image = document.createElement('image');
|
|
426
|
+
// image.setAttribute('class', '');
|
|
427
|
+
// image.setAttribute('alt', participant.identity);
|
|
428
|
+
// div1.appendChild(image);
|
|
429
|
+
this.renderer.appendChild(container, div);
|
|
430
|
+
}
|
|
431
|
+
disconnect() {
|
|
432
|
+
const _this = this;
|
|
433
|
+
if (_this.previewTracks) {
|
|
434
|
+
_this.previewTracks.forEach(localTrack => {
|
|
435
|
+
localTrack.stop();
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
_this.previewTracks = null;
|
|
439
|
+
if (_this.activeRoom && _this.activeRoom.localParticipant && _this.activeRoom.localParticipant.localTracks) {
|
|
440
|
+
_this.activeRoom.localParticipant.localTracks.forEach(localTrack => {
|
|
441
|
+
localTrack.stop();
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
if (_this.activeRoom && _this.activeRoom !== null) {
|
|
445
|
+
_this.activeRoom.disconnect();
|
|
446
|
+
_this.activeRoom = null;
|
|
447
|
+
_this.cam1Device = null;
|
|
448
|
+
_this.cam2Device = null;
|
|
449
|
+
_this.selectedVideoId = null;
|
|
450
|
+
}
|
|
451
|
+
_this.video = true;
|
|
452
|
+
_this.microphone = true;
|
|
453
|
+
if (_this.remoteVideo) {
|
|
454
|
+
_this.removeRemoteParticipantDetails(_this.remoteVideo.nativeElement);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwilioService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
458
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwilioService, providedIn: 'any' });
|
|
459
|
+
}
|
|
460
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwilioService, decorators: [{
|
|
461
|
+
type: Injectable,
|
|
462
|
+
args: [{
|
|
463
|
+
providedIn: 'any'
|
|
464
|
+
}]
|
|
465
|
+
}], ctorParameters: () => [{ type: i0.RendererFactory2 }] });
|
|
466
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvdHdpbGlvLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEtBQUssTUFBTSxjQUFjLENBQUM7O0FBSWpDLE1BQU0sT0FBTyxhQUFhO0lBMEJIO0lBekJuQixXQUFXLENBQWE7SUFDeEIsVUFBVSxDQUFhO0lBQ3ZCLGdCQUFnQixDQUFhO0lBQzdCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDZixnQkFBZ0IsQ0FBQztJQUNqQixpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixZQUFZLENBQUM7SUFDYixjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsUUFBUSxDQUFZO0lBQzVCLFVBQVUsQ0FBUztJQUNuQixhQUFhLENBQUM7SUFDZCxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztJQUNsQyxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztJQUMzQixNQUFNLENBQUMsY0FBYyxDQUFNO0lBQ2xDLGVBQWUsQ0FBUztJQUN4QixjQUFjLENBQUM7SUFDZixVQUFVLENBQVM7SUFDbkIsVUFBVSxDQUFTO0lBQ25CLFVBQVUsQ0FBQztJQUNYLGtCQUFrQixDQUFDO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixZQUFtQixlQUFpQztRQUFqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FB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bnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IFZpZGVvIGZyb20gJ3R3aWxpby12aWRlbyc7XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdhbnknXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUd2lsaW9TZXJ2aWNlIHtcclxuICAgIHJlbW90ZVZpZGVvOiBFbGVtZW50UmVmO1xyXG4gICAgbG9jYWxWaWRlbzogRWxlbWVudFJlZjtcclxuICAgIHByZXZpZXdDb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgICBtaWNyb3Bob25lID0gdHJ1ZTtcclxuICAgIHZpZGVvID0gdHJ1ZTtcclxuICAgIHByZXZpZXcgPSB0cnVlO1xyXG4gICAgcm9vbVBhcnRpY2lwYW50cztcclxuICAgIHBhcnRpY2lwYW50c0NvdW50ID0gMDtcclxuICAgIHNob3dQYXJ0aWNpcGFudCA9IGZhbHNlO1xyXG4gICAgcHJldmlld1RyYWNrO1xyXG4gICAgY2FtRGV2aWNlQ291bnQgPSAwO1xyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xyXG4gICAgY2FtZXJhTW9kZTogc3RyaW5nO1xyXG4gICAgcHJldmlld1RyYWNrcztcclxuICAgIHRpbWVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIGVycm9yU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHB1YmxpYyBzdGF0aWMgc2lnbmFsU3RyZW5ndGg6IGFueTtcclxuICAgIHNlbGVjdGVkVmlkZW9JZDogc3RyaW5nO1xyXG4gICAgYWN0aXZlQ2FtSW5kZXg7XHJcbiAgICBjYW0xRGV2aWNlOiBzdHJpbmc7XHJcbiAgICBjYW0yRGV2aWNlOiBzdHJpbmc7XHJcbiAgICBhY3RpdmVSb29tO1xyXG4gICAgcHJldmlld1RyYWNrc0Nsb25lO1xyXG4gICAgYnRuQ2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5Mikge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aXZhdGVUaW1lcih0aW1lcjogYW55KSB7XHJcbiAgICAgICAgdGhpcy50aW1lclN1YmplY3QubmV4dCh0aW1lcik7XHJcbiAgICB9XHJcbiAgICBnZXRUaW1lcigpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRpbWVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgZ2V0RXJyb3IoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICAvLyBwcml2YXRlIHN0YXRpYyBnZXRTaWduYWxTdHJlbmd0aCAoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIFR3aWxpb1NlcnZpY2Uuc2lnbmFsU3RyZW5ndGg7XHJcbiAgICAvLyB9XHJcbiAgICB1bm11dGVWaWRlbygpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgX3RoaXMucHJldmlld1RyYWNrcy5mb3JFYWNoKGxvY2FsVHJhY2sgPT4ge1xyXG4gICAgICAgICAgICBpZihsb2NhbFRyYWNrLmtpbmQgPT09ICd2aWRlbycpIHtcclxuICAgICAgICAgICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzQ2xvbmUucHVzaChsb2NhbFRyYWNrKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFkZFByZXZpZXdUcmFja1RvRG9tKGxvY2FsVHJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudmlkZW8gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgbXV0ZVZpZGVvKCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzLmZvckVhY2gobG9jYWxUcmFjayA9PiB7XHJcbiAgICAgICAgICAgIGlmKGxvY2FsVHJhY2sua2luZCA9PT0gJ3ZpZGVvJykge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucHJldmlld1RyYWNrc0Nsb25lLnNwbGljZSh0aGlzLnByZXZpZXdUcmFja3NDbG9uZS5pbmRleE9mKGxvY2FsVHJhY2spLCAxKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZVByZXZpZXdUcmFja1RvRG9tKGxvY2FsVHJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy52aWRlbyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlUHJldmlld1RyYWNrVG9Eb20obG9jYWxUcmFjaykge1xyXG4gICAgICAgIGNvbnN0IF90aGlzPXRoaXM7XHJcbiAgICAgICAgaWYgKF90aGlzLnByZXZpZXdDb250YWluZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgbG9jYWxFbGVtZW50ID0gX3RoaXMucHJldmlld0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICB3aGlsZSAobG9jYWxFbGVtZW50LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsRWxlbWVudC5yZW1vdmVDaGlsZChsb2NhbEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgIH1cclxuICAgIG11dGVBdWRpbygpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgX3RoaXMucHJldmlld1RyYWNrcy5mb3JFYWNoKGxvY2FsVHJhY2sgPT4ge1xyXG4gICAgICAgICAgICBpZihsb2NhbFRyYWNrLmtpbmQgPT09ICdhdWRpbycpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnByZXZpZXdUcmFja3NDbG9uZS5zcGxpY2UodGhpcy5wcmV2aWV3VHJhY2tzQ2xvbmUuaW5kZXhPZihsb2NhbFRyYWNrKSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHVubXV0ZUF1ZGlvKCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzLmZvckVhY2gobG9jYWxUcmFjayA9PiB7XHJcbiAgICAgICAgICAgIGlmKGxvY2FsVHJhY2sua2luZCA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgICAgICAgICAgIF90aGlzLnByZXZpZXdUcmFja3NDbG9uZS5wdXNoKGxvY2FsVHJhY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5taWNyb3Bob25lID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGFkZFByZXZpZXdUcmFja1RvRG9tKHByZXZpZXdUcmFjaykge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gcHJldmlld1RyYWNrLmF0dGFjaCgpO1xyXG4gICAgICAgIF90aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdyZW0tdmlkZW8nKTtcclxuICAgICAgICBfdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChfdGhpcy5wcmV2aWV3Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZVZpZGVvKCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzPSB0aGlzO1xyXG4gICAgICAgIFZpZGVvLmNyZWF0ZUxvY2FsVmlkZW9UcmFjayh7XHJcbiAgICAgICAgICAgIGRldmljZUlkOiB7IGV4YWN0OiBfdGhpcy5zZWxlY3RlZFZpZGVvSWQgfVxyXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGxvY2FsVmlkZW9UcmFjaykge1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tLmxvY2FsUGFydGljaXBhbnQucHVibGlzaFRyYWNrKGxvY2FsVmlkZW9UcmFjayk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKF90aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudC5pZGVudGl0eSArICcgYWRkZWQgdHJhY2s6ICcgKyBsb2NhbFZpZGVvVHJhY2sua2luZCk7XHJcbiAgICAgICAgICAgIF90aGlzLmF0dGFjaFRyYWNrcyhbbG9jYWxWaWRlb1RyYWNrXSwgX3RoaXMubG9jYWxWaWRlby5uYXRpdmVFbGVtZW50LCBfdGhpcy5hY3RpdmVSb29tKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnZpZGVvID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGRpc2FibGVWaWRlbygpIHtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgX3RoaXMuYWN0aXZlUm9vbS5sb2NhbFBhcnRpY2lwYW50LnZpZGVvVHJhY2tzLmZvckVhY2gocHVibGljYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBwdWJsaWNhdGlvbi50cmFjay5zdG9wKCk7XHJcbiAgICAgICAgICAgIHB1YmxpY2F0aW9uLnVucHVibGlzaCgpO1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMubG9jYWxWaWRlbykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxFbGVtZW50ID0gX3RoaXMubG9jYWxWaWRlby5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGxvY2FsRWxlbWVudC5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxFbGVtZW50LnJlbW92ZUNoaWxkKGxvY2FsRWxlbWVudC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudmlkZW8gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIG11dGUoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVSb29tLmxvY2FsUGFydGljaXBhbnQuYXVkaW9UcmFja3MuZm9yRWFjaChmdW5jdGlvbiAoYXVkaW9UcmFjaykge1xyXG4gICAgICAgICAgICBhdWRpb1RyYWNrLnRyYWNrLmRpc2FibGUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHVubXV0ZSgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudC5hdWRpb1RyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChhdWRpb1RyYWNrKSB7XHJcbiAgICAgICAgICAgIGF1ZGlvVHJhY2sudHJhY2suZW5hYmxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5taWNyb3Bob25lID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIG1lZGlhP1xyXG4gICAgc3dpdGNoQ2FtZXJhKHZpZGVvRGV2aWNlcykge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLmFjdGl2ZUNhbUluZGV4Kys7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQ2FtSW5kZXggPj0gdmlkZW9EZXZpY2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNhbUluZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJWaWRlbyBEZXZpY2VzOlwiLCB2aWRlb0RldmljZXMpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQWN0aXZlIENhbSBJbmRleDpcIiwgdGhpcy5hY3RpdmVDYW1JbmRleCk7XHJcbiAgICAgICAgLy8gX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID1tZWRpYS5kZXZpY2VJZDtcclxuICAgICAgICBfdGhpcy5zZWxlY3RlZFZpZGVvSWQgPSB2aWRlb0RldmljZXNbdGhpcy5hY3RpdmVDYW1JbmRleF0uZGV2aWNlSWQ7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAvLyBpZiAoX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID09PSBfdGhpcy5jYW0xRGV2aWNlKSB7XHJcbiAgICAgICAgLy8gICAgIF90aGlzLnNlbGVjdGVkVmlkZW9JZCA9IF90aGlzLmNhbTJEZXZpY2U7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID0gX3RoaXMuY2FtMURldmljZTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgY29uc3QgbG9jYWxQYXJ0aWNpcGFudCA9IF90aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudDtcclxuICAgICAgICBjb25zdCB0cmFja3MgPSBBcnJheS5mcm9tKGxvY2FsUGFydGljaXBhbnQudmlkZW9UcmFja3MudmFsdWVzKCkpLm1hcChcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHRyYWNrUHVibGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmFja1B1YmxpY2F0aW9uWyd0cmFjayddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBsb2NhbFBhcnRpY2lwYW50LnVucHVibGlzaFRyYWNrcyh0cmFja3MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGxvY2FsUGFydGljaXBhbnQuaWRlbnRpdHkgKyAnIHJlbW92ZWQgdHJhY2s6ICcgKyB0cmFja3NbMF0ua2luZCk7XHJcbiAgICAgICAgX3RoaXMuZGV0YWNoVHJhY2tzKHRyYWNrcyk7XHJcbiAgICAgICAgX3RoaXMuc3RvcFRyYWNrcyh0cmFja3MpO1xyXG4gICAgICAgIGNvbnN0IHZpZGVvaWQgPSBfdGhpcy5zZWxlY3RlZFZpZGVvSWQ7XHJcbiAgICAgICAgVmlkZW8uY3JlYXRlTG9jYWxWaWRlb1RyYWNrKHtcclxuICAgICAgICAgICAgZGV2aWNlSWQ6IHsgZXhhY3Q6IHZpZGVvaWQgfVxyXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGxvY2FsVmlkZW9UcmFjaykge1xyXG4gICAgICAgICAgICBsb2NhbFBhcnRpY2lwYW50LnB1Ymxpc2hUcmFjayhsb2NhbFZpZGVvVHJhY2spO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhbFBhcnRpY2lwYW50LmlkZW50aXR5ICsgJyBhZGRlZCB0cmFjazogJyArIGxvY2FsVmlkZW9UcmFjay5raW5kKTtcclxuICAgICAgICAgICAgX3RoaXMuYXR0YWNoVHJhY2tzKFtsb2NhbFZpZGVvVHJhY2tdLCBfdGhpcy5sb2NhbFZpZGVvLm5hdGl2ZUVsZW1lbnQsIF90aGlzLmFjdGl2ZVJvb20pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbm5lY3RUb1Jvb20oYWNjZXNzVG9rZW4sIG9wdGlvbnMsIHRyYWNrcz8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkluIENvbm5lY3QgUm9vbVwiKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0cmFja3MpO1xyXG4gICAgICAgIGlmKHRyYWNrcykge1xyXG4gICAgICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzID0gdHJhY2tzO1xyXG4gICAgICAgICAgICBfdGhpcy5wcmV2aWV3VHJhY2tzQ2xvbmUgPSB0cmFja3Muc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF90aGlzLnByZXZpZXdUcmFja3MpIHtcclxuICAgICAgICAgICAgb3B0aW9uc1sndHJhY2tzJ10gPSBfdGhpcy5wcmV2aWV3VHJhY2tzO1xyXG4gICAgICAgIH0gICAgICBcclxuICAgICAgICBjb25zb2xlLmxvZyhfdGhpcy5wcmV2aWV3VHJhY2tzKTtcclxuICAgICAgICBWaWRlby5jb25uZWN0KGFjY2Vzc1Rva2VuLCBvcHRpb25zKS50aGVuKFxyXG4gICAgICAgICAgICAocm9vbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByb29tLmxvY2FsUGFydGljaXBhbnQuc2V0TmV0d29ya1F1YWxpdHlDb25maWd1cmF0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhbDogMixcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGU6IDFcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucHJldmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMubG9hZGluZz0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tID0gcm9vbTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zWyd2aWRlbyddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5sb2NhbFZpZGVvLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImluIGNvbm5lY3QgbWV0aG9kXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5hdHRhY2hQYXJ0aWNpcGFudFRyYWNrcyhyb29tLmxvY2FsUGFydGljaXBhbnQsIF90aGlzLmxvY2FsVmlkZW8ubmF0aXZlRWxlbWVudCwgcm9vbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5idG5DbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5yb29tSm9pbmVkKHJvb20pO1xyXG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gICAgbmV0d29ya1F1YWxpdHlDaGFuZ2VkKG5ldHdvcmtRdWFsaXR5TGV2ZWwsIG5ldHdvcmtRdWFsaXR5U3RhdHMpIHtcclxuICAgICAgICBUd2lsaW9TZXJ2aWNlLnNpZ25hbFN0cmVuZ3RoID0gbmV0d29ya1F1YWxpdHlMZXZlbDtcclxuICAgICAgICBjb25zb2xlLmxvZyh7XHJcbiAgICAgICAgICAgIDE6ICfiloMnLFxyXG4gICAgICAgICAgICAyOiAn4paD4paEJyxcclxuICAgICAgICAgICAgMzogJ+KWg+KWhOKWhScsXHJcbiAgICAgICAgICAgIDQ6ICfiloPiloTiloXiloYnLFxyXG4gICAgICAgICAgICA1OiAn4paD4paE4paF4paG4paHJ1xyXG4gICAgICAgICAgfVtuZXR3b3JrUXVhbGl0eUxldmVsXSB8fCAnJyk7XHJcbiAgICAgICAgICBpZiAobmV0d29ya1F1YWxpdHlTdGF0cykge1xyXG4gICAgICAgICAgICAvLyBQcmludCBpbiBjb25zb2xlIHRoZSBuZXR3b3JrUXVhbGl0eVN0YXRzLCB3aGljaCBpcyBub24tbnVsbCBvbmx5IGlmIE5ldHdvcmsgUXVhbGl0eVxyXG4gICAgICAgICAgICAvLyB2ZXJib3NpdHkgaXMgMiAobW9kZXJhdGUpIG9yIGdyZWF0ZXJcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ05ldHdvcmsgUXVhbGl0eSBzdGF0aXN0aWNzOicsIG5ldHdvcmtRdWFsaXR5U3RhdHMpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQXR0YWNoIHRoZSBUcmFja3MgdG8gdGhlIERPTS5cclxuICAgIGF0dGFjaFRyYWNrcyh0cmFja3MsIGNvbnRhaW5lciwgcm9vbSkge1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zb2xlLmxvZyhcImF0dGFjaFRyYWNrc1wiKTtcclxuICAgICAgICB0cmFja3MuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcclxuICAgICAgICAgICAgaWYgKHRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0cmFjayk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdHJhY2suYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5yZW5kZXJlci5kYXRhWydpZCddID0gdHJhY2suc2lkO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3JlbS12aWRlbycpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBBdHRhY2ggdGhlIFBhcnRpY2lwYW50J3MgVHJhY2tzIHRvIHRoZSBET00uXHJcbiAgICBhdHRhY2hQYXJ0aWNpcGFudFRyYWNrcyhwYXJ0aWNpcGFudCwgY29udGFpbmVyLCByb29tKSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHZhciB0cmFja3MgPSBBcnJheS5mcm9tKHBhcnRpY2lwYW50LnRyYWNrcy52YWx1ZXMoKSkubWFwKGZ1bmN0aW9uICh0cmFja1B1YmxpY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFja1B1YmxpY2F0aW9uWyd0cmFjayddO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiYXR0YWNoUGFydGljaXBhbnRUcmFja3NcIik7XHJcbiAgICAgICAgX3RoaXMuYXR0YWNoVHJhY2tzKHRyYWNrcywgY29udGFpbmVyLCByb29tKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRhY2ggdGhlIFRyYWNrcyBmcm9tIHRoZSBET00uXHJcbiAgICBkZXRhY2hUcmFja3ModHJhY2tzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkZXRhY2hUcmFja3NcIik7XHJcbiAgICAgICAgdHJhY2tzLmZvckVhY2goZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmFjaykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2suZGV0YWNoKCkuZm9yRWFjaChmdW5jdGlvbiAoZGV0YWNoZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoZWRFbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRhY2ggdGhlIFBhcnRpY2lwYW50J3MgVHJhY2tzIGZyb20gdGhlIERPTS5cclxuICAgIGRldGFjaFBhcnRpY2lwYW50VHJhY2tzKHBhcnRpY2lwYW50LCByb29tLCBfdGhpcykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZGV0YWNoUGFydGljaXBhbnRUcmFja3NcIik7XHJcbiAgICAgICAgdmFyIHRyYWNrcyA9IEFycmF5LmZyb20ocGFydGljaXBhbnQudHJhY2tzLnZhbHVlcygpKS5tYXAoZnVuY3Rpb24gKHRyYWNrUHVibGljYXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYWNrUHVibGljYXRpb25bJ3RyYWNrJ107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgX3RoaXMuZGV0YWNoVHJhY2tzKHRyYWNrcywgcm9vbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gXHJcbiAgICBzdG9wVHJhY2tzKHRyYWNrcykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwic3RvcFRyYWNrc1wiKTtcclxuICAgICAgICB0cmFja3MuZm9yRWFjaChmdW5jdGlvbiAodHJhY2spIHtcclxuICAgICAgICAgICAgaWYgKHRyYWNrKSB7IHRyYWNrLnN0b3AoKTsgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTdWNjZXNzZnVsbHkgY29ubmVjdGVkIVxyXG4gICAgcm9vbUpvaW5lZChyb29tKSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8vIEF0dGFjaCB0aGUgVHJhY2tzIG9mIHRoZSBSb29tJ3MgUGFydGljaXBhbnRzLlxyXG4gICAgICAgIGlmICghX3RoaXMudmlkZW8pIHtcclxuICAgICAgICAgICAgX3RoaXMuZGlzYWJsZVZpZGVvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghX3RoaXMubWljcm9waG9uZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5tdXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb20ubG9jYWxQYXJ0aWNpcGFudC5vbignbmV0d29ya1F1YWxpdHlMZXZlbENoYW5nZWQnLCB0aGlzLm5ldHdvcmtRdWFsaXR5Q2hhbmdlZCk7XHJcbiAgICAgICAgcm9vbS5wYXJ0aWNpcGFudHMuZm9yRWFjaCgocGFydGljaXBhbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJQYXJ0aWNpcGFudDpcIiwgcGFydGljaXBhbnQpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFscmVhZHkgaW4gUm9vbTogJ1wiICsgcGFydGljaXBhbnQuaWRlbnRpdHkgKyBcIidcIik7XHJcbiAgICAgICAgICAgIF90aGlzLmF0dGFjaFBhcnRpY2lwYW50VHJhY2tzKHBhcnRpY2lwYW50LCBfdGhpcy5yZW1vdGVWaWRlby5uYXRpdmVFbGVtZW50LCByb29tKTtcclxuICAgICAgICAgICAgX3RoaXMucGFydGljaXBhbnRzQ291bnQgPSByb29tLnBhcnRpY2lwYW50cy5zaXplO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZmlyc3Q6cGFydGljaXBhbnRzQ291bnQ6JyArIF90aGlzLnBhcnRpY2lwYW50c0NvdW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gV2hlbiBhIFBhcnRpY2lwYW50IGpvaW5zIHRoZSBSb29tLCBsb2cgdGhlIGV2ZW50LlxyXG4gICAgICAgIHJvb20ub24oJ3BhcnRpY2lwYW50Q29ubmVjdGVkJywgZnVuY3Rpb24gKHBhcnRpY2lwYW50KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGFydGljaXBhbnQ6XCIsIHBhcnRpY2lwYW50KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJKb2luaW5nOiAnXCIgKyBwYXJ0aWNpcGFudC5pZGVudGl0eSArIFwiJ1wiKTtcclxuICAgICAgICAgICAgX3RoaXMucGFydGljaXBhbnRzQ291bnQgPSByb29tLnBhcnRpY2lwYW50cy5zaXplO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvbm5lY3RlZCAtIFBhcnRpY2lwYW50czpcIiArIHJvb20ucGFydGljaXBhbnRzLnNpemUpO1xyXG4gICAgICAgICAgICBpZiAoX3RoaXMucGFydGljaXBhbnRzQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmF0ZVRpbWVyKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBXaGVuIGEgUGFydGljaXBhbnQgYWRkcyBhIFRyYWNrLCBhdHRhY2ggaXQgdG8gdGhlIERPTS5cclxuICAgICAgICByb29tLm9uKCd0cmFja1N1YnNjcmliZWQnLCBmdW5jdGlvbiAodHJhY2ssIHRyYWNrUHVibGljYXRpb24sIHBhcnRpY2lwYW50KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTG9jYWwgUGFydGljaXBhbnQ6XCIsIHJvb20ubG9jYWxQYXJ0aWNpcGFudCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVtb3RlIFBhcnRpY2lwYW50OlwiLCByb29tLnJlbW90ZVBhcnRpY2lwYW50KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFydGljaXBhbnQuaWRlbnRpdHkgKyAnIGFkZGVkIHRyYWNrOiAnICsgdHJhY2sua2luZCk7XHJcbiAgICAgICAgICAgIF90aGlzLnBhcnRpY2lwYW50c0NvdW50ID0gcm9vbS5wYXJ0aWNpcGFudHMuc2l6ZTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJQYXJ0aWNpcGFudHM6XCIgK190aGlzLnBhcnRpY2lwYW50c0NvdW50KTtcclxuICAgICAgICAgICAgLy8gdmFyIHByZXZpZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVtb3RlVmlkZW8nKTtcclxuICAgICAgICAgICAgX3RoaXMuYXR0YWNoVHJhY2tzKFt0cmFja10sIF90aGlzLnJlbW90ZVZpZGVvLm5hdGl2ZUVsZW1lbnQsIHJvb20pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndHJhY2tzdWJzY3JpYmVkJyk7XHJcbiAgICAgICAgICAgIGlmKHRyYWNrLmtpbmQgPT09ICd2aWRlbycpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZVJlbW90ZVBhcnRpY2lwYW50RGV0YWlscyhfdGhpcy5yZW1vdGVWaWRlby5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoX3RoaXMucGFydGljaXBhbnRzQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmF0ZVRpbWVyKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBXaGVuIGEgUGFydGljaXBhbnQgcmVtb3ZlcyBhIFRyYWNrLCBkZXRhY2ggaXQgZnJvbSB0aGUgRE9NLlxyXG4gICAgICAgIHJvb20ub24oJ3RyYWNrVW5zdWJzY3JpYmVkJywgZnVuY3Rpb24gKHRyYWNrLCB0cmFja1B1YmxpY2F0aW9uLCBwYXJ0aWNpcGFudCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYXJ0aWNpcGFudC5pZGVudGl0eSArICcgcmVtb3ZlZCB0cmFjazogJyArIHRyYWNrLmtpbmQpO1xyXG4gICAgICAgICAgICBfdGhpcy5kZXRhY2hUcmFja3MoW3RyYWNrXSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0cmFja1Vuc3Vic2NyaWJlZCcpO1xyXG4gICAgICAgICAgICBpZih0cmFjay5raW5kID09PSAndmlkZW8nKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hZGRSZW1vdGVQYXJ0aWNpcGFudERldGFpbHMoX3RoaXMucmVtb3RlVmlkZW8ubmF0aXZlRWxlbWVudCwgcGFydGljaXBhbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vbS5vbigncGFydGljaXBhbnRSZWNvbm5lY3RpbmcnLCByZW1vdGVQYXJ0aWNpcGFudCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlbW90ZVBhcnRpY2lwYW50LnN0YXRlLCAncmVjb25uZWN0aW5nJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3JlbW90ZVBhcnRpY2lwYW50LmlkZW50aXR5fSBpcyByZWNvbm5lY3RpbmcgdGhlIHNpZ25hbGluZyBjb25uZWN0aW9uIHRvIHRoZSBSb29tIWApO1xyXG4gICAgICAgICAgICAvKiBVcGRhdGUgdGhlIFJlbW90ZVBhcnRpY2lwYW50IFVJIGhlcmUgKi9cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcm9vbS5vbigncGFydGljaXBhbnRSZWNvbm5lY3RlZCcsIHJlbW90ZVBhcnRpY2lwYW50ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtb3RlUGFydGljaXBhbnQuc3RhdGUsICdjb25uZWN0ZWQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7cmVtb3RlUGFydGljaXBhbnQuaWRlbnRpdHl9IGhhcyByZWNvbm5lY3RlZCB0aGUgc2lnbmFsaW5nIGNvbm5lY3Rpb24gdG8gdGhlIFJvb20hYCk7XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgUmVtb3RlUGFydGljaXBhbnQgVUkgaGVyZSAqL1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gV2hlbiBhIFBhcnRpY2lwYW50IGxlYXZlcyB0aGUgUm9vbSwgZGV0YWNoIGl0cyBUcmFja3MuXHJcbiAgICAgICAgcm9vbS5vbigncGFydGljaXBhbnREaXNjb25uZWN0ZWQnLCBmdW5jdGlvbiAocGFydGljaXBhbnQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJQYXJ0aWNpcGFudCAnXCIgKyBwYXJ0aWNpcGFudC5pZGVudGl0eSArIFwiJyBsZWZ0IHRoZSByb29tXCIpO1xyXG4gICAgICAgICAgICBfdGhpcy5kZXRhY2hQYXJ0aWNpcGFudFRyYWNrcyhwYXJ0aWNpcGFudCwgcm9vbSwgX3RoaXMpO1xyXG4gICAgICAgICAgICBfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9IHJvb20ucGFydGljaXBhbnRzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlzQ29ubmVjdGVkIC0gUGFydGljaXBhbnRzIFNpemU6XCIgKyByb29tLnBhcnRpY2lwYW50cy5zaXplKTtcclxuICAgICAgICAgICAgX3RoaXMucmVtb3ZlUmVtb3RlUGFydGljaXBhbnREZXRhaWxzKF90aGlzLnJlbW90ZVZpZGVvLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmF0ZVRpbWVyKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJvb20ub24oJ3JlY29ubmVjdGluZycsIGVycm9yID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vbS5zdGF0ZSwgJ3JlY29ubmVjdGluZycpO1xyXG4gICAgICAgICAgICBfdGhpcy5zZW5kRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICBfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9IHJvb20ucGFydGljaXBhbnRzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdGVkIC0gUGFydGljaXBhbnRzOlwiICsgcm9vbS5wYXJ0aWNpcGFudHMuc2l6ZSk7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWN0aXZhdGVUaW1lcih0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgYXBwbGljYXRpb24gVUkgaGVyZSAqL1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByb29tLm9uKCdyZWNvbm5lY3RlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vbS5zdGF0ZSwgJ2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVjb25uZWN0ZWQgeW91ciBzaWduYWxpbmcgYW5kIG1lZGlhIGNvbm5lY3Rpb25zIScpO1xyXG4gICAgICAgICAgICBfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9IHJvb20ucGFydGljaXBhbnRzLnNpemU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdGVkIC0gUGFydGljaXBhbnRzOlwiICsgcm9vbS5wYXJ0aWNpcGFudHMuc2l6ZSk7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5wYXJ0aWNpcGFudHNDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWN0aXZhdGVUaW1lcih0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmFjdGl2YXRlVGltZXIoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgYXBwbGljYXRpb24gVUkgaGVyZSAqL1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAvLyBPbmNlIHRoZSBMb2NhbFBhcnRpY2lwYW50IGxlYXZlcyB0aGUgcm9vbSwgZGV0YWNoIHRoZSBUcmFja3NcclxuICAgICAgICAvLyBvZiBhbGwgUGFydGljaXBhbnRzLCBpbmNsdWRpbmcgdGhhdCBvZiB0aGUgTG9jYWxQYXJ0aWNpcGFudC5cclxuICAgICAgICByb29tLm9uKCdkaXNjb25uZWN0ZWQnLCBmdW5jdGlvbiAocm9vbSwgZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0xlZnQnKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vbS5zdGF0ZSwgJ2Rpc2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIF90aGlzLnNlbmRFcnJvcihlcnJvcik7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJvb20ubG9jYWxQYXJ0aWNpcGFudC50cmFja3MuZm9yRWFjaChwdWJsaWNhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBwdWJsaWNhdGlvbi50cmFjay5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICBwdWJsaWNhdGlvbi51bnB1Ymxpc2goKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaGVkRWxlbWVudHMgPSBwdWJsaWNhdGlvbi50cmFjay5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIGF0dGFjaGVkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQucmVtb3ZlKCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKF90aGlzLmxvY2FsVmlkZW8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsRWxlbWVudCA9IF90aGlzLmxvY2FsVmlkZW8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChsb2NhbEVsZW1lbnQuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsRWxlbWVudC5yZW1vdmVDaGlsZChsb2NhbEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKF90aGlzLnJlbW90ZVZpZGVvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdGVFbGVtZW50ID0gX3RoaXMucmVtb3RlVmlkZW8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChyZW1vdGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGVFbGVtZW50LnJlbW92ZUNoaWxkKHJlbW90ZUVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX3RoaXMucGFydGljaXBhbnRzQ291bnQgPSByb29tLnBhcnRpY2lwYW50cy5zaXplO1xyXG4gICAgICAgICAgICBfdGhpcy5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZW1vdmVSZW1vdGVQYXJ0aWNpcGFudERldGFpbHMoY29udGFpbmVyKSB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbW90ZUltZycpO1xyXG4gICAgICAgIGlmKGRpdikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lciwgZGl2KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhZGRSZW1vdGVQYXJ0aWNpcGFudERldGFpbHMoY29udGFpbmVyLCBwYXJ0aWNpcGFudCkge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywncmVtb3RlSW1nJyk7XHJcbiAgICAgICAgY29uc3QgZGl2MSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIGRpdjEuc2V0QXR0cmlidXRlKCdjbGFzcycsICdhdmF0YXItaW1nJyk7XHJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRpdjEpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaXYyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnYXZhdGFyLXRleHQnKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGVudERpdiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBhcnRpY2lwYW50LmlkZW50aXR5KTtcclxuICAgICAgICBkaXYyLmFwcGVuZENoaWxkKGNvbnRlbnREaXYpO1xyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChkaXYyKTtcclxuICAgICAgICAvLyBjb25zdCBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltYWdlJyk7XHJcbiAgICAgICAgLy8gaW1hZ2Uuc2V0QXR0cmlidXRlKCdjbGFzcycsICcnKTtcclxuICAgICAgICAvLyBpbWFnZS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHBhcnRpY2lwYW50LmlkZW50aXR5KTtcclxuICAgICAgICAvLyBkaXYxLmFwcGVuZENoaWxkKGltYWdlKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lciwgZGl2KTtcclxuICAgIH1cclxuICAgIGRpc2Nvbm5lY3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGlmIChfdGhpcy5wcmV2aWV3VHJhY2tzKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnByZXZpZXdUcmFja3MuZm9yRWFjaChsb2NhbFRyYWNrID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2FsVHJhY2suc3RvcCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3RoaXMucHJldmlld1RyYWNrcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKF90aGlzLmFjdGl2ZVJvb20gJiYgX3RoaXMuYWN0aXZlUm9vbS5sb2NhbFBhcnRpY2lwYW50ICYmIF90aGlzLmFjdGl2ZVJvb20ubG9jYWxQYXJ0aWNpcGFudC5sb2NhbFRyYWNrcykge1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tLmxvY2FsUGFydGljaXBhbnQubG9jYWxUcmFja3MuZm9yRWFjaChsb2NhbFRyYWNrID0+IHtcclxuICAgICAgICAgICAgICAgIGxvY2FsVHJhY2suc3RvcCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKF90aGlzLmFjdGl2ZVJvb20gJiYgX3RoaXMuYWN0aXZlUm9vbSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBfdGhpcy5hY3RpdmVSb29tLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgX3RoaXMuYWN0aXZlUm9vbSA9IG51bGw7XHJcbiAgICAgICAgICAgIF90aGlzLmNhbTFEZXZpY2UgPSBudWxsO1xyXG4gICAgICAgICAgICBfdGhpcy5jYW0yRGV2aWNlID0gbnVsbDtcclxuICAgICAgICAgICAgX3RoaXMuc2VsZWN0ZWRWaWRlb0lkID0gbnVsbDsgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIF90aGlzLnZpZGVvID0gdHJ1ZTtcclxuICAgICAgICBfdGhpcy5taWNyb3Bob25lID0gdHJ1ZTtcclxuICAgICAgICBpZiAoX3RoaXMucmVtb3RlVmlkZW8pIHtcclxuICAgICAgICAgICAgX3RoaXMucmVtb3ZlUmVtb3RlUGFydGljaXBhbnREZXRhaWxzKF90aGlzLnJlbW90ZVZpZGVvLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIH0gXHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -169,13 +169,13 @@ export class WordProcessor {
|
|
|
169
169
|
return (term === term_only) ? term_only : term;
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
173
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
172
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WordProcessor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
173
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WordProcessor, providedIn: 'root' });
|
|
174
174
|
}
|
|
175
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
175
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WordProcessor, decorators: [{
|
|
176
176
|
type: Injectable,
|
|
177
177
|
args: [{
|
|
178
178
|
providedIn: 'root'
|
|
179
179
|
}]
|
|
180
180
|
}], ctorParameters: () => [] });
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1wcm9jZXNzb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2pjb25zdW1lci1zaGFyZWQvc3JjL2xpYi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUs5Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU87SUFDdEMsYUFBYSxDQUFNO0lBQ25CLGVBQWUsQ0FBTTtJQUVyQixnQkFBZ0IsQ0FBQztJQUNqQjs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxhQUFrQjtRQUNqQyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUNEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxXQUFnQjtRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsR0FBUTtRQUNuQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUs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LFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO3VHQXJLVSxhQUFhOzJHQUFiLGFBQWEsY0FMWixNQUFNOzsyRkFLUCxhQUFhO2tCQU56QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IE1lc3NhZ2VzIH0gZnJvbSBcIi4vcHJvamVjdC1tZXNzYWdlc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG4vKipcclxuICogVGVybWlub2xvZ3kvV29yZCBGYWN0b3J5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV29yZFByb2Nlc3NvciB7XHJcbiAgVElNRU9VVF9ERUxBWV9MQVJHRTEwID0gMTAwMDA7IC8vIG1zZWNcclxuICB0ZXJtaW5vbG9naWVzOiBhbnk7XHJcbiAgc3B0ZXJtaW5vbG9naWVzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIHNldCB0aGUgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ2llcyBcclxuICAgKi9cclxuICBzZXRUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2dpZXM6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJTZXQgVGVybWlub2xvZ2llczpcIiwgdGVybWlub2xvZ2llcyk7XHJcbiAgICB0aGlzLnRlcm1pbm9sb2dpZXMgPSB0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0VGVybWlub2xvZ2llcygpIHtcclxuICAgIHJldHVybiB0aGlzLnRlcm1pbm9sb2dpZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAgTWV0aG9kIHRvIHNldCB0aGUgc3AgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ3kgXHJcbiAgICovXHJcbiAgc2V0U1BUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2d5OiBhbnkpIHtcclxuICAgIHRoaXMuc3B0ZXJtaW5vbG9naWVzID0gdGVybWlub2xvZ3k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSBzcCB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0U1BUZXJtaW5vbG9naWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3B0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHJldHVybnMgdGhlIENhbWVsQ2FzZVxyXG4gICAqIEBwYXJhbSBzdHIgdGV4dCB0byBjb252ZXJ0XHJcbiAgICovXHJcbiAgdG9DYW1lbENhc2Uoc3RyOiBhbnkpIHtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IHRoZSBmaXJzdCBsZXR0ZXIgdG8gVXBwZXJjYXNlXHJcbiAgICogQHBhcmFtIHN0ciBcclxuICAgKi9cclxuICBmaXJzdFRvVXBwZXIoc3RyOiBhbnkpIHtcclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgaWYgKHN0ci5zdWJzdHIoMCwgNykgPT09ICdodHRwOi8vJyB8fCBzdHIuc3Vic3RyKDAsIDgpID09PSAnaHR0cHM6Ly8nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cigxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93L0hpZGUgU3VjY2VzcyBvciBFcnJvciBNZXNzYWdlc1xyXG4gICAqIEBwYXJhbSBvYiBPYmplY3QgdG8gcHV0IHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZSB0byBzaG93XHJcbiAgICovXHJcbiAgYXBpU3VjY2Vzc0F1dG9IaWRlKG9iOiBhbnksIG1lc3NhZ2U6IGFueSkge1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShtZXNzYWdlKTtcclxuICAgIG9iLmFwaV9zdWNjZXNzID0gdGhpcy5maXJzdFRvVXBwZXIocmVwbGFjZWRfbWVzc2FnZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgb2IuYXBpX3N1Y2Nlc3MgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93IGVycm9yIGFuZCBoaWRlIGl0IGF1dG9tYXRpY2FsbHlcclxuICAgKiBAcGFyYW0gb2IgT2JqZWN0IGhvbGRzIHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIGVycm9yIE1lc3NhZ2UgdG8gYmUgc2hvd25cclxuICAgKi9cclxuICBhcGlFcnJvckF1dG9IaWRlKG9iOiBhbnksIGVycm9yOiBhbnkpIHtcclxuICAgIC8vIGVycm9yID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShlcnJvcik7XHJcbiAgICBvYi5hcGlfZXJyb3IgPSB0aGlzLmZpcnN0VG9VcHBlcihyZXBsYWNlZF9tZXNzYWdlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBvYi5hcGlfZXJyb3IgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0ZXJtaW5vbG9naWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFRlcm1pbm9sb2dpZXMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRlcm1fb25seSA9IHRlcm0ucmVwbGFjZSgvW1xcW1xcXSddL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJHZXQgVGVybWlub2xvZ3kgVGVybVwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSB0aGUgdGVybSB3aXRoaW4gdGhlIGZ1bGwgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0ZXJtIHRlcm0gdG8gYmUgcmVwbGFjZWRcclxuICAgKiBAcGFyYW0gZnVsbF9tZXNzYWdlIGZ1bGwgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHJlbW92ZVRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIGZ1bGxfbWVzc2FnZTogYW55KSB7XHJcbiAgICBjb25zdCB0ZXJtX3JlcGxhY2UgPSB0aGlzLmdldFRlcm1pbm9sb2d5VGVybSh0ZXJtKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiVGVybSBUbyByZXBsYWNlOlwiLCB0ZXJtX3JlcGxhY2UpO1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybS5yZXBsYWNlKC9bXFxbXFxdJ10vZywgJycpOyAvLyB0ZXJtIG1heSBtZSB3aXRoIG9yIHdpdGhvdXQgJ1snICddJ1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtOlwiLCB0ZXJtX29ubHkpO1xyXG4gICAgcmV0dXJuIGZ1bGxfbWVzc2FnZS5yZXBsYWNlKCdbJyArIHRlcm1fb25seSArICddJywgdGVybV9yZXBsYWNlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZCB0aGUgdGVybWlub2xvZ3lcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBcclxuICAgKi9cclxuICBmaW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2U6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJNZXNzYWdlOlwiLCBtZXNzYWdlKTtcclxuICAgIGxldCByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IG1lc3NhZ2UubWF0Y2goL1xcWyguKj8pXFxdL2cpO1xyXG4gICAgICByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIk1hdGNoZXNcIiwgbWF0Y2hlcyk7XHJcbiAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XHJcbiAgICAgICAgICByZXBsYWNlZF9tc2cgPSB0aGlzLnJlbW92ZVRlcm1pbm9sb2d5VGVybShtYXRjaCwgcmVwbGFjZWRfbXNnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXBsYWNlZF9tc2c7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlcyBsaXN0XHJcbiAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIGZvciB0aGUgbWVzc2FnZVxyXG4gICAqL1xyXG4gIGdldFByb2plY3RNZXNzc2FnZXMoa2V5OiBhbnkpIHtcclxuICAgIGxldCBtZXNzYWdlID0gTWVzc2FnZXNba2V5XSB8fCAnJztcclxuICAgIG1lc3NhZ2UgPSB0aGlzLmZpbmRUZXJtaW5vbG9neVRlcm0obWVzc2FnZSk7XHJcbiAgICByZXR1cm4gdGhpcy5maXJzdFRvVXBwZXIobWVzc2FnZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3QgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBlcnJvciBvYmplY3RcclxuICAgKiBAcGFyYW0gZXJyb3IgZXJyb3IgbWVzc2FnZSB0byBzaG93blxyXG4gICAqL1xyXG4gIGdldFByb2plY3RFcnJvck1lc3NzYWdlcyhtZXNzYWdlOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0aGlzLnRlcm1pbm9sb2dpZXMpO1xyXG4gICAgfVxyXG4gICAgLy8gbGV0IG1lc3NhZ2UgPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICBtZXNzYWdlID0gdGhpcy5maW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyc3RUb1VwcGVyKG1lc3NhZ2UpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFNQVGVybWlub2xvZ3lUZXJtKHRlcm06IGFueSkge1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybTtcclxuICAgIGNvbnN0IHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFNQVGVybWlub2xvZ2llcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtaW5vbG9naWVzOlwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1wcm9jZXNzb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2pjb25zdW1lci1zaGFyZWQvc3JjL2xpYi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUs5Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU87SUFDdEMsYUFBYSxDQUFNO0lBQ25CLGVBQWUsQ0FBTTtJQUVyQixnQkFBZ0IsQ0FBQztJQUNqQjs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxhQUFrQjtRQUNqQyxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztJQUNEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxXQUFnQjtRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsR0FBUTtRQUNuQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUs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LFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO3dHQXJLVSxhQUFhOzRHQUFiLGFBQWEsY0FMWixNQUFNOzs0RkFLUCxhQUFhO2tCQU56QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IE1lc3NhZ2VzIH0gZnJvbSBcIi4vcHJvamVjdC1tZXNzYWdlc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG4vKipcclxuICogVGVybWlub2xvZ3kvV29yZCBGYWN0b3J5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV29yZFByb2Nlc3NvciB7XHJcbiAgVElNRU9VVF9ERUxBWV9MQVJHRTEwID0gMTAwMDA7IC8vIG1zZWNcclxuICB0ZXJtaW5vbG9naWVzOiBhbnk7XHJcbiAgc3B0ZXJtaW5vbG9naWVzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIHNldCB0aGUgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ2llcyBcclxuICAgKi9cclxuICBzZXRUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2dpZXM6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJTZXQgVGVybWlub2xvZ2llczpcIiwgdGVybWlub2xvZ2llcyk7XHJcbiAgICB0aGlzLnRlcm1pbm9sb2dpZXMgPSB0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0VGVybWlub2xvZ2llcygpIHtcclxuICAgIHJldHVybiB0aGlzLnRlcm1pbm9sb2dpZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAgTWV0aG9kIHRvIHNldCB0aGUgc3AgdGVybWlubG9naWVzIGZvciBKYWxkZWVcclxuICAgKiBAcGFyYW0gdGVybWlub2xvZ3kgXHJcbiAgICovXHJcbiAgc2V0U1BUZXJtaW5vbG9naWVzKHRlcm1pbm9sb2d5OiBhbnkpIHtcclxuICAgIHRoaXMuc3B0ZXJtaW5vbG9naWVzID0gdGVybWlub2xvZ3k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gZ2V0IHRoZSBzcCB0ZXJtaW5vbG9naWVzXHJcbiAgICovXHJcbiAgZ2V0U1BUZXJtaW5vbG9naWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3B0ZXJtaW5vbG9naWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHJldHVybnMgdGhlIENhbWVsQ2FzZVxyXG4gICAqIEBwYXJhbSBzdHIgdGV4dCB0byBjb252ZXJ0XHJcbiAgICovXHJcbiAgdG9DYW1lbENhc2Uoc3RyOiBhbnkpIHtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IHRoZSBmaXJzdCBsZXR0ZXIgdG8gVXBwZXJjYXNlXHJcbiAgICogQHBhcmFtIHN0ciBcclxuICAgKi9cclxuICBmaXJzdFRvVXBwZXIoc3RyOiBhbnkpIHtcclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgaWYgKHN0ci5zdWJzdHIoMCwgNykgPT09ICdodHRwOi8vJyB8fCBzdHIuc3Vic3RyKDAsIDgpID09PSAnaHR0cHM6Ly8nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cigxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93L0hpZGUgU3VjY2VzcyBvciBFcnJvciBNZXNzYWdlc1xyXG4gICAqIEBwYXJhbSBvYiBPYmplY3QgdG8gcHV0IHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZSB0byBzaG93XHJcbiAgICovXHJcbiAgYXBpU3VjY2Vzc0F1dG9IaWRlKG9iOiBhbnksIG1lc3NhZ2U6IGFueSkge1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShtZXNzYWdlKTtcclxuICAgIG9iLmFwaV9zdWNjZXNzID0gdGhpcy5maXJzdFRvVXBwZXIocmVwbGFjZWRfbWVzc2FnZSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgb2IuYXBpX3N1Y2Nlc3MgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTaG93IGVycm9yIGFuZCBoaWRlIGl0IGF1dG9tYXRpY2FsbHlcclxuICAgKiBAcGFyYW0gb2IgT2JqZWN0IGhvbGRzIHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIGVycm9yIE1lc3NhZ2UgdG8gYmUgc2hvd25cclxuICAgKi9cclxuICBhcGlFcnJvckF1dG9IaWRlKG9iOiBhbnksIGVycm9yOiBhbnkpIHtcclxuICAgIC8vIGVycm9yID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgY29uc3QgcmVwbGFjZWRfbWVzc2FnZSA9IHRoaXMuZmluZFRlcm1pbm9sb2d5VGVybShlcnJvcik7XHJcbiAgICBvYi5hcGlfZXJyb3IgPSB0aGlzLmZpcnN0VG9VcHBlcihyZXBsYWNlZF9tZXNzYWdlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBvYi5hcGlfZXJyb3IgPSBudWxsO1xyXG4gICAgfSwgdGhpcy5USU1FT1VUX0RFTEFZX0xBUkdFMTApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0ZXJtaW5vbG9naWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFRlcm1pbm9sb2dpZXMoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRlcm1fb25seSA9IHRlcm0ucmVwbGFjZSgvW1xcW1xcXSddL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJHZXQgVGVybWlub2xvZ3kgVGVybVwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSB0aGUgdGVybSB3aXRoaW4gdGhlIGZ1bGwgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSB0ZXJtIHRlcm0gdG8gYmUgcmVwbGFjZWRcclxuICAgKiBAcGFyYW0gZnVsbF9tZXNzYWdlIGZ1bGwgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHJlbW92ZVRlcm1pbm9sb2d5VGVybSh0ZXJtOiBhbnksIGZ1bGxfbWVzc2FnZTogYW55KSB7XHJcbiAgICBjb25zdCB0ZXJtX3JlcGxhY2UgPSB0aGlzLmdldFRlcm1pbm9sb2d5VGVybSh0ZXJtKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiVGVybSBUbyByZXBsYWNlOlwiLCB0ZXJtX3JlcGxhY2UpO1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybS5yZXBsYWNlKC9bXFxbXFxdJ10vZywgJycpOyAvLyB0ZXJtIG1heSBtZSB3aXRoIG9yIHdpdGhvdXQgJ1snICddJ1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtOlwiLCB0ZXJtX29ubHkpO1xyXG4gICAgcmV0dXJuIGZ1bGxfbWVzc2FnZS5yZXBsYWNlKCdbJyArIHRlcm1fb25seSArICddJywgdGVybV9yZXBsYWNlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZCB0aGUgdGVybWlub2xvZ3lcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBcclxuICAgKi9cclxuICBmaW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2U6IGFueSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJNZXNzYWdlOlwiLCBtZXNzYWdlKTtcclxuICAgIGxldCByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IG1lc3NhZ2UubWF0Y2goL1xcWyguKj8pXFxdL2cpO1xyXG4gICAgICByZXBsYWNlZF9tc2cgPSBtZXNzYWdlO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIk1hdGNoZXNcIiwgbWF0Y2hlcyk7XHJcbiAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XHJcbiAgICAgICAgICByZXBsYWNlZF9tc2cgPSB0aGlzLnJlbW92ZVRlcm1pbm9sb2d5VGVybShtYXRjaCwgcmVwbGFjZWRfbXNnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXBsYWNlZF9tc2c7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlcyBsaXN0XHJcbiAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIGZvciB0aGUgbWVzc2FnZVxyXG4gICAqL1xyXG4gIGdldFByb2plY3RNZXNzc2FnZXMoa2V5OiBhbnkpIHtcclxuICAgIGxldCBtZXNzYWdlID0gTWVzc2FnZXNba2V5XSB8fCAnJztcclxuICAgIG1lc3NhZ2UgPSB0aGlzLmZpbmRUZXJtaW5vbG9neVRlcm0obWVzc2FnZSk7XHJcbiAgICByZXR1cm4gdGhpcy5maXJzdFRvVXBwZXIobWVzc2FnZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3QgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBlcnJvciBvYmplY3RcclxuICAgKiBAcGFyYW0gZXJyb3IgZXJyb3IgbWVzc2FnZSB0byBzaG93blxyXG4gICAqL1xyXG4gIGdldFByb2plY3RFcnJvck1lc3NzYWdlcyhtZXNzYWdlOiBhbnksIHRlcm1pbm9sb2dpZXM/OiBhbnkpIHtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHRoaXMuc2V0VGVybWlub2xvZ2llcyh0aGlzLnRlcm1pbm9sb2dpZXMpO1xyXG4gICAgfVxyXG4gICAgLy8gbGV0IG1lc3NhZ2UgPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICBtZXNzYWdlID0gdGhpcy5maW5kVGVybWlub2xvZ3lUZXJtKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyc3RUb1VwcGVyKG1lc3NhZ2UpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRlcm1pbm9sb2d5IGZyb20gdGVybWlub2xvZ2llc1xyXG4gICAqIEBwYXJhbSB0ZXJtIFxyXG4gICAqL1xyXG4gIGdldFNQVGVybWlub2xvZ3lUZXJtKHRlcm06IGFueSkge1xyXG4gICAgY29uc3QgdGVybV9vbmx5ID0gdGVybTtcclxuICAgIGNvbnN0IHRlcm1pbm9sb2dpZXMgPSB0aGlzLmdldFNQVGVybWlub2xvZ2llcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJUZXJtaW5vbG9naWVzOlwiLCB0ZXJtaW5vbG9naWVzKTtcclxuICAgIGlmICh0ZXJtaW5vbG9naWVzKSB7XHJcbiAgICAgIHJldHVybiAodGVybWlub2xvZ2llc1t0ZXJtX29ubHldKSA/IHRlcm1pbm9sb2dpZXNbdGVybV9vbmx5XSA6ICgodGVybSA9PT0gdGVybV9vbmx5KSA/IHRlcm1fb25seSA6IHRlcm0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICh0ZXJtID09PSB0ZXJtX29ubHkpID8gdGVybV9vbmx5IDogdGVybTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
|