@sunbird-cb/utils-v2 0.0.19 → 0.0.21

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.
@@ -11,6 +11,7 @@ var EventService = (function () {
11
11
  function EventService(environment, utilitySvc) {
12
12
  this.utilitySvc = utilitySvc;
13
13
  this.todaysEvents = [];
14
+ this.todaysLiveEvents = [];
14
15
  this.eventsSubject = new Subject();
15
16
  this.events$ = this.eventsSubject.asObservable();
16
17
  this.eventsChatbotSubject = new Subject();
@@ -141,16 +142,35 @@ var EventService = (function () {
141
142
  var min = stime.substr(2, 3);
142
143
  return date + " " + hour + min;
143
144
  };
145
+ EventService.prototype.sortItemByTime = function (eventsdata) {
146
+ return eventsdata.sort((function (a, b) {
147
+ var firstDate = new Date(a.eventDate);
148
+ var secondDate = new Date(b.eventDate);
149
+ return secondDate > firstDate ? 1 : -1;
150
+ }));
151
+ };
152
+ EventService.prototype.sortItemByTimeAsc = function (eventsdata) {
153
+ return eventsdata.sort((function (a, b) {
154
+ var firstDate = new Date(a.eventDate);
155
+ var secondDate = new Date(b.eventDate);
156
+ return secondDate < firstDate ? 1 : -1;
157
+ }));
158
+ };
144
159
  EventService.prototype.setEventListData = function (eventObj) {
145
160
  var _this = this;
146
161
  if (eventObj !== undefined) {
147
162
  this.todaysEvents = [];
163
+ this.todaysLiveEvents = [];
148
164
  var data_1 = eventObj;
149
165
  var isEventLive_1 = false;
150
166
  var isEventRecording_1 = false;
167
+ var isEventPast_1 = false;
168
+ var isEventFuture_1 = false;
151
169
  Object.keys(data_1).forEach((function (index) {
152
170
  isEventRecording_1 = false;
153
171
  isEventLive_1 = false;
172
+ isEventPast_1 = false;
173
+ isEventFuture_1 = false;
154
174
  var obj = data_1[index];
155
175
  var floor = Math.floor;
156
176
  var hours = floor(obj.duration / 60);
@@ -186,9 +206,21 @@ var EventService = (function () {
186
206
  else if (today >= eventendDate) {
187
207
  isEventRecording_1 = true;
188
208
  isEventLive_1 = false;
209
+ if (moment(today).isAfter(eventendDate) && moment(today).isAfter(eventDate)) {
210
+ isEventPast_1 = true;
211
+ }
212
+ }
213
+ else {
214
+ if (moment(today).isBefore(eventDate) && moment(today).isBefore(eventendDate)) {
215
+ isEventFuture_1 = true;
216
+ }
189
217
  }
190
218
  var eventDataObj = {
219
+ eventDate: eventDate,
220
+ eventendDate: eventendDate,
191
221
  isEventLive: isEventLive_1,
222
+ isEventFuture: isEventFuture_1,
223
+ isEventPast: isEventPast_1,
192
224
  isEventRecording: isEventRecording_1,
193
225
  event: obj,
194
226
  eventName: obj.name,
@@ -204,15 +236,30 @@ var EventService = (function () {
204
236
  pastevent: false,
205
237
  };
206
238
  var isToday = _this.compareDate(obj.startDate);
207
- if (isToday && isEventLive_1) {
239
+ if (isToday) {
208
240
  _this.todaysEvents.push(eventDataObj);
209
241
  }
242
+ if (isToday && isEventLive_1) {
243
+ _this.todaysLiveEvents.push(eventDataObj);
244
+ }
210
245
  }));
211
- this.todaysEvents = this.todaysEvents.sort((function (a, b) {
212
- return (a.isEventLive === b.isEventLive) ? 0 : b.isEventLive ? -1 : 1;
213
- }));
246
+ this.todaysLiveEvents = this.sortItemByTime(this.todaysLiveEvents);
247
+ this.todaysEvents = this.getTodaysEvents(this.todaysEvents);
214
248
  }
215
249
  };
250
+ EventService.prototype.getTodaysEvents = function (eventData) {
251
+ var liveEvents = [];
252
+ var pastEvents = [];
253
+ var futureEvents = [];
254
+ liveEvents = this.todaysLiveEvents;
255
+ pastEvents = eventData.filter((function (pastEvent) { return pastEvent.isEventPast; }));
256
+ futureEvents = eventData.filter((function (futureEvent) { return futureEvent.isEventFuture; }));
257
+ liveEvents = this.sortItemByTimeAsc(liveEvents);
258
+ futureEvents = this.sortItemByTimeAsc(futureEvents);
259
+ pastEvents = this.sortItemByTime(pastEvents);
260
+ this.todaysEvents = tslib_1.__spread(liveEvents, futureEvents, pastEvents);
261
+ return this.todaysEvents;
262
+ };
216
263
  EventService.decorators = [
217
264
  { type: Injectable, args: [{
218
265
  providedIn: 'root',
@@ -228,6 +275,7 @@ var EventService = (function () {
228
275
  export { EventService };
229
276
  if (false) {
230
277
  EventService.prototype.todaysEvents;
278
+ EventService.prototype.todaysLiveEvents;
231
279
  EventService.prototype.eventsSubject;
232
280
  EventService.prototype.events$;
233
281
  EventService.prototype.eventsChatbotSubject;
@@ -239,4 +287,4 @@ if (false) {
239
287
  EventService.prototype.environment;
240
288
  EventService.prototype.utilitySvc;
241
289
  }
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL3V0aWxzLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbEQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBQ3RCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQTs7O0FBQzNCO0lBbUJFLHNCQUN5QixXQUFnQixFQUMvQixVQUEwQjtRQUExQixlQUFVLEdBQVYsVUFBVSxDQUFnQjtRQWpCcEMsaUJBQVksR0FBUSxFQUFFLENBQUE7UUFFZCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUEyQixDQUFBO1FBQ3ZELFlBQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRTFDLHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFBO1FBQzlELG1CQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFBO1FBRXhELDBCQUFxQixHQUFHLElBQUksT0FBTyxFQUEyQixDQUFBO1FBQy9ELG9CQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFBO1FBRTFELG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUE7UUFDekQsaUJBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBT3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO0lBRWhDLENBQUM7SUFFRCxvQ0FB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QUFFLE1BQU07aUJBQ25COzs7Z0RBa0JJLE1BQU0sU0FBQyxhQUFhO2dCQXhCaEIsY0FBYzs7O3VCQUh2QjtDQXdSQyxBQWpSRCxJQWlSQztTQTlRWSxZQUFZOztJQUN2QixvQ0FBc0I7SUFFdEIscUNBQThEO0lBQzlELCtCQUFrRDtJQUVsRCw0Q0FBcUU7SUFDckUsc0NBQWdFO0lBRWhFLDZDQUFzRTtJQUN0RSx1Q0FBa0U7SUFFbEUsdUNBQWdFO0lBQ2hFLG9DQUF5RDtJQUV6RCxtQ0FBZ0I7SUFHZCxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgV3NFdmVudHMgfSBmcm9tICcuL2V2ZW50Lm1vZGVsJ1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4vdXRpbGl0eS5zZXJ2aWNlJ1xyXG4vKiB0c2xpbnQ6ZGlzYWJsZSovXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFdmVudFNlcnZpY2Uge1xyXG4gIHRvZGF5c0V2ZW50czogYW55ID0gW11cclxuICBcclxuICBwcml2YXRlIGV2ZW50c1N1YmplY3QgPSBuZXcgU3ViamVjdDxXc0V2ZW50cy5JV3NFdmVudHM8YW55Pj4oKVxyXG4gIHB1YmxpYyBldmVudHMkID0gdGhpcy5ldmVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gIHByaXZhdGUgZXZlbnRzQ2hhdGJvdFN1YmplY3QgPSBuZXcgU3ViamVjdDxXc0V2ZW50cy5JV3NFdmVudHM8YW55Pj4oKVxyXG4gIHB1YmxpYyBjaGF0Ym90RXZlbnRzJCA9IHRoaXMuZXZlbnRzQ2hhdGJvdFN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuXHJcbiAgcHJpdmF0ZSBldmVudHNHZXRTdGFydFN1YmplY3QgPSBuZXcgU3ViamVjdDxXc0V2ZW50cy5JV3NFdmVudHM8YW55Pj4oKVxyXG4gIHB1YmxpYyBnZXRTdGFydEV2ZW50cyQgPSB0aGlzLmV2ZW50c0dldFN0YXJ0U3ViamVjdC5hc09ic2VydmFibGUoKVxyXG5cclxuICBwcml2YXRlIGV2ZW50c1BSU3ViamVjdCA9IG5ldyBTdWJqZWN0PFdzRXZlbnRzLklXc0V2ZW50czxhbnk+PigpXHJcbiAgcHVibGljIGdldFBSRXZlbnRzJCA9IHRoaXMuZXZlbnRzUFJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gIGVudmlyb25tZW50OiBhbnlcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcclxuICAgIHByaXZhdGUgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcclxuICAgIC8vIHRoaXMuZm9jdXNDaGFuZ2VFdmVudExpc3RlbmVyKClcclxuICB9XHJcblxyXG4gIGRpc3BhdGNoRXZlbnQ8VD4oZXZlbnQ6IFdzRXZlbnRzLklXc0V2ZW50czxUPikge1xyXG4gICAgZXZlbnQucGFnZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoZXZlbnQucGFnZUNvbnRleHQpXHJcbiAgICB0aGlzLmV2ZW50c1N1YmplY3QubmV4dChldmVudClcclxuICB9XHJcblxyXG4gIGRpc3BhdGNoQ2hhdGJvdEV2ZW50PFQ+KGV2ZW50OiBXc0V2ZW50cy5JV3NFdmVudHM8VD4pIHtcclxuICAgIHRoaXMuZXZlbnRzQ2hhdGJvdFN1YmplY3QubmV4dChldmVudClcclxuICB9XHJcblxyXG4gIGRpc3BhdGNoR2V0U3RhcnRlZEV2ZW50PFQ+KGV2ZW50OiBXc0V2ZW50cy5JV3NFdmVudHM8VD4pIHtcclxuICAgIHRoaXMuZXZlbnRzR2V0U3RhcnRTdWJqZWN0Lm5leHQoZXZlbnQpXHJcbiAgfVxyXG5cclxuICBkaXNwYXRjaFBsYXRmb3JtUmF0aW5nRXZlbnQ8VD4oZXZlbnQ6IFdzRXZlbnRzLklXc0V2ZW50czxUPikge1xyXG4gICAgdGhpcy5ldmVudHNQUlN1YmplY3QubmV4dChldmVudClcclxuICB9XHJcblxyXG5cclxuICAvLyBoZWxwZXIgZnVuY3Rpb25zXHJcbiAgcmFpc2VJbnRlcmFjdFRlbGVtZXRyeShlZGF0YTogV3NFdmVudHMuSVRlbGVtZXRyeUVkYXRhLCBvYmplY3Q6IGFueSwgcGFnZUNvbnRleHQ/OiBXc0V2ZW50cy5JVGVsZW1ldHJ5UGFnZUNvbnRleHQpIHtcclxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0Pih7XHJcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxyXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGVkYXRhLFxyXG4gICAgICAgIG9iamVjdCxcclxuICAgICAgICBwYWdlQ29udGV4dDogdGhpcy5nZXRDb250ZXh0KHBhZ2VDb250ZXh0KSxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxyXG4gICAgICB9LFxyXG4gICAgICBmcm9tOiAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJhaXNlRmVlZGJhY2tUZWxlbWV0cnkoZWRhdGE6IFdzRXZlbnRzLklUZWxlbWV0cnlFZGF0YSwgb2JqZWN0OiBhbnksIGZyb20/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0Pih7XHJcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxyXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGVkYXRhLFxyXG4gICAgICAgIG9iamVjdCxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkZlZWRiYWNrLFxyXG4gICAgICB9LFxyXG4gICAgICBmcm9tOiBmcm9tIHx8ICcnLFxyXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gUmFpc2UgY3VzdG9tIGltcHJlc3Npb24gZXZlbnRzIGVnOm9uIHRhYiBjaGFuZ2VcclxuICByYWlzZUN1c3RvbUltcHJlc3Npb24ob2JqZWN0OiBhbnksIHBhZ2VDb250ZXh0PzogV3NFdmVudHMuSVRlbGVtZXRyeVBhZ2VDb250ZXh0KSB7XHJcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbXByZXNzaW9uPih7XHJcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxyXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG9iamVjdCxcclxuICAgICAgICBwYWdlQ29udGV4dDogdGhpcy5nZXRDb250ZXh0KHBhZ2VDb250ZXh0KSxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkltcHJlc3Npb24sXHJcbiAgICAgIH0sXHJcbiAgICAgIGZyb206ICcnLFxyXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBmb2N1c0NoYW5nZUV2ZW50TGlzdGVuZXIoKSB7XHJcbiAgLy8gICBmcm9tRXZlbnQod2luZG93LCAnZm9jdXMnKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gIC8vICAgICB0aGlzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoJ2ZvY3VzJywgJ2dhaW5lZCcsIHt9KVxyXG4gIC8vICAgfSlcclxuICAvLyAgIGZyb21FdmVudCh3aW5kb3csICdibHVyJykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAvLyAgICAgdGhpcy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KCdmb2N1cycsICdsb3N0Jywge30pXHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gTWV0aG9kIHRvIGdldCB0aGUgY29udGV4dCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGVsZW1ldHJ5IGludGVyYWN0IGV2ZW50XHJcbiAgcHJpdmF0ZSBnZXRDb250ZXh0KHBhZ2VDb250ZXh0OiBXc0V2ZW50cy5JVGVsZW1ldHJ5UGFnZUNvbnRleHQgfCB1bmRlZmluZWQpOiBXc0V2ZW50cy5JVGVsZW1ldHJ5UGFnZUNvbnRleHQge1xyXG4gICAgY29uc3Qgcm91dGVEYXRhQ29udGV4dCA9IHRoaXMudXRpbGl0eVN2Yy5yb3V0ZURhdGFcclxuICAgIC8vIGluaXRpYWxpemUgd2l0aCB0aGUgcm91dGUgZGF0YSBjb25maWd1cmF0aW9uIC0gY3VycmVudCByb3V0ZSdzIHBhZ2VJRCAmIG1vZHVsZVxyXG4gICAgY29uc3QgZmluYWxDb250ZXh0OiBXc0V2ZW50cy5JVGVsZW1ldHJ5UGFnZUNvbnRleHQgPSB7XHJcbiAgICAgIHBhZ2VJZDogcm91dGVEYXRhQ29udGV4dC5wYWdlSWQsXHJcbiAgICAgIG1vZHVsZTogcm91dGVEYXRhQ29udGV4dC5tb2R1bGUsXHJcbiAgICB9XHJcbiAgICBpZiAocGFnZUNvbnRleHQpIHtcclxuICAgICAgLy8gaWYgY29udGV4dCBoYXMgcGFnZUlkRXh0LCBhcHBlbmQgaXQgdG8gdGhlIHJvdXRlJ3MgcGFnZUlkXHJcbiAgICAgIGlmIChwYWdlQ29udGV4dC5wYWdlSWRFeHQpIHtcclxuICAgICAgICBmaW5hbENvbnRleHQucGFnZUlkID0gYCR7cm91dGVEYXRhQ29udGV4dC5wYWdlSWR9XyR7cGFnZUNvbnRleHQucGFnZUlkRXh0fWBcclxuICAgICAgfSBlbHNlIGlmIChwYWdlQ29udGV4dC5wYWdlSWQpIHtcclxuICAgICAgICAvLyBlbHNlIGNvbnRleHQgaGFzIHBhZ2VJZCwgb3ZlcnJpZGUgaXQgdG8gdGhlIGZpbmFsIHBhZ2VJRFxyXG4gICAgICAgIGZpbmFsQ29udGV4dC5wYWdlSWQgPSBwYWdlQ29udGV4dC5wYWdlSWRcclxuICAgICAgfVxyXG4gICAgICAvLyBpZiBjb250ZXh0IGhhcyBtb2R1bGUsIG92ZXJyaWRlIGl0IHRvIHRoZSBmaW5hbCBtb2R1bGVcclxuICAgICAgaWYgKHBhZ2VDb250ZXh0Lm1vZHVsZSkge1xyXG4gICAgICAgIGZpbmFsQ29udGV4dC5tb2R1bGUgPSBwYWdlQ29udGV4dC5tb2R1bGVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbENvbnRleHRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVUYWJUZWxlbWV0cnkoc3ViVHlwZTogc3RyaW5nLCBkYXRhOiBXc0V2ZW50cy5JVGVsZW1ldHJ5VGFiRGF0YSwgb2JqZWN0PzphbnkpIHtcclxuICAgIC8vIHJhaXNlIGEgdGFiIGNsaWNrIGludGVyYWN0IGV2ZW50XHJcbiAgICB0aGlzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXHJcbiAgICAgIHtcclxuICAgICAgICBzdWJUeXBlLFxyXG4gICAgICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFR5cGVzLkNMSUNLLFxyXG4gICAgICAgIGlkOiBgJHtfLmNhbWVsQ2FzZShkYXRhLmxhYmVsKX0tdGFiYCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIC8vIGNvbnRleHQ6IHtcclxuICAgICAgICAvLyAgIHBvc2l0aW9uOiBkYXRhLmluZGV4LFxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgICAgLi4ub2JqZWN0XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgcGFnZUlkRXh0OiBgJHtfLmNhbWVsQ2FzZShkYXRhLmxhYmVsKX0tdGFiYCxcclxuICAgIH0pXHJcblxyXG4gICAgLy8gcmFpc2UgYSB0YWIgY2xpY2sgaW1wcmVzc2lvbiBldmVudFxyXG4gICAgdGhpcy5yYWlzZUN1c3RvbUltcHJlc3Npb24oe1xyXG4gICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBkYXRhLmluZGV4LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLm9iamVjdFxyXG4gICAgICB9LHtcclxuICAgICAgcGFnZUlkRXh0OiBgJHtfLmNhbWVsQ2FzZShkYXRhLmxhYmVsKX0tdGFiYCxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRQdWJsaWNVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWFpblVybCA9IHVybC5zcGxpdCgnL2NvbnRlbnQnKS5wb3AoKSB8fCAnJ1xyXG4gICAgcmV0dXJuIGAke3RoaXMuZW52aXJvbm1lbnQuY29udGVudEhvc3R9LyR7dGhpcy5lbnZpcm9ubWVudC5jb250ZW50QnVja2V0fS9jb250ZW50JHttYWluVXJsfWBcclxuICB9XHJcblxyXG4gIGFsbEV2ZW50RGF0ZUZvcm1hdChkYXRldGltZTogYW55KSB7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZXRpbWUpLmdldERhdGUoKVxyXG4gICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKGRhdGV0aW1lKS5nZXRGdWxsWWVhcigpXHJcbiAgICBjb25zdCBtb250aCA9IG5ldyBEYXRlKGRhdGV0aW1lKS5nZXRNb250aCgpXHJcbiAgICBjb25zdCBob3VycyA9IG5ldyBEYXRlKGRhdGV0aW1lKS5nZXRIb3VycygpXHJcbiAgICBjb25zdCBtaW51dGVzID0gbmV3IERhdGUoZGF0ZXRpbWUpLmdldE1pbnV0ZXMoKVxyXG4gICAgY29uc3Qgc2Vjb25kcyA9IG5ldyBEYXRlKGRhdGV0aW1lKS5nZXRTZWNvbmRzKClcclxuICAgIGNvbnN0IGZvcm1hdGVkRGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcywgc2Vjb25kcywgMClcclxuICAgIC8vIGxldCBmb3JtYXQgPSAnWVlZWS1NTS1ERCBoaDptbSBhJ1xyXG4gICAgLy8gaWYgKCF0aW1lQWxsb3cpIHtcclxuICAgIGNvbnN0IGZvcm1hdCA9ICdZWVlZLU1NLUREJ1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgcmVhZGFibGVEYXRlTW9udGggPSBtb21lbnQoZm9ybWF0ZWREYXRlKS5mb3JtYXQoZm9ybWF0KVxyXG4gICAgY29uc3QgZmluYWxEYXRlVGltZVZhbHVlID0gYCR7cmVhZGFibGVEYXRlTW9udGh9YFxyXG4gICAgcmV0dXJuIGZpbmFsRGF0ZVRpbWVWYWx1ZVxyXG4gIH1cclxuXHJcbiAgY29tcGFyZURhdGUoc3RhcnREYXRlOiBhbnkpIHtcclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLXRlbXBsYXRlXHJcbiAgICBjb25zdCBkYXkgPSAgKCcwJyArIChuZXcgRGF0ZSgpLmdldERhdGUoKSkpLnNsaWNlKC0yKVxyXG4gICAgY29uc3QgeWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKVxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci10ZW1wbGF0ZVxyXG4gICAgY29uc3QgbW9udGggPSAoJzAnICsgKG5vdy5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKVxyXG4gICAgY29uc3QgdG9kYXlzZGF0ZSA9IGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWBcclxuICAgIGlmIChzdGFydERhdGUgPT09IHRvZGF5c2RhdGUpICB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGN1c3RvbURhdGVGb3JtYXQoZGF0ZTogYW55LCB0aW1lOiBhbnkpIHtcclxuICAgIGNvbnN0IHN0aW1lID0gdGltZS5zcGxpdCgnKycpWzBdXHJcbiAgICBjb25zdCBob3VyID0gc3RpbWUuc3Vic3RyKDAsIDIpXHJcbiAgICBjb25zdCBtaW4gPSBzdGltZS5zdWJzdHIoMiwgMylcclxuICAgIHJldHVybiBgJHtkYXRlfSAke2hvdXJ9JHttaW59YFxyXG4gfVxyXG5cclxuXHJcbiBzZXRFdmVudExpc3REYXRhKGV2ZW50T2JqOiBhbnkpIHtcclxuICBpZiAoZXZlbnRPYmogIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy50b2RheXNFdmVudHMgPSBbXVxyXG4gICAgY29uc3QgZGF0YSA9IGV2ZW50T2JqXHJcbiAgICBsZXQgaXNFdmVudExpdmUgOiBib29sZWFuID0gZmFsc2VcclxuICAgIGxldCBpc0V2ZW50UmVjb3JkaW5nIDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgIC8vIGNvbnNvbGUubG9nKCdzdHJpcCBjb21wJywgZGF0YSlcclxuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgXHJcbiAgICAgIGlzRXZlbnRSZWNvcmRpbmcgPSBmYWxzZVxyXG4gICAgICBpc0V2ZW50TGl2ZSA9IGZhbHNlXHJcbiAgICAgIGNvbnN0IG9iaiA9IGRhdGFbaW5kZXhdXHJcbiAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vclxyXG4gICAgICBjb25zdCBob3VycyA9IGZsb29yKG9iai5kdXJhdGlvbiAvIDYwKVxyXG4gICAgICBjb25zdCBtaW51dGVzID0gb2JqLmR1cmF0aW9uICUgNjBcclxuICAgICAgY29uc3QgZHVyYXRpb24gPSAoaG91cnMgPT09IDApID8gKChtaW51dGVzID09PSAwKSA/ICctLS0nIDogYCR7bWludXRlc30gbWludXRlc2ApIDogKG1pbnV0ZXMgPT09IDApID8gKGhvdXJzID09PSAxKSA/XHJcbiAgICAgICAgYCR7aG91cnN9IGhvdXJgIDogYCR7aG91cnN9IGhvdXJzYCA6IChob3VycyA9PT0gMSkgPyBgJHtob3Vyc30gaG91ciAke21pbnV0ZXN9IG1pbnV0ZXNgIDpcclxuICAgICAgICBgJHtob3Vyc30gaG91cnMgJHttaW51dGVzfSBtaW51dGVzYFxyXG4gICAgICBjb25zdCBjcmVhdG9yZGF0YSA9IG9iai5jcmVhdG9yRGV0YWlscyAhPT0gdW5kZWZpbmVkID8gb2JqLmNyZWF0b3JEZXRhaWxzIDogW11cclxuICAgICAgY29uc3Qgc3RyID0gY3JlYXRvcmRhdGEgJiYgY3JlYXRvcmRhdGEubGVuZ3RoID4gMCA/IGNyZWF0b3JkYXRhLnJlcGxhY2UoL1xcXFwvZywgJycpIDogW11cclxuICAgICAgY29uc3QgY3JlYXRvckRldGFpbHMgPSBzdHIgJiYgc3RyLmxlbmd0aCA+IDAgPyBKU09OLnBhcnNlKHN0cikgOiBjcmVhdG9yZGF0YVxyXG5cclxuICAgICAgY29uc3Qgc3RpbWUgPSBvYmouc3RhcnRUaW1lLnNwbGl0KCcrJylbMF1cclxuICAgICAgY29uc3QgaG91ciA9IHN0aW1lLnN1YnN0cigwLCAyKVxyXG4gICAgICBjb25zdCBtaW4gPSBzdGltZS5zdWJzdHIoMiwgMylcclxuICAgICAgY29uc3Qgc3RhcnR0aW1lID0gYCR7aG91cn0ke21pbn1gXHJcblxyXG4gICAgICBjb25zdCBldGltZSA9IG9iai5lbmRUaW1lLnNwbGl0KCcrJylbMF1cclxuICAgICAgY29uc3QgZWhvdXIgPSBldGltZS5zdWJzdHIoMCwgMilcclxuICAgICAgY29uc3QgZW1pbiA9IGV0aW1lLnN1YnN0cigyLCAzKVxyXG4gICAgICBjb25zdCBlbmR0aW1lID0gYCR7ZWhvdXJ9JHtlbWlufWBcclxuICAgICAgY29uc3QgZXZlbnREYXRlID0gdGhpcy5jdXN0b21EYXRlRm9ybWF0KG9iai5zdGFydERhdGUsIG9iai5zdGFydFRpbWUpXHJcbiAgICAgIGNvbnN0IGV2ZW50ZW5kRGF0ZSA9IHRoaXMuY3VzdG9tRGF0ZUZvcm1hdChvYmouZW5kRGF0ZSwgb2JqLmVuZFRpbWUpXHJcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcclxuICAgICAgY29uc3QgdG9kYXkgPSBtb21lbnQobm93KS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKVxyXG4gICAgICBpZiAobW9tZW50KHRvZGF5KS5pc0JldHdlZW4oZXZlbnREYXRlLCBldmVudGVuZERhdGUpKSB7XHJcbiAgICAgICAgaXNFdmVudFJlY29yZGluZyA9IGZhbHNlXHJcbiAgICAgICAgaXNFdmVudExpdmUgPSB0cnVlXHJcbiAgICAgICAgaWYgKHRvZGF5ID49IGV2ZW50ZW5kRGF0ZSkge1xyXG4gICAgICAgICAgaWYgKG9iai5yZWNvcmRlZExpbmtzICYmIG9iai5yZWNvcmRlZExpbmtzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaXNFdmVudFJlY29yZGluZyA9IHRydWVcclxuICAgICAgICAgICAgaXNFdmVudExpdmUgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0b2RheSA+PSBldmVudGVuZERhdGUpIHtcclxuICAgICAgICBpc0V2ZW50UmVjb3JkaW5nID0gdHJ1ZVxyXG4gICAgICAgIGlzRXZlbnRMaXZlID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBldmVudERhdGFPYmogPSB7XHJcbiAgICAgICAgaXNFdmVudExpdmUsXHJcbiAgICAgICAgaXNFdmVudFJlY29yZGluZyxcclxuICAgICAgICBldmVudDogb2JqLFxyXG4gICAgICAgIGV2ZW50TmFtZTogb2JqLm5hbWUsXHJcbiAgICAgICAgZXZlbnRTdGFydFRpbWU6IHN0YXJ0dGltZSxcclxuICAgICAgICBldmVudEVuZFRpbWU6IGVuZHRpbWUsXHJcbiAgICAgICAgZXZlbnRTdGFydERhdGU6IG9iai5zdGFydERhdGUsXHJcbiAgICAgICAgZXZlbnRDcmVhdGVkT246IHRoaXMuYWxsRXZlbnREYXRlRm9ybWF0KG9iai5jcmVhdGVkT24pLFxyXG4gICAgICAgIGV2ZW50RHVyYXRpb246IGR1cmF0aW9uLFxyXG4gICAgICAgIGV2ZW50am9pbmVkOiBjcmVhdG9yRGV0YWlscy5sZW5ndGgsXHJcbiAgICAgICAgZXZlbnRUaHVtYm5haWw6IG9iai5hcHBJY29uICYmIChvYmouYXBwSWNvbiAhPT0gbnVsbCB8fCBvYmouYXBwSWNvbiAhPT0gdW5kZWZpbmVkKSA/XHJcbiAgICAgICAgICB0aGlzLmdldFB1YmxpY1VybChvYmouYXBwSWNvbikgOlxyXG4gICAgICAgICAgJy9hc3NldHMvaWNvbnMvRXZlbnRzX2RlZmF1bHQucG5nJyxcclxuICAgICAgICBwYXN0ZXZlbnQ6IGZhbHNlLFxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpc1RvZGF5ID0gdGhpcy5jb21wYXJlRGF0ZShvYmouc3RhcnREYXRlKVxyXG4gICAgICBpZiAoaXNUb2RheSAmJiBpc0V2ZW50TGl2ZSkge1xyXG4gICAgICAgIHRoaXMudG9kYXlzRXZlbnRzLnB1c2goZXZlbnREYXRhT2JqKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy50b2RheXNFdmVudHMgPSB0aGlzLnRvZGF5c0V2ZW50cy5zb3J0KChhOmFueSwgYjphbnkpPT4ge1xyXG4gICAgICByZXR1cm4gKGEuaXNFdmVudExpdmUgPT09IGIuaXNFdmVudExpdmUpPyAwIDogYi5pc0V2ZW50TGl2ZT8gLTEgOiAxO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbn1cclxuIl19
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL3V0aWxzLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFbEQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBQ3RCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQTs7O0FBQzNCO0lBb0JFLHNCQUN5QixXQUFnQixFQUMvQixVQUEwQjtRQUExQixlQUFVLEdBQVYsVUFBVSxDQUFnQjtRQWxCcEMsaUJBQVksR0FBUSxFQUFFLENBQUE7UUFDdEIscUJBQWdCLEdBQVEsRUFBRSxDQUFBO1FBRWxCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUE7UUFDdkQsWUFBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFMUMseUJBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUE7UUFDOUQsbUJBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFeEQsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUE7UUFDL0Qsb0JBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFMUQsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBMkIsQ0FBQTtRQUN6RCxpQkFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUE7UUFPdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFFaEMsQ0FBQztJQUVELG9DQUFhLEdBQWIsVUFBaUIsS0FBNEI7UUFDM0MsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsMkNBQW9CLEdBQXBCLFVBQXdCLEtBQTRCO1FBQ2xELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVELDhDQUF1QixHQUF2QixVQUEyQixLQUE0QjtRQUNyRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFFRCxrREFBMkIsR0FBM0IsVUFBK0IsS0FBNEI7UUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUlELDZDQUFzQixHQUF0QixVQUF1QixLQUErQixFQUFFLE1BQVcsRUFBRSxXQUE0QztRQUMvRyxJQUFJLENBQUMsYUFBYSxDQUFxQztZQUNyRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTO1lBQ3pDLGFBQWEsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDNUMsSUFBSSxFQUFFO2dCQUNKLEtBQUssT0FBQTtnQkFDTCxNQUFNLFFBQUE7Z0JBQ04sV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO2dCQUN6QyxZQUFZLEVBQUUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVE7YUFDckQ7WUFDRCxJQUFJLEVBQUUsRUFBRTtZQUNSLEVBQUUsRUFBRSxXQUFXO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCw2Q0FBc0IsR0FBdEIsVUFBdUIsS0FBK0IsRUFBRSxNQUFXLEVBQUUsSUFBYTtRQUNoRixJQUFJLENBQUMsYUFBYSxDQUFxQztZQUNyRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTO1lBQ3pDLGFBQWEsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDNUMsSUFBSSxFQUFFO2dCQUNKLEtBQUssT0FBQTtnQkFDTCxNQUFNLFFBQUE7Z0JBQ04sWUFBWSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRO2FBQ3JEO1lBQ0QsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ2hCLEVBQUUsRUFBRSxXQUFXO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCw0Q0FBcUIsR0FBckIsVUFBc0IsTUFBVyxFQUFFLFdBQTRDO1FBQzdFLElBQUksQ0FBQyxhQUFhLENBQXVDO1lBQ3ZELFNBQVMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVM7WUFDekMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSTtZQUM1QyxJQUFJLEVBQUU7Z0JBQ0osTUFBTSxRQUFBO2dCQUNOLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDekMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVO2FBQ3ZEO1lBQ0QsSUFBSSxFQUFFLEVBQUU7WUFDUixFQUFFLEVBQUUsV0FBVztTQUNoQixDQUFDLENBQUE7SUFDSixDQUFDO0lBWU8saUNBQVUsR0FBbEIsVUFBbUIsV0FBdUQ7WUFDbEUsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTO1lBRTVDLFlBQVksR0FBbUM7WUFDbkQsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07WUFDL0IsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07U0FDaEM7UUFDRCxJQUFJLFdBQVcsRUFBRTtZQUVmLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRTtnQkFDekIsWUFBWSxDQUFDLE1BQU0sR0FBTSxnQkFBZ0IsQ0FBQyxNQUFNLFNBQUksV0FBVyxDQUFDLFNBQVcsQ0FBQTthQUM1RTtpQkFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBRTdCLFlBQVksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQTthQUN6QztZQUVELElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsWUFBWSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFBO2FBQ3pDO1NBQ0Y7UUFFRCxPQUFPLFlBQVksQ0FBQTtJQUNyQixDQUFDO0lBRU0seUNBQWtCLEdBQXpCLFVBQTBCLE9BQWUsRUFBRSxJQUFnQyxFQUFFLE1BQVc7UUFFdEYsSUFBSSxDQUFDLHNCQUFzQixDQUN6QjtZQUNFLE9BQU8sU0FBQTtZQUNQLElBQUksRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSztZQUN0QyxFQUFFLEVBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQU07U0FDckMsdUJBS0ksTUFBTSxHQUVYO1lBQ0EsU0FBUyxFQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFNO1NBQzVDLENBQUMsQ0FBQTtRQUdGLElBQUksQ0FBQyxxQkFBcUIsb0JBQ3hCLE9BQU8sRUFBRTtnQkFDSCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDckIsSUFDRSxNQUFNLEdBQ1g7WUFDRixTQUFTLEVBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQU07U0FDNUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELG1DQUFZLEdBQVosVUFBYSxHQUFXO1lBQ2hCLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7UUFDakQsT0FBVSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsU0FBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsZ0JBQVcsT0FBUyxDQUFBO0lBQzlGLENBQUM7SUFFRCx5Q0FBa0IsR0FBbEIsVUFBbUIsUUFBYTtZQUN4QixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ25DLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNyQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3JDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUU7WUFDekMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsRUFBRTtZQUN6QyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBR3RFLE1BQU0sR0FBRyxZQUFZO1lBRXJCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3ZELGtCQUFrQixHQUFHLEtBQUcsaUJBQW1CO1FBQ2pELE9BQU8sa0JBQWtCLENBQUE7SUFDM0IsQ0FBQztJQUVELGtDQUFXLEdBQVgsVUFBWSxTQUFjO1lBQ2xCLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRTtZQUdoQixHQUFHLEdBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBRS9CLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxVQUFVLEdBQU0sSUFBSSxTQUFJLEtBQUssU0FBSSxHQUFLO1FBQzVDLElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRztZQUM3QixPQUFPLElBQUksQ0FBQTtTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsdUNBQWdCLEdBQWhCLFVBQWlCLElBQVMsRUFBRSxJQUFTO1lBQzdCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsT0FBVSxJQUFJLFNBQUksSUFBSSxHQUFHLEdBQUssQ0FBQTtJQUNqQyxDQUFDO0lBQ0QscUNBQWMsR0FBZCxVQUFlLFVBQWU7UUFDN0IsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFDLFVBQUMsQ0FBSyxFQUFFLENBQUs7Z0JBQzVCLFNBQVMsR0FBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNwQyxVQUFVLEdBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3QyxPQUFRLFVBQVUsR0FBRyxTQUFTLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUMsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0Qsd0NBQWlCLEdBQWpCLFVBQWtCLFVBQWU7UUFDL0IsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFDLFVBQUMsQ0FBSyxFQUFFLENBQUs7Z0JBQzVCLFNBQVMsR0FBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNwQyxVQUFVLEdBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3QyxPQUFRLFVBQVUsR0FBRyxTQUFTLENBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUMsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDO0lBR0EsdUNBQWdCLEdBQWhCLFVBQWlCLFFBQWE7UUFBOUIsaUJBNEZFO1FBM0ZELElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtZQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO2dCQUNwQixNQUFJLEdBQUcsUUFBUTtnQkFDakIsYUFBVyxHQUFhLEtBQUs7Z0JBQzdCLGtCQUFnQixHQUFhLEtBQUs7Z0JBQ2xDLGFBQVcsR0FBYSxLQUFLO2dCQUM3QixlQUFhLEdBQWEsS0FBSztZQUVuQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQUksQ0FBQyxDQUFDLE9BQU8sRUFBQyxVQUFDLEtBQVU7Z0JBRW5DLGtCQUFnQixHQUFHLEtBQUssQ0FBQTtnQkFDeEIsYUFBVyxHQUFHLEtBQUssQ0FBQTtnQkFDbkIsYUFBVyxHQUFHLEtBQUssQ0FBQTtnQkFDbkIsZUFBYSxHQUFHLEtBQUssQ0FBQTtvQkFDZixHQUFHLEdBQUcsTUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDakIsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO29CQUNsQixLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO29CQUNoQyxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsR0FBRyxFQUFFO29CQUMzQixRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUksT0FBTyxhQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hILEtBQUssVUFBTyxDQUFDLENBQUMsQ0FBSSxLQUFLLFdBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFJLEtBQUssY0FBUyxPQUFPLGFBQVUsQ0FBQyxDQUFDO29CQUN0RixLQUFLLGVBQVUsT0FBTyxhQUFVO29CQUMvQixXQUFXLEdBQUcsR0FBRyxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hFLEdBQUcsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNqRixjQUFjLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO29CQUV0RSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN6QixHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN4QixTQUFTLEdBQUcsS0FBRyxJQUFJLEdBQUcsR0FBSztvQkFFM0IsS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDekIsT0FBTyxHQUFHLEtBQUcsS0FBSyxHQUFHLElBQU07b0JBQzNCLFNBQVMsR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDO29CQUMvRCxZQUFZLEdBQUcsS0FBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQztvQkFDOUQsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFO29CQUNoQixLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDcEQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRTtvQkFDcEQsa0JBQWdCLEdBQUcsS0FBSyxDQUFBO29CQUN4QixhQUFXLEdBQUcsSUFBSSxDQUFBO29CQUNsQixJQUFJLEtBQUssSUFBSSxZQUFZLEVBQUU7d0JBQ3pCLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ3JELGtCQUFnQixHQUFHLElBQUksQ0FBQTs0QkFDdkIsYUFBVyxHQUFHLEtBQUssQ0FBQTt5QkFDcEI7cUJBQ0Y7aUJBQ0Y7cUJBQU0sSUFBSSxLQUFLLElBQUksWUFBWSxFQUFFO29CQUNoQyxrQkFBZ0IsR0FBRyxJQUFJLENBQUE7b0JBQ3ZCLGFBQVcsR0FBRyxLQUFLLENBQUE7b0JBQ25CLElBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUMxRSxhQUFXLEdBQUcsSUFBSSxDQUFBO3FCQUNuQjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDNUUsZUFBYSxHQUFHLElBQUksQ0FBQTtxQkFDckI7aUJBQ0Y7b0JBQ0ssWUFBWSxHQUFHO29CQUNuQixTQUFTLFdBQUE7b0JBQ1QsWUFBWSxjQUFBO29CQUNaLFdBQVcsZUFBQTtvQkFDWCxhQUFhLGlCQUFBO29CQUNiLFdBQVcsZUFBQTtvQkFDWCxnQkFBZ0Isb0JBQUE7b0JBQ2hCLEtBQUssRUFBRSxHQUFHO29CQUNWLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDbkIsY0FBYyxFQUFFLFNBQVM7b0JBQ3pCLFlBQVksRUFBRSxPQUFPO29CQUNyQixjQUFjLEVBQUUsR0FBRyxDQUFDLFNBQVM7b0JBQzdCLGNBQWMsRUFBRSxLQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztvQkFDdEQsYUFBYSxFQUFFLFFBQVE7b0JBQ3ZCLFdBQVcsRUFBRSxjQUFjLENBQUMsTUFBTTtvQkFDbEMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xGLEtBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7d0JBQ2hDLGtDQUFrQztvQkFDcEMsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCO29CQUNLLE9BQU8sR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7Z0JBQy9DLElBQUksT0FBTyxFQUFFO29CQUNYLEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO2lCQUNyQztnQkFDRCxJQUFHLE9BQU8sSUFBSSxhQUFXLEVBQUU7b0JBQ3pCLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7aUJBQ3pDO1lBQ0gsQ0FBQyxFQUFDLENBQUE7WUFFRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUNsRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1NBQzVEO0lBQ0QsQ0FBQztJQUNELHNDQUFlLEdBQWYsVUFBZ0IsU0FBYztZQUN4QixVQUFVLEdBQVEsRUFBRTtZQUNwQixVQUFVLEdBQVEsRUFBRTtZQUNwQixZQUFZLEdBQVEsRUFBRTtRQUUxQixVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO1FBQ2xDLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFDLFVBQUMsU0FBYyxJQUFLLE9BQUEsU0FBUyxDQUFDLFdBQVcsRUFBckIsQ0FBcUIsRUFBQyxDQUFBO1FBQ3hFLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFDLFVBQUMsV0FBZ0IsSUFBSyxPQUFBLFdBQVcsQ0FBQyxhQUFhLEVBQXpCLENBQXlCLEVBQUMsQ0FBQTtRQUNoRixVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQy9DLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDbkQsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLFlBQVksb0JBQVEsVUFBVSxFQUFLLFlBQVksRUFBSyxVQUFVLENBQUMsQ0FBQTtRQUVwRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDMUIsQ0FBQzs7Z0JBaFVGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OztnREFtQkksTUFBTSxTQUFDLGFBQWE7Z0JBekJoQixjQUFjOzs7dUJBSHZCO0NBeVVDLEFBbFVELElBa1VDO1NBL1RZLFlBQVk7O0lBQ3ZCLG9DQUFzQjtJQUN0Qix3Q0FBMEI7SUFFMUIscUNBQThEO0lBQzlELCtCQUFrRDtJQUVsRCw0Q0FBcUU7SUFDckUsc0NBQWdFO0lBRWhFLDZDQUFzRTtJQUN0RSx1Q0FBa0U7SUFFbEUsdUNBQWdFO0lBQ2hFLG9DQUF5RDtJQUV6RCxtQ0FBZ0I7SUFHZCxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgV3NFdmVudHMgfSBmcm9tICcuL2V2ZW50Lm1vZGVsJ1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4vdXRpbGl0eS5zZXJ2aWNlJ1xyXG4vKiB0c2xpbnQ6ZGlzYWJsZSovXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFdmVudFNlcnZpY2Uge1xyXG4gIHRvZGF5c0V2ZW50czogYW55ID0gW11cclxuICB0b2RheXNMaXZlRXZlbnRzOiBhbnkgPSBbXVxyXG4gIFxyXG4gIHByaXZhdGUgZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PFdzRXZlbnRzLklXc0V2ZW50czxhbnk+PigpXHJcbiAgcHVibGljIGV2ZW50cyQgPSB0aGlzLmV2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuXHJcbiAgcHJpdmF0ZSBldmVudHNDaGF0Ym90U3ViamVjdCA9IG5ldyBTdWJqZWN0PFdzRXZlbnRzLklXc0V2ZW50czxhbnk+PigpXHJcbiAgcHVibGljIGNoYXRib3RFdmVudHMkID0gdGhpcy5ldmVudHNDaGF0Ym90U3ViamVjdC5hc09ic2VydmFibGUoKVxyXG5cclxuICBwcml2YXRlIGV2ZW50c0dldFN0YXJ0U3ViamVjdCA9IG5ldyBTdWJqZWN0PFdzRXZlbnRzLklXc0V2ZW50czxhbnk+PigpXHJcbiAgcHVibGljIGdldFN0YXJ0RXZlbnRzJCA9IHRoaXMuZXZlbnRzR2V0U3RhcnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXHJcblxyXG4gIHByaXZhdGUgZXZlbnRzUFJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8V3NFdmVudHMuSVdzRXZlbnRzPGFueT4+KClcclxuICBwdWJsaWMgZ2V0UFJFdmVudHMkID0gdGhpcy5ldmVudHNQUlN1YmplY3QuYXNPYnNlcnZhYmxlKClcclxuXHJcbiAgZW52aXJvbm1lbnQ6IGFueVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxyXG4gICAgLy8gdGhpcy5mb2N1c0NoYW5nZUV2ZW50TGlzdGVuZXIoKVxyXG4gIH1cclxuXHJcbiAgZGlzcGF0Y2hFdmVudDxUPihldmVudDogV3NFdmVudHMuSVdzRXZlbnRzPFQ+KSB7XHJcbiAgICBldmVudC5wYWdlQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChldmVudC5wYWdlQ29udGV4dClcclxuICAgIHRoaXMuZXZlbnRzU3ViamVjdC5uZXh0KGV2ZW50KVxyXG4gIH1cclxuXHJcbiAgZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8VD4oZXZlbnQ6IFdzRXZlbnRzLklXc0V2ZW50czxUPikge1xyXG4gICAgdGhpcy5ldmVudHNDaGF0Ym90U3ViamVjdC5uZXh0KGV2ZW50KVxyXG4gIH1cclxuXHJcbiAgZGlzcGF0Y2hHZXRTdGFydGVkRXZlbnQ8VD4oZXZlbnQ6IFdzRXZlbnRzLklXc0V2ZW50czxUPikge1xyXG4gICAgdGhpcy5ldmVudHNHZXRTdGFydFN1YmplY3QubmV4dChldmVudClcclxuICB9XHJcblxyXG4gIGRpc3BhdGNoUGxhdGZvcm1SYXRpbmdFdmVudDxUPihldmVudDogV3NFdmVudHMuSVdzRXZlbnRzPFQ+KSB7XHJcbiAgICB0aGlzLmV2ZW50c1BSU3ViamVjdC5uZXh0KGV2ZW50KVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIGhlbHBlciBmdW5jdGlvbnNcclxuICByYWlzZUludGVyYWN0VGVsZW1ldHJ5KGVkYXRhOiBXc0V2ZW50cy5JVGVsZW1ldHJ5RWRhdGEsIG9iamVjdDogYW55LCBwYWdlQ29udGV4dD86IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCkge1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KHtcclxuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXHJcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZWRhdGEsXHJcbiAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgIHBhZ2VDb250ZXh0OiB0aGlzLmdldENvbnRleHQocGFnZUNvbnRleHQpLFxyXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3QsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZyb206ICcnLFxyXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmFpc2VGZWVkYmFja1RlbGVtZXRyeShlZGF0YTogV3NFdmVudHMuSVRlbGVtZXRyeUVkYXRhLCBvYmplY3Q6IGFueSwgZnJvbT86IHN0cmluZykge1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KHtcclxuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXHJcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZWRhdGEsXHJcbiAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuRmVlZGJhY2ssXHJcbiAgICAgIH0sXHJcbiAgICAgIGZyb206IGZyb20gfHwgJycsXHJcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyBSYWlzZSBjdXN0b20gaW1wcmVzc2lvbiBldmVudHMgZWc6b24gdGFiIGNoYW5nZVxyXG4gIHJhaXNlQ3VzdG9tSW1wcmVzc2lvbihvYmplY3Q6IGFueSwgcGFnZUNvbnRleHQ/OiBXc0V2ZW50cy5JVGVsZW1ldHJ5UGFnZUNvbnRleHQpIHtcclxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUltcHJlc3Npb24+KHtcclxuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXHJcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgIHBhZ2VDb250ZXh0OiB0aGlzLmdldENvbnRleHQocGFnZUNvbnRleHQpLFxyXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW1wcmVzc2lvbixcclxuICAgICAgfSxcclxuICAgICAgZnJvbTogJycsXHJcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyBwcml2YXRlIGZvY3VzQ2hhbmdlRXZlbnRMaXN0ZW5lcigpIHtcclxuICAvLyAgIGZyb21FdmVudCh3aW5kb3csICdmb2N1cycpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgLy8gICAgIHRoaXMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeSgnZm9jdXMnLCAnZ2FpbmVkJywge30pXHJcbiAgLy8gICB9KVxyXG4gIC8vICAgZnJvbUV2ZW50KHdpbmRvdywgJ2JsdXInKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gIC8vICAgICB0aGlzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoJ2ZvY3VzJywgJ2xvc3QnLCB7fSlcclxuICAvLyAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICAvLyBNZXRob2QgdG8gZ2V0IHRoZSBjb250ZXh0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZWxlbWV0cnkgaW50ZXJhY3QgZXZlbnRcclxuICBwcml2YXRlIGdldENvbnRleHQocGFnZUNvbnRleHQ6IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCB8IHVuZGVmaW5lZCk6IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCB7XHJcbiAgICBjb25zdCByb3V0ZURhdGFDb250ZXh0ID0gdGhpcy51dGlsaXR5U3ZjLnJvdXRlRGF0YVxyXG4gICAgLy8gaW5pdGlhbGl6ZSB3aXRoIHRoZSByb3V0ZSBkYXRhIGNvbmZpZ3VyYXRpb24gLSBjdXJyZW50IHJvdXRlJ3MgcGFnZUlEICYgbW9kdWxlXHJcbiAgICBjb25zdCBmaW5hbENvbnRleHQ6IFdzRXZlbnRzLklUZWxlbWV0cnlQYWdlQ29udGV4dCA9IHtcclxuICAgICAgcGFnZUlkOiByb3V0ZURhdGFDb250ZXh0LnBhZ2VJZCxcclxuICAgICAgbW9kdWxlOiByb3V0ZURhdGFDb250ZXh0Lm1vZHVsZSxcclxuICAgIH1cclxuICAgIGlmIChwYWdlQ29udGV4dCkge1xyXG4gICAgICAvLyBpZiBjb250ZXh0IGhhcyBwYWdlSWRFeHQsIGFwcGVuZCBpdCB0byB0aGUgcm91dGUncyBwYWdlSWRcclxuICAgICAgaWYgKHBhZ2VDb250ZXh0LnBhZ2VJZEV4dCkge1xyXG4gICAgICAgIGZpbmFsQ29udGV4dC5wYWdlSWQgPSBgJHtyb3V0ZURhdGFDb250ZXh0LnBhZ2VJZH1fJHtwYWdlQ29udGV4dC5wYWdlSWRFeHR9YFxyXG4gICAgICB9IGVsc2UgaWYgKHBhZ2VDb250ZXh0LnBhZ2VJZCkge1xyXG4gICAgICAgIC8vIGVsc2UgY29udGV4dCBoYXMgcGFnZUlkLCBvdmVycmlkZSBpdCB0byB0aGUgZmluYWwgcGFnZUlEXHJcbiAgICAgICAgZmluYWxDb250ZXh0LnBhZ2VJZCA9IHBhZ2VDb250ZXh0LnBhZ2VJZFxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIGNvbnRleHQgaGFzIG1vZHVsZSwgb3ZlcnJpZGUgaXQgdG8gdGhlIGZpbmFsIG1vZHVsZVxyXG4gICAgICBpZiAocGFnZUNvbnRleHQubW9kdWxlKSB7XHJcbiAgICAgICAgZmluYWxDb250ZXh0Lm1vZHVsZSA9IHBhZ2VDb250ZXh0Lm1vZHVsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsQ29udGV4dFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVRhYlRlbGVtZXRyeShzdWJUeXBlOiBzdHJpbmcsIGRhdGE6IFdzRXZlbnRzLklUZWxlbWV0cnlUYWJEYXRhLCBvYmplY3Q/OmFueSkge1xyXG4gICAgLy8gcmFpc2UgYSB0YWIgY2xpY2sgaW50ZXJhY3QgZXZlbnRcclxuICAgIHRoaXMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcclxuICAgICAge1xyXG4gICAgICAgIHN1YlR5cGUsXHJcbiAgICAgICAgdHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0VHlwZXMuQ0xJQ0ssXHJcbiAgICAgICAgaWQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgLy8gY29udGV4dDoge1xyXG4gICAgICAgIC8vICAgcG9zaXRpb246IGRhdGEuaW5kZXgsXHJcbiAgICAgICAgLy8gfSxcclxuICAgICAgICAuLi5vYmplY3RcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICBwYWdlSWRFeHQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxyXG4gICAgfSlcclxuXHJcbiAgICAvLyByYWlzZSBhIHRhYiBjbGljayBpbXByZXNzaW9uIGV2ZW50XHJcbiAgICB0aGlzLnJhaXNlQ3VzdG9tSW1wcmVzc2lvbih7XHJcbiAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IGRhdGEuaW5kZXgsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4ub2JqZWN0XHJcbiAgICAgIH0se1xyXG4gICAgICBwYWdlSWRFeHQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldFB1YmxpY1VybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYWluVXJsID0gdXJsLnNwbGl0KCcvY29udGVudCcpLnBvcCgpIHx8ICcnXHJcbiAgICByZXR1cm4gYCR7dGhpcy5lbnZpcm9ubWVudC5jb250ZW50SG9zdH0vJHt0aGlzLmVudmlyb25tZW50LmNvbnRlbnRCdWNrZXR9L2NvbnRlbnQke21haW5Vcmx9YFxyXG4gIH1cclxuXHJcbiAgYWxsRXZlbnREYXRlRm9ybWF0KGRhdGV0aW1lOiBhbnkpIHtcclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRldGltZSkuZ2V0RGF0ZSgpXHJcbiAgICBjb25zdCB5ZWFyID0gbmV3IERhdGUoZGF0ZXRpbWUpLmdldEZ1bGxZZWFyKClcclxuICAgIGNvbnN0IG1vbnRoID0gbmV3IERhdGUoZGF0ZXRpbWUpLmdldE1vbnRoKClcclxuICAgIGNvbnN0IGhvdXJzID0gbmV3IERhdGUoZGF0ZXRpbWUpLmdldEhvdXJzKClcclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBuZXcgRGF0ZShkYXRldGltZSkuZ2V0TWludXRlcygpXHJcbiAgICBjb25zdCBzZWNvbmRzID0gbmV3IERhdGUoZGF0ZXRpbWUpLmdldFNlY29uZHMoKVxyXG4gICAgY29uc3QgZm9ybWF0ZWREYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCAwKVxyXG4gICAgLy8gbGV0IGZvcm1hdCA9ICdZWVlZLU1NLUREIGhoOm1tIGEnXHJcbiAgICAvLyBpZiAoIXRpbWVBbGxvdykge1xyXG4gICAgY29uc3QgZm9ybWF0ID0gJ1lZWVktTU0tREQnXHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCByZWFkYWJsZURhdGVNb250aCA9IG1vbWVudChmb3JtYXRlZERhdGUpLmZvcm1hdChmb3JtYXQpXHJcbiAgICBjb25zdCBmaW5hbERhdGVUaW1lVmFsdWUgPSBgJHtyZWFkYWJsZURhdGVNb250aH1gXHJcbiAgICByZXR1cm4gZmluYWxEYXRlVGltZVZhbHVlXHJcbiAgfVxyXG5cclxuICBjb21wYXJlRGF0ZShzdGFydERhdGU6IGFueSkge1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxyXG5cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItdGVtcGxhdGVcclxuICAgIGNvbnN0IGRheSA9ICAoJzAnICsgKG5ldyBEYXRlKCkuZ2V0RGF0ZSgpKSkuc2xpY2UoLTIpXHJcbiAgICBjb25zdCB5ZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLXRlbXBsYXRlXHJcbiAgICBjb25zdCBtb250aCA9ICgnMCcgKyAobm93LmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpXHJcbiAgICBjb25zdCB0b2RheXNkYXRlID0gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YFxyXG4gICAgaWYgKHN0YXJ0RGF0ZSA9PT0gdG9kYXlzZGF0ZSkgIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgY3VzdG9tRGF0ZUZvcm1hdChkYXRlOiBhbnksIHRpbWU6IGFueSkge1xyXG4gICAgY29uc3Qgc3RpbWUgPSB0aW1lLnNwbGl0KCcrJylbMF1cclxuICAgIGNvbnN0IGhvdXIgPSBzdGltZS5zdWJzdHIoMCwgMilcclxuICAgIGNvbnN0IG1pbiA9IHN0aW1lLnN1YnN0cigyLCAzKVxyXG4gICAgcmV0dXJuIGAke2RhdGV9ICR7aG91cn0ke21pbn1gXHJcbiB9XHJcbiBzb3J0SXRlbUJ5VGltZShldmVudHNkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZXZlbnRzZGF0YS5zb3J0KChhOmFueSwgYjphbnkpPT4ge1xyXG4gICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmV2ZW50RGF0ZSlcclxuICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5ldmVudERhdGUpXHJcbiAgICAgIHJldHVybiAgc2Vjb25kRGF0ZSA+IGZpcnN0RGF0ZSAgPyAxIDogLTFcclxuICB9KTtcclxufVxyXG5zb3J0SXRlbUJ5VGltZUFzYyhldmVudHNkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZXZlbnRzZGF0YS5zb3J0KChhOmFueSwgYjphbnkpPT4ge1xyXG4gICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmV2ZW50RGF0ZSlcclxuICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5ldmVudERhdGUpXHJcbiAgICAgIHJldHVybiAgc2Vjb25kRGF0ZSA8IGZpcnN0RGF0ZSAgPyAxIDogLTFcclxuICB9KTtcclxufVxyXG5cclxuXHJcbiBzZXRFdmVudExpc3REYXRhKGV2ZW50T2JqOiBhbnkpIHtcclxuICBpZiAoZXZlbnRPYmogIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy50b2RheXNFdmVudHMgPSBbXVxyXG4gICAgdGhpcy50b2RheXNMaXZlRXZlbnRzID0gW11cclxuICAgIGNvbnN0IGRhdGEgPSBldmVudE9ialxyXG4gICAgbGV0IGlzRXZlbnRMaXZlIDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICBsZXQgaXNFdmVudFJlY29yZGluZyA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICAgbGV0IGlzRXZlbnRQYXN0IDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICBsZXQgaXNFdmVudEZ1dHVyZSA6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICAvLyBjb25zb2xlLmxvZygnc3RyaXAgY29tcCcsIGRhdGEpXHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIFxyXG4gICAgICBpc0V2ZW50UmVjb3JkaW5nID0gZmFsc2VcclxuICAgICAgaXNFdmVudExpdmUgPSBmYWxzZVxyXG4gICAgICBpc0V2ZW50UGFzdCA9IGZhbHNlXHJcbiAgICAgIGlzRXZlbnRGdXR1cmUgPSBmYWxzZVxyXG4gICAgICBjb25zdCBvYmogPSBkYXRhW2luZGV4XVxyXG4gICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3JcclxuICAgICAgY29uc3QgaG91cnMgPSBmbG9vcihvYmouZHVyYXRpb24gLyA2MClcclxuICAgICAgY29uc3QgbWludXRlcyA9IG9iai5kdXJhdGlvbiAlIDYwXHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGhvdXJzID09PSAwKSA/ICgobWludXRlcyA9PT0gMCkgPyAnLS0tJyA6IGAke21pbnV0ZXN9IG1pbnV0ZXNgKSA6IChtaW51dGVzID09PSAwKSA/IChob3VycyA9PT0gMSkgP1xyXG4gICAgICAgIGAke2hvdXJzfSBob3VyYCA6IGAke2hvdXJzfSBob3Vyc2AgOiAoaG91cnMgPT09IDEpID8gYCR7aG91cnN9IGhvdXIgJHttaW51dGVzfSBtaW51dGVzYCA6XHJcbiAgICAgICAgYCR7aG91cnN9IGhvdXJzICR7bWludXRlc30gbWludXRlc2BcclxuICAgICAgY29uc3QgY3JlYXRvcmRhdGEgPSBvYmouY3JlYXRvckRldGFpbHMgIT09IHVuZGVmaW5lZCA/IG9iai5jcmVhdG9yRGV0YWlscyA6IFtdXHJcbiAgICAgIGNvbnN0IHN0ciA9IGNyZWF0b3JkYXRhICYmIGNyZWF0b3JkYXRhLmxlbmd0aCA+IDAgPyBjcmVhdG9yZGF0YS5yZXBsYWNlKC9cXFxcL2csICcnKSA6IFtdXHJcbiAgICAgIGNvbnN0IGNyZWF0b3JEZXRhaWxzID0gc3RyICYmIHN0ci5sZW5ndGggPiAwID8gSlNPTi5wYXJzZShzdHIpIDogY3JlYXRvcmRhdGFcclxuXHJcbiAgICAgIGNvbnN0IHN0aW1lID0gb2JqLnN0YXJ0VGltZS5zcGxpdCgnKycpWzBdXHJcbiAgICAgIGNvbnN0IGhvdXIgPSBzdGltZS5zdWJzdHIoMCwgMilcclxuICAgICAgY29uc3QgbWluID0gc3RpbWUuc3Vic3RyKDIsIDMpXHJcbiAgICAgIGNvbnN0IHN0YXJ0dGltZSA9IGAke2hvdXJ9JHttaW59YFxyXG5cclxuICAgICAgY29uc3QgZXRpbWUgPSBvYmouZW5kVGltZS5zcGxpdCgnKycpWzBdXHJcbiAgICAgIGNvbnN0IGVob3VyID0gZXRpbWUuc3Vic3RyKDAsIDIpXHJcbiAgICAgIGNvbnN0IGVtaW4gPSBldGltZS5zdWJzdHIoMiwgMylcclxuICAgICAgY29uc3QgZW5kdGltZSA9IGAke2Vob3VyfSR7ZW1pbn1gXHJcbiAgICAgIGNvbnN0IGV2ZW50RGF0ZSA9IHRoaXMuY3VzdG9tRGF0ZUZvcm1hdChvYmouc3RhcnREYXRlLCBvYmouc3RhcnRUaW1lKVxyXG4gICAgICBjb25zdCBldmVudGVuZERhdGUgPSB0aGlzLmN1c3RvbURhdGVGb3JtYXQob2JqLmVuZERhdGUsIG9iai5lbmRUaW1lKVxyXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXHJcbiAgICAgIGNvbnN0IHRvZGF5ID0gbW9tZW50KG5vdykuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcclxuICAgICAgaWYgKG1vbWVudCh0b2RheSkuaXNCZXR3ZWVuKGV2ZW50RGF0ZSwgZXZlbnRlbmREYXRlKSkge1xyXG4gICAgICAgIGlzRXZlbnRSZWNvcmRpbmcgPSBmYWxzZVxyXG4gICAgICAgIGlzRXZlbnRMaXZlID0gdHJ1ZVxyXG4gICAgICAgIGlmICh0b2RheSA+PSBldmVudGVuZERhdGUpIHtcclxuICAgICAgICAgIGlmIChvYmoucmVjb3JkZWRMaW5rcyAmJiBvYmoucmVjb3JkZWRMaW5rcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlzRXZlbnRSZWNvcmRpbmcgPSB0cnVlXHJcbiAgICAgICAgICAgIGlzRXZlbnRMaXZlID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodG9kYXkgPj0gZXZlbnRlbmREYXRlKSB7XHJcbiAgICAgICAgaXNFdmVudFJlY29yZGluZyA9IHRydWVcclxuICAgICAgICBpc0V2ZW50TGl2ZSA9IGZhbHNlXHJcbiAgICAgICAgaWYobW9tZW50KHRvZGF5KS5pc0FmdGVyKGV2ZW50ZW5kRGF0ZSkgJiYgbW9tZW50KHRvZGF5KS5pc0FmdGVyKGV2ZW50RGF0ZSkpIHtcclxuICAgICAgICAgIGlzRXZlbnRQYXN0ID0gdHJ1ZVxyXG4gICAgICAgIH0gXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYobW9tZW50KHRvZGF5KS5pc0JlZm9yZShldmVudERhdGUpICYmIG1vbWVudCh0b2RheSkuaXNCZWZvcmUoZXZlbnRlbmREYXRlKSkge1xyXG4gICAgICAgICAgaXNFdmVudEZ1dHVyZSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZXZlbnREYXRhT2JqID0ge1xyXG4gICAgICAgIGV2ZW50RGF0ZSxcclxuICAgICAgICBldmVudGVuZERhdGUsXHJcbiAgICAgICAgaXNFdmVudExpdmUsXHJcbiAgICAgICAgaXNFdmVudEZ1dHVyZSxcclxuICAgICAgICBpc0V2ZW50UGFzdCxcclxuICAgICAgICBpc0V2ZW50UmVjb3JkaW5nLFxyXG4gICAgICAgIGV2ZW50OiBvYmosXHJcbiAgICAgICAgZXZlbnROYW1lOiBvYmoubmFtZSxcclxuICAgICAgICBldmVudFN0YXJ0VGltZTogc3RhcnR0aW1lLFxyXG4gICAgICAgIGV2ZW50RW5kVGltZTogZW5kdGltZSxcclxuICAgICAgICBldmVudFN0YXJ0RGF0ZTogb2JqLnN0YXJ0RGF0ZSxcclxuICAgICAgICBldmVudENyZWF0ZWRPbjogdGhpcy5hbGxFdmVudERhdGVGb3JtYXQob2JqLmNyZWF0ZWRPbiksXHJcbiAgICAgICAgZXZlbnREdXJhdGlvbjogZHVyYXRpb24sXHJcbiAgICAgICAgZXZlbnRqb2luZWQ6IGNyZWF0b3JEZXRhaWxzLmxlbmd0aCxcclxuICAgICAgICBldmVudFRodW1ibmFpbDogb2JqLmFwcEljb24gJiYgKG9iai5hcHBJY29uICE9PSBudWxsIHx8IG9iai5hcHBJY29uICE9PSB1bmRlZmluZWQpID9cclxuICAgICAgICAgIHRoaXMuZ2V0UHVibGljVXJsKG9iai5hcHBJY29uKSA6XHJcbiAgICAgICAgICAnL2Fzc2V0cy9pY29ucy9FdmVudHNfZGVmYXVsdC5wbmcnLFxyXG4gICAgICAgIHBhc3RldmVudDogZmFsc2UsXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaXNUb2RheSA9IHRoaXMuY29tcGFyZURhdGUob2JqLnN0YXJ0RGF0ZSlcclxuICAgICAgaWYgKGlzVG9kYXkpIHtcclxuICAgICAgICB0aGlzLnRvZGF5c0V2ZW50cy5wdXNoKGV2ZW50RGF0YU9iailcclxuICAgICAgfVxyXG4gICAgICBpZihpc1RvZGF5ICYmIGlzRXZlbnRMaXZlKSB7XHJcbiAgICAgICAgdGhpcy50b2RheXNMaXZlRXZlbnRzLnB1c2goZXZlbnREYXRhT2JqKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMudG9kYXlzTGl2ZUV2ZW50cyA9IHRoaXMuc29ydEl0ZW1CeVRpbWUodGhpcy50b2RheXNMaXZlRXZlbnRzKVxyXG4gICAgdGhpcy50b2RheXNFdmVudHMgPSB0aGlzLmdldFRvZGF5c0V2ZW50cyh0aGlzLnRvZGF5c0V2ZW50cylcclxuICB9XHJcbiAgfVxyXG4gIGdldFRvZGF5c0V2ZW50cyhldmVudERhdGE6IGFueSkge1xyXG4gICAgbGV0IGxpdmVFdmVudHM6IGFueSA9IFtdXHJcbiAgICBsZXQgcGFzdEV2ZW50czogYW55ID0gW11cclxuICAgIGxldCBmdXR1cmVFdmVudHM6IGFueSA9IFtdXHJcblxyXG4gICAgbGl2ZUV2ZW50cyA9IHRoaXMudG9kYXlzTGl2ZUV2ZW50c1xyXG4gICAgcGFzdEV2ZW50cyA9IGV2ZW50RGF0YS5maWx0ZXIoKHBhc3RFdmVudDogYW55KSA9PiBwYXN0RXZlbnQuaXNFdmVudFBhc3QpXHJcbiAgICBmdXR1cmVFdmVudHMgPSBldmVudERhdGEuZmlsdGVyKChmdXR1cmVFdmVudDogYW55KSA9PiBmdXR1cmVFdmVudC5pc0V2ZW50RnV0dXJlKVxyXG4gICAgbGl2ZUV2ZW50cyA9IHRoaXMuc29ydEl0ZW1CeVRpbWVBc2MobGl2ZUV2ZW50cylcclxuICAgIGZ1dHVyZUV2ZW50cyA9IHRoaXMuc29ydEl0ZW1CeVRpbWVBc2MoZnV0dXJlRXZlbnRzKVxyXG4gICAgcGFzdEV2ZW50cyA9IHRoaXMuc29ydEl0ZW1CeVRpbWUocGFzdEV2ZW50cylcclxuICAgIHRoaXMudG9kYXlzRXZlbnRzICA9IFsuLi5saXZlRXZlbnRzLCAuLi5mdXR1cmVFdmVudHMsIC4uLnBhc3RFdmVudHNdXHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLnRvZGF5c0V2ZW50c1xyXG4gIH1cclxuICBcclxufVxyXG4iXX0=
@@ -1866,6 +1866,7 @@ class EventService {
1866
1866
  constructor(environment, utilitySvc) {
1867
1867
  this.utilitySvc = utilitySvc;
1868
1868
  this.todaysEvents = [];
1869
+ this.todaysLiveEvents = [];
1869
1870
  this.eventsSubject = new Subject();
1870
1871
  this.events$ = this.eventsSubject.asObservable();
1871
1872
  this.eventsChatbotSubject = new Subject();
@@ -1996,15 +1997,34 @@ class EventService {
1996
1997
  const min = stime.substr(2, 3);
1997
1998
  return `${date} ${hour}${min}`;
1998
1999
  }
2000
+ sortItemByTime(eventsdata) {
2001
+ return eventsdata.sort(((a, b) => {
2002
+ const firstDate = new Date(a.eventDate);
2003
+ const secondDate = new Date(b.eventDate);
2004
+ return secondDate > firstDate ? 1 : -1;
2005
+ }));
2006
+ }
2007
+ sortItemByTimeAsc(eventsdata) {
2008
+ return eventsdata.sort(((a, b) => {
2009
+ const firstDate = new Date(a.eventDate);
2010
+ const secondDate = new Date(b.eventDate);
2011
+ return secondDate < firstDate ? 1 : -1;
2012
+ }));
2013
+ }
1999
2014
  setEventListData(eventObj) {
2000
2015
  if (eventObj !== undefined) {
2001
2016
  this.todaysEvents = [];
2017
+ this.todaysLiveEvents = [];
2002
2018
  const data = eventObj;
2003
2019
  let isEventLive = false;
2004
2020
  let isEventRecording = false;
2021
+ let isEventPast = false;
2022
+ let isEventFuture = false;
2005
2023
  Object.keys(data).forEach(((index) => {
2006
2024
  isEventRecording = false;
2007
2025
  isEventLive = false;
2026
+ isEventPast = false;
2027
+ isEventFuture = false;
2008
2028
  const obj = data[index];
2009
2029
  const floor = Math.floor;
2010
2030
  const hours = floor(obj.duration / 60);
@@ -2040,9 +2060,21 @@ class EventService {
2040
2060
  else if (today >= eventendDate) {
2041
2061
  isEventRecording = true;
2042
2062
  isEventLive = false;
2063
+ if (moment(today).isAfter(eventendDate) && moment(today).isAfter(eventDate)) {
2064
+ isEventPast = true;
2065
+ }
2066
+ }
2067
+ else {
2068
+ if (moment(today).isBefore(eventDate) && moment(today).isBefore(eventendDate)) {
2069
+ isEventFuture = true;
2070
+ }
2043
2071
  }
2044
2072
  const eventDataObj = {
2073
+ eventDate,
2074
+ eventendDate,
2045
2075
  isEventLive,
2076
+ isEventFuture,
2077
+ isEventPast,
2046
2078
  isEventRecording,
2047
2079
  event: obj,
2048
2080
  eventName: obj.name,
@@ -2058,14 +2090,29 @@ class EventService {
2058
2090
  pastevent: false,
2059
2091
  };
2060
2092
  const isToday = this.compareDate(obj.startDate);
2061
- if (isToday && isEventLive) {
2093
+ if (isToday) {
2062
2094
  this.todaysEvents.push(eventDataObj);
2063
2095
  }
2096
+ if (isToday && isEventLive) {
2097
+ this.todaysLiveEvents.push(eventDataObj);
2098
+ }
2064
2099
  }));
2065
- this.todaysEvents = this.todaysEvents.sort(((a, b) => {
2066
- return (a.isEventLive === b.isEventLive) ? 0 : b.isEventLive ? -1 : 1;
2067
- }));
2068
- }
2100
+ this.todaysLiveEvents = this.sortItemByTime(this.todaysLiveEvents);
2101
+ this.todaysEvents = this.getTodaysEvents(this.todaysEvents);
2102
+ }
2103
+ }
2104
+ getTodaysEvents(eventData) {
2105
+ let liveEvents = [];
2106
+ let pastEvents = [];
2107
+ let futureEvents = [];
2108
+ liveEvents = this.todaysLiveEvents;
2109
+ pastEvents = eventData.filter(((pastEvent) => pastEvent.isEventPast));
2110
+ futureEvents = eventData.filter(((futureEvent) => futureEvent.isEventFuture));
2111
+ liveEvents = this.sortItemByTimeAsc(liveEvents);
2112
+ futureEvents = this.sortItemByTimeAsc(futureEvents);
2113
+ pastEvents = this.sortItemByTime(pastEvents);
2114
+ this.todaysEvents = [...liveEvents, ...futureEvents, ...pastEvents];
2115
+ return this.todaysEvents;
2069
2116
  }
2070
2117
  }
2071
2118
  EventService.decorators = [
@@ -2080,6 +2127,7 @@ EventService.ctorParameters = () => [
2080
2127
  /** @nocollapse */ EventService.ngInjectableDef = ɵɵdefineInjectable({ factory: function EventService_Factory() { return new EventService(ɵɵinject("environment"), ɵɵinject(UtilityService)); }, token: EventService, providedIn: "root" });
2081
2128
  if (false) {
2082
2129
  EventService.prototype.todaysEvents;
2130
+ EventService.prototype.todaysLiveEvents;
2083
2131
  EventService.prototype.eventsSubject;
2084
2132
  EventService.prototype.events$;
2085
2133
  EventService.prototype.eventsChatbotSubject;
@@ -2222,8 +2270,10 @@ class HorizontalScrollerV2Component {
2222
2270
  this.defaultMaxWidgets = this.defaultMaxWidgets ? this.widgetsLength < this.defaultMaxWidgets ?
2223
2271
  this.widgetsLength : this.defaultMaxWidgets : this.defaultMaxWidgets;
2224
2272
  arrLength = this.defaultMaxWidgets / arrLength;
2225
- for (let i = 0; i < arrLength; i += 1) {
2226
- this.bottomDotsArray.push(i);
2273
+ if (arrLength !== Infinity) {
2274
+ for (let i = 0; i < arrLength; i += 1) {
2275
+ this.bottomDotsArray.push(i);
2276
+ }
2227
2277
  }
2228
2278
  }
2229
2279
  }