@wavemaker/app-ng-runtime 11.4.0-next.141075 → 11.4.0-next.141077

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. app-ng-runtime/components/base/bundles/index.umd.js +1 -1
  2. app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
  3. app-ng-runtime/components/base/esm2015/widgets/common/dialog/dialog.service.js +3 -3
  4. app-ng-runtime/components/base/fesm2015/index.js +2 -2
  5. app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
  6. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +39 -23
  7. app-ng-runtime/components/containers/tabs/bundles/index.umd.js.map +1 -1
  8. app-ng-runtime/components/containers/tabs/esm2015/tab-pane/tab-pane.component.js +8 -1
  9. app-ng-runtime/components/containers/tabs/esm2015/tabs.animator.js +33 -13
  10. app-ng-runtime/components/containers/tabs/fesm2015/index.js +40 -13
  11. app-ng-runtime/components/containers/tabs/fesm2015/index.js.map +1 -1
  12. app-ng-runtime/components/containers/tabs/tabs.animator.d.ts +5 -1
  13. app-ng-runtime/components/data/list/bundles/index.umd.js +24 -39
  14. app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
  15. app-ng-runtime/components/data/list/esm2015/list.component.js +24 -39
  16. app-ng-runtime/components/data/list/fesm2015/index.js +23 -38
  17. app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
  18. app-ng-runtime/components/data/list/index.metadata.json +1 -1
  19. app-ng-runtime/components/data/pagination/bundles/index.umd.js +21 -4
  20. app-ng-runtime/components/data/pagination/bundles/index.umd.js.map +1 -1
  21. app-ng-runtime/components/data/pagination/esm2015/pagination.component.js +22 -5
  22. app-ng-runtime/components/data/pagination/fesm2015/index.js +21 -4
  23. app-ng-runtime/components/data/pagination/fesm2015/index.js.map +1 -1
  24. app-ng-runtime/components/data/pagination/index.metadata.json +1 -1
  25. app-ng-runtime/components/data/pagination/pagination.component.d.ts +1 -0
  26. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -0
  27. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +11 -3
  28. app-ng-runtime/components/dialogs/default/bundles/index.umd.js.map +1 -1
  29. app-ng-runtime/components/dialogs/default/esm2015/base-dialog.js +12 -5
  30. app-ng-runtime/components/dialogs/default/fesm2015/index.js +11 -4
  31. app-ng-runtime/components/dialogs/default/fesm2015/index.js.map +1 -1
  32. app-ng-runtime/components/dialogs/default/index.metadata.json +1 -1
  33. app-ng-runtime/components/input/epoch/bundles/index.umd.js +27 -8
  34. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  35. app-ng-runtime/components/input/epoch/date-time/date-time-picker.component.d.ts +1 -0
  36. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time-picker.component.js +31 -11
  37. app-ng-runtime/components/input/epoch/fesm2015/index.js +30 -10
  38. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  39. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  40. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +24 -6
  41. app-ng-runtime/mobile/components/page/default/bundles/index.umd.js.map +1 -1
  42. app-ng-runtime/mobile/components/page/default/esm2015/page.directive.js +20 -3
  43. app-ng-runtime/mobile/components/page/default/fesm2015/index.js +19 -2
  44. app-ng-runtime/mobile/components/page/default/fesm2015/index.js.map +1 -1
  45. app-ng-runtime/mobile/components/page/default/index.metadata.json +1 -1
  46. app-ng-runtime/mobile/components/page/default/page.directive.d.ts +4 -1
  47. app-ng-runtime/package.json +1 -1
  48. app-ng-runtime/variables/bundles/index.umd.js +10 -0
  49. app-ng-runtime/variables/bundles/index.umd.js.map +1 -1
  50. app-ng-runtime/variables/esm2015/service/variables.service.js +8 -1
  51. app-ng-runtime/variables/fesm2015/index.js +7 -1
  52. app-ng-runtime/variables/fesm2015/index.js.map +1 -1
  53. app-ng-runtime/variables/index.metadata.json +1 -1
  54. app-ng-runtime/variables/service/variables.service.d.ts +4 -0
@@ -39,6 +39,7 @@ export declare class DateTimePickerComponent implements AfterViewInit, OnDestroy
39
39
  onTimeUpdate(newVal: any): void;
40
40
  show(): void;
41
41
  clear(): void;
42
+ setToday(): void;
42
43
  reset(): void;
43
44
  hideModal(): void;
44
45
  onCancelClick(): void;
@@ -37,22 +37,32 @@ export class DateTimePickerComponent {
37
37
  }
38
38
  }
39
39
  validateSelectedDate() {
40
- var _a, _b, _c, _d, _e, _f, _g;
40
+ var _a, _b, _c, _d, _e;
41
41
  if (!this.changedValue) {
42
42
  return true;
43
43
  }
44
44
  const cd = moment(this.changedValue);
45
- if (((_a = this._bsDatepickerConfig) === null || _a === void 0 ? void 0 : _a.minDate) && ((_b = this._bsDatepickerConfig) === null || _b === void 0 ? void 0 : _b.minDate) > this.changedValue) {
45
+ const minDate = (_a = this._bsDatepickerConfig) === null || _a === void 0 ? void 0 : _a.minDate;
46
+ const maxDate = (_b = this._bsDatepickerConfig) === null || _b === void 0 ? void 0 : _b.maxDate;
47
+ if (minDate
48
+ && ((this.mode === 'DATE'
49
+ && moment(minDate).startOf('day').toDate() > this.changedValue)
50
+ || (this.mode !== 'DATE'
51
+ && minDate > this.changedValue))) {
46
52
  return false;
47
53
  }
48
- if (((_c = this._bsDatepickerConfig) === null || _c === void 0 ? void 0 : _c.maxDate) && ((_d = this._bsDatepickerConfig) === null || _d === void 0 ? void 0 : _d.maxDate) < this.changedValue) {
54
+ if (maxDate
55
+ && ((this.mode === 'DATE'
56
+ && moment(maxDate).endOf('day').toDate() < this.changedValue)
57
+ || (this.mode !== 'DATE'
58
+ && maxDate < this.changedValue))) {
49
59
  return false;
50
60
  }
51
- if (((_f = (_e = this._bsDatepickerConfig) === null || _e === void 0 ? void 0 : _e.daysDisabled) === null || _f === void 0 ? void 0 : _f.indexOf(cd.day())) >= 0) {
61
+ if (((_d = (_c = this._bsDatepickerConfig) === null || _c === void 0 ? void 0 : _c.daysDisabled) === null || _d === void 0 ? void 0 : _d.indexOf(cd.day())) >= 0) {
52
62
  return false;
53
63
  }
54
64
  const cdSt = cd.startOf('day').toDate().getTime();
55
- if ((_g = this.excludedDatesToDisable) === null || _g === void 0 ? void 0 : _g.find(d => d.getTime() === cdSt)) {
65
+ if ((_e = this.excludedDatesToDisable) === null || _e === void 0 ? void 0 : _e.find(d => d.getTime() === cdSt)) {
56
66
  return false;
57
67
  }
58
68
  return true;
@@ -105,6 +115,11 @@ export class DateTimePickerComponent {
105
115
  newVal.setMilliseconds(oldVal.getMilliseconds());
106
116
  }
107
117
  this.changedValue = newVal;
118
+ if (this.mode === 'DATE'
119
+ && oldVal !== newVal
120
+ && this.validateSelectedDate()) {
121
+ this.onOkClick();
122
+ }
108
123
  }
109
124
  onTimeUpdate(newVal) {
110
125
  this.changedValue = newVal;
@@ -123,6 +138,10 @@ export class DateTimePickerComponent {
123
138
  this.triggerChange();
124
139
  this.hideModal();
125
140
  }
141
+ setToday() {
142
+ const today = moment().startOf('day').toDate();
143
+ this.onDateUpdate(today);
144
+ }
126
145
  reset() {
127
146
  this.changedValue = this._value;
128
147
  }
@@ -183,15 +202,16 @@ DateTimePickerComponent.decorators = [
183
202
  </div>
184
203
  <div class="modal-footer">
185
204
  <button
186
- class="btn btn-secondary clear-btn"
187
- (click)="clear()">{{appLocale.MESSAGE_DATE_PICKER_CLEAR || "Clear" }}</button>
205
+ *ngIf="mode === 'DATE_TIME' || mode === 'DATE'"
206
+ class="btn btn-secondary today-btn"
207
+ (click)="setToday()">{{appLocale.MESSAGE_DATE_PICKER_TODAY || "Today" }}</button>
188
208
  <button
189
209
  class="btn btn-primary pull-right ok-btn"
210
+ *ngIf="mode === 'DATE_TIME' || mode === 'TIME'"
190
211
  (click)="onOkClick()">{{appLocale.MESSAGE_DATE_PICKER_OK || "Ok" }}</button>
191
212
  <button
192
- class="btn btn-secondary pull-right cancel-btn"
193
- (click)="hideModal()">{{appLocale.MESSAGE_DATE_PICKER_CANCEL || "Cancel" }}</button>
194
-
213
+ class="btn btn-secondary pull-right clear-btn"
214
+ (click)="clear()">{{appLocale.MESSAGE_DATE_PICKER_CLEAR || "Clear" }}</button>
195
215
  </div>
196
216
  </div>
197
217
  </ng-template>
@@ -315,4 +335,4 @@ TimePickerComponent.propDecorators = {
315
335
  max: [{ type: Input }],
316
336
  change: [{ type: Output }]
317
337
  };
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvc3JjL2RhdGUtdGltZS9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQVUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0osT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUErQy9CLE1BQU0sT0FBTyx1QkFBdUI7SUF1Q2hDLFlBQ2MsR0FBYSxFQUNmLGNBQThCO1FBRDVCLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDZixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUF2Q2xDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFbEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQU9uQixTQUFJLEdBQWtDLFdBQVcsQ0FBQztRQUdsRCxjQUFTLEdBQXVCLE9BQU8sQ0FBQztRQWN0QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwQyxXQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQVV4QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFDSSxLQUFLLENBQUMsQ0FBTztRQUNiLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJ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SyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sWUFBWSxDQUFDLE1BQU07UUFDdEIsUUFBUSxDQUFDO0lBQ2IsQ0FBQztJQUVELGVBQWU7SUFFZixDQUFDOzs7WUFwR0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJUO2FBQ0o7OztZQXpSb0UsUUFBUTs7O29CQW1TeEUsS0FBSztrQkFHTCxLQUFLO2tCQUdMLEtBQUs7cUJBR0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgTmdab25lLCBPbkRlc3Ryb3ksIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNEYXRlcGlja2VyQ29uZmlnIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcbmltcG9ydCB7IEJzTW9kYWxSZWYsIEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gJ0B3bS9jb3JlJztcblxuZGVjbGFyZSBjb25zdCBtb21lbnQsICQsIF87XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnd20tZGF0ZXRpbWVwaWNrZXInLFxuICAgIHRlbXBsYXRlOiBgIFxuICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZXRpbWVwaWNrZXJUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1kYXRldGltZS1waWNrZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1kYXRldGltZS1waWNrZXItb3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnMtZGF0ZXBpY2tlci1pbmxpbmVcbiAgICAgICAgICAgICAgICAgICAgW2JzQ29uZmlnXT1cImJzRGF0ZXBpY2tlckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRlc0Rpc2FibGVkXT1cImV4Y2x1ZGVkRGF0ZXNUb0Rpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBic0RhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgW2JzVmFsdWVdPVwiY2hhbmdlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGJzVmFsdWVDaGFuZ2UpPVwib25EYXRlVXBkYXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdEQVRFX1RJTUUnIHx8IG1vZGUgPT09ICdEQVRFJ1wiPlxuICAgICAgICAgICAgICAgIDwvYnMtZGF0ZXBpY2tlci1pbmxpbmU+XG4gICAgICAgICAgICAgICAgPHdtLXRpbWVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNoYW5nZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluVGltZVwiXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwibWF4VGltZVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25UaW1lVXBkYXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdEQVRFX1RJTUUnIHx8IG1vZGUgPT09ICdUSU1FJ1wiPjwvd20tdGltZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeSBkYXRlLXBpY2tlci12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2dldERhdGVMYWJlbCgpfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgY2xlYXItYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIj57e2FwcExvY2FsZS5NRVNTQUdFX0RBVEVfUElDS0VSX0NMRUFSIHx8IFwiQ2xlYXJcIiB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHVsbC1yaWdodCBvay1idG5cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Pa0NsaWNrKClcIj57e2FwcExvY2FsZS5NRVNTQUdFX0RBVEVfUElDS0VSX09LIHx8IFwiT2tcIiB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBwdWxsLXJpZ2h0IGNhbmNlbC1idG5cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGlkZU1vZGFsKClcIj57e2FwcExvY2FsZS5NRVNTQUdFX0RBVEVfUElDS0VSX0NBTkNFTCB8fCBcIkNhbmNlbFwiIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIHByaXZhdGUgaXNEYXRlT3BlbiA9IHRydWU7XG5cbiAgICBwcml2YXRlIGlzVGltZU9wZW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgYXBwTG9jYWxlOiBhbnk7XG5cbiAgICBAVmlld0NoaWxkKCdkYXRldGltZXBpY2tlclRlbXBsYXRlJyAsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGV0aW1lcGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgbW9kZTogJ0RBVEUnIHwgJ1RJTUUnIHwgJ0RBVEVfVElNRScgPSAnREFURV9USU1FJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHJpdmF0ZSBwbGFjZW1lbnQ6ICdNT0RBTCcgfCAnSU5MSU5FJyA9ICdNT0RBTCc7XG5cbiAgICBASW5wdXQoXCJjb25maWdcIilcbiAgICBwcml2YXRlIF9ic0RhdGVwaWNrZXJDb25maWc6IEJzRGF0ZXBpY2tlckNvbmZpZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHJpdmF0ZSBtaW5UaW1lOiBEYXRlO1xuXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIG1heFRpbWU6IERhdGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgX2Rpc3BsYXlGb3JtYXQ6IHN0cmluZztcblxuICAgIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICBwcml2YXRlIF92YWx1ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICBwcml2YXRlIGNoYW5nZWRWYWx1ZSA9IG51bGw7XG4gICAgXG4gICAgcHJpdmF0ZSBtb2RhbFJlZjogQnNNb2RhbFJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHJpdmF0ZSBleGNsdWRlZERhdGVzVG9EaXNhYmxlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBpbmo6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkge1xuICAgICAgICB0aGlzLmFwcExvY2FsZSA9IGluai5nZXQoQXBwKS5hcHBMb2NhbGUgfHwge307XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUoZDogRGF0ZSkge1xuICAgICAgICBkID0gZCB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGQ7XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gZDtcbiAgICB9XG5cbiAgICBcbiAgICBASW5wdXQoXCJjb25maWdcIilcbiAgICBzZXQgYnNEYXRlcGlja2VyQ29uZmlnKGNvbmZpZzogQnNEYXRlcGlja2VyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2JzRGF0ZXBpY2tlckNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnLnNob3dDbGVhckJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9ic0RhdGVwaWNrZXJDb25maWcuc2hvd1RvZGF5QnV0dG9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgZXhjbHVkZWREYXlzVG9EaXNhYmxlKHY6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMuX2JzRGF0ZXBpY2tlckNvbmZpZy5kYXlzRGlzYWJsZWQgPSB2O1xuICAgIH1cblxuICAgIGdldCBic0RhdGVwaWNrZXJDb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ic0RhdGVwaWNrZXJDb25maWc7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgZGlzcGxheUZvcm1hdChmb3JtYXQ6IHN0cmluZykge1xuICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL3kvZywgXCJZXCIpLnJlcGxhY2UoL2QvZywgXCJEXCIpLnJlcGxhY2UoXCJhXCIsIFwiQVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhbGlkYXRlU2VsZWN0ZWREYXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hhbmdlZFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZCA9IG1vbWVudCh0aGlzLmNoYW5nZWRWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLl9ic0RhdGVwaWNrZXJDb25maWc/Lm1pbkRhdGUgJiYgdGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnPy5taW5EYXRlID4gdGhpcy5jaGFuZ2VkVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnPy5tYXhEYXRlICYmIHRoaXMuX2JzRGF0ZXBpY2tlckNvbmZpZz8ubWF4RGF0ZSA8IHRoaXMuY2hhbmdlZFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2JzRGF0ZXBpY2tlckNvbmZpZz8uZGF5c0Rpc2FibGVkPy5pbmRleE9mKGNkLmRheSgpKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2RTdCA9IGNkLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZT8uZmluZChkID0+IGQuZ2V0VGltZSgpID09PSBjZFN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5Rm9ybWF0KCkge1xuICAgICAgICBpZiAodGhpcy5fZGlzcGxheUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlGb3JtYXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIGN1cnJlbnQgZGF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgaGlnaHRsaWdodFRvZGF5KCkge1xuICAgICAgICBjb25zdCB0b0RheSA9IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLnRvU3RyaW5nKCk7XG4gICAgICAgIF8uZmlsdGVyKCQoYGJvZHk+bW9kYWwtY29udGFpbmVyIC5kYXRlLXBpY2tlci1tb2RhbCBzcGFuOmNvbnRhaW5zKCR7dG9EYXl9KWApXG4gICAgICAgICAgICAubm90KCcuaXMtb3RoZXItbW9udGgsLmN1cnJlbnQtZGF0ZScpLCAob2JqKSA9PiB7XG4gICAgICAgICAgICBpZiAoJChvYmopLnRleHQoKSA9PT0gdG9EYXkpIHtcbiAgICAgICAgICAgICAgICAkKG9iaikuYWRkQ2xhc3MoJ2N1cnJlbnQtZGF0ZSB0ZXh0LWluZm8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlT25DbGljaygpIHtcbiAgICAgICAgJCgnYm9keT5tb2RhbC1jb250YWluZXIgLmRhdGUtcGlja2VyLW1vZGFsIC5hcHAtZGF0ZXRpbWUtcGlja2VyJylcbiAgICAgICAgICAgIC5jbGljaygoJGV2ZW50KSA9PiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkpO1xuICAgICAgICAkKCdib2R5Pm1vZGFsLWNvbnRhaW5lciAuZGF0ZS1waWNrZXItbW9kYWwnKS5jbGljaygoKSA9PiB0aGlzLm9uQ2FuY2VsQ2xpY2soKSk7XG4gICAgfVxuXG4gICAgZ2V0RGF0ZUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMuY2hhbmdlZFZhbHVlKS5mb3JtYXQodGhpcy5kaXNwbGF5Rm9ybWF0KTtcbiAgICB9XG5cbiAgICBvcGVuRGF0ZVBpY2tlcigpIHtcbiAgICAgICAgdGhpcy5pc1RpbWVPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEYXRlT3BlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgb3BlblRpbWVQaWNrZXIoKSB7XG4gICAgICAgIHRoaXMuaXNUaW1lT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNEYXRlT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVVcGRhdGUobmV3VmFsKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbCA9IHRoaXMuY2hhbmdlZFZhbHVlO1xuICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0RBVEUnKSB7XG4gICAgICAgICAgICBuZXdWYWwuc2V0SG91cnMoMCk7XG4gICAgICAgICAgICBuZXdWYWwuc2V0TWludXRlcygwKTtcbiAgICAgICAgICAgIG5ld1ZhbC5zZXRTZWNvbmRzKDApO1xuICAgICAgICAgICAgbmV3VmFsLnNldE1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgfSBlbHNlIGlmIChvbGRWYWwgJiYgbmV3VmFsKSB7XG4gICAgICAgICAgICBuZXdWYWwuc2V0SG91cnMob2xkVmFsLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgbmV3VmFsLnNldE1pbnV0ZXMob2xkVmFsLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICBuZXdWYWwuc2V0U2Vjb25kcyhvbGRWYWwuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIG5ld1ZhbC5zZXRNaWxsaXNlY29uZHMob2xkVmFsLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZWRWYWx1ZSA9IG5ld1ZhbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UaW1lVXBkYXRlKG5ld1ZhbCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRWYWx1ZSA9IG5ld1ZhbDtcbiAgICB9XG5cbiAgICBzaG93KCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3codGhpcy5kYXRldGltZXBpY2tlclRlbXBsYXRlLCB7XG4gICAgICAgICAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgICAgICAgIGNsYXNzOiAnZGF0ZS1waWNrZXItbW9kYWwgbW9kYWwtZGlhbG9nLWNlbnRlcmVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuaGlkZU9uQ2xpY2soKX0sIDUwMCk7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgaGlkZU1vZGFsKCkge1xuICAgICAgICBpZiAodGhpcy5tb2RhbFJlZj8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuYnNNb2RhbFNlcnZpY2UuaGlkZSh0aGlzLm1vZGFsUmVmLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgfVxuXG4gICAgb25Pa0NsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVNlbGVjdGVkRGF0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgIH1cblxuICAgIHRyaWdnZXJDaGFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9PSB0aGlzLmNoYW5nZWRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLmNoYW5nZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICB9XG5cbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3dtLXRpbWVwaWNrZXInLFxuICAgIHRlbXBsYXRlOiBgIFxuICAgICAgICA8d20tcGlja2VyZ3JvdXA+XG4gICAgICAgICAgICA8d20tcGlja2VyIFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnMuaG91clwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwiaG91clwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXQoJGV2ZW50LCAnSE9VUicpXCI+PC93bS1waWNrZXI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcC10aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgICAgICA8d20tcGlja2VyIFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnMubWludXRlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJtaW51dGVcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0KCRldmVudCwgJ01JTlVURScpXCI+PC93bS1waWNrZXI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcC10aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgICAgICA8d20tcGlja2VyIFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnMubWludXRlXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJzZWNvbmRcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0KCRldmVudCwgJ1NFQ09ORCcpXCI+PC93bS1waWNrZXI+XG4gICAgICAgIDwvd20tcGlja2VyZ3JvdXA+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBUaW1lUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBvcHRpb25zID0ge1xuICAgICAgICBob3VyOiBbXSxcbiAgICAgICAgbWludXRlOiBbXSxcbiAgICAgICAgc2Vjb25kOiBbXSxcbiAgICAgICAgbWVyaWRpYW46IFsnQU0nLCAnUE0nXVxuICAgIH07XG5cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgdmFsdWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIG1pbjogRGF0ZSA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgbWF4OiBEYXRlID0gbnVsbDtcblxuICAgIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGluajogSW5qZWN0b3IpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmhvdXIgPSB0aGlzLnBvcHVsYXRlTnVtYmVycygwLCAyMyk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5taW51dGUgPSB0aGlzLnBvcHVsYXRlTnVtYmVycygwLCA1OSk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zZWNvbmQgPSB0aGlzLnBvcHVsYXRlTnVtYmVycygwLCA1OSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZU51bWJlcnMoc3RhcnQ6IG51bWJlciwgdG86IG51bWJlcikge1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgZm9yKGxldCBpID0gc3RhcnQ7IGkgPD0gdG87IGkrKykge1xuICAgICAgICAgICAgYXJyLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAoaSA8IDEwID8gJzAnIDogJycpICsgaSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIHNldCh7aW5kZXgsIHZhbHVlfSwgdW5pdDogJ0hPVVInIHwgJ01JTlVURScgfCAnU0VDT05EJyB8ICdNRVJJRElBTicpIHtcbiAgICAgICAgaWYgKHVuaXQgPT09ICdIT1VSJykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5ob3VyKHBhcnNlSW50KHZhbHVlKSkudG9EYXRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gJ01JTlVURScpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQodGhpcy52YWx1ZSkubWludXRlKHBhcnNlSW50KHZhbHVlKSkudG9EYXRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gJ1NFQ09ORCcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQodGhpcy52YWx1ZSkuc2Vjb25kKHBhcnNlSW50KHZhbHVlKSkudG9EYXRlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gJ01FUklESUFOJykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG1vbWVudCh0aGlzLnZhbHVlKS5taW51dGUodmFsdWUpLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbiAmJiB0aGlzLnZhbHVlIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXggJiYgdGhpcy52YWx1ZSA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgaG91cigpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLnZhbHVlKS5ob3VyKCk7XG4gICAgfVxuXG4gICAgZ2V0IG1pbnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLnZhbHVlKS5taW51dGUoKTtcbiAgICB9XG5cbiAgICBnZXQgc2Vjb25kKCkge1xuICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMudmFsdWUpLnNlY29uZCgpO1xuICAgIH1cblxuICAgIGdldCBtZXJpZGlhbigpIHtcbiAgICAgICAgcmV0dXJuICdBTSc7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGF0ZVVwZGF0ZShuZXdWYWwpIHtcbiAgICAgICAgZGVidWdnZXI7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBcbiAgICB9XG5cbn0iXX0=
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvc3JjL2RhdGUtdGltZS9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQVUsUUFBUSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0osT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFjLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFnRC9CLE1BQU0sT0FBTyx1QkFBdUI7SUF1Q2hDLFlBQ2MsR0FBYSxFQUNmLGNBQThCO1FBRDVCLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDZixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUF2Q2xDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFbEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQU9uQixTQUFJLEdBQWtDLFdBQVcsQ0FBQztRQUdsRCxjQUFTLEdBQXVCLE9BQU8sQ0FBQztRQWN0QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwQyxXQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVwQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQVV4QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFDSSxLQUFLLENBQUMsQ0FBTztRQUNiLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBR0QsSUFDSSxrQkFBa0IsQ0FBQyxNQUEwQjtRQUM3QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUNJLHFCQUFxQixDQUFDLENBQVc7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUNJLGFBQWEsQ0FBQyxNQUFjO1FBQzVCLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDeEY7SUFDTCxDQUFDO0lBRUQsb0JBQW9COztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFBLElBQUksQ0FBQyxtQkFBbUIsMENBQUUsT0FBTyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQUEsSUFBSSxDQUFDLG1CQUFtQiwwQ0FBRSxPQUFPLENBQUM7UUFDbEQsSUFBSSxPQUFPO2VBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTttQkFDZCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7bUJBQ2hFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO3VCQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUU7WUFDMUMsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLE9BQU87ZUFDSixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO21CQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzttQkFDOUQsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07dUJBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRTtZQUMxQyxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLG1CQUFtQiwwQ0FBRSxZQUFZLDBDQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSSxDQUFDLEVBQUU7WUFDaEUsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xELElBQUksTUFBQSxJQUFJLENBQUMsc0JBQXNCLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUM5RCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUNEOztPQUVHO0lBQ0ssZUFBZTtRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlEQUF5RCxLQUFLLEdBQUcsQ0FBQzthQUN4RSxHQUFHLENBQUMsK0JBQStCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRTtnQkFDekIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2FBQzdDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sV0FBVztRQUNmLENBQUMsQ0FBQyw4REFBOEQsQ0FBQzthQUM1RCxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRU0sWUFBWSxDQUFDLE1BQU07UUFDdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0I7YUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO2VBQ2pCLE1BQU0sS0FBSyxNQUFNO2VBQ2pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFTSxZQUFZLENBQUMsTUFBTTtRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ2xFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLFFBQVE7WUFDbEIsS0FBSyxFQUFFLHlDQUF5QztTQUNuRCxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBLENBQUEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxTQUFTOztRQUNMLElBQUksTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELGVBQWU7SUFFZixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDOzs7WUE3UUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdDVDthQUNKOzs7WUFuRG9FLFFBQVE7WUFFeEQsY0FBYzs7O3FDQTBEOUIsU0FBUyxTQUFDLHdCQUF3QixFQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTttQkFFckQsS0FBSzt3QkFHTCxLQUFLO2tDQUdMLEtBQUssU0FBQyxRQUFRO3NCQUdkLEtBQUs7c0JBR0wsS0FBSzs2QkFHTCxLQUFLO3FCQUdMLE1BQU07cUNBUU4sS0FBSztvQkFTTCxLQUFLO2lDQVFMLEtBQUssU0FBQyxRQUFRO29DQU9kLEtBQUs7NEJBU0wsS0FBSzs7QUFzTFYsTUFBTSxPQUFPLG1CQUFtQjtJQW9CNUIsWUFDYyxHQUFhO1FBQWIsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQW5CM0IsWUFBTyxHQUFHO1lBQ04sSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztTQUN6QixDQUFDO1FBR00sVUFBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFHbkIsUUFBRyxHQUFTLElBQUksQ0FBQztRQUdqQixRQUFHLEdBQVMsSUFBSSxDQUFDO1FBRWYsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFJeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhLEVBQUUsRUFBVTtRQUM3QyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixLQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ0wsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO2dCQUM5QixLQUFLLEVBQUUsQ0FBQzthQUNYLENBQUMsQ0FBQTtTQUNMO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsR0FBRyxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxFQUFFLElBQStDO1FBQy9ELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2xFO2FBQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDcEU7YUFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwRTthQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDekI7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUN6QjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFlBQVksQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsQ0FBQztJQUNiLENBQUM7SUFFRCxlQUFlO0lBRWYsQ0FBQzs7O1lBcEdKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztLQWlCVDthQUNKOzs7WUE5U29FLFFBQVE7OztvQkF3VHhFLEtBQUs7a0JBR0wsS0FBSztrQkFHTCxLQUFLO3FCQUdMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE5nWm9uZSwgT25EZXN0cm95LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlckNvbmZpZyB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tICdAd20vY29yZSc7XG5cbmRlY2xhcmUgY29uc3QgbW9tZW50LCAkLCBfO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3dtLWRhdGV0aW1lcGlja2VyJyxcbiAgICB0ZW1wbGF0ZTogYCBcbiAgICA8bmctdGVtcGxhdGUgI2RhdGV0aW1lcGlja2VyVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtZGF0ZXRpbWUtcGlja2VyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtZGF0ZXRpbWUtcGlja2VyLW9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJzLWRhdGVwaWNrZXItaW5saW5lXG4gICAgICAgICAgICAgICAgICAgIFtic0NvbmZpZ109XCJic0RhdGVwaWNrZXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0ZXNEaXNhYmxlZF09XCJleGNsdWRlZERhdGVzVG9EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICAgIFtic1ZhbHVlXT1cImNoYW5nZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChic1ZhbHVlQ2hhbmdlKT1cIm9uRGF0ZVVwZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAnREFURV9USU1FJyB8fCBtb2RlID09PSAnREFURSdcIj5cbiAgICAgICAgICAgICAgICA8L2JzLWRhdGVwaWNrZXItaW5saW5lPlxuICAgICAgICAgICAgICAgIDx3bS10aW1lcGlja2VyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjaGFuZ2VkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1pblRpbWVcIlxuICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVGltZVVwZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtb2RlID09PSAnREFURV9USU1FJyB8fCBtb2RlID09PSAnVElNRSdcIj48L3dtLXRpbWVwaWNrZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZGF0ZS1waWNrZXItdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tnZXREYXRlTGFiZWwoKX19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdEQVRFX1RJTUUnIHx8IG1vZGUgPT09ICdEQVRFJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdG9kYXktYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRvZGF5KClcIj57e2FwcExvY2FsZS5NRVNTQUdFX0RBVEVfUElDS0VSX1RPREFZIHx8IFwiVG9kYXlcIiB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHVsbC1yaWdodCBvay1idG5cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdEQVRFX1RJTUUnIHx8IG1vZGUgPT09ICdUSU1FJ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk9rQ2xpY2soKVwiPnt7YXBwTG9jYWxlLk1FU1NBR0VfREFURV9QSUNLRVJfT0sgfHwgXCJPa1wiIH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHB1bGwtcmlnaHQgY2xlYXItYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIj57e2FwcExvY2FsZS5NRVNTQUdFX0RBVEVfUElDS0VSX0NMRUFSIHx8IFwiQ2xlYXJcIiB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlVGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwcml2YXRlIGlzRGF0ZU9wZW4gPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBpc1RpbWVPcGVuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGFwcExvY2FsZTogYW55O1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0ZXRpbWVwaWNrZXJUZW1wbGF0ZScgLCB7IHN0YXRpYzogdHJ1ZSB9KSBkYXRldGltZXBpY2tlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIG1vZGU6ICdEQVRFJyB8ICdUSU1FJyB8ICdEQVRFX1RJTUUnID0gJ0RBVEVfVElNRSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgcGxhY2VtZW50OiAnTU9EQUwnIHwgJ0lOTElORScgPSAnTU9EQUwnO1xuXG4gICAgQElucHV0KFwiY29uZmlnXCIpXG4gICAgcHJpdmF0ZSBfYnNEYXRlcGlja2VyQ29uZmlnOiBCc0RhdGVwaWNrZXJDb25maWc7XG5cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgbWluVGltZTogRGF0ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHJpdmF0ZSBtYXhUaW1lOiBEYXRlO1xuXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0OiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgcHJpdmF0ZSBfdmFsdWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgcHJpdmF0ZSBjaGFuZ2VkVmFsdWUgPSBudWxsO1xuICAgIFxuICAgIHByaXZhdGUgbW9kYWxSZWY6IEJzTW9kYWxSZWY7XG5cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgZXhjbHVkZWREYXRlc1RvRGlzYWJsZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5hcHBMb2NhbGUgPSBpbmouZ2V0KEFwcCkuYXBwTG9jYWxlIHx8IHt9O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKGQ6IERhdGUpIHtcbiAgICAgICAgZCA9IGQgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBkO1xuICAgICAgICB0aGlzLmNoYW5nZWRWYWx1ZSA9IGQ7XG4gICAgfVxuXG4gICAgXG4gICAgQElucHV0KFwiY29uZmlnXCIpXG4gICAgc2V0IGJzRGF0ZXBpY2tlckNvbmZpZyhjb25maWc6IEJzRGF0ZXBpY2tlckNvbmZpZykge1xuICAgICAgICB0aGlzLl9ic0RhdGVwaWNrZXJDb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuX2JzRGF0ZXBpY2tlckNvbmZpZy5zaG93Q2xlYXJCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnLnNob3dUb2RheUJ1dHRvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGV4Y2x1ZGVkRGF5c1RvRGlzYWJsZSh2OiBudW1iZXJbXSkge1xuICAgICAgICB0aGlzLl9ic0RhdGVwaWNrZXJDb25maWcuZGF5c0Rpc2FibGVkID0gdjtcbiAgICB9XG5cbiAgICBnZXQgYnNEYXRlcGlja2VyQ29uZmlnKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRpc3BsYXlGb3JtYXQoZm9ybWF0OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheUZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC95L2csIFwiWVwiKS5yZXBsYWNlKC9kL2csIFwiRFwiKS5yZXBsYWNlKFwiYVwiLCBcIkFcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZVNlbGVjdGVkRGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYW5nZWRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2QgPSBtb21lbnQodGhpcy5jaGFuZ2VkVmFsdWUpO1xuICAgICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnPy5taW5EYXRlO1xuICAgICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnPy5tYXhEYXRlO1xuICAgICAgICBpZiAobWluRGF0ZVxuICAgICAgICAgICAgJiYgKCh0aGlzLm1vZGUgPT09ICdEQVRFJyBcbiAgICAgICAgICAgICAgICAgICAgJiYgbW9tZW50KG1pbkRhdGUpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpID4gdGhpcy5jaGFuZ2VkVmFsdWUpXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMubW9kZSAhPT0gJ0RBVEUnIFxuICAgICAgICAgICAgICAgICAgICAmJiBtaW5EYXRlID4gdGhpcy5jaGFuZ2VkVmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhEYXRlIFxuICAgICAgICAgICAgJiYgKCh0aGlzLm1vZGUgPT09ICdEQVRFJyBcbiAgICAgICAgICAgICAgICAgICAgJiYgbW9tZW50KG1heERhdGUpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA8IHRoaXMuY2hhbmdlZFZhbHVlKVxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLm1vZGUgIT09ICdEQVRFJyBcbiAgICAgICAgICAgICAgICAgICAgJiYgbWF4RGF0ZSA8IHRoaXMuY2hhbmdlZFZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fYnNEYXRlcGlja2VyQ29uZmlnPy5kYXlzRGlzYWJsZWQ/LmluZGV4T2YoY2QuZGF5KCkpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZFN0ID0gY2Quc3RhcnRPZignZGF5JykudG9EYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBpZiAodGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlPy5maW5kKGQgPT4gZC5nZXRUaW1lKCkgPT09IGNkU3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0IGRpc3BsYXlGb3JtYXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaXNwbGF5Rm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgY3VycmVudCBkYXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBoaWdodGxpZ2h0VG9kYXkoKSB7XG4gICAgICAgIGNvbnN0IHRvRGF5ID0gbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgICAgXy5maWx0ZXIoJChgYm9keT5tb2RhbC1jb250YWluZXIgLmRhdGUtcGlja2VyLW1vZGFsIHNwYW46Y29udGFpbnMoJHt0b0RheX0pYClcbiAgICAgICAgICAgIC5ub3QoJy5pcy1vdGhlci1tb250aCwuY3VycmVudC1kYXRlJyksIChvYmopID0+IHtcbiAgICAgICAgICAgIGlmICgkKG9iaikudGV4dCgpID09PSB0b0RheSkge1xuICAgICAgICAgICAgICAgICQob2JqKS5hZGRDbGFzcygnY3VycmVudC1kYXRlIHRleHQtaW5mbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVPbkNsaWNrKCkge1xuICAgICAgICAkKCdib2R5Pm1vZGFsLWNvbnRhaW5lciAuZGF0ZS1waWNrZXItbW9kYWwgLmFwcC1kYXRldGltZS1waWNrZXInKVxuICAgICAgICAgICAgLmNsaWNrKCgkZXZlbnQpID0+ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKSk7XG4gICAgICAgICQoJ2JvZHk+bW9kYWwtY29udGFpbmVyIC5kYXRlLXBpY2tlci1tb2RhbCcpLmNsaWNrKCgpID0+IHRoaXMub25DYW5jZWxDbGljaygpKTtcbiAgICB9XG5cbiAgICBnZXREYXRlTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQodGhpcy5jaGFuZ2VkVmFsdWUpLmZvcm1hdCh0aGlzLmRpc3BsYXlGb3JtYXQpO1xuICAgIH1cblxuICAgIG9wZW5EYXRlUGlja2VyKCkge1xuICAgICAgICB0aGlzLmlzVGltZU9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0RhdGVPcGVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvcGVuVGltZVBpY2tlcigpIHtcbiAgICAgICAgdGhpcy5pc1RpbWVPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0RhdGVPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGF0ZVVwZGF0ZShuZXdWYWwpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy5jaGFuZ2VkVmFsdWU7XG4gICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnREFURScpIHtcbiAgICAgICAgICAgIG5ld1ZhbC5zZXRIb3VycygwKTtcbiAgICAgICAgICAgIG5ld1ZhbC5zZXRNaW51dGVzKDApO1xuICAgICAgICAgICAgbmV3VmFsLnNldFNlY29uZHMoMCk7XG4gICAgICAgICAgICBuZXdWYWwuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICB9IGVsc2UgaWYgKG9sZFZhbCAmJiBuZXdWYWwpIHtcbiAgICAgICAgICAgIG5ld1ZhbC5zZXRIb3VycyhvbGRWYWwuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICBuZXdWYWwuc2V0TWludXRlcyhvbGRWYWwuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIG5ld1ZhbC5zZXRTZWNvbmRzKG9sZFZhbC5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgbmV3VmFsLnNldE1pbGxpc2Vjb25kcyhvbGRWYWwuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gbmV3VmFsO1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnREFURScgXG4gICAgICAgICAgICAmJiBvbGRWYWwgIT09IG5ld1ZhbCBcbiAgICAgICAgICAgICYmIHRoaXMudmFsaWRhdGVTZWxlY3RlZERhdGUoKSkge1xuICAgICAgICAgICAgdGhpcy5vbk9rQ2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblRpbWVVcGRhdGUobmV3VmFsKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZFZhbHVlID0gbmV3VmFsO1xuICAgIH1cblxuICAgIHNob3coKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyh0aGlzLmRhdGV0aW1lcGlja2VyVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAgICAgICAgY2xhc3M6ICdkYXRlLXBpY2tlci1tb2RhbCBtb2RhbC1kaWFsb2ctY2VudGVyZWQnXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5oaWRlT25DbGljaygpfSwgNTAwKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICB9XG5cbiAgICBzZXRUb2RheSgpIHtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBtb21lbnQoKS5zdGFydE9mKCdkYXknKS50b0RhdGUoKTtcbiAgICAgICAgdGhpcy5vbkRhdGVVcGRhdGUodG9kYXkpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIGhpZGVNb2RhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kYWxSZWY/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLmhpZGUodGhpcy5tb2RhbFJlZi5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNhbmNlbENsaWNrKCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgIH1cblxuICAgIG9uT2tDbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVTZWxlY3RlZERhdGUoKSkge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gdGhpcy5jaGFuZ2VkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5jaGFuZ2VkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgfVxuXG59XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3bS10aW1lcGlja2VyJyxcbiAgICB0ZW1wbGF0ZTogYCBcbiAgICAgICAgPHdtLXBpY2tlcmdyb3VwPlxuICAgICAgICAgICAgPHdtLXBpY2tlciBcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zLmhvdXJcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cImhvdXJcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0KCRldmVudCwgJ0hPVVInKVwiPjwvd20tcGlja2VyPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtdGltZS1zZXBhcmF0b3JcIj46PC9zcGFuPlxuICAgICAgICAgICAgPHdtLXBpY2tlciBcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zLm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwibWludXRlXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldCgkZXZlbnQsICdNSU5VVEUnKVwiPjwvd20tcGlja2VyPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtdGltZS1zZXBhcmF0b3JcIj46PC9zcGFuPlxuICAgICAgICAgICAgPHdtLXBpY2tlciBcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zLm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwic2Vjb25kXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldCgkZXZlbnQsICdTRUNPTkQnKVwiPjwvd20tcGlja2VyPlxuICAgICAgICA8L3dtLXBpY2tlcmdyb3VwPlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgICAgaG91cjogW10sXG4gICAgICAgIG1pbnV0ZTogW10sXG4gICAgICAgIHNlY29uZDogW10sXG4gICAgICAgIG1lcmlkaWFuOiBbJ0FNJywgJ1BNJ11cbiAgICB9O1xuXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIHZhbHVlID0gbmV3IERhdGUoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHJpdmF0ZSBtaW46IERhdGUgPSBudWxsO1xuXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIG1heDogRGF0ZSA9IG51bGw7XG5cbiAgICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBpbmo6IEluamVjdG9yKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ob3VyID0gdGhpcy5wb3B1bGF0ZU51bWJlcnMoMCwgMjMpO1xuICAgICAgICB0aGlzLm9wdGlvbnMubWludXRlID0gdGhpcy5wb3B1bGF0ZU51bWJlcnMoMCwgNTkpO1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2Vjb25kID0gdGhpcy5wb3B1bGF0ZU51bWJlcnMoMCwgNTkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9wdWxhdGVOdW1iZXJzKHN0YXJ0OiBudW1iZXIsIHRvOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IHN0YXJ0OyBpIDw9IHRvOyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogKGkgPCAxMCA/ICcwJyA6ICcnKSArIGksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICBzZXQoe2luZGV4LCB2YWx1ZX0sIHVuaXQ6ICdIT1VSJyB8ICdNSU5VVEUnIHwgJ1NFQ09ORCcgfCAnTUVSSURJQU4nKSB7XG4gICAgICAgIGlmICh1bml0ID09PSAnSE9VUicpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQodGhpcy52YWx1ZSkuaG91cihwYXJzZUludCh2YWx1ZSkpLnRvRGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdNSU5VVEUnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbW9tZW50KHRoaXMudmFsdWUpLm1pbnV0ZShwYXJzZUludCh2YWx1ZSkpLnRvRGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdTRUNPTkQnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbW9tZW50KHRoaXMudmFsdWUpLnNlY29uZChwYXJzZUludCh2YWx1ZSkpLnRvRGF0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdNRVJJRElBTicpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtb21lbnQodGhpcy52YWx1ZSkubWludXRlKHZhbHVlKS50b0RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW4gJiYgdGhpcy52YWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4ICYmIHRoaXMudmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWF4O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGhvdXIoKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQodGhpcy52YWx1ZSkuaG91cigpO1xuICAgIH1cblxuICAgIGdldCBtaW51dGUoKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQodGhpcy52YWx1ZSkubWludXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlY29uZCgpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLnZhbHVlKS5zZWNvbmQoKTtcbiAgICB9XG5cbiAgICBnZXQgbWVyaWRpYW4oKSB7XG4gICAgICAgIHJldHVybiAnQU0nO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVVcGRhdGUobmV3VmFsKSB7XG4gICAgICAgIGRlYnVnZ2VyO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgXG4gICAgfVxuXG59Il19
@@ -45,22 +45,32 @@ class DateTimePickerComponent {
45
45
  }
46
46
  }
47
47
  validateSelectedDate() {
48
- var _a, _b, _c, _d, _e, _f, _g;
48
+ var _a, _b, _c, _d, _e;
49
49
  if (!this.changedValue) {
50
50
  return true;
51
51
  }
52
52
  const cd = moment(this.changedValue);
53
- if (((_a = this._bsDatepickerConfig) === null || _a === void 0 ? void 0 : _a.minDate) && ((_b = this._bsDatepickerConfig) === null || _b === void 0 ? void 0 : _b.minDate) > this.changedValue) {
53
+ const minDate = (_a = this._bsDatepickerConfig) === null || _a === void 0 ? void 0 : _a.minDate;
54
+ const maxDate = (_b = this._bsDatepickerConfig) === null || _b === void 0 ? void 0 : _b.maxDate;
55
+ if (minDate
56
+ && ((this.mode === 'DATE'
57
+ && moment(minDate).startOf('day').toDate() > this.changedValue)
58
+ || (this.mode !== 'DATE'
59
+ && minDate > this.changedValue))) {
54
60
  return false;
55
61
  }
56
- if (((_c = this._bsDatepickerConfig) === null || _c === void 0 ? void 0 : _c.maxDate) && ((_d = this._bsDatepickerConfig) === null || _d === void 0 ? void 0 : _d.maxDate) < this.changedValue) {
62
+ if (maxDate
63
+ && ((this.mode === 'DATE'
64
+ && moment(maxDate).endOf('day').toDate() < this.changedValue)
65
+ || (this.mode !== 'DATE'
66
+ && maxDate < this.changedValue))) {
57
67
  return false;
58
68
  }
59
- if (((_f = (_e = this._bsDatepickerConfig) === null || _e === void 0 ? void 0 : _e.daysDisabled) === null || _f === void 0 ? void 0 : _f.indexOf(cd.day())) >= 0) {
69
+ if (((_d = (_c = this._bsDatepickerConfig) === null || _c === void 0 ? void 0 : _c.daysDisabled) === null || _d === void 0 ? void 0 : _d.indexOf(cd.day())) >= 0) {
60
70
  return false;
61
71
  }
62
72
  const cdSt = cd.startOf('day').toDate().getTime();
63
- if ((_g = this.excludedDatesToDisable) === null || _g === void 0 ? void 0 : _g.find(d => d.getTime() === cdSt)) {
73
+ if ((_e = this.excludedDatesToDisable) === null || _e === void 0 ? void 0 : _e.find(d => d.getTime() === cdSt)) {
64
74
  return false;
65
75
  }
66
76
  return true;
@@ -113,6 +123,11 @@ class DateTimePickerComponent {
113
123
  newVal.setMilliseconds(oldVal.getMilliseconds());
114
124
  }
115
125
  this.changedValue = newVal;
126
+ if (this.mode === 'DATE'
127
+ && oldVal !== newVal
128
+ && this.validateSelectedDate()) {
129
+ this.onOkClick();
130
+ }
116
131
  }
117
132
  onTimeUpdate(newVal) {
118
133
  this.changedValue = newVal;
@@ -131,6 +146,10 @@ class DateTimePickerComponent {
131
146
  this.triggerChange();
132
147
  this.hideModal();
133
148
  }
149
+ setToday() {
150
+ const today = moment().startOf('day').toDate();
151
+ this.onDateUpdate(today);
152
+ }
134
153
  reset() {
135
154
  this.changedValue = this._value;
136
155
  }
@@ -191,15 +210,16 @@ DateTimePickerComponent.decorators = [
191
210
  </div>
192
211
  <div class="modal-footer">
193
212
  <button
194
- class="btn btn-secondary clear-btn"
195
- (click)="clear()">{{appLocale.MESSAGE_DATE_PICKER_CLEAR || "Clear" }}</button>
213
+ *ngIf="mode === 'DATE_TIME' || mode === 'DATE'"
214
+ class="btn btn-secondary today-btn"
215
+ (click)="setToday()">{{appLocale.MESSAGE_DATE_PICKER_TODAY || "Today" }}</button>
196
216
  <button
197
217
  class="btn btn-primary pull-right ok-btn"
218
+ *ngIf="mode === 'DATE_TIME' || mode === 'TIME'"
198
219
  (click)="onOkClick()">{{appLocale.MESSAGE_DATE_PICKER_OK || "Ok" }}</button>
199
220
  <button
200
- class="btn btn-secondary pull-right cancel-btn"
201
- (click)="hideModal()">{{appLocale.MESSAGE_DATE_PICKER_CANCEL || "Cancel" }}</button>
202
-
221
+ class="btn btn-secondary pull-right clear-btn"
222
+ (click)="clear()">{{appLocale.MESSAGE_DATE_PICKER_CLEAR || "Clear" }}</button>
203
223
  </div>
204
224
  </div>
205
225
  </ng-template>