@wavemaker/app-ng-runtime 11.4.0-next.25701 → 11.4.0-next.25703

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 (59) hide show
  1. app-ng-runtime/build-task/basic/tree/tree.build.d.ts +2 -1
  2. app-ng-runtime/build-task/bundles/index.umd.js +9 -7
  3. app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
  4. app-ng-runtime/build-task/esm2015/basic/tree/tree.build.js +4 -3
  5. app-ng-runtime/build-task/esm2015/navigation/popover/popover.build.js +3 -3
  6. app-ng-runtime/build-task/fesm2015/index.js +9 -7
  7. app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
  8. app-ng-runtime/components/base/bundles/index.umd.js +3 -6
  9. app-ng-runtime/components/base/bundles/index.umd.js.map +1 -1
  10. app-ng-runtime/components/base/esm2015/utils/widget-utils.js +4 -7
  11. app-ng-runtime/components/base/fesm2015/index.js +3 -6
  12. app-ng-runtime/components/base/fesm2015/index.js.map +1 -1
  13. app-ng-runtime/components/base/utils/widget-utils.d.ts +1 -1
  14. app-ng-runtime/components/basic/tree/bundles/index.umd.js +256 -280
  15. app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
  16. app-ng-runtime/components/basic/tree/esm2015/public_api.js +2 -2
  17. app-ng-runtime/components/basic/tree/esm2015/tree.directive.js +310 -0
  18. app-ng-runtime/components/basic/tree/esm2015/tree.module.js +3 -3
  19. app-ng-runtime/components/basic/tree/fesm2015/index.js +248 -260
  20. app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
  21. app-ng-runtime/components/basic/tree/index.metadata.json +1 -1
  22. app-ng-runtime/components/basic/tree/public_api.d.ts +1 -1
  23. app-ng-runtime/components/basic/tree/tree.directive.d.ts +35 -0
  24. app-ng-runtime/components/data/list/bundles/index.umd.js +4 -28
  25. app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
  26. app-ng-runtime/components/data/list/esm2015/list.component.js +5 -29
  27. app-ng-runtime/components/data/list/fesm2015/index.js +4 -28
  28. app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
  29. app-ng-runtime/components/data/list/index.metadata.json +1 -1
  30. app-ng-runtime/components/dialogs/default/bundles/index.umd.js.map +1 -1
  31. app-ng-runtime/components/dialogs/default/esm2015/base-dialog.js +1 -1
  32. app-ng-runtime/components/dialogs/default/fesm2015/index.js.map +1 -1
  33. app-ng-runtime/components/dialogs/default/index.metadata.json +1 -1
  34. app-ng-runtime/components/input/epoch/bundles/index.umd.js +21 -39
  35. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  36. app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +25 -43
  37. app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +3 -3
  38. app-ng-runtime/components/input/epoch/esm2015/date-time/date-time.component.js +2 -2
  39. app-ng-runtime/components/input/epoch/fesm2015/index.js +27 -45
  40. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  41. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  42. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +4 -3
  43. app-ng-runtime/components/navigation/popover/bundles/index.umd.js.map +1 -1
  44. app-ng-runtime/components/navigation/popover/esm2015/popover.component.js +6 -5
  45. app-ng-runtime/components/navigation/popover/fesm2015/index.js +5 -4
  46. app-ng-runtime/components/navigation/popover/fesm2015/index.js.map +1 -1
  47. app-ng-runtime/package.json +1 -1
  48. app-ng-runtime/scripts/datatable/datatable.js +23 -23
  49. app-ng-runtime/variables/bundles/index.umd.js +4 -14
  50. app-ng-runtime/variables/bundles/index.umd.js.map +1 -1
  51. app-ng-runtime/variables/esm2015/manager/action/notification-action.manager.js +6 -5
  52. app-ng-runtime/variables/esm2015/service/variables.service.js +1 -8
  53. app-ng-runtime/variables/fesm2015/index.js +5 -11
  54. app-ng-runtime/variables/fesm2015/index.js.map +1 -1
  55. app-ng-runtime/variables/index.metadata.json +1 -1
  56. app-ng-runtime/variables/service/variables.service.d.ts +0 -4
  57. app-ng-runtime/components/basic/tree/esm2015/tree.component.js +0 -322
  58. app-ng-runtime/components/basic/tree/tree.component.d.ts +0 -34
  59. app-ng-runtime/scripts/tree-keyboard-navigation/keyboard-navigation.js +0 -251
@@ -183,7 +183,7 @@ export class DateComponent extends BaseDateTimeComponent {
183
183
  if (this.isDropDownDisplayEnabledOnInput(this.showdropdownon)) {
184
184
  event.stopPropagation();
185
185
  const action = this.keyEventPlugin.constructor.getEventFullKey(event);
186
- if (action === 'enter') {
186
+ if (action === 'enter' || action === 'arrowdown') {
187
187
  const newVal = getDateObj(event.target.value, { pattern: this.datepattern });
188
188
  event.preventDefault();
189
189
  const formattedDate = getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this);
@@ -234,7 +234,7 @@ DateComponent.initializeProps = registerProps();
234
234
  DateComponent.decorators = [
235
235
  { type: Component, args: [{
236
236
  selector: '[wmDate]',
237
- template: " <input class=\"form-control app-textbox app-dateinput display-input\"\n focus-target\n type=\"text\"\n [name]=\"name\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n [disabled]=\"disabled || readonly\"\n [autofocus]=\"autofocus\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"hint\"\n (change)=\"onDisplayDateChange($event)\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event);\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n [tabindex]=\"-1\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isOpen\"\n #datepicker=\"bsDatepicker\"\n bsDatepicker\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n placement=\"bottom right\"\n [isDisabled]=\"disabled || readonly\"\n [bsValue]=\"bsDataValue\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n (bsValueChange)=\"onDateChange($event)\">\n</div>\n\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n mode=\"DATE\"\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDataValue\"\n (change)=\"onDateChange($event)\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n [tabindex]=\"tabindex || 0\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event);\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n [attr.aria-label]=\"displayValue ? 'Change Date' + displayValue : 'Choose Date'\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
237
+ template: " <input class=\"form-control app-textbox app-dateinput display-input\"\n focus-target\n type=\"text\"\n [name]=\"name\"\n [tabindex]=\"tabindex\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n [disabled]=\"disabled || readonly\"\n [autofocus]=\"autofocus\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-label]=\"hint\"\n (change)=\"onDisplayDateChange($event)\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event);\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled || readonly\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isOpen\"\n #datepicker=\"bsDatepicker\"\n bsDatepicker\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n placement=\"bottom right\"\n [isDisabled]=\"disabled || readonly\"\n [bsValue]=\"bsDataValue\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n (bsValueChange)=\"onDateChange($event)\">\n</div>\n\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n mode=\"DATE\"\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDataValue\"\n (change)=\"onDateChange($event)\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n tabindex=\"1000000\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event);\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
238
238
  providers: [
239
239
  provideAs(DateComponent, NG_VALUE_ACCESSOR, true),
240
240
  provideAs(DateComponent, NG_VALIDATORS, true),
@@ -251,4 +251,4 @@ DateComponent.ctorParameters = () => [
251
251
  DateComponent.propDecorators = {
252
252
  bsDatePickerDirective: [{ type: ViewChild, args: [BsDatepickerDirective,] }]
253
253
  };
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvc3JjL2RhdGUvZGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLFdBQVcsRUFBYyxjQUFjLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFPLE1BQU0sVUFBVSxDQUFDO0FBQ3RPLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSzdDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUNwQyxNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQztBQUMzQyxNQUFNLGFBQWEsR0FBa0I7SUFDakMsVUFBVSxFQUFFLFNBQVM7SUFDckIsU0FBUyxFQUFFLFdBQVc7Q0FDekIsQ0FBQztBQVdGLE1BQU0sT0FBTyxhQUFjLFNBQVEscUJBQXFCO0lBdURwRCx3RkFBd0Y7SUFDeEYsWUFDSSxHQUFhLEVBQ0wsS0FBd0IsRUFDeEIsV0FBd0IsRUFDRCxjQUFjO1FBRTdDLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFKbEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFyRDdCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDdkIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBd0R0QyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqQyxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLFlBQVksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBekRELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxJQUFJLFlBQVksQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4SSxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hJLENBQUM7SUFFRCxhQUFhO0lBQ2IsSUFBSSxTQUFTO1FBQ1QsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNySSxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLDJEQUEyRDtJQUMzRCxhQUFhO0lBQ2IsSUFBSSxTQUFTLENBQUMsTUFBTTtRQUNoQixJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUU7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDN0I7YUFBTTtZQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3RILElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1NBQzlCO1FBQ0QsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBd0JEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGlCQUEwQixLQUFLO1FBQ3ZELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2hDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7WUFDdkMsT0FBTztTQUNWO1FBQ0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUM7UUFDNUcsMEJBQTBCO1FBQzFCLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsRUFBRTtZQUNyRSxPQUFPO1NBQ1Y7UUFDRCxtREFBbUQ7UUFDbkQsNERBQTREO1FBQzVELElBQUksY0FBYyxJQUFJLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEVBQUU7WUFDM0csT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsMkRBQTJEO0lBQ25ELFlBQVksQ0FBQyxNQUFNO1FBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsMkNBQTJDO1FBQzNDLHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwSSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1NBQzdCO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtRQUVELCtGQUErRjtRQUMvRixtSUFBbUk7UUFDbkksdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNuRCxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5Qyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsSCx5QkFBeUIsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBQ0QsV0FBVyxDQUFDLE1BQU07UUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztJQUVNLHNCQUFzQjs7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM5QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxxREFBcUQ7SUFDM0MsV0FBVyxDQUFDLElBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUFrQixFQUFFLE1BQVc7UUFDdkYsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUM5RCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQXFCLEtBQUs7UUFDdkQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDMUIsNkRBQTZEO1lBQzdELElBQUcsQ0FBQyxTQUFTLEVBQUM7Z0JBQ1YsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDL0I7U0FDSjtRQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtRQUNELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO1lBQy9HLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sb0JBQW9CLENBQUMsWUFBWTtRQUNyQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsdUJBQXVCLEdBQUcseUJBQXlCLENBQUMsV0FBVyxFQUFFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFO2dCQUN2TCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDLGdCQUFtQixJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ3pCLElBQUksSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMzRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtnQkFDcEIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO2dCQUMzRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkksTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNDLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO29CQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLGFBQWEsRUFBRTt3QkFDOUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQzt3QkFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDckQ7aUJBQ0o7cUJBQU0sSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLGFBQWEsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDckQ7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztvQkFDbkMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztvQkFDdEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sR0FBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQzFFO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUNqQztTQUNKO2FBQU07WUFDSCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxNQUFNO1FBRWY7Ozs7O2FBS0s7UUFDTCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7QUFwUE0sNkJBQWUsR0FBRyxhQUFhLEVBQUUsQ0FBQzs7WUFWNUMsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxVQUFVO2dCQUNwQiw4cEdBQW9DO2dCQUNwQyxTQUFTLEVBQUU7b0JBQ1AsU0FBUyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUM7b0JBQ2pELFNBQVMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDN0Msa0JBQWtCLENBQUMsYUFBYSxDQUFDO2lCQUNwQzthQUNKOzs7WUE3QjhDLFFBQVE7WUFBOUMsaUJBQWlCO1lBTW1DLFdBQVc7NENBb0YvRCxNQUFNLFNBQUMscUJBQXFCOzs7b0NBUGhDLFNBQVMsU0FBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRVZFTlRfTUFOQUdFUl9QTFVHSU5TIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5cbmltcG9ydCB7IGFkanVzdENvbnRhaW5lclBvc2l0aW9uLCBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50LCBBcHBEZWZhdWx0cywgRVZFTlRfTElGRSwgRm9ybVdpZGdldFR5cGUsIGdldERhdGVPYmosIGdldERpc3BsYXlEYXRlVGltZUZvcm1hdCwgZ2V0Rm9ybWF0dGVkRGF0ZSwgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcywgZ2V0TW9tZW50TG9jYWxlT2JqZWN0LCBBcHAgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge0lXaWRnZXRDb25maWcsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBzZXRGb2N1c1RyYXAsIHN0eWxlcn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBCYXNlRGF0ZVRpbWVDb21wb25lbnQgfSBmcm9tICcuLy4uL2Jhc2UtZGF0ZS10aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9kYXRlLnByb3BzJztcbmltcG9ydCB7IGNyZWF0ZUZvY3VzVHJhcCB9IGZyb20gJ0B3YXZlbWFrZXIvZm9jdXMtdHJhcC9kaXN0L2ZvY3VzLXRyYXAnO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQsIG1vbWVudDtcblxuY29uc3QgQ1VSUkVOVF9EQVRFID0gJ0NVUlJFTlRfREFURSc7XG5jb25zdCBERUZBVUxUX0NMUyA9ICdhcHAtZGF0ZSBpbnB1dC1ncm91cCc7XG5jb25zdCBXSURHRVRfQ09ORklHOiBJV2lkZ2V0Q29uZmlnID0ge1xuICAgIHdpZGdldFR5cGU6ICd3bS1kYXRlJyxcbiAgICBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bURhdGVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhEYXRlQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhEYXRlQ29tcG9uZW50LCBOR19WQUxJREFUT1JTLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKERhdGVDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlQ29tcG9uZW50IGV4dGVuZHMgQmFzZURhdGVUaW1lQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgcHVibGljIGJzRGF0YVZhbHVlO1xuICAgIHB1YmxpYyBzaG93ZHJvcGRvd25vbjogc3RyaW5nO1xuICAgIHByaXZhdGUgZGF0ZUNvbnRhaW5lckNsczogc3RyaW5nO1xuICAgIHB1YmxpYyBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9ic0RlZmF1bHRMb2FkQ2hlY2s6IGJvb2xlYW47XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcblxuICAgIHByaXZhdGUga2V5RXZlbnRQbHVnaW47XG4gICAgcHJpdmF0ZSBkZXJlZ2lzdGVyRXZlbnRMaXN0ZW5lcjtcbiAgICBwcml2YXRlIGlzQ3VycmVudERhdGU7XG4gICAgcHJpdmF0ZSBmb2N1c1RyYXA7XG5cbiAgICBnZXQgdGltZXN0YW1wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ic0RhdGFWYWx1ZSA/IHRoaXMuYnNEYXRhVmFsdWUudmFsdWVPZigpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCBkYXRlSW5wdXRGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlT3B0aW9ucy5kYXRlSW5wdXRGb3JtYXQgfHwgJ3l5eXktTU0tZGQnO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIHRoaXMuYnNEYXRhVmFsdWUsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgIH1cblxuICAgIGdldCBuYXRpdmVEaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIHRoaXMuYnNEYXRhVmFsdWUsICd5eXl5LU1NLWRkJywgdGhpcy50aW1lWm9uZSwgbnVsbCwgdGhpcy5pc0N1cnJlbnREYXRlLCB0aGlzKSB8fCAnJztcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2V0IGRhdGF2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5ic0RhdGFWYWx1ZSwgdGhpcy5vdXRwdXRmb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgfHwgJyc7XG4gICAgfVxuXG4gICAgLy8gVG9kb1tTaHViaGFtXTogbmVlZHMgdG8gYmUgcmVkZWZpbmVkXG4gICAgLy8gc2V0cyB0aGUgZGF0YVZhbHVlIGFuZCBjb21wdXRlcyB0aGUgZGlzcGxheSBtb2RlbCB2YWx1ZXNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc2V0IGRhdGF2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgaWYgKG5ld1ZhbCA9PT0gQ1VSUkVOVF9EQVRFKSB7XG4gICAgICAgICAgICB0aGlzLmJzRGF0YVZhbHVlID0gdGhpcy50aW1lWm9uZSA/IGdldE1vbWVudExvY2FsZU9iamVjdCh0aGlzLnRpbWVab25lKSA6IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudERhdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ic0RhdGFWYWx1ZSA9IG5ld1ZhbCA/IGdldERhdGVPYmoobmV3VmFsLCB7aXNOYXRpdmVQaWNrZXI6IHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dH0sIHRoaXMudGltZVpvbmUpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5pc0N1cnJlbnREYXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBwcmV2aW91cyBkYXRhdmFsdWUuXG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoQnNEYXRlcGlja2VyRGlyZWN0aXZlKSBwcm90ZWN0ZWQgYnNEYXRlUGlja2VyRGlyZWN0aXZlO1xuXG4gICAgLy8gVE9ETyB1c2UgQnNMb2NhbGVTZXJ2aWNlIHRvIHNldCB0aGUgY3VycmVudCB1c2VyJ3MgbG9jYWxlIHRvIHNlZSB0aGUgbG9jYWxpemVkIGxhYmVsc1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBhcHBEZWZhdWx0czogQXBwRGVmYXVsdHMsXG4gICAgICAgIEBJbmplY3QoRVZFTlRfTUFOQUdFUl9QTFVHSU5TKSBldnRNbmdyUGx1Z2luc1xuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICAvLyBLZXlFdmVudHNQbHVnaW5cbiAgICAgICAgdGhpcy5rZXlFdmVudFBsdWdpbiA9IGV2dE1uZ3JQbHVnaW5zWzFdO1xuICAgICAgICB0aGlzLmRhdGVDb250YWluZXJDbHMgPSBgYXBwLWRhdGUtJHt0aGlzLndpZGdldElkfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmNvbnRhaW5lckNsYXNzID0gYGFwcC1kYXRlICR7dGhpcy5kYXRlQ29udGFpbmVyQ2xzfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9ic0RlZmF1bHRMb2FkQ2hlY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVwYXR0ZXJuID0gdGhpcy5hcHBEZWZhdWx0cy5kYXRlRm9ybWF0IHx8IGdldERpc3BsYXlEYXRlVGltZUZvcm1hdChGb3JtV2lkZ2V0VHlwZS5EQVRFKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoJ2RhdGVwYXR0ZXJuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGUgaW5wdXQgY2hhbmdlc1xuICAgICAqL1xuICAgIG9uRGlzcGxheURhdGVDaGFuZ2UoJGV2ZW50LCBpc05hdGl2ZVBpY2tlcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldERhdGVPYmooJGV2ZW50LnRhcmdldC52YWx1ZSwge3BhdHRlcm46IHRoaXMuZGF0ZXBhdHRlcm4sIGlzTmF0aXZlUGlja2VyOiBpc05hdGl2ZVBpY2tlcn0pO1xuICAgICAgICAvLyBkYXRlIHBhdHRlcm4gdmFsaWRhdGlvblxuICAgICAgICAvLyBpZiBpbnZhbGlkIHBhdHRlcm4gaXMgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgYW4gZXJyb3IuXG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgJGV2ZW50LnRhcmdldC52YWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluIGRhdGUgYW5kIG1heCBkYXRlIHZhbGlkYXRpb24gaW4gbW9iaWxlIHZpZXcuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIGFuIGFsZXJ0LlxuICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50LCB0aGlzLmRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUobmV3VmFsKTtcbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkYXRhVmFsdWUgYW5kIGNvbXB1dGVzIHRoZSBkaXNwbGF5IG1vZGVsIHZhbHVlc1xuICAgIHByaXZhdGUgc2V0RGF0YVZhbHVlKG5ld1ZhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAvLyBtaW4gZGF0ZSBhbmQgbWF4IGRhdGUgdmFsaWRhdGlvbiBpbiB3ZWIuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCk7XG4gICAgICAgIGlmIChnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG5ld1ZhbCwgdGhpcy5kYXRlSW5wdXRGb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgPT09IHRoaXMuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwodGhpcy5kaXNwbGF5VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuYnNEYXRhVmFsdWUgPSBuZXdWYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJzRGF0YVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHt9LCB0cnVlKTtcbiAgICB9XG5cbiAgICBvbkRhdGVQaWNrZXJPcGVuKCkge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuYnNEYXRhVmFsdWUgPyB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmJzRGF0YVZhbHVlIDogdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmJzRGF0YVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmhpZ2h0bGlnaHRUb2RheSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgYXJlIHVzaW5nIHRoZSB0d28gaW5wdXQgdGFncyhUbyBtYWludGFpbiB0aGUgbW9kYWwgYW5kIHByb3h5IG1vZGFsKSBmb3IgdGhlIGRhdGUgY29udHJvbC5cbiAgICAgICAgLy8gU28gYWN0dWFsIGJvb3RzdHJhcCBpbnB1dCB0YXJnZXQgd2lkdGggd2UgbWFkZSBpdCB0byAwLCBzbyBib290c3RyYXAgY2FsY3VsYXRpbmcgdGhlIGNhbGVuZGFyIGNvbnRhaW5lciB0b3AgcG9zaXRpb24gaW1wcm9wZXJseS5cbiAgICAgICAgLy8gVG8gZml4IHRoZSBjb250YWluZXIgdG9wIHBvc2l0aW9uIHNldCB0aGUgd2lkdGggMXB4O1xuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5tb2RlbC1ob2xkZXInKS53aWR0aCgnMXB4Jyk7XG4gICAgICAgIGNvbnN0IGRwQ29udGFpbmVyRWwgPSAkKCdicy1kYXRlcGlja2VyLWNvbnRhaW5lcicpO1xuICAgICAgICBkcENvbnRhaW5lckVsLmF0dHIoJ2FyaWEtbGFiZWwnLCAnVXNlIEFycm93IGtleXMgdG8gbmF2aWdhdGUgZGF0ZXMsIENob29zZSBEYXRlIGZyb20gZGF0ZXBpY2tlcicpO1xuICAgICAgICAkKCcuYnMtY2FsZW5kYXItY29udGFpbmVyJykucmVtb3ZlQXR0cigncm9sZScpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQ29udGFpbmVyID0gJCgnLmJzLWRhdGVwaWNrZXItY29udGFpbmVyJylbMF07XG4gICAgICAgIHRoaXMuZm9jdXNUcmFwID0gc2V0Rm9jdXNUcmFwKGRhdGVQaWNrZXJDb250YWluZXIsIHRydWUpO1xuICAgICAgICB0aGlzLmZvY3VzVHJhcC5hY3RpdmF0ZSgpO1xuICAgICAgICB0aGlzLmFkZERhdGVwaWNrZXJLZXlib2FyZEV2ZW50cyh0aGlzLCBmYWxzZSk7XG4gICAgICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCQoJ2JzLWRhdGVwaWNrZXItY29udGFpbmVyJyksIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuX2RhdGVwaWNrZXIpO1xuICAgICAgICBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzKCQoJ2JzLWRhdGVwaWNrZXItY29udGFpbmVyJyksIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuX2RhdGVwaWNrZXIpO1xuICAgIH1cbiAgICBvbklucHV0Qmx1cigkZXZlbnQpIHtcbiAgICAgICAgaWYgKCEkKCRldmVudC5yZWxhdGVkVGFyZ2V0KS5oYXNDbGFzcygnY3VycmVudC1kYXRlJykpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlT25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JsdXInLCB7ICRldmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvY3VzVHJhcD8uZGVhY3RpdmF0ZSgpO1xuICAgICAgICB0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZGVyZWdpc3RlckV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckV2ZW50TGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJsdXJEYXRlSW5wdXQodGhpcy5pc09wZW4pO1xuICAgIH1cblxuICAgIC8vIGNoYW5nZSBhbmQgYmx1ciBldmVudHMgYXJlIGFkZGVkIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydibHVyJywgJ2ZvY3VzJywgJ2NoYW5nZScsICdjbGljayddLCBldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGNhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdXNlZCB0byB0b2dnbGUgdGhlIGRyb3Bkb3duIG9mIHRoZSBkYXRlIHdpZGdldFxuICAgICAqL1xuICAgICBwdWJsaWMgdG9nZ2xlRHBEcm9wZG93bigkZXZlbnQsIHNraXBGb2N1czogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIC8vRml4ZXMgY2xpY2sgZXZlbnQgZ2V0dGluZyB0cmlnZ3JlZCB0d2ljZSBpbiBNb2JpbGUgZGV2aWNlcy5cbiAgICAgICAgICAgIGlmKCFza2lwRm9jdXMpe1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRlVGltZUlucHV0Rm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2xpY2snLCB7ICRldmVudDogJGV2ZW50IH0pO1xuICAgICAgICAgICAgdGhpcy5mb2N1c09uSW5wdXRFbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQudGFyZ2V0ICYmICQoJGV2ZW50LnRhcmdldCkuaXMoJ2lucHV0JykgJiYgISh0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbikpKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMuYWRkQm9keUNsaWNrTGlzdGVuZXIodGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuaXNPcGVuKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJvZHlDbGlja0xpc3RlbmVyKHNraXBMaXN0ZW5lcikge1xuICAgICAgICBpZiAoIXNraXBMaXN0ZW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJzRGF0ZUNvbnRhaW5lckVsZW1lbnQgPSBib2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLmRhdGVDb250YWluZXJDbHN9YCk7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lck9uRWxlbWVudChib2R5RWxlbWVudCwgYnNEYXRlQ29udGFpbmVyRWxlbWVudCwgdGhpcy5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgRVZFTlRfTElGRS5PTkNFLCB0cnVlKTtcbiAgICAgICAgfSwgMzUwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0cmlnZ2VyZWQgd2hlbiBwcmVzc2luZyBrZXkgb24gdGhlIGRhdGUgaW5wdXRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25EaXNwbGF5S2V5ZG93bihldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KHRoaXMuc2hvd2Ryb3Bkb3dub24pKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMua2V5RXZlbnRQbHVnaW4uY29uc3RydWN0b3IuZ2V0RXZlbnRGdWxsS2V5KGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBnZXREYXRlT2JqKGV2ZW50LnRhcmdldC52YWx1ZSwge3BhdHRlcm46IHRoaXMuZGF0ZXBhdHRlcm59KTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG5ld1ZhbCwgdGhpcy5kYXRlSW5wdXRGb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWwgPSBldmVudC50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAmJiB0aGlzLmRhdGVwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNOYU4oaW5wdXRWYWwpICYmIF8ucGFyc2VJbnQoaW5wdXRWYWwpICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCBldmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFZhbCAmJiBpbnB1dFZhbCAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuYnNWYWx1ZSA9ICBldmVudC50YXJnZXQudmFsdWUgPyBuZXdWYWwgOiAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEcERyb3Bkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVEYXRlcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRlIHNlbGVjdGlvbiBjaGFuZ2VzXG4gICAgICovXG4gICAgb25EYXRlQ2hhbmdlKG5ld1ZhbCk6IHZvaWQge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAgTmd4LWJvb3RzdHJhcCB1cGdyYWRlIDogVG8gYXZvaWQgdGhlIHBhZ2UgbG9hZCBkYXRlY2hhbmdlIGV2ZW50O1xuICAgICAgICAgKiAgVE9ETzpcbiAgICAgICAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS92YWxvci1zb2Z0d2FyZS9uZ3gtYm9vdHN0cmFwL2lzc3Vlcy82MDE2XG4gICAgICAgICAqICBGb3IgYWJvdmUgaXNzdWUsIG9uY2Ugd2UgZ2V0IHRoZSBzb2x1dGlvbiBmcm9tIE5neC1Cb290c3RyYXAgdGVhbSwgIHJlbW92ZSB0aGUgX2JzRGVmYXVsdExvYWRDaGVjayBjaGVjayBhbmQgdXBkYXRlIGFjY29yZGluZ2x5LlxuICAgICAgICAgKiAqL1xuICAgICAgICBpZiAodGhpcy5fYnNEZWZhdWx0TG9hZENoZWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9ic0RlZmF1bHRMb2FkQ2hlY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShuZXdWYWwpO1xuICAgIH1cbn1cbiJdfQ==
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvc3JjL2RhdGUvZGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLFdBQVcsRUFBYyxjQUFjLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFPLE1BQU0sVUFBVSxDQUFDO0FBQ3RPLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSzdDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUNwQyxNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQztBQUMzQyxNQUFNLGFBQWEsR0FBa0I7SUFDakMsVUFBVSxFQUFFLFNBQVM7SUFDckIsU0FBUyxFQUFFLFdBQVc7Q0FDekIsQ0FBQztBQVdGLE1BQU0sT0FBTyxhQUFjLFNBQVEscUJBQXFCO0lBdURwRCx3RkFBd0Y7SUFDeEYsWUFDSSxHQUFhLEVBQ0wsS0FBd0IsRUFDeEIsV0FBd0IsRUFDRCxjQUFjO1FBRTdDLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFKbEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFyRDdCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDdkIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBd0R0QyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqQyxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLFlBQVksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBekRELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxJQUFJLFlBQVksQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4SSxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hJLENBQUM7SUFFRCxhQUFhO0lBQ2IsSUFBSSxTQUFTO1FBQ1QsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNySSxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLDJEQUEyRDtJQUMzRCxhQUFhO0lBQ2IsSUFBSSxTQUFTLENBQUMsTUFBTTtRQUNoQixJQUFJLE1BQU0sS0FBSyxZQUFZLEVBQUU7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDN0I7YUFBTTtZQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3RILElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1NBQzlCO1FBQ0QsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBd0JEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGlCQUEwQixLQUFLO1FBQ3ZELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2hDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7WUFDdkMsT0FBTztTQUNWO1FBQ0QsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUM7UUFDNUcsMEJBQTBCO1FBQzFCLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsRUFBRTtZQUNyRSxPQUFPO1NBQ1Y7UUFDRCxtREFBbUQ7UUFDbkQsNERBQTREO1FBQzVELElBQUksY0FBYyxJQUFJLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLEVBQUU7WUFDM0csT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsMkRBQTJEO0lBQ25ELFlBQVksQ0FBQyxNQUFNO1FBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsMkNBQTJDO1FBQzNDLHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwSSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1NBQzdCO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtRQUVELCtGQUErRjtRQUMvRixtSUFBbUk7UUFDbkksdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNuRCxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5Qyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsSCx5QkFBeUIsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBQ0QsV0FBVyxDQUFDLE1BQU07UUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztJQUVNLHNCQUFzQjs7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM5QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxxREFBcUQ7SUFDM0MsV0FBVyxDQUFDLElBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUFrQixFQUFFLE1BQVc7UUFDdkYsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUM5RCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQXFCLEtBQUs7UUFDdkQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDMUIsNkRBQTZEO1lBQzdELElBQUcsQ0FBQyxTQUFTLEVBQUM7Z0JBQ1YsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDL0I7U0FDSjtRQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtRQUNELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO1lBQy9HLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sb0JBQW9CLENBQUMsWUFBWTtRQUNyQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsdUJBQXVCLEdBQUcseUJBQXlCLENBQUMsV0FBVyxFQUFFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFO2dCQUN2TCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDLGdCQUFtQixJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ3pCLElBQUksSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMzRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFO2dCQUM5QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7Z0JBQzNFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7b0JBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssYUFBYSxFQUFFO3dCQUM5RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNyRDtpQkFDSjtxQkFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssYUFBYSxFQUFFO29CQUMvQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO29CQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNyRDtxQkFBTTtvQkFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO29CQUNuQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO29CQUN0QyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxHQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDMUU7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ2pDO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQU07UUFFZjs7Ozs7YUFLSztRQUNMLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDakMsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDOztBQXBQTSw2QkFBZSxHQUFHLGFBQWEsRUFBRSxDQUFDOztZQVY1QyxTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLGkwRkFBb0M7Z0JBQ3BDLFNBQVMsRUFBRTtvQkFDUCxTQUFTLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDakQsU0FBUyxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDO29CQUM3QyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7aUJBQ3BDO2FBQ0o7OztZQTdCOEMsUUFBUTtZQUE5QyxpQkFBaUI7WUFNbUMsV0FBVzs0Q0FvRi9ELE1BQU0sU0FBQyxxQkFBcUI7OztvQ0FQaEMsU0FBUyxTQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFVkVOVF9NQU5BR0VSX1BMVUdJTlMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgQnNEYXRlcGlja2VyRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcblxuaW1wb3J0IHsgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsIEFwcERlZmF1bHRzLCBFVkVOVF9MSUZFLCBGb3JtV2lkZ2V0VHlwZSwgZ2V0RGF0ZU9iaiwgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0LCBnZXRGb3JtYXR0ZWREYXRlLCBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzLCBnZXRNb21lbnRMb2NhbGVPYmplY3QsIEFwcCB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7SVdpZGdldENvbmZpZywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWYsIHNldEZvY3VzVHJhcCwgc3R5bGVyfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IEJhc2VEYXRlVGltZUNvbXBvbmVudCB9IGZyb20gJy4vLi4vYmFzZS1kYXRlLXRpbWUuY29tcG9uZW50JztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL2RhdGUucHJvcHMnO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnQHdhdmVtYWtlci9mb2N1cy10cmFwL2Rpc3QvZm9jdXMtdHJhcCc7XG5cbmRlY2xhcmUgY29uc3QgXywgJCwgbW9tZW50O1xuXG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kYXRlIGlucHV0LWdyb3VwJztcbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7XG4gICAgd2lkZ2V0VHlwZTogJ3dtLWRhdGUnLFxuICAgIGhvc3RDbGFzczogREVGQVVMVF9DTFNcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtRGF0ZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKERhdGVDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKERhdGVDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRGF0ZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0ZVRpbWVDb21wb25lbnQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgYnNEYXRhVmFsdWU7XG4gICAgcHVibGljIHNob3dkcm9wZG93bm9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYXRlQ29udGFpbmVyQ2xzOiBzdHJpbmc7XG4gICAgcHVibGljIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2JzRGVmYXVsdExvYWRDaGVjazogYm9vbGVhbjtcbiAgICBwdWJsaWMgaGludDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBrZXlFdmVudFBsdWdpbjtcbiAgICBwcml2YXRlIGRlcmVnaXN0ZXJFdmVudExpc3RlbmVyO1xuICAgIHByaXZhdGUgaXNDdXJyZW50RGF0ZTtcbiAgICBwcml2YXRlIGZvY3VzVHJhcDtcblxuICAgIGdldCB0aW1lc3RhbXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJzRGF0YVZhbHVlID8gdGhpcy5ic0RhdGFWYWx1ZS52YWx1ZU9mKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGVJbnB1dEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVPcHRpb25zLmRhdGVJbnB1dEZvcm1hdCB8fCAneXl5eS1NTS1kZCc7XG4gICAgfVxuXG4gICAgZ2V0IGRpc3BsYXlWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5ic0RhdGFWYWx1ZSwgdGhpcy5kYXRlSW5wdXRGb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgfHwgJyc7XG4gICAgfVxuXG4gICAgZ2V0IG5hdGl2ZURpc3BsYXlWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5ic0RhdGFWYWx1ZSwgJ3l5eXktTU0tZGQnLCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnZXQgZGF0YXZhbHVlKCkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCB0aGlzLmJzRGF0YVZhbHVlLCB0aGlzLm91dHB1dGZvcm1hdCwgdGhpcy50aW1lWm9uZSwgbnVsbCwgdGhpcy5pc0N1cnJlbnREYXRlLCB0aGlzKSB8fCAnJztcbiAgICB9XG5cbiAgICAvLyBUb2RvW1NodWJoYW1dOiBuZWVkcyB0byBiZSByZWRlZmluZWRcbiAgICAvLyBzZXRzIHRoZSBkYXRhVmFsdWUgYW5kIGNvbXB1dGVzIHRoZSBkaXNwbGF5IG1vZGVsIHZhbHVlc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzZXQgZGF0YXZhbHVlKG5ld1ZhbCkge1xuICAgICAgICBpZiAobmV3VmFsID09PSBDVVJSRU5UX0RBVEUpIHtcbiAgICAgICAgICAgIHRoaXMuYnNEYXRhVmFsdWUgPSB0aGlzLnRpbWVab25lID8gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRoaXMudGltZVpvbmUpIDogbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNDdXJyZW50RGF0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJzRGF0YVZhbHVlID0gbmV3VmFsID8gZ2V0RGF0ZU9iaihuZXdWYWwsIHtpc05hdGl2ZVBpY2tlcjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0fSwgdGhpcy50aW1lWm9uZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudERhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1cGRhdGUgdGhlIHByZXZpb3VzIGRhdGF2YWx1ZS5cbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZChCc0RhdGVwaWNrZXJEaXJlY3RpdmUpIHByb3RlY3RlZCBic0RhdGVQaWNrZXJEaXJlY3RpdmU7XG5cbiAgICAvLyBUT0RPIHVzZSBCc0xvY2FsZVNlcnZpY2UgdG8gc2V0IHRoZSBjdXJyZW50IHVzZXIncyBsb2NhbGUgdG8gc2VlIHRoZSBsb2NhbGl6ZWQgbGFiZWxzXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGFwcERlZmF1bHRzOiBBcHBEZWZhdWx0cyxcbiAgICAgICAgQEluamVjdChFVkVOVF9NQU5BR0VSX1BMVUdJTlMpIGV2dE1uZ3JQbHVnaW5zXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRyk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuXG4gICAgICAgIC8vIEtleUV2ZW50c1BsdWdpblxuICAgICAgICB0aGlzLmtleUV2ZW50UGx1Z2luID0gZXZ0TW5nclBsdWdpbnNbMV07XG4gICAgICAgIHRoaXMuZGF0ZUNvbnRhaW5lckNscyA9IGBhcHAtZGF0ZS0ke3RoaXMud2lkZ2V0SWR9YDtcbiAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuY29udGFpbmVyQ2xhc3MgPSBgYXBwLWRhdGUgJHt0aGlzLmRhdGVDb250YWluZXJDbHN9YDtcbiAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2JzRGVmYXVsdExvYWRDaGVjayA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0ZXBhdHRlcm4gPSB0aGlzLmFwcERlZmF1bHRzLmRhdGVGb3JtYXQgfHwgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0KEZvcm1XaWRnZXRUeXBlLkRBVEUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdCgnZGF0ZXBhdHRlcm4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0ZSBpbnB1dCBjaGFuZ2VzXG4gICAgICovXG4gICAgb25EaXNwbGF5RGF0ZUNoYW5nZSgkZXZlbnQsIGlzTmF0aXZlUGlja2VyOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VmFsID0gZ2V0RGF0ZU9iaigkZXZlbnQudGFyZ2V0LnZhbHVlLCB7cGF0dGVybjogdGhpcy5kYXRlcGF0dGVybiwgaXNOYXRpdmVQaWNrZXI6IGlzTmF0aXZlUGlja2VyfSk7XG4gICAgICAgIC8vIGRhdGUgcGF0dGVybiB2YWxpZGF0aW9uXG4gICAgICAgIC8vIGlmIGludmFsaWQgcGF0dGVybiBpcyBlbnRlcmVkLCBkZXZpY2UgaXMgc2hvd2luZyBhbiBlcnJvci5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm1hdFZhbGlkYXRpb24obmV3VmFsLCAkZXZlbnQudGFyZ2V0LnZhbHVlLCBpc05hdGl2ZVBpY2tlcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBtaW4gZGF0ZSBhbmQgbWF4IGRhdGUgdmFsaWRhdGlvbiBpbiBtb2JpbGUgdmlldy5cbiAgICAgICAgLy8gaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgYW4gYWxlcnQuXG4gICAgICAgIGlmIChpc05hdGl2ZVBpY2tlciAmJiB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQobmV3VmFsLCAkZXZlbnQsIHRoaXMuZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShuZXdWYWwpO1xuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRhdGFWYWx1ZSBhbmQgY29tcHV0ZXMgdGhlIGRpc3BsYXkgbW9kZWwgdmFsdWVzXG4gICAgcHJpdmF0ZSBzZXREYXRhVmFsdWUobmV3VmFsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gZmFsc2U7XG4gICAgICAgIC8vIG1pbiBkYXRlIGFuZCBtYXggZGF0ZSB2YWxpZGF0aW9uIGluIHdlYi5cbiAgICAgICAgLy8gaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQobmV3VmFsKTtcbiAgICAgICAgaWYgKGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCB0aGlzLmRhdGVJbnB1dEZvcm1hdCwgdGhpcy50aW1lWm9uZSwgbnVsbCwgdGhpcy5pc0N1cnJlbnREYXRlLCB0aGlzKSA9PT0gdGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuZGlzcGxheS1pbnB1dCcpLnZhbCh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5ic0RhdGFWYWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnNEYXRhVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwge30sIHRydWUpO1xuICAgIH1cblxuICAgIG9uRGF0ZVBpY2tlck9wZW4oKSB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ic0RhdGFWYWx1ZSA/IHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYnNEYXRhVmFsdWUgOiB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBpZiAoIXRoaXMuYnNEYXRhVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaGlnaHRsaWdodFRvZGF5KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIHR3byBpbnB1dCB0YWdzKFRvIG1haW50YWluIHRoZSBtb2RhbCBhbmQgcHJveHkgbW9kYWwpIGZvciB0aGUgZGF0ZSBjb250cm9sLlxuICAgICAgICAvLyBTbyBhY3R1YWwgYm9vdHN0cmFwIGlucHV0IHRhcmdldCB3aWR0aCB3ZSBtYWRlIGl0IHRvIDAsIHNvIGJvb3RzdHJhcCBjYWxjdWxhdGluZyB0aGUgY2FsZW5kYXIgY29udGFpbmVyIHRvcCBwb3NpdGlvbiBpbXByb3Blcmx5LlxuICAgICAgICAvLyBUbyBmaXggdGhlIGNvbnRhaW5lciB0b3AgcG9zaXRpb24gc2V0IHRoZSB3aWR0aCAxcHg7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGVsLWhvbGRlcicpLndpZHRoKCcxcHgnKTtcbiAgICAgICAgY29uc3QgZHBDb250YWluZXJFbCA9ICQoJ2JzLWRhdGVwaWNrZXItY29udGFpbmVyJyk7XG4gICAgICAgIGRwQ29udGFpbmVyRWwuYXR0cignYXJpYS1sYWJlbCcsICdVc2UgQXJyb3cga2V5cyB0byBuYXZpZ2F0ZSBkYXRlcywgQ2hvb3NlIERhdGUgZnJvbSBkYXRlcGlja2VyJyk7XG4gICAgICAgICQoJy5icy1jYWxlbmRhci1jb250YWluZXInKS5yZW1vdmVBdHRyKCdyb2xlJyk7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJDb250YWluZXIgPSAkKCcuYnMtZGF0ZXBpY2tlci1jb250YWluZXInKVswXTtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXAgPSBzZXRGb2N1c1RyYXAoZGF0ZVBpY2tlckNvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlcktleWJvYXJkRXZlbnRzKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oJCgnYnMtZGF0ZXBpY2tlci1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fZGF0ZXBpY2tlcik7XG4gICAgICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMoJCgnYnMtZGF0ZXBpY2tlci1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fZGF0ZXBpY2tlcik7XG4gICAgfVxuICAgIG9uSW5wdXRCbHVyKCRldmVudCkge1xuICAgICAgICBpZiAoISQoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpLmhhc0NsYXNzKCdjdXJyZW50LWRhdGUnKSkge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmx1cicsIHsgJGV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhpZGVEYXRlcGlja2VyRHJvcGRvd24oKSB7XG4gICAgICAgIHRoaXMuaW52b2tlT25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9jdXNUcmFwPy5kZWFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kZXJlZ2lzdGVyRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5kZXJlZ2lzdGVyRXZlbnRMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmx1ckRhdGVJbnB1dCh0aGlzLmlzT3Blbik7XG4gICAgfVxuXG4gICAgLy8gY2hhbmdlIGFuZCBibHVyIGV2ZW50cyBhcmUgYWRkZWQgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmICghXy5pbmNsdWRlcyhbJ2JsdXInLCAnZm9jdXMnLCAnY2hhbmdlJywgJ2NsaWNrJ10sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIHRvZ2dsZSB0aGUgZHJvcGRvd24gb2YgdGhlIGRhdGUgd2lkZ2V0XG4gICAgICovXG4gICAgIHB1YmxpYyB0b2dnbGVEcERyb3Bkb3duKCRldmVudCwgc2tpcEZvY3VzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCkge1xuICAgICAgICAgICAgLy9GaXhlcyBjbGljayBldmVudCBnZXR0aW5nIHRyaWdncmVkIHR3aWNlIGluIE1vYmlsZSBkZXZpY2VzLlxuICAgICAgICAgICAgaWYoIXNraXBGb2N1cyl7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGVUaW1lSW5wdXRGb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGljaycsIHsgJGV2ZW50OiAkZXZlbnQgfSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25JbnB1dEVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQgJiYgJCgkZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhKHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSkpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5hZGRCb2R5Q2xpY2tMaXN0ZW5lcih0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5pc09wZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQm9keUNsaWNrTGlzdGVuZXIoc2tpcExpc3RlbmVyKSB7XG4gICAgICAgIGlmICghc2tpcExpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnNEYXRlQ29udGFpbmVyRWxlbWVudCA9IGJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMuZGF0ZUNvbnRhaW5lckNsc31gKTtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckV2ZW50TGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50KGJvZHlFbGVtZW50LCBic0RhdGVDb250YWluZXJFbGVtZW50LCB0aGlzLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBFVkVOVF9MSUZFLk9OQ0UsIHRydWUpO1xuICAgICAgICB9LCAzNTApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRyaWdnZXJlZCB3aGVuIHByZXNzaW5nIGtleSBvbiB0aGUgZGF0ZSBpbnB1dFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc3BsYXlLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbikpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5rZXlFdmVudFBsdWdpbi5jb25zdHJ1Y3Rvci5nZXRFdmVudEZ1bGxLZXkoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2VudGVyJyB8fCBhY3Rpb24gPT09ICdhcnJvd2Rvd24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsID0gZ2V0RGF0ZU9iaihldmVudC50YXJnZXQudmFsdWUsIHtwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJufSk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBuZXdWYWwsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsID0gZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWwgJiYgdGhpcy5kYXRlcGF0dGVybiA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfLmlzTmFOKGlucHV0VmFsKSAmJiBfLnBhcnNlSW50KGlucHV0VmFsKSAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRWYWwgJiYgaW5wdXRWYWwgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCBldmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnNEYXRlUGlja2VyRGlyZWN0aXZlLmJzVmFsdWUgPSAgZXZlbnQudGFyZ2V0LnZhbHVlID8gbmV3VmFsIDogJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRHBEcm9wZG93bihldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0ZSBzZWxlY3Rpb24gY2hhbmdlc1xuICAgICAqL1xuICAgIG9uRGF0ZUNoYW5nZShuZXdWYWwpOiB2b2lkIHtcblxuICAgICAgICAvKipcbiAgICAgICAgICogIE5neC1ib290c3RyYXAgdXBncmFkZSA6IFRvIGF2b2lkIHRoZSBwYWdlIGxvYWQgZGF0ZWNoYW5nZSBldmVudDtcbiAgICAgICAgICogIFRPRE86XG4gICAgICAgICAqICBodHRwczovL2dpdGh1Yi5jb20vdmFsb3Itc29mdHdhcmUvbmd4LWJvb3RzdHJhcC9pc3N1ZXMvNjAxNlxuICAgICAgICAgKiAgRm9yIGFib3ZlIGlzc3VlLCBvbmNlIHdlIGdldCB0aGUgc29sdXRpb24gZnJvbSBOZ3gtQm9vdHN0cmFwIHRlYW0sICByZW1vdmUgdGhlIF9ic0RlZmF1bHRMb2FkQ2hlY2sgY2hlY2sgYW5kIHVwZGF0ZSBhY2NvcmRpbmdseS5cbiAgICAgICAgICogKi9cbiAgICAgICAgaWYgKHRoaXMuX2JzRGVmYXVsdExvYWRDaGVjaykge1xuICAgICAgICAgICAgdGhpcy5fYnNEZWZhdWx0TG9hZENoZWNrID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUobmV3VmFsKTtcbiAgICB9XG59XG4iXX0=
@@ -407,7 +407,7 @@ DatetimeComponent.initializeProps = registerProps();
407
407
  DatetimeComponent.decorators = [
408
408
  { type: Component, args: [{
409
409
  selector: '[wmDateTime]',
410
- template: " <div dropdown\n [isOpen]=\"isTimeOpen\"\n autoClose=\"false\"\n [container]=\"'body'\"\n (onShown)=\"onTimepickerOpen()\"\n style=\"display: inherit;\">\n <input class=\"form-control app-textbox display-input\"\n [attr.aria-label]=\"hint\"\n focus-target\n [name]=\"name\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n type=\"text\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDateChange($event)\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-date\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n aria-label=\"Select time\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleTimePicker(!isTimeOpen, $event)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-time\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n focus-target\n [tabindex]=\"-1\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isDateOpen\"\n placement=\"bottom right\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n #datepicker=bsDatepicker\n bsDatepicker\n [isDisabled]=\"disabled || readonly || isCurrentDate\"\n [bsValue]=\"bsDateValue\"\n (bsValueChange)=\"onModelUpdate($event, 'date')\">\n </div>\n <div *dropdownMenu\n class=\"dropdown-menu\"\n aria-label=\"timepicker dropdown\"\n aria-controls=\"time\"\n (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"disabled || readonly || isCurrentDate\"\n [(ngModel)]=\"bsTimeValue\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\"\n (ngModelChange)=\"onModelUpdate($event, 'time')\"></timepicker>\n </div>\n </div>\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDateValue\"\n (change)=\"onModelUpdate($event, 'date')\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n [tabindex]=\"tabindex || 0\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event)\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
410
+ template: " <div dropdown\n [isOpen]=\"isTimeOpen\"\n autoClose=\"false\"\n [container]=\"'body'\"\n (onShown)=\"onTimepickerOpen()\"\n style=\"display: inherit;\">\n <input class=\"form-control app-textbox display-input\"\n [attr.aria-label]=\"hint\"\n focus-target\n [name]=\"name\"\n [tabindex]=\"tabindex\"\n type=\"text\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDateChange($event)\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-date\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n aria-label=\"Select time\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleTimePicker(!isTimeOpen, $event)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-time\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n focus-target\n [container]=\"containerTarget || 'body'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isDateOpen\"\n placement=\"bottom right\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n #datepicker=bsDatepicker\n bsDatepicker\n [isDisabled]=\"disabled || readonly || isCurrentDate\"\n [bsValue]=\"bsDateValue\"\n (bsValueChange)=\"onModelUpdate($event, 'date')\">\n </div>\n <div *dropdownMenu\n class=\"dropdown-menu\"\n aria-label=\"timepicker dropdown\"\n aria-controls=\"time\"\n (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"disabled || readonly || isCurrentDate\"\n [(ngModel)]=\"bsTimeValue\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\"\n (ngModelChange)=\"onModelUpdate($event, 'time')\"></timepicker>\n </div>\n </div>\n<ng-template [ngIf]=\"loadNativeDateInput\">\n <wm-datetimepicker\n dateTimePicker\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDateValue\"\n (change)=\"onModelUpdate($event, 'date')\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n tabindex=\"1000000\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event)\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n (click)=\"!(disabled || readonly || isCurrentDate) && showDatePickerModal()\">\n </div>\n</ng-template>\n",
411
411
  providers: [
412
412
  provideAs(DatetimeComponent, NG_VALUE_ACCESSOR, true),
413
413
  provideAs(DatetimeComponent, NG_VALIDATORS, true),
@@ -428,4 +428,4 @@ DatetimeComponent.propDecorators = {
428
428
  bsDatePickerDirective: [{ type: ViewChild, args: [BsDatepickerDirective,] }]
429
429
  };
430
430
  export { ɵ0 };
431
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9lcG9jaC9zcmMvZGF0ZS10aW1lL2RhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBYyxjQUFjLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxUixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RixPQUFPLEVBQUMscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJbEQsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUM7QUFDL0MsTUFBTSxhQUFhLEdBQUcsRUFBRSxVQUFVLEVBQUUsYUFB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QXVIdk8sTUFBTSxTQUFDLHFCQUFxQjs7O29DQXpEaEMsU0FBUyxTQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRVZFTlRfTUFOQUdFUl9QTFVHSU5TIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBUaW1lcGlja2VyQ29uZmlnIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90aW1lcGlja2VyJztcblxuaW1wb3J0IHsgQWJzdHJhY3RJMThuU2VydmljZSwgYWRkQ2xhc3MsIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLCBBcHBEZWZhdWx0cywgRVZFTlRfTElGRSwgRm9ybVdpZGdldFR5cGUsIGdldERhdGVPYmosIGdldERpc3BsYXlEYXRlVGltZUZvcm1hdCwgZ2V0Rm9ybWF0dGVkRGF0ZSwgZ2V0TmF0aXZlRGF0ZU9iamVjdCwgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcywgQXBwLCBnZXRNb21lbnRMb2NhbGVPYmplY3QgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge3Byb3ZpZGVBc1dpZGdldFJlZiwgcHJvdmlkZUFzLCBzdHlsZXIsIHNldEZvY3VzVHJhcH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7QmFzZURhdGVUaW1lQ29tcG9uZW50LCBnZXRUaW1lcGlja2VyQ29uZmlnfSBmcm9tICcuLy4uL2Jhc2UtZGF0ZS10aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9kYXRlLXRpbWUucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0IG1vbWVudCwgJCwgXztcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGV0aW1lIGlucHV0LWdyb3VwJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7IHdpZGdldFR5cGU6ICd3bS1kYXRldGltZScsIGhvc3RDbGFzczogREVGQVVMVF9DTFMgfTtcblxuY29uc3QgQ1VSUkVOVF9EQVRFID0gJ0NVUlJFTlRfREFURSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtRGF0ZVRpbWVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKERhdGV0aW1lQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhEYXRldGltZUNvbXBvbmVudCwgTkdfVkFMSURBVE9SUywgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihEYXRldGltZUNvbXBvbmVudCksXG4gICAgICAgIHsgcHJvdmlkZTogVGltZXBpY2tlckNvbmZpZywgIGRlcHM6IFtBYnN0cmFjdEkxOG5TZXJ2aWNlXSwgdXNlRmFjdG9yeTogZ2V0VGltZXBpY2tlckNvbmZpZyB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRldGltZUNvbXBvbmVudCBleHRlbmRzIEJhc2VEYXRlVGltZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICAvKipcbiAgICAgKiBUaGUgYmVsb3cgcHJvcGV0aWVzIHByZWZpeGVkIHdpdGggXCJic1wiIGFsd2F5cyBob2xkcyB0aGUgdmFsdWUgdGhhdCBpcyBzZWxlY3RlZCBmcm9tIHRoZSBkYXRlcGlja2VyLlxuICAgICAqIFRoZSBic0RhdGVUaW1lVmFsdWUgPSBic0RhdGVWYWx1ZSArIGJzVGltZVZhbHVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgYnNEYXRlVGltZVZhbHVlOiBhbnk7XG4gICAgcHVibGljIGJzRGF0ZVZhbHVlO1xuICAgIHByaXZhdGUgYnNUaW1lVmFsdWU7XG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsO1xuICAgIHByaXZhdGUgYXBwOiBBcHA7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgc2hvd2Ryb3Bkb3dub246IHN0cmluZztcbiAgICBwcml2YXRlIGtleUV2ZW50UGx1Z2luO1xuICAgIHByaXZhdGUgZGVyZWdpc3RlckRhdGVwaWNrZXJFdmVudExpc3RlbmVyO1xuICAgIHByaXZhdGUgZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBpc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmb2N1c1RyYXA7XG5cbiAgICBnZXQgdGltZXN0YW1wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm94eU1vZGVsID8gdGhpcy5wcm94eU1vZGVsLnZhbHVlT2YoKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgZGF0ZUlucHV0Rm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZU9wdGlvbnMuZGF0ZUlucHV0Rm9ybWF0IHx8ICd5eXl5LU1NLWRkVEhIOm1tOnNzJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheVZhbHVlIGlzIHRoZSBkaXNwbGF5IHZhbHVlIG9mIHRoZSBic0RhdGVUaW1lVmFsdWUgYWZ0ZXIgYXBwbHlpbmcgdGhlIGRhdGVQYXR0ZXJuIG9uIGl0LlxuICAgICAqIEByZXR1cm5zIHthbnl8c3RyaW5nfVxuICAgICAqL1xuICAgIGdldCBkaXNwbGF5VmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5wcm94eU1vZGVsLCB0aGlzLmRhdGVJbnB1dEZvcm1hdCwgdGhpcy50aW1lWm9uZSwgKHRoaXMgYXMgYW55KS5rZXksIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgfHwgJyc7XG4gICAgfVxuXG4gICAgZ2V0IG5hdGl2ZURpc3BsYXlWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5wcm94eU1vZGVsLCAneXl5eS1NTS1kZFRISDptbTpzcycsIHRoaXMudGltZVpvbmUsICh0aGlzIGFzIGFueSkua2V5LCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoQnNEYXRlcGlja2VyRGlyZWN0aXZlKSBic0RhdGVQaWNrZXJEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGNoZWNrcyBpZiB0aGUgdGltZVBpY2tlciBpcyBPcGVuXG4gICAgICovXG4gICAgcHVibGljIGlzVGltZU9wZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgY2hlY2tzIGlmIHRoZSBkYXRlUGlja2VyIGlzIE9wZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEYXRlT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB0aW1laW50ZXJ2YWwgaXMgdXNlZCB0byBydW4gdGhlIHRpbWVyIHdoZW4gdGhlIHRpbWUgY29tcG9uZW50IHZhbHVlIGlzIHNldCB0byBDVVJSRU5UX1RJTUUgaW4gcHJvcGVydGllcyBwYW5lbC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHRpbWVpbnRlcnZhbDogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gVFJVRSBpZiB0aGUgdGltZSBjb21wb25lbnQgdmFsdWUgaXMgc2V0IHRvIENVUlJFTlRfVElNRTsgSW4gdGhpcyBjYXNlIHRoZSB0aW1lciBrZWVwcyBjaGFuZ2luZyB0aGUgdGltZSB2YWx1ZSB1bnRpbCB0aGUgd2lkZ2V0IGlzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDdXJyZW50RGF0ZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkT25DaGFuZ2U6IEZ1bmN0aW9uID0gXy5kZWJvdW5jZSh0aGlzLmludm9rZU9uQ2hhbmdlLCAxMCk7XG5cbiAgICBwcml2YXRlIGRhdGVDb250YWluZXJDbHM6IHN0cmluZztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnZXQgZGF0YXZhbHVlKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ3VycmVudERhdGUgJiYgIXRoaXMucHJveHlNb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuIENVUlJFTlRfREFURTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCB0aGlzLnByb3h5TW9kZWwsIHRoaXMub3V0cHV0Zm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipUb2RvW1NodWJoYW1dOiBuZWVkcyB0byBiZSByZWRlZmluZWRcbiAgICAgKiBUaGlzIHByb3BlcnR5IHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBkYXRlIHNlbGVjdGlvblxuICAgICAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzZXQgZGF0YXZhbHVlKG5ld1ZhbDogYW55KSB7XG4gICAgICAgIGlmIChuZXdWYWwgPT09IENVUlJFTlRfREFURSkge1xuICAgICAgICAgICAgdGhpcy5pc0N1cnJlbnREYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZUludGVydmFsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSBuZXdWYWwgPyBnZXREYXRlT2JqKG5ld1ZhbCwge2lzTmF0aXZlUGlja2VyOiB0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXR9LCB0aGlzLnRpbWVab25lKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgIHRoaXMuaXNDdXJyZW50RGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnNUaW1lVmFsdWUgPSB0aGlzLmJzRGF0ZVZhbHVlID0gdGhpcy5wcm94eU1vZGVsO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgYXBwRGVmYXVsdHM6IEFwcERlZmF1bHRzLFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgQEluamVjdChFVkVOVF9NQU5BR0VSX1BMVUdJTlMpIGV2dE1uZ3JQbHVnaW5zXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gdGhpcy5jbGVhclRpbWVJbnRlcnZhbCgpKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICAvLyBLZXlFdmVudHNQbHVnaW5cbiAgICAgICAgdGhpcy5rZXlFdmVudFBsdWdpbiA9IGV2dE1uZ3JQbHVnaW5zWzFdO1xuICAgICAgICB0aGlzLmRhdGVDb250YWluZXJDbHMgPSBgYXBwLWRhdGUtJHt0aGlzLndpZGdldElkfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmNvbnRhaW5lckNsYXNzID0gYGFwcC1kYXRlICR7dGhpcy5kYXRlQ29udGFpbmVyQ2xzfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGVwYXR0ZXJuID0gdGhpcy5hcHBEZWZhdWx0cy5kYXRlVGltZUZvcm1hdCB8fCBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQoRm9ybVdpZGdldFR5cGUuREFURVRJTUUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdCgnZGF0ZXBhdHRlcm4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIG1haW50YWluIGEgdGltZSBpbnRlcnZhbCB0byB1cGRhdGUgdGhlIHRpbWUgbW9kZWwgd2hlbiB0aGUgZGF0YSB2YWx1ZSBpcyBzZXQgdG8gQ1VSUkVOVF9USU1FXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRUaW1lSW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVpbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZWludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLnRpbWVab25lID8gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRoaXMudGltZVpvbmUpIDogbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbFVwZGF0ZShjdXJyZW50VGltZSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHVzZWQgdG8gY2xlYXIgdGhlIHRpbWUgaW50ZXJ2YWwgY3JlYXRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJUaW1lSW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVpbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVpbnRlcnZhbCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVpbnRlcnZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0byB0b2dnbGUgdGhlIHRpbWUgcGlja2VyXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZVRpbWVQaWNrZXIobmV3VmFsLCAkZXZlbnQ/OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGVUaW1lSW5wdXRGb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNUaW1lT3BlbiA9IG5ld1ZhbDtcbiAgICAgICAgaWYgKCRldmVudCAmJiAkZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGljaycsIHsgJGV2ZW50OiAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRUaW1lcGlja2VyQ2xpY2tMaXN0ZW5lcih0aGlzLmlzVGltZU9wZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVGltZXBpY2tlckNsaWNrTGlzdGVuZXIoc2tpcExpc3RlbmVyKSB7XG4gICAgICAgIGlmICghc2tpcExpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gJChib2R5RWxlbWVudCkuZmluZCgnPmJzLWRyb3Bkb3duLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpLmdldCgwKTtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50KGJvZHlFbGVtZW50LCBkcm9wZG93bkVsZW1lbnQsIHRoaXMubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgdGhpcy5pc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KHRoaXMuc2hvd2Ryb3Bkb3dub24pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lUGlja2VyKGZhbHNlKTtcbiAgICAgICAgICAgIH0sIEVWRU5UX0xJRkUuT05DRSwgdHJ1ZSk7XG4gICAgICAgIH0sIDM1MCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZSBpc09wZW4vaXNUaW1lT3BlbiAoaS5lIHdoZW4gZGF0ZXBpY2tlciBwb3B1cCBpcyBjbG9zZWQpIGJhc2VkIG9uIHdpZGdldCB0eXBlKGkuZSAgRGF0ZVRpbWUsIFRpbWUpXG4gICAgICogQHBhcmFtIHZhbCAtIGlzT3Blbi9pc1RpbWVPcGVuIGlzIHNldCBiYXNlZCBvbiB0aGUgdGltZXBpY2tlciBwb3B1cCBpcyBvcGVuL2Nsb3NlZFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0SXNUaW1lT3Blbih2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc1RpbWVPcGVuID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVRpbWVwaWNrZXJEcm9wZG93bigpIHtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVUaW1lUGlja2VyKGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRFbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcuYXBwLWNvbXBvc2l0ZS13aWRnZXQuY2FwdGlvbi1mbG9hdGluZycpO1xuICAgICAgICBpZiAocGFyZW50RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdjYXB0aW9uUG9zaXRpb25BbmltYXRlJywge2Rpc3BsYXlWYWw6IHRoaXMuZGlzcGxheVZhbHVlLCBuYXRpdmVFbDogcGFyZW50RWx9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRvIGFkZCBhIGNsaWNrIGxpc3RlbmVyIG9uY2UgdGhlIHRpbWUgZHJvcGRvd24gaXMgb3BlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblRpbWVwaWNrZXJPcGVuKCkge1xuICAgICAgICAvLyBhZGRpbmcgY2xhc3MgZm9yIHRpbWUgd2lkZ2V0IGRyb3Bkb3duIG1lbnVcbiAgICAgICAgY29uc3QgdHBFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RpbWVwaWNrZXInKTtcbiAgICAgICAgXy5mb3JFYWNoKHRwRWxlbWVudHMsIChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBhZGRDbGFzcyhlbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsICdhcHAtZGF0ZXRpbWUnLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuaGlkZSgpO1xuICAgICAgICB0aGlzLmZvY3VzVGltZVBpY2tlclBvcG92ZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFRpbWVQaWNrZXJLZXlib2FyZEV2ZW50cygpO1xuICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbigkKCdicy1kcm9wZG93bi1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRHJvcGRvd24uX2Ryb3Bkb3duLCAkKCdicy1kcm9wZG93bi1jb250YWluZXIgLmRyb3Bkb3duLW1lbnUnKSk7XG4gICAgICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMoJCgnYnMtZHJvcGRvd24tY29udGFpbmVyJyksIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic0Ryb3Bkb3duLl9kcm9wZG93biwgJCgnYnMtZHJvcGRvd24tY29udGFpbmVyIC5kcm9wZG93bi1tZW51JykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVQaWNrZXJPcGVuKCkge1xuICAgICAgICB0aGlzLmlzRGF0ZU9wZW4gPSAhdGhpcy5pc0RhdGVPcGVuO1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVQaWNrZXIoZmFsc2UpO1xuICAgICAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIHR3byBpbnB1dCB0YWdzKFRvIG1haW50YWluIHRoZSBtb2RhbCBhbmQgcHJveHkgbW9kYWwpIGZvciB0aGUgZGF0ZSBjb250cm9sLlxuICAgICAgICAvLyBTbyBhY3R1YWwgYm9vdHN0cmFwIGlucHV0IHRhcmdldCB3aWR0aCB3ZSBtYWRlIGl0IHRvIDAgc28gYm9vdHN0cmFwIGNhbGN1bGF0aW5nIHRoZSBjYWxlbmRhciBjb250YWluZXIgdG9wIHBvc2l0aW9uIGltcHJvcGVyeS5cbiAgICAgICAgLy8gVG8gZml4IHRoZSBjb250YWluZXIgdG9wIHBvc2l0aW9uIHNldCB0aGUgd2lkdGggMXB4O1xuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5tb2RlbC1ob2xkZXInKS53aWR0aCgnMXB4Jyk7XG4gICAgICAgIGNvbnN0IGRwQ29udGFpbmVyRWwgPSAkKCdicy1kYXRlcGlja2VyLWNvbnRhaW5lcicpO1xuICAgICAgICBkcENvbnRhaW5lckVsLmF0dHIoJ2FyaWEtbGFiZWwnLCAnVXNlIEFycm93IGtleXMgdG8gbmF2aWdhdGUgZGF0ZXMsIENob29zZSBEYXRlIGZyb20gZGF0ZXBpY2tlcicpO1xuICAgICAgICAkKCcuYnMtY2FsZW5kYXItY29udGFpbmVyJykucmVtb3ZlQXR0cigncm9sZScpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQ29udGFpbmVyID0gJCgnLmJzLWRhdGVwaWNrZXItY29udGFpbmVyJylbMF07XG4gICAgICAgIHRoaXMuZm9jdXNUcmFwID0gc2V0Rm9jdXNUcmFwKGRhdGVQaWNrZXJDb250YWluZXIsIHRydWUpO1xuICAgICAgICB0aGlzLmZvY3VzVHJhcC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuYnNEYXRlVmFsdWUgPyB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmJzRGF0ZVZhbHVlIDogdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmJzRGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmhpZ2h0bGlnaHRUb2RheSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlcktleWJvYXJkRXZlbnRzKHRoaXMsIHRydWUpO1xuICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbigkKCdicy1kYXRlcGlja2VyLWNvbnRhaW5lcicpLCB0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYnNEYXRlUGlja2VyRGlyZWN0aXZlLl9kYXRlcGlja2VyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0byB1cGRhdGUgdGhlIG1vZGVsXG4gICAgICovXG4gICAgcHVibGljIG9uTW9kZWxVcGRhdGUobmV3VmFsLCB0eXBlPykge1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBuZXdWYWwsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCAodGhpcyBhcyBhbnkpLmtleSwgdGhpcy5pc0N1cnJlbnREYXRlLCB0aGlzKSA9PT0gdGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwodGhpcy5kaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG1pbiBkYXRlIGFuZCBtYXggZGF0ZSB2YWxpZGF0aW9uIGluIHdlYi5cbiAgICAgICAgLy8gaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQobmV3VmFsKTtcbiAgICAgICAgaWYgKCFuZXdWYWwpIHtcbiAgICAgICAgICAgIC8vIFNldCB0aW1ldmFsdWUgYXMgMDA6MDA6MDAgaWYgd2UgcmVtb3ZlIGFueSBvbmUgZnJvbSBob3Vycy9taW51dGVzL3NlY29uZHMgZmllbGQgaW4gdGltZXBpY2tlciBhZnRlciBzZWxlY3RpbmcgZGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMuYnNEYXRlVmFsdWUgJiYgdGhpcy5ic1RpbWVQaWNrZXIgJiYgKHRoaXMuYnNUaW1lUGlja2VyLmhvdXJzID09PSAnJyB8fCB0aGlzLmJzVGltZVBpY2tlci5taW51dGVzID09PSAnJyB8fCB0aGlzLmJzVGltZVBpY2tlci5zZWNvbmRzID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0ZVZhbHVlID0gdGhpcy5ic1RpbWVWYWx1ZSA9IHRoaXMucHJveHlNb2RlbCA9IG1vbWVudCh0aGlzLmJzRGF0ZVZhbHVlKS5zdGFydE9mKCdkYXknKS50b0RhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ic0RhdGVWYWx1ZSA9IHRoaXMuYnNUaW1lVmFsdWUgPSB0aGlzLnByb3h5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBkYXRhdmFsdWUgaXMgbWFudWFsbHkgY2xlYXJlZCwgYm90aCBuZXd2YWwgYW5kIGRhdGF2YWx1ZSBhcmUgdW5kZWZpbmVkIGJ1dCBwcmV2RGF0YVZhbHVlIGV4aXN0cyAtIHRyaWdnZXIgY2hhbmdlIGNiXG4gICAgICAgICAgICBpZiAobmV3VmFsICE9PSB0aGlzLmRhdGF2YWx1ZSB8fCAoIXRoaXMuZGF0YXZhbHVlICYmICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwge30sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZU9wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRpbWVQaWNrZXIodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gbmV3VmFsO1xuICAgICAgICBpZiAodGhpcy5wcm94eU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLmJzRGF0ZVZhbHVlID0gdGhpcy5ic1RpbWVWYWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWJvdW5jZWRPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwge30sIHRydWUpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAvLyBVcGRhdGUgdGltZXBpY2tlciB3aXRoIGZvcm1hdHRlZCB0aW1lLCB3aGVuIHRpbWV6b25lIGlzIHByb3ZpZGVkLlxuICAgICAgICBjb25zdCB0aW1lUGlja2VyRmllbGRzID0gJCgnLmJzLXRpbWVwaWNrZXItZmllbGQnKTtcbiAgICAgICAgaWYgKHRoaXMudGltZVpvbmUgJiYgKHRoaXMgYXMgYW55KS5rZXkgPT09ICdkYXRldGltZXN0YW1wJyAmJiB0aW1lUGlja2VyRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCB0aGlzLmdldFRpbWVQYXR0ZXJuKCksIHRoaXMudGltZVpvbmUsICh0aGlzIGFzIGFueSkua2V5LCBudWxsLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXBpY2tlckZpZWxkcyhmb3JtYXR0ZWREYXRlLCB0aW1lUGlja2VyRmllbGRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlZHVjZXMgdGhlIHRpbWVwYXR0ZXJuIGZyb20gZGF0ZXBhdHRlcm4gc2V0IGluIHRoZSBzdHVkaW9cbiAgICBwcml2YXRlIGdldFRpbWVQYXR0ZXJuKCkge1xuICAgICAgICBsZXQgdGltZXBhdHRlcm47XG4gICAgICAgIGNvbnN0IHRpbWVQYXR0ZXJuU3RhcnRJbmRleCA9IHRoaXMuZGF0ZXBhdHRlcm4udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdoJyk7XG4gICAgICAgIGxldCB0aW1lUGF0dGVybkVuZEluZGV4ID0gdGhpcy5kYXRlcGF0dGVybi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzpzcycpO1xuICAgICAgICBpZiAodGltZVBhdHRlcm5FbmRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAvLyBhZGRpbmcgdGhlIGluZGV4IHRvICszIHRvIGluY2x1c2UgOnNzXG4gICAgICAgICAgICB0aW1lUGF0dGVybkVuZEluZGV4ICs9IDM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lUGF0dGVybkVuZEluZGV4ID0gdGhpcy5kYXRlcGF0dGVybi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzptbScpO1xuICAgICAgICAgICAgLy8gYWRkaW5nIHRoZSBpbmRleCB0byArMyB0byBpbmNsdXNlIDptbVxuICAgICAgICAgICAgaWYgKHRpbWVQYXR0ZXJuRW5kSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVQYXR0ZXJuRW5kSW5kZXggKz0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNNZXJpZGlhbiA9IHRoaXMuZGF0ZXBhdHRlcm4udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdhJyk7XG4gICAgICAgIHRpbWVwYXR0ZXJuID0gdGhpcy5kYXRlcGF0dGVybi5zdWJzdHIodGltZVBhdHRlcm5TdGFydEluZGV4LCB0aW1lUGF0dGVybkVuZEluZGV4KTtcbiAgICAgICAgaWYgKGhhc01lcmlkaWFuID4gLTEpXG4gICAgICAgICAgICB0aW1lcGF0dGVybiArPSAnIGEnO1xuICAgICAgICByZXR1cm4gdGltZXBhdHRlcm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lcGlja2VyRmllbGRzKGRhdGUsIHRpbWVQaWNrZXJGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgbWVyaWRpYW5GaWVsZCA9ICQoJ3RpbWVwaWNrZXIgYnV0dG9uLnRleHQtY2VudGVyJyk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyciA9IGRhdGUuc3BsaXQoJyAnKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdHRlZEFyclswXS5zcGxpdCgnOicpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGltZVBpY2tlckZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGltZVBpY2tlckZpZWxkc1tpXS52YWx1ZSA9IGZvcm1hdHRlZFRpbWVbaV1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpYW5GaWVsZD8uaHRtbCgpPy50cmltKCkgIT09IGZvcm1hdHRlZEFyclsxXSkge1xuICAgICAgICAgICAgbWVyaWRpYW5GaWVsZC50ZXh0KGZvcm1hdHRlZEFyclsxXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIFByZXZlbnQgdGltZSBwaWNrZXIgY2xvc2Ugd2hpbGUgY2hhbmdpbmcgdGltZSB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcHJldmVudFRwQ2xvc2UoJGV2ZW50KSB7XG4gICAgICAgICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIHRvZ2dsZSB0aGUgZHJvcGRvd24gb2YgdGhlIGRhdGUgd2lkZ2V0XG4gICAgICovXG4gICAgIHB1YmxpYyB0b2dnbGVEcERyb3Bkb3duKCRldmVudCwgc2tpcEZvY3VzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCkge1xuICAgICAgICAgICAgLy9GaXhlcyBjbGljayBldmVudCBnZXR0aW5nIHRyaWdncmVkIHR3aWNlIGluIE1vYmlsZSBkZXZpY2VzLlxuICAgICAgICAgICAgaWYoIXNraXBGb2N1cyl7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGVUaW1lSW5wdXRGb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGljaycsIHsgJGV2ZW50OiAkZXZlbnQgfSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25JbnB1dEVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQgJiYgJCgkZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhKHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSkpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5hZGRCb2R5Q2xpY2tMaXN0ZW5lcih0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5pc09wZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQm9keUNsaWNrTGlzdGVuZXIoc2tpcExpc3RlbmVyKSB7XG4gICAgICAgIGlmICghc2tpcExpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnNEYXRlQ29udGFpbmVyRWxlbWVudCA9IGJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMuZGF0ZUNvbnRhaW5lckNsc31gKTtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckRhdGVwaWNrZXJFdmVudExpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lck9uRWxlbWVudChib2R5RWxlbWVudCwgYnNEYXRlQ29udGFpbmVyRWxlbWVudCwgdGhpcy5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICB9LCBFVkVOVF9MSUZFLk9OQ0UsIHRydWUpO1xuICAgICAgICB9LCAzNTApO1xuICAgIH1cblxuICAgIHB1YmxpYyBoaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmlzRGF0ZU9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXA/LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuaGlkZSgpO1xuXG4gICAgICAgIC8vIFRvIG9wZW4gdGhlIHRpbWVwaWNrZXIgbWVudSB3aGVuIHVzZXIgd2FudHMgdG8gdXBkYXRlIHRpbWUgd2l0aG91dCBjaGFuZ2luZyB0aGUgZGF0ZS5cbiAgICAgICAgaWYodGhpcy5ic0RhdGVWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lUGlja2VyKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kZXJlZ2lzdGVyRGF0ZXBpY2tlckV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckRhdGVwaWNrZXJFdmVudExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50RWwgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmFwcC1jb21wb3NpdGUtd2lkZ2V0LmNhcHRpb24tZmxvYXRpbmcnKTtcbiAgICAgICAgaWYgKHBhcmVudEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnY2FwdGlvblBvc2l0aW9uQW5pbWF0ZScsIHtkaXNwbGF5VmFsOiB0aGlzLmRpc3BsYXlWYWx1ZSwgbmF0aXZlRWw6IHBhcmVudEVsfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ibHVyRGF0ZUlucHV0KHRoaXMuaXNEYXRlT3Blbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGF0ZUNoYW5nZSgkZXZlbnQsIGlzTmF0aXZlUGlja2VyPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3VmFsID0gJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgIG5ld1ZhbCA9IG5ld1ZhbCA/IGdldE5hdGl2ZURhdGVPYmplY3QobmV3VmFsLCB7cGF0dGVybjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID8gdGhpcy5vdXRwdXRmb3JtYXQgOiB0aGlzLmRhdGVwYXR0ZXJuLCBtZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBpc05hdGl2ZVBpY2tlcjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0fSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGRhdGV0aW1lIHBhdHRlcm4gdmFsaWRhdGlvblxuICAgICAgICAvLyBpZiBpbnZhbGlkIHBhdHRlcm4gaXMgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgYW4gZXJyb3IuXG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgJGV2ZW50LnRhcmdldC52YWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluIGRhdGUgYW5kIG1heCBkYXRlIHZhbGlkYXRpb24gaW4gbW9iaWxlIHZpZXcuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIGFuIGFsZXJ0LlxuICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50LCB0aGlzLmRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbk1vZGVsVXBkYXRlKG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdHJpZ2dlcmVkIHdoZW4gcHJlc3Npbmcga2V5IG9uIHRoZSBkYXRldGltZSBpbnB1dFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc3BsYXlLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbikpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgbGV0IG5ld1ZhbCA9IGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmtleUV2ZW50UGx1Z2luLmNvbnN0cnVjdG9yLmdldEV2ZW50RnVsbEtleShldmVudCk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnZW50ZXInIHx8IGFjdGlvbiA9PT0gJ2Fycm93ZG93bicpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwgPyBnZXROYXRpdmVEYXRlT2JqZWN0KG5ld1ZhbCwge3BhdHRlcm46IHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCA/IHRoaXMub3V0cHV0Zm9ybWF0IDogdGhpcy5kYXRlcGF0dGVybiwgbWVyaWRpYW5zOiB0aGlzLm1lcmlkaWFuc30pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCB0aGlzLmRhdGVJbnB1dEZvcm1hdCwgdGhpcy50aW1lWm9uZSwgKHRoaXMgYXMgYW55KS5rZXksIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWwgPSBldmVudC50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAmJiB0aGlzLmRhdGVwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNOYU4oaW5wdXRWYWwpICYmIF8ucGFyc2VJbnQoaW5wdXRWYWwpICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCBldmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFZhbCAmJiBpbnB1dFZhbCAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuYnNWYWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEcERyb3Bkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGltZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVEYXRlcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRpbWVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGVyZWREYXRlID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBnZXROYXRpdmVEYXRlT2JqZWN0KGVudGVyZWREYXRlLCB7cGF0dGVybjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID8gdGhpcy5vdXRwdXRmb3JtYXQgOiB0aGlzLmRhdGVwYXR0ZXJuLCBtZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBpc05hdGl2ZVBpY2tlcjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0fSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9ybWF0VmFsaWRhdGlvbihuZXdWYWwsIGVudGVyZWREYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoYW5nZSBhbmQgYmx1ciBldmVudHMgYXJlIGFkZGVkIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydibHVyJywgJ2ZvY3VzJywgJ2NoYW5nZScsICdjbGljayddLCBldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGNhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dEJsdXIoJGV2ZW50KSB7XG4gICAgICAgIGlmICghJCgkZXZlbnQucmVsYXRlZFRhcmdldCkuaGFzQ2xhc3MoJ2N1cnJlbnQtZGF0ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdibHVyJywgeyAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9lcG9jaC9zcmMvZGF0ZS10aW1lL2RhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBYyxjQUFjLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxUixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RixPQUFPLEVBQUMscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJbEQsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUM7QUFDL0MsTUFBTSxhQUFhLEdBQUcsRUFBRSxVQUFVLEVBQUUsYUFB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QXVIdk8sTUFBTSxTQUFDLHFCQUFxQjs7O29DQXpEaEMsU0FBUyxTQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRVZFTlRfTUFOQUdFUl9QTFVHSU5TIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBUaW1lcGlja2VyQ29uZmlnIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90aW1lcGlja2VyJztcblxuaW1wb3J0IHsgQWJzdHJhY3RJMThuU2VydmljZSwgYWRkQ2xhc3MsIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLCBBcHBEZWZhdWx0cywgRVZFTlRfTElGRSwgRm9ybVdpZGdldFR5cGUsIGdldERhdGVPYmosIGdldERpc3BsYXlEYXRlVGltZUZvcm1hdCwgZ2V0Rm9ybWF0dGVkRGF0ZSwgZ2V0TmF0aXZlRGF0ZU9iamVjdCwgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcywgQXBwLCBnZXRNb21lbnRMb2NhbGVPYmplY3QgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge3Byb3ZpZGVBc1dpZGdldFJlZiwgcHJvdmlkZUFzLCBzdHlsZXIsIHNldEZvY3VzVHJhcH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7QmFzZURhdGVUaW1lQ29tcG9uZW50LCBnZXRUaW1lcGlja2VyQ29uZmlnfSBmcm9tICcuLy4uL2Jhc2UtZGF0ZS10aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9kYXRlLXRpbWUucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0IG1vbWVudCwgJCwgXztcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGV0aW1lIGlucHV0LWdyb3VwJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7IHdpZGdldFR5cGU6ICd3bS1kYXRldGltZScsIGhvc3RDbGFzczogREVGQVVMVF9DTFMgfTtcblxuY29uc3QgQ1VSUkVOVF9EQVRFID0gJ0NVUlJFTlRfREFURSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtRGF0ZVRpbWVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS10aW1lLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKERhdGV0aW1lQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhEYXRldGltZUNvbXBvbmVudCwgTkdfVkFMSURBVE9SUywgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihEYXRldGltZUNvbXBvbmVudCksXG4gICAgICAgIHsgcHJvdmlkZTogVGltZXBpY2tlckNvbmZpZywgIGRlcHM6IFtBYnN0cmFjdEkxOG5TZXJ2aWNlXSwgdXNlRmFjdG9yeTogZ2V0VGltZXBpY2tlckNvbmZpZyB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRldGltZUNvbXBvbmVudCBleHRlbmRzIEJhc2VEYXRlVGltZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICAvKipcbiAgICAgKiBUaGUgYmVsb3cgcHJvcGV0aWVzIHByZWZpeGVkIHdpdGggXCJic1wiIGFsd2F5cyBob2xkcyB0aGUgdmFsdWUgdGhhdCBpcyBzZWxlY3RlZCBmcm9tIHRoZSBkYXRlcGlja2VyLlxuICAgICAqIFRoZSBic0RhdGVUaW1lVmFsdWUgPSBic0RhdGVWYWx1ZSArIGJzVGltZVZhbHVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgYnNEYXRlVGltZVZhbHVlOiBhbnk7XG4gICAgcHVibGljIGJzRGF0ZVZhbHVlO1xuICAgIHByaXZhdGUgYnNUaW1lVmFsdWU7XG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsO1xuICAgIHByaXZhdGUgYXBwOiBBcHA7XG4gICAgcHVibGljIGhpbnQ6IHN0cmluZztcbiAgICBwdWJsaWMgc2hvd2Ryb3Bkb3dub246IHN0cmluZztcbiAgICBwcml2YXRlIGtleUV2ZW50UGx1Z2luO1xuICAgIHByaXZhdGUgZGVyZWdpc3RlckRhdGVwaWNrZXJFdmVudExpc3RlbmVyO1xuICAgIHByaXZhdGUgZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBpc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmb2N1c1RyYXA7XG5cbiAgICBnZXQgdGltZXN0YW1wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm94eU1vZGVsID8gdGhpcy5wcm94eU1vZGVsLnZhbHVlT2YoKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgZGF0ZUlucHV0Rm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZU9wdGlvbnMuZGF0ZUlucHV0Rm9ybWF0IHx8ICd5eXl5LU1NLWRkVEhIOm1tOnNzJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZGlzcGxheVZhbHVlIGlzIHRoZSBkaXNwbGF5IHZhbHVlIG9mIHRoZSBic0RhdGVUaW1lVmFsdWUgYWZ0ZXIgYXBwbHlpbmcgdGhlIGRhdGVQYXR0ZXJuIG9uIGl0LlxuICAgICAqIEByZXR1cm5zIHthbnl8c3RyaW5nfVxuICAgICAqL1xuICAgIGdldCBkaXNwbGF5VmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5wcm94eU1vZGVsLCB0aGlzLmRhdGVJbnB1dEZvcm1hdCwgdGhpcy50aW1lWm9uZSwgKHRoaXMgYXMgYW55KS5rZXksIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgfHwgJyc7XG4gICAgfVxuXG4gICAgZ2V0IG5hdGl2ZURpc3BsYXlWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5wcm94eU1vZGVsLCAneXl5eS1NTS1kZFRISDptbTpzcycsIHRoaXMudGltZVpvbmUsICh0aGlzIGFzIGFueSkua2V5LCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoQnNEYXRlcGlja2VyRGlyZWN0aXZlKSBic0RhdGVQaWNrZXJEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGNoZWNrcyBpZiB0aGUgdGltZVBpY2tlciBpcyBPcGVuXG4gICAgICovXG4gICAgcHVibGljIGlzVGltZU9wZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgY2hlY2tzIGlmIHRoZSBkYXRlUGlja2VyIGlzIE9wZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEYXRlT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyB0aW1laW50ZXJ2YWwgaXMgdXNlZCB0byBydW4gdGhlIHRpbWVyIHdoZW4gdGhlIHRpbWUgY29tcG9uZW50IHZhbHVlIGlzIHNldCB0byBDVVJSRU5UX1RJTUUgaW4gcHJvcGVydGllcyBwYW5lbC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHRpbWVpbnRlcnZhbDogYW55O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gVFJVRSBpZiB0aGUgdGltZSBjb21wb25lbnQgdmFsdWUgaXMgc2V0IHRvIENVUlJFTlRfVElNRTsgSW4gdGhpcyBjYXNlIHRoZSB0aW1lciBrZWVwcyBjaGFuZ2luZyB0aGUgdGltZSB2YWx1ZSB1bnRpbCB0aGUgd2lkZ2V0IGlzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDdXJyZW50RGF0ZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkT25DaGFuZ2U6IEZ1bmN0aW9uID0gXy5kZWJvdW5jZSh0aGlzLmludm9rZU9uQ2hhbmdlLCAxMCk7XG5cbiAgICBwcml2YXRlIGRhdGVDb250YWluZXJDbHM6IHN0cmluZztcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnZXQgZGF0YXZhbHVlKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ3VycmVudERhdGUgJiYgIXRoaXMucHJveHlNb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuIENVUlJFTlRfREFURTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCB0aGlzLnByb3h5TW9kZWwsIHRoaXMub3V0cHV0Zm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipUb2RvW1NodWJoYW1dOiBuZWVkcyB0byBiZSByZWRlZmluZWRcbiAgICAgKiBUaGlzIHByb3BlcnR5IHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBkYXRlIHNlbGVjdGlvblxuICAgICAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzZXQgZGF0YXZhbHVlKG5ld1ZhbDogYW55KSB7XG4gICAgICAgIGlmIChuZXdWYWwgPT09IENVUlJFTlRfREFURSkge1xuICAgICAgICAgICAgdGhpcy5pc0N1cnJlbnREYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZUludGVydmFsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSBuZXdWYWwgPyBnZXREYXRlT2JqKG5ld1ZhbCwge2lzTmF0aXZlUGlja2VyOiB0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXR9LCB0aGlzLnRpbWVab25lKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgIHRoaXMuaXNDdXJyZW50RGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnNUaW1lVmFsdWUgPSB0aGlzLmJzRGF0ZVZhbHVlID0gdGhpcy5wcm94eU1vZGVsO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgYXBwRGVmYXVsdHM6IEFwcERlZmF1bHRzLFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgQEluamVjdChFVkVOVF9NQU5BR0VSX1BMVUdJTlMpIGV2dE1uZ3JQbHVnaW5zXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gdGhpcy5jbGVhclRpbWVJbnRlcnZhbCgpKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICAvLyBLZXlFdmVudHNQbHVnaW5cbiAgICAgICAgdGhpcy5rZXlFdmVudFBsdWdpbiA9IGV2dE1uZ3JQbHVnaW5zWzFdO1xuICAgICAgICB0aGlzLmRhdGVDb250YWluZXJDbHMgPSBgYXBwLWRhdGUtJHt0aGlzLndpZGdldElkfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmNvbnRhaW5lckNsYXNzID0gYGFwcC1kYXRlICR7dGhpcy5kYXRlQ29udGFpbmVyQ2xzfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGVwYXR0ZXJuID0gdGhpcy5hcHBEZWZhdWx0cy5kYXRlVGltZUZvcm1hdCB8fCBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQoRm9ybVdpZGdldFR5cGUuREFURVRJTUUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdCgnZGF0ZXBhdHRlcm4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIG1haW50YWluIGEgdGltZSBpbnRlcnZhbCB0byB1cGRhdGUgdGhlIHRpbWUgbW9kZWwgd2hlbiB0aGUgZGF0YSB2YWx1ZSBpcyBzZXQgdG8gQ1VSUkVOVF9USU1FXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRUaW1lSW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVpbnRlcnZhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZWludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLnRpbWVab25lID8gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRoaXMudGltZVpvbmUpIDogbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbFVwZGF0ZShjdXJyZW50VGltZSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHVzZWQgdG8gY2xlYXIgdGhlIHRpbWUgaW50ZXJ2YWwgY3JlYXRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJUaW1lSW50ZXJ2YWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVpbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVpbnRlcnZhbCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVpbnRlcnZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0byB0b2dnbGUgdGhlIHRpbWUgcGlja2VyXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZVRpbWVQaWNrZXIobmV3VmFsLCAkZXZlbnQ/OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGVUaW1lSW5wdXRGb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNUaW1lT3BlbiA9IG5ld1ZhbDtcbiAgICAgICAgaWYgKCRldmVudCAmJiAkZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGljaycsIHsgJGV2ZW50OiAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRUaW1lcGlja2VyQ2xpY2tMaXN0ZW5lcih0aGlzLmlzVGltZU9wZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVGltZXBpY2tlckNsaWNrTGlzdGVuZXIoc2tpcExpc3RlbmVyKSB7XG4gICAgICAgIGlmICghc2tpcExpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gJChib2R5RWxlbWVudCkuZmluZCgnPmJzLWRyb3Bkb3duLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpLmdldCgwKTtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50KGJvZHlFbGVtZW50LCBkcm9wZG93bkVsZW1lbnQsIHRoaXMubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgdGhpcy5pc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KHRoaXMuc2hvd2Ryb3Bkb3dub24pLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lUGlja2VyKGZhbHNlKTtcbiAgICAgICAgICAgIH0sIEVWRU5UX0xJRkUuT05DRSwgdHJ1ZSk7XG4gICAgICAgIH0sIDM1MCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB2YWx1ZSBpc09wZW4vaXNUaW1lT3BlbiAoaS5lIHdoZW4gZGF0ZXBpY2tlciBwb3B1cCBpcyBjbG9zZWQpIGJhc2VkIG9uIHdpZGdldCB0eXBlKGkuZSAgRGF0ZVRpbWUsIFRpbWUpXG4gICAgICogQHBhcmFtIHZhbCAtIGlzT3Blbi9pc1RpbWVPcGVuIGlzIHNldCBiYXNlZCBvbiB0aGUgdGltZXBpY2tlciBwb3B1cCBpcyBvcGVuL2Nsb3NlZFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0SXNUaW1lT3Blbih2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc1RpbWVPcGVuID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVRpbWVwaWNrZXJEcm9wZG93bigpIHtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVUaW1lUGlja2VyKGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlclRpbWVwaWNrZUV2ZW50TGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRFbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcuYXBwLWNvbXBvc2l0ZS13aWRnZXQuY2FwdGlvbi1mbG9hdGluZycpO1xuICAgICAgICBpZiAocGFyZW50RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdjYXB0aW9uUG9zaXRpb25BbmltYXRlJywge2Rpc3BsYXlWYWw6IHRoaXMuZGlzcGxheVZhbHVlLCBuYXRpdmVFbDogcGFyZW50RWx9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRvIGFkZCBhIGNsaWNrIGxpc3RlbmVyIG9uY2UgdGhlIHRpbWUgZHJvcGRvd24gaXMgb3BlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblRpbWVwaWNrZXJPcGVuKCkge1xuICAgICAgICAvLyBhZGRpbmcgY2xhc3MgZm9yIHRpbWUgd2lkZ2V0IGRyb3Bkb3duIG1lbnVcbiAgICAgICAgY29uc3QgdHBFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RpbWVwaWNrZXInKTtcbiAgICAgICAgXy5mb3JFYWNoKHRwRWxlbWVudHMsIChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBhZGRDbGFzcyhlbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsICdhcHAtZGF0ZXRpbWUnLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuaGlkZSgpO1xuICAgICAgICB0aGlzLmZvY3VzVGltZVBpY2tlclBvcG92ZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFRpbWVQaWNrZXJLZXlib2FyZEV2ZW50cygpO1xuICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbigkKCdicy1kcm9wZG93bi1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRHJvcGRvd24uX2Ryb3Bkb3duLCAkKCdicy1kcm9wZG93bi1jb250YWluZXIgLmRyb3Bkb3duLW1lbnUnKSk7XG4gICAgICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMoJCgnYnMtZHJvcGRvd24tY29udGFpbmVyJyksIHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ic0Ryb3Bkb3duLl9kcm9wZG93biwgJCgnYnMtZHJvcGRvd24tY29udGFpbmVyIC5kcm9wZG93bi1tZW51JykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRhdGVQaWNrZXJPcGVuKCkge1xuICAgICAgICB0aGlzLmlzRGF0ZU9wZW4gPSAhdGhpcy5pc0RhdGVPcGVuO1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVQaWNrZXIoZmFsc2UpO1xuICAgICAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIHR3byBpbnB1dCB0YWdzKFRvIG1haW50YWluIHRoZSBtb2RhbCBhbmQgcHJveHkgbW9kYWwpIGZvciB0aGUgZGF0ZSBjb250cm9sLlxuICAgICAgICAvLyBTbyBhY3R1YWwgYm9vdHN0cmFwIGlucHV0IHRhcmdldCB3aWR0aCB3ZSBtYWRlIGl0IHRvIDAgc28gYm9vdHN0cmFwIGNhbGN1bGF0aW5nIHRoZSBjYWxlbmRhciBjb250YWluZXIgdG9wIHBvc2l0aW9uIGltcHJvcGVyeS5cbiAgICAgICAgLy8gVG8gZml4IHRoZSBjb250YWluZXIgdG9wIHBvc2l0aW9uIHNldCB0aGUgd2lkdGggMXB4O1xuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5tb2RlbC1ob2xkZXInKS53aWR0aCgnMXB4Jyk7XG4gICAgICAgIGNvbnN0IGRwQ29udGFpbmVyRWwgPSAkKCdicy1kYXRlcGlja2VyLWNvbnRhaW5lcicpO1xuICAgICAgICBkcENvbnRhaW5lckVsLmF0dHIoJ2FyaWEtbGFiZWwnLCAnVXNlIEFycm93IGtleXMgdG8gbmF2aWdhdGUgZGF0ZXMsIENob29zZSBEYXRlIGZyb20gZGF0ZXBpY2tlcicpO1xuICAgICAgICAkKCcuYnMtY2FsZW5kYXItY29udGFpbmVyJykucmVtb3ZlQXR0cigncm9sZScpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQ29udGFpbmVyID0gJCgnLmJzLWRhdGVwaWNrZXItY29udGFpbmVyJylbMF07XG4gICAgICAgIHRoaXMuZm9jdXNUcmFwID0gc2V0Rm9jdXNUcmFwKGRhdGVQaWNrZXJDb250YWluZXIsIHRydWUpO1xuICAgICAgICB0aGlzLmZvY3VzVHJhcC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuYnNEYXRlVmFsdWUgPyB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmJzRGF0ZVZhbHVlIDogdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmJzRGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmhpZ2h0bGlnaHRUb2RheSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlcktleWJvYXJkRXZlbnRzKHRoaXMsIHRydWUpO1xuICAgICAgICBhZGp1c3RDb250YWluZXJQb3NpdGlvbigkKCdicy1kYXRlcGlja2VyLWNvbnRhaW5lcicpLCB0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuYnNEYXRlUGlja2VyRGlyZWN0aXZlLl9kYXRlcGlja2VyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB0byB1cGRhdGUgdGhlIG1vZGVsXG4gICAgICovXG4gICAgcHVibGljIG9uTW9kZWxVcGRhdGUobmV3VmFsLCB0eXBlPykge1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBuZXdWYWwsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCAodGhpcyBhcyBhbnkpLmtleSwgdGhpcy5pc0N1cnJlbnREYXRlLCB0aGlzKSA9PT0gdGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwodGhpcy5kaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG1pbiBkYXRlIGFuZCBtYXggZGF0ZSB2YWxpZGF0aW9uIGluIHdlYi5cbiAgICAgICAgLy8gaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQobmV3VmFsKTtcbiAgICAgICAgaWYgKCFuZXdWYWwpIHtcbiAgICAgICAgICAgIC8vIFNldCB0aW1ldmFsdWUgYXMgMDA6MDA6MDAgaWYgd2UgcmVtb3ZlIGFueSBvbmUgZnJvbSBob3Vycy9taW51dGVzL3NlY29uZHMgZmllbGQgaW4gdGltZXBpY2tlciBhZnRlciBzZWxlY3RpbmcgZGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMuYnNEYXRlVmFsdWUgJiYgdGhpcy5ic1RpbWVQaWNrZXIgJiYgKHRoaXMuYnNUaW1lUGlja2VyLmhvdXJzID09PSAnJyB8fCB0aGlzLmJzVGltZVBpY2tlci5taW51dGVzID09PSAnJyB8fCB0aGlzLmJzVGltZVBpY2tlci5zZWNvbmRzID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0ZVZhbHVlID0gdGhpcy5ic1RpbWVWYWx1ZSA9IHRoaXMucHJveHlNb2RlbCA9IG1vbWVudCh0aGlzLmJzRGF0ZVZhbHVlKS5zdGFydE9mKCdkYXknKS50b0RhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ic0RhdGVWYWx1ZSA9IHRoaXMuYnNUaW1lVmFsdWUgPSB0aGlzLnByb3h5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBkYXRhdmFsdWUgaXMgbWFudWFsbHkgY2xlYXJlZCwgYm90aCBuZXd2YWwgYW5kIGRhdGF2YWx1ZSBhcmUgdW5kZWZpbmVkIGJ1dCBwcmV2RGF0YVZhbHVlIGV4aXN0cyAtIHRyaWdnZXIgY2hhbmdlIGNiXG4gICAgICAgICAgICBpZiAobmV3VmFsICE9PSB0aGlzLmRhdGF2YWx1ZSB8fCAoIXRoaXMuZGF0YXZhbHVlICYmICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwge30sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZU9wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRpbWVQaWNrZXIodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gbmV3VmFsO1xuICAgICAgICBpZiAodGhpcy5wcm94eU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLmJzRGF0ZVZhbHVlID0gdGhpcy5ic1RpbWVWYWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWJvdW5jZWRPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwge30sIHRydWUpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAvLyBVcGRhdGUgdGltZXBpY2tlciB3aXRoIGZvcm1hdHRlZCB0aW1lLCB3aGVuIHRpbWV6b25lIGlzIHByb3ZpZGVkLlxuICAgICAgICBjb25zdCB0aW1lUGlja2VyRmllbGRzID0gJCgnLmJzLXRpbWVwaWNrZXItZmllbGQnKTtcbiAgICAgICAgaWYgKHRoaXMudGltZVpvbmUgJiYgKHRoaXMgYXMgYW55KS5rZXkgPT09ICdkYXRldGltZXN0YW1wJyAmJiB0aW1lUGlja2VyRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCB0aGlzLmdldFRpbWVQYXR0ZXJuKCksIHRoaXMudGltZVpvbmUsICh0aGlzIGFzIGFueSkua2V5LCBudWxsLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXBpY2tlckZpZWxkcyhmb3JtYXR0ZWREYXRlLCB0aW1lUGlja2VyRmllbGRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlZHVjZXMgdGhlIHRpbWVwYXR0ZXJuIGZyb20gZGF0ZXBhdHRlcm4gc2V0IGluIHRoZSBzdHVkaW9cbiAgICBwcml2YXRlIGdldFRpbWVQYXR0ZXJuKCkge1xuICAgICAgICBsZXQgdGltZXBhdHRlcm47XG4gICAgICAgIGNvbnN0IHRpbWVQYXR0ZXJuU3RhcnRJbmRleCA9IHRoaXMuZGF0ZXBhdHRlcm4udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdoJyk7XG4gICAgICAgIGxldCB0aW1lUGF0dGVybkVuZEluZGV4ID0gdGhpcy5kYXRlcGF0dGVybi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzpzcycpO1xuICAgICAgICBpZiAodGltZVBhdHRlcm5FbmRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAvLyBhZGRpbmcgdGhlIGluZGV4IHRvICszIHRvIGluY2x1c2UgOnNzXG4gICAgICAgICAgICB0aW1lUGF0dGVybkVuZEluZGV4ICs9IDM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lUGF0dGVybkVuZEluZGV4ID0gdGhpcy5kYXRlcGF0dGVybi50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzptbScpO1xuICAgICAgICAgICAgLy8gYWRkaW5nIHRoZSBpbmRleCB0byArMyB0byBpbmNsdXNlIDptbVxuICAgICAgICAgICAgaWYgKHRpbWVQYXR0ZXJuRW5kSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVQYXR0ZXJuRW5kSW5kZXggKz0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNNZXJpZGlhbiA9IHRoaXMuZGF0ZXBhdHRlcm4udG9Mb3dlckNhc2UoKS5pbmRleE9mKCdhJyk7XG4gICAgICAgIHRpbWVwYXR0ZXJuID0gdGhpcy5kYXRlcGF0dGVybi5zdWJzdHIodGltZVBhdHRlcm5TdGFydEluZGV4LCB0aW1lUGF0dGVybkVuZEluZGV4KTtcbiAgICAgICAgaWYgKGhhc01lcmlkaWFuID4gLTEpXG4gICAgICAgICAgICB0aW1lcGF0dGVybiArPSAnIGEnO1xuICAgICAgICByZXR1cm4gdGltZXBhdHRlcm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lcGlja2VyRmllbGRzKGRhdGUsIHRpbWVQaWNrZXJGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgbWVyaWRpYW5GaWVsZCA9ICQoJ3RpbWVwaWNrZXIgYnV0dG9uLnRleHQtY2VudGVyJyk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEFyciA9IGRhdGUuc3BsaXQoJyAnKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdHRlZEFyclswXS5zcGxpdCgnOicpO1xuICAgICAgICBmb3IgKGxldCBpPTA7IGk8dGltZVBpY2tlckZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGltZVBpY2tlckZpZWxkc1tpXS52YWx1ZSA9IGZvcm1hdHRlZFRpbWVbaV1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpYW5GaWVsZD8uaHRtbCgpPy50cmltKCkgIT09IGZvcm1hdHRlZEFyclsxXSkge1xuICAgICAgICAgICAgbWVyaWRpYW5GaWVsZC50ZXh0KGZvcm1hdHRlZEFyclsxXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIFByZXZlbnQgdGltZSBwaWNrZXIgY2xvc2Ugd2hpbGUgY2hhbmdpbmcgdGltZSB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcHJldmVudFRwQ2xvc2UoJGV2ZW50KSB7XG4gICAgICAgICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIHRvZ2dsZSB0aGUgZHJvcGRvd24gb2YgdGhlIGRhdGUgd2lkZ2V0XG4gICAgICovXG4gICAgIHB1YmxpYyB0b2dnbGVEcERyb3Bkb3duKCRldmVudCwgc2tpcEZvY3VzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCkge1xuICAgICAgICAgICAgLy9GaXhlcyBjbGljayBldmVudCBnZXR0aW5nIHRyaWdncmVkIHR3aWNlIGluIE1vYmlsZSBkZXZpY2VzLlxuICAgICAgICAgICAgaWYoIXNraXBGb2N1cyl7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGVUaW1lSW5wdXRGb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGljaycsIHsgJGV2ZW50OiAkZXZlbnQgfSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzT25JbnB1dEVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQgJiYgJCgkZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhKHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSkpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5hZGRCb2R5Q2xpY2tMaXN0ZW5lcih0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5pc09wZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQm9keUNsaWNrTGlzdGVuZXIoc2tpcExpc3RlbmVyKSB7XG4gICAgICAgIGlmICghc2tpcExpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnNEYXRlQ29udGFpbmVyRWxlbWVudCA9IGJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMuZGF0ZUNvbnRhaW5lckNsc31gKTtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckRhdGVwaWNrZXJFdmVudExpc3RlbmVyID0gYWRkRXZlbnRMaXN0ZW5lck9uRWxlbWVudChib2R5RWxlbWVudCwgYnNEYXRlQ29udGFpbmVyRWxlbWVudCwgdGhpcy5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbiksICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5oaWRlKCk7XG4gICAgICAgICAgICB9LCBFVkVOVF9MSUZFLk9OQ0UsIHRydWUpO1xuICAgICAgICB9LCAzNTApO1xuICAgIH1cblxuICAgIHB1YmxpYyBoaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmlzRGF0ZU9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXA/LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuaGlkZSgpO1xuXG4gICAgICAgIC8vIFRvIG9wZW4gdGhlIHRpbWVwaWNrZXIgbWVudSB3aGVuIHVzZXIgd2FudHMgdG8gdXBkYXRlIHRpbWUgd2l0aG91dCBjaGFuZ2luZyB0aGUgZGF0ZS5cbiAgICAgICAgaWYodGhpcy5ic0RhdGVWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lUGlja2VyKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kZXJlZ2lzdGVyRGF0ZXBpY2tlckV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckRhdGVwaWNrZXJFdmVudExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50RWwgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmFwcC1jb21wb3NpdGUtd2lkZ2V0LmNhcHRpb24tZmxvYXRpbmcnKTtcbiAgICAgICAgaWYgKHBhcmVudEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnY2FwdGlvblBvc2l0aW9uQW5pbWF0ZScsIHtkaXNwbGF5VmFsOiB0aGlzLmRpc3BsYXlWYWx1ZSwgbmF0aXZlRWw6IHBhcmVudEVsfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ibHVyRGF0ZUlucHV0KHRoaXMuaXNEYXRlT3Blbik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRGF0ZUNoYW5nZSgkZXZlbnQsIGlzTmF0aXZlUGlja2VyPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3VmFsID0gJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgIG5ld1ZhbCA9IG5ld1ZhbCA/IGdldE5hdGl2ZURhdGVPYmplY3QobmV3VmFsLCB7cGF0dGVybjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID8gdGhpcy5vdXRwdXRmb3JtYXQgOiB0aGlzLmRhdGVwYXR0ZXJuLCBtZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBpc05hdGl2ZVBpY2tlcjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0fSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGRhdGV0aW1lIHBhdHRlcm4gdmFsaWRhdGlvblxuICAgICAgICAvLyBpZiBpbnZhbGlkIHBhdHRlcm4gaXMgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgYW4gZXJyb3IuXG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgJGV2ZW50LnRhcmdldC52YWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluIGRhdGUgYW5kIG1heCBkYXRlIHZhbGlkYXRpb24gaW4gbW9iaWxlIHZpZXcuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIGFuIGFsZXJ0LlxuICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50LCB0aGlzLmRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbk1vZGVsVXBkYXRlKG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdHJpZ2dlcmVkIHdoZW4gcHJlc3Npbmcga2V5IG9uIHRoZSBkYXRldGltZSBpbnB1dFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc3BsYXlLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbikpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgbGV0IG5ld1ZhbCA9IGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmtleUV2ZW50UGx1Z2luLmNvbnN0cnVjdG9yLmdldEV2ZW50RnVsbEtleShldmVudCk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnZW50ZXInIHx8IGFjdGlvbiA9PT0gJ2Fycm93ZG93bicpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwgPyBnZXROYXRpdmVEYXRlT2JqZWN0KG5ld1ZhbCwge3BhdHRlcm46IHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCA/IHRoaXMub3V0cHV0Zm9ybWF0IDogdGhpcy5kYXRlcGF0dGVybiwgbWVyaWRpYW5zOiB0aGlzLm1lcmlkaWFuc30pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCB0aGlzLmRhdGVJbnB1dEZvcm1hdCwgdGhpcy50aW1lWm9uZSwgKHRoaXMgYXMgYW55KS5rZXksIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWwgPSBldmVudC50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAmJiB0aGlzLmRhdGVwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNOYU4oaW5wdXRWYWwpICYmIF8ucGFyc2VJbnQoaW5wdXRWYWwpICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCBldmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dFZhbCAmJiBpbnB1dFZhbCAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUuYnNWYWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEcERyb3Bkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlVGltZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVEYXRlcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRpbWVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGVyZWREYXRlID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBnZXROYXRpdmVEYXRlT2JqZWN0KGVudGVyZWREYXRlLCB7cGF0dGVybjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID8gdGhpcy5vdXRwdXRmb3JtYXQgOiB0aGlzLmRhdGVwYXR0ZXJuLCBtZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBpc05hdGl2ZVBpY2tlcjogdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0fSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9ybWF0VmFsaWRhdGlvbihuZXdWYWwsIGVudGVyZWREYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoYW5nZSBhbmQgYmx1ciBldmVudHMgYXJlIGFkZGVkIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoIV8uaW5jbHVkZXMoWydibHVyJywgJ2ZvY3VzJywgJ2NoYW5nZScsICdjbGljayddLCBldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGNhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dEJsdXIoJGV2ZW50KSB7XG4gICAgICAgIGlmICghJCgkZXZlbnQucmVsYXRlZFRhcmdldCkuaGFzQ2xhc3MoJ2N1cnJlbnQtZGF0ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdibHVyJywgeyAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=