@rivet-health/design-system 40.6.0 → 40.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/esm2020/lib/accessibility/sr-only/sr-only.component.mjs +4 -4
  2. package/esm2020/lib/download/download.service.mjs +4 -4
  3. package/esm2020/lib/format/pipes/date.pipe.mjs +4 -4
  4. package/esm2020/lib/format/pipes/days.pipe.mjs +4 -4
  5. package/esm2020/lib/format/pipes/dollars.pipe.mjs +4 -4
  6. package/esm2020/lib/format/pipes/number.pipe.mjs +4 -4
  7. package/esm2020/lib/format/pipes/percentage.pipe.mjs +4 -4
  8. package/esm2020/lib/format/pipes/sentence-case.pipe.mjs +4 -4
  9. package/esm2020/lib/format/pipes/small-currency.pipe.mjs +4 -4
  10. package/esm2020/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +4 -4
  11. package/esm2020/lib/format/truncate/truncate.component.mjs +4 -4
  12. package/esm2020/lib/icon/icon.component.mjs +4 -4
  13. package/esm2020/lib/input/alphabetic-field/alphabetic-field.component.mjs +4 -4
  14. package/esm2020/lib/input/auto-focus/auto-focus.directive.mjs +4 -4
  15. package/esm2020/lib/input/button/button.component.mjs +4 -4
  16. package/esm2020/lib/input/button-group/button-group.component.mjs +4 -4
  17. package/esm2020/lib/input/calendar/calendar.component.mjs +4 -4
  18. package/esm2020/lib/input/card-checkbox/card-checkbox.component.mjs +4 -4
  19. package/esm2020/lib/input/checkbox/checkbox.component.mjs +4 -4
  20. package/esm2020/lib/input/currency-field/currency-field.component.mjs +4 -4
  21. package/esm2020/lib/input/date/date.component.mjs +22 -22
  22. package/esm2020/lib/input/date-range/date-range.component.mjs +4 -4
  23. package/esm2020/lib/input/input-label/input-label.component.mjs +4 -4
  24. package/esm2020/lib/input/mentions-input/mentions-input.component.mjs +4 -4
  25. package/esm2020/lib/input/number-field/number-field.component.mjs +4 -4
  26. package/esm2020/lib/input/percentage-field/percentage-field.component.mjs +4 -4
  27. package/esm2020/lib/input/phone-field/phone-field.component.mjs +4 -4
  28. package/esm2020/lib/input/radio/radio.component.mjs +4 -4
  29. package/esm2020/lib/input/search/search.component.mjs +4 -4
  30. package/esm2020/lib/input/search-select/search-select.component.mjs +4 -4
  31. package/esm2020/lib/input/select/select/select.component.mjs +4 -4
  32. package/esm2020/lib/input/select/select-node/select-node.component.mjs +4 -4
  33. package/esm2020/lib/input/simple-select/option-group.pipe.mjs +4 -4
  34. package/esm2020/lib/input/simple-select/simple-select.component.mjs +4 -4
  35. package/esm2020/lib/input/switch-checkbox/switch-checkbox.component.mjs +4 -4
  36. package/esm2020/lib/input/text-field/text-field.component.mjs +4 -4
  37. package/esm2020/lib/input/textarea-field/textarea-field.component.mjs +4 -4
  38. package/esm2020/lib/input/validation-message/validation-message.component.mjs +4 -4
  39. package/esm2020/lib/load/loading/loading.component.mjs +4 -4
  40. package/esm2020/lib/load/loading-cover/loading-cover.component.mjs +4 -4
  41. package/esm2020/lib/navigation/link/link.component.mjs +4 -4
  42. package/esm2020/lib/navigation/page-header/page-header.component.mjs +4 -4
  43. package/esm2020/lib/navigation/tabs/tab/tab.component.mjs +4 -4
  44. package/esm2020/lib/navigation/tabs/tabs/tabs.component.mjs +4 -4
  45. package/esm2020/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +4 -4
  46. package/esm2020/lib/navigation/views/edit-view/edit-view.component.mjs +4 -4
  47. package/esm2020/lib/navigation/views/permission-picker/permission-picker.component.mjs +4 -4
  48. package/esm2020/lib/navigation/views/view-menu/view-menu.component.mjs +4 -4
  49. package/esm2020/lib/navigation/views/views/views.component.mjs +4 -4
  50. package/esm2020/lib/notification/badge/badge.component.mjs +4 -4
  51. package/esm2020/lib/notification/banner/banner-action.component.mjs +4 -4
  52. package/esm2020/lib/notification/banner/banner.component.mjs +4 -4
  53. package/esm2020/lib/notification/map-indicator/map-indicator.component.mjs +4 -4
  54. package/esm2020/lib/notification/notification-badge/notification-badge.component.mjs +4 -4
  55. package/esm2020/lib/overlay/callout/callout.component.mjs +4 -4
  56. package/esm2020/lib/overlay/callout/help/help.component.mjs +4 -4
  57. package/esm2020/lib/overlay/callout/lock-scroll.directive.mjs +7 -7
  58. package/esm2020/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +4 -4
  59. package/esm2020/lib/overlay/callout/menu/menu.component.mjs +4 -4
  60. package/esm2020/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +4 -4
  61. package/esm2020/lib/overlay/callout/tooltip/tooltip.component.mjs +4 -4
  62. package/esm2020/lib/overlay/callout/tooltip/tooltip.directive.mjs +4 -4
  63. package/esm2020/lib/overlay/modal/dialog/dialog.component.mjs +4 -4
  64. package/esm2020/lib/overlay/modal/modal.component.mjs +4 -4
  65. package/esm2020/lib/overlay/modal/side-sheet/side-sheet.component.mjs +4 -4
  66. package/esm2020/lib/overlay/overlay-outlet.component.mjs +4 -4
  67. package/esm2020/lib/overlay/overlay.directive.mjs +4 -4
  68. package/esm2020/lib/overlay/overlay.service.mjs +4 -4
  69. package/esm2020/lib/overlay/toast/toast-action.component.mjs +4 -4
  70. package/esm2020/lib/overlay/toast/toast.component.mjs +4 -4
  71. package/esm2020/lib/riv.module.mjs +5 -5
  72. package/esm2020/lib/size/size.directive.mjs +4 -4
  73. package/esm2020/lib/table/simple-table/simple-table-cell.component.mjs +4 -4
  74. package/esm2020/lib/table/simple-table/simple-table-header-cell.component.mjs +4 -4
  75. package/esm2020/lib/table/simple-table/simple-table-row.component.mjs +4 -4
  76. package/esm2020/lib/table/simple-table/simple-table.component.mjs +4 -4
  77. package/esm2020/lib/table/table/table/table.component.mjs +4 -4
  78. package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +4 -4
  79. package/esm2020/lib/table/table/table-column-settings/table-column-settings.component.mjs +4 -4
  80. package/esm2020/lib/table/table/table-csv-export/table-csv-export.component.mjs +4 -4
  81. package/esm2020/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +4 -4
  82. package/esm2020/lib/table/table/table-search/table-search.component.mjs +4 -4
  83. package/esm2020/lib/table/table/table-search-columns/table-search-columns.component.mjs +4 -4
  84. package/esm2020/lib/visibility/visibility.directive.mjs +4 -4
  85. package/esm2020/lib/visualization/chart/chart.component.mjs +4 -4
  86. package/esm2020/lib/visualization/data-table/data-table-cell.component.mjs +4 -4
  87. package/esm2020/lib/visualization/data-table/data-table-header-cell.component.mjs +4 -4
  88. package/esm2020/lib/visualization/data-table/data-table-row.component.mjs +4 -4
  89. package/esm2020/lib/visualization/data-table/data-table.component.mjs +4 -4
  90. package/esm2020/lib/visualization/donut/donut.component.mjs +4 -4
  91. package/esm2020/lib/visualization/funnel-chart/funnel-chart.component.mjs +4 -4
  92. package/esm2020/lib/visualization/highlight/highlight.component.mjs +4 -4
  93. package/esm2020/lib/visualization/issue/issue.component.mjs +4 -4
  94. package/esm2020/lib/visualization/legend-item/legend-item.component.mjs +4 -4
  95. package/esm2020/lib/visualization/metric/metric.component.mjs +4 -4
  96. package/esm2020/lib/visualization/mini-pie/mini-pie.component.mjs +4 -4
  97. package/esm2020/lib/visualization/progress/progress.component.mjs +4 -4
  98. package/esm2020/lib/visualization/stacked-column/stacked-column.component.mjs +4 -4
  99. package/esm2020/lib/visualization/stacked-row/stacked-row.component.mjs +4 -4
  100. package/esm2020/lib/visualization/time-series/time-series.component.mjs +4 -4
  101. package/esm2020/lib/visualization/trend/trend.component.mjs +4 -4
  102. package/esm2020/lib/visualization/zero-state/zero-state.component.mjs +4 -4
  103. package/fesm2015/rivet-health-design-system.mjs +345 -338
  104. package/fesm2015/rivet-health-design-system.mjs.map +1 -1
  105. package/fesm2020/rivet-health-design-system.mjs +328 -328
  106. package/fesm2020/rivet-health-design-system.mjs.map +1 -1
  107. package/lib/accessibility/sr-only/sr-only.component.d.ts +1 -1
  108. package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +1 -1
  109. package/lib/format/truncate/truncate.component.d.ts +1 -1
  110. package/lib/icon/icon.component.d.ts +1 -1
  111. package/lib/input/alphabetic-field/alphabetic-field.component.d.ts +1 -1
  112. package/lib/input/auto-focus/auto-focus.directive.d.ts +1 -1
  113. package/lib/input/button/button.component.d.ts +1 -1
  114. package/lib/input/button-group/button-group.component.d.ts +1 -1
  115. package/lib/input/calendar/calendar.component.d.ts +3 -3
  116. package/lib/input/card-checkbox/card-checkbox.component.d.ts +1 -1
  117. package/lib/input/checkbox/checkbox.component.d.ts +1 -1
  118. package/lib/input/currency-field/currency-field.component.d.ts +1 -1
  119. package/lib/input/date/date.component.d.ts +1 -1
  120. package/lib/input/date-range/date-range.component.d.ts +1 -1
  121. package/lib/input/input-label/input-label.component.d.ts +1 -1
  122. package/lib/input/mentions-input/mentions-input.component.d.ts +1 -1
  123. package/lib/input/number-field/number-field.component.d.ts +1 -1
  124. package/lib/input/percentage-field/percentage-field.component.d.ts +1 -1
  125. package/lib/input/phone-field/phone-field.component.d.ts +1 -1
  126. package/lib/input/radio/radio.component.d.ts +1 -1
  127. package/lib/input/search/search.component.d.ts +1 -1
  128. package/lib/input/search-select/search-select.component.d.ts +1 -1
  129. package/lib/input/select/select/select.component.d.ts +1 -1
  130. package/lib/input/select/select-node/select-node.component.d.ts +1 -1
  131. package/lib/input/simple-select/simple-select.component.d.ts +1 -1
  132. package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +1 -1
  133. package/lib/input/text-field/text-field.component.d.ts +1 -1
  134. package/lib/input/textarea-field/textarea-field.component.d.ts +1 -1
  135. package/lib/input/validation-message/validation-message.component.d.ts +1 -1
  136. package/lib/load/loading/loading.component.d.ts +1 -1
  137. package/lib/load/loading-cover/loading-cover.component.d.ts +1 -1
  138. package/lib/navigation/link/link.component.d.ts +1 -1
  139. package/lib/navigation/page-header/page-header.component.d.ts +1 -1
  140. package/lib/navigation/tabs/tab/tab.component.d.ts +1 -1
  141. package/lib/navigation/tabs/tabs/tabs.component.d.ts +1 -1
  142. package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +1 -1
  143. package/lib/navigation/views/edit-view/edit-view.component.d.ts +1 -1
  144. package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +1 -1
  145. package/lib/navigation/views/view-menu/view-menu.component.d.ts +1 -1
  146. package/lib/navigation/views/views/views.component.d.ts +1 -1
  147. package/lib/notification/badge/badge.component.d.ts +1 -1
  148. package/lib/notification/banner/banner-action.component.d.ts +1 -1
  149. package/lib/notification/banner/banner.component.d.ts +1 -1
  150. package/lib/notification/map-indicator/map-indicator.component.d.ts +1 -1
  151. package/lib/notification/notification-badge/notification-badge.component.d.ts +1 -1
  152. package/lib/overlay/callout/callout.component.d.ts +1 -1
  153. package/lib/overlay/callout/callout.helpers.d.ts +4 -4
  154. package/lib/overlay/callout/help/help.component.d.ts +1 -1
  155. package/lib/overlay/callout/lock-scroll.directive.d.ts +1 -1
  156. package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +1 -1
  157. package/lib/overlay/callout/menu/menu.component.d.ts +1 -1
  158. package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +1 -1
  159. package/lib/overlay/callout/tooltip/tooltip.component.d.ts +1 -1
  160. package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +1 -1
  161. package/lib/overlay/modal/dialog/dialog.component.d.ts +1 -1
  162. package/lib/overlay/modal/modal.component.d.ts +1 -1
  163. package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +1 -1
  164. package/lib/overlay/overlay-outlet.component.d.ts +2 -2
  165. package/lib/overlay/overlay.directive.d.ts +1 -1
  166. package/lib/overlay/overlay.service.d.ts +1 -1
  167. package/lib/overlay/toast/toast-action.component.d.ts +1 -1
  168. package/lib/overlay/toast/toast.component.d.ts +1 -1
  169. package/lib/size/size.directive.d.ts +1 -1
  170. package/lib/table/simple-table/coordinate-helper.d.ts +3 -3
  171. package/lib/table/simple-table/simple-table-cell.component.d.ts +1 -1
  172. package/lib/table/simple-table/simple-table-header-cell.component.d.ts +1 -1
  173. package/lib/table/simple-table/simple-table-row.component.d.ts +1 -1
  174. package/lib/table/simple-table/simple-table.component.d.ts +1 -1
  175. package/lib/table/table/table/table.component.d.ts +2 -2
  176. package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +3 -3
  177. package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +2 -2
  178. package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +1 -1
  179. package/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.d.ts +1 -1
  180. package/lib/table/table/table-search/table-search.component.d.ts +1 -1
  181. package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +2 -2
  182. package/lib/visibility/visibility.directive.d.ts +1 -1
  183. package/lib/visualization/chart/chart-scaling.d.ts +16 -16
  184. package/lib/visualization/chart/chart.component.d.ts +2 -2
  185. package/lib/visualization/data-table/data-table-cell.component.d.ts +1 -1
  186. package/lib/visualization/data-table/data-table-header-cell.component.d.ts +1 -1
  187. package/lib/visualization/data-table/data-table-row.component.d.ts +1 -1
  188. package/lib/visualization/data-table/data-table.component.d.ts +1 -1
  189. package/lib/visualization/donut/donut.component.d.ts +1 -1
  190. package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +1 -1
  191. package/lib/visualization/highlight/highlight.component.d.ts +1 -1
  192. package/lib/visualization/intervals.d.ts +2 -2
  193. package/lib/visualization/issue/issue.component.d.ts +1 -1
  194. package/lib/visualization/legend-item/legend-item.component.d.ts +1 -1
  195. package/lib/visualization/metric/metric.component.d.ts +1 -1
  196. package/lib/visualization/mini-pie/mini-pie.component.d.ts +1 -1
  197. package/lib/visualization/progress/progress.component.d.ts +1 -1
  198. package/lib/visualization/stacked-column/stacked-column.component.d.ts +2 -2
  199. package/lib/visualization/stacked-row/stacked-row.component.d.ts +1 -1
  200. package/lib/visualization/stacked-row/stacked-row.helpers.d.ts +5 -5
  201. package/lib/visualization/time-series/time-series.component.d.ts +2 -2
  202. package/lib/visualization/time-series/time-series.helpers.d.ts +4 -4
  203. package/lib/visualization/trend/trend.component.d.ts +1 -1
  204. package/lib/visualization/zero-state/zero-state.component.d.ts +1 -1
  205. package/package.json +1 -1
@@ -13,24 +13,6 @@ import * as i5 from "../../icon/icon.component";
13
13
  import * as i6 from "../input-label/input-label.component";
14
14
  import * as i7 from "../../overlay/overlay.directive";
15
15
  export class DateComponent extends InputLabelComponent {
16
- constructor(cdr, host) {
17
- super();
18
- this.cdr = cdr;
19
- this.host = host;
20
- this.min = CalendarComponent.defaultMin;
21
- this.max = CalendarComponent.defaultMax;
22
- this.placeholder = 'Select date';
23
- this.disabled = false;
24
- this.size = 'medium';
25
- this.showClearButton = true;
26
- this.showTodayButton = true;
27
- this.activeYearMonth = timeMonth.floor(new Date());
28
- this.open$ = new BehaviorSubject(false);
29
- this.valueChange = new EventEmitter();
30
- this.inputText = '';
31
- this.hasFocus = false;
32
- this.datePipe = new DatePipe();
33
- }
34
16
  set value(v) {
35
17
  if (this._value?.getTime() === v?.getTime())
36
18
  return;
@@ -51,6 +33,24 @@ export class DateComponent extends InputLabelComponent {
51
33
  get open() {
52
34
  return this.open$.getValue();
53
35
  }
36
+ constructor(cdr, host) {
37
+ super();
38
+ this.cdr = cdr;
39
+ this.host = host;
40
+ this.min = CalendarComponent.defaultMin;
41
+ this.max = CalendarComponent.defaultMax;
42
+ this.placeholder = 'Select date';
43
+ this.disabled = false;
44
+ this.size = 'medium';
45
+ this.showClearButton = true;
46
+ this.showTodayButton = true;
47
+ this.activeYearMonth = timeMonth.floor(new Date());
48
+ this.open$ = new BehaviorSubject(false);
49
+ this.valueChange = new EventEmitter();
50
+ this.inputText = '';
51
+ this.hasFocus = false;
52
+ this.datePipe = new DatePipe();
53
+ }
54
54
  // The callout renders with isModal=false (no full-viewport scrim) and can't
55
55
  // self-close on outside clicks. Any overlay layer — including sibling
56
56
  // overlays like the month/year selects — counts as "inside" the picker.
@@ -150,9 +150,9 @@ export class DateComponent extends InputLabelComponent {
150
150
  this.cdr.markForCheck();
151
151
  }
152
152
  }
153
- DateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
154
- DateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateComponent, selector: "riv-date", inputs: { min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled", size: "size", showClearButton: "showClearButton", showTodayButton: "showTodayButton", open: "open" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:mousedown": "onDocumentMouseDown($event.target)" } }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <div\n #trigger\n class=\"trigger\"\n [class.xsmall]=\"size === 'xsmall'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.disabled]=\"disabled\"\n >\n <input\n #input\n class=\"value\"\n [placeholder]=\"placeholder\"\n [value]=\"inputText\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-expanded]=\"open$ | async\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-autocomplete=\"none\"\n (input)=\"onInputChange(input.value)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus()\"\n (keydown.enter)=\"input.blur(); open$.next(false); $event.preventDefault()\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button\n class=\"chevron\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"toggleCalendar()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"(open$ | async) ? 'Close calendar' : 'Open calendar'\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n</riv-input-label>\n<ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false)\"\n >\n <div (mousedown)=\"$event.preventDefault()\">\n <header *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </header>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectableMin]=\"min\"\n [selectableMax]=\"max\"\n [selectedValue]=\"previewValue ?? value\"\n (dateSelect)=\"onDateSelect($event); input.blur()\"\n ></riv-calendar>\n </div>\n <footer *ngIf=\"showClearButton || showTodayButton\" class=\"buttons\">\n <button\n *ngIf=\"showClearButton\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"clearValue(); input.blur()\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n *ngIf=\"showTodayButton\"\n class=\"today\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'basic'\"\n [disabled]=\"!isTodaySelectable\"\n (click)=\"selectToday(); input.blur()\"\n type=\"button\"\n >\n Today\n </button>\n </footer>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);padding-left:var(--size-small);position:relative}.trigger:focus-within{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger.disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre;border:none;background:transparent;outline:none;width:100%}.value::placeholder{color:var(--type-light-disabled)}.value:disabled{color:var(--type-light-disabled)}.trigger.xsmall .value{font:var(--input-small);padding:var(--size-xsmall) 0}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.trigger.xlarge .value{font:var(--input-large);padding:var(--size-large) var(--size-small)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5);border:none;background:transparent;cursor:pointer;color:var(--type-light-high-contrast)}.chevron:disabled{color:var(--type-light-disabled);cursor:not-allowed}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{padding:var(--size-xlarge)}.buttons{padding:0 var(--size-xlarge) var(--size-xlarge);display:flex;justify-content:space-between}.buttons .today{margin-left:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalendarComponent, selector: "riv-calendar", inputs: ["activeYearMonth", "displayMin", "displayMax", "selectableMin", "selectableMax", "omitRange", "selectedValue"], outputs: ["activeYearMonthChange", "dateSelect"] }, { kind: "component", type: i4.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "directive", type: i7.OverlayDirective, selector: "[riv-overlay]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateComponent, decorators: [{
153
+ DateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
154
+ DateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateComponent, selector: "riv-date", inputs: { min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled", size: "size", showClearButton: "showClearButton", showTodayButton: "showTodayButton", open: "open" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:mousedown": "onDocumentMouseDown($event.target)" } }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <div\n #trigger\n class=\"trigger\"\n [class.xsmall]=\"size === 'xsmall'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.disabled]=\"disabled\"\n >\n <input\n #input\n class=\"value\"\n [placeholder]=\"placeholder\"\n [value]=\"inputText\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-expanded]=\"open$ | async\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-autocomplete=\"none\"\n (input)=\"onInputChange(input.value)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus()\"\n (keydown.enter)=\"input.blur(); open$.next(false); $event.preventDefault()\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button\n class=\"chevron\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"toggleCalendar()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"(open$ | async) ? 'Close calendar' : 'Open calendar'\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n</riv-input-label>\n<ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false)\"\n >\n <div (mousedown)=\"$event.preventDefault()\">\n <header *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </header>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectableMin]=\"min\"\n [selectableMax]=\"max\"\n [selectedValue]=\"previewValue ?? value\"\n (dateSelect)=\"onDateSelect($event); input.blur()\"\n ></riv-calendar>\n </div>\n <footer *ngIf=\"showClearButton || showTodayButton\" class=\"buttons\">\n <button\n *ngIf=\"showClearButton\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"clearValue(); input.blur()\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n *ngIf=\"showTodayButton\"\n class=\"today\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'basic'\"\n [disabled]=\"!isTodaySelectable\"\n (click)=\"selectToday(); input.blur()\"\n type=\"button\"\n >\n Today\n </button>\n </footer>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);padding-left:var(--size-small);position:relative}.trigger:focus-within{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger.disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre;border:none;background:transparent;outline:none;width:100%}.value::placeholder{color:var(--type-light-disabled)}.value:disabled{color:var(--type-light-disabled)}.trigger.xsmall .value{font:var(--input-small);padding:var(--size-xsmall) 0}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.trigger.xlarge .value{font:var(--input-large);padding:var(--size-large) var(--size-small)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5);border:none;background:transparent;cursor:pointer;color:var(--type-light-high-contrast)}.chevron:disabled{color:var(--type-light-disabled);cursor:not-allowed}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{padding:var(--size-xlarge)}.buttons{padding:0 var(--size-xlarge) var(--size-xlarge);display:flex;justify-content:space-between}.buttons .today{margin-left:auto}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalendarComponent, selector: "riv-calendar", inputs: ["activeYearMonth", "displayMin", "displayMax", "selectableMin", "selectableMax", "omitRange", "selectedValue"], outputs: ["activeYearMonthChange", "dateSelect"] }, { kind: "component", type: i4.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "directive", type: i7.OverlayDirective, selector: "[riv-overlay]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateComponent, decorators: [{
156
156
  type: Component,
157
157
  args: [{ selector: 'riv-date', changeDetection: ChangeDetectionStrategy.OnPush, template: "<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <div\n #trigger\n class=\"trigger\"\n [class.xsmall]=\"size === 'xsmall'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.disabled]=\"disabled\"\n >\n <input\n #input\n class=\"value\"\n [placeholder]=\"placeholder\"\n [value]=\"inputText\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-expanded]=\"open$ | async\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-autocomplete=\"none\"\n (input)=\"onInputChange(input.value)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus()\"\n (keydown.enter)=\"input.blur(); open$.next(false); $event.preventDefault()\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button\n class=\"chevron\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"toggleCalendar()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"(open$ | async) ? 'Close calendar' : 'Open calendar'\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n</riv-input-label>\n<ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false)\"\n >\n <div (mousedown)=\"$event.preventDefault()\">\n <header *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </header>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectableMin]=\"min\"\n [selectableMax]=\"max\"\n [selectedValue]=\"previewValue ?? value\"\n (dateSelect)=\"onDateSelect($event); input.blur()\"\n ></riv-calendar>\n </div>\n <footer *ngIf=\"showClearButton || showTodayButton\" class=\"buttons\">\n <button\n *ngIf=\"showClearButton\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"clearValue(); input.blur()\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n *ngIf=\"showTodayButton\"\n class=\"today\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'basic'\"\n [disabled]=\"!isTodaySelectable\"\n (click)=\"selectToday(); input.blur()\"\n type=\"button\"\n >\n Today\n </button>\n </footer>\n </div>\n </riv-callout>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);padding-left:var(--size-small);position:relative}.trigger:focus-within{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger.disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre;border:none;background:transparent;outline:none;width:100%}.value::placeholder{color:var(--type-light-disabled)}.value:disabled{color:var(--type-light-disabled)}.trigger.xsmall .value{font:var(--input-small);padding:var(--size-xsmall) 0}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.trigger.xlarge .value{font:var(--input-large);padding:var(--size-large) var(--size-small)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5);border:none;background:transparent;cursor:pointer;color:var(--type-light-high-contrast)}.chevron:disabled{color:var(--type-light-disabled);cursor:not-allowed}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{padding:var(--size-xlarge)}.buttons{padding:0 var(--size-xlarge) var(--size-xlarge);display:flex;justify-content:space-between}.buttons .today{margin-left:auto}\n"] }]
158
158
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { min: [{
@@ -216,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
216
216
  }
217
217
  DateComponent.isValidDate = isValidDate;
218
218
  })(DateComponent || (DateComponent = {}));
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9kYXRlL2RhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvZGF0ZS9kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQVEzRSxNQUFNLE9BQU8sYUFBYyxTQUFRLG1CQUFtQjtJQTBEcEQsWUFDbUIsR0FBc0IsRUFDdEIsSUFBNkI7UUFFOUMsS0FBSyxFQUFFLENBQUM7UUFIUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUF5QjtRQTFEaEQsUUFBRyxHQUFTLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUd6QyxRQUFHLEdBQVMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBaUJ6QyxnQkFBVyxHQUFXLGFBQWEsQ0FBQztRQUdwQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFNBQUksR0FBdUIsUUFBUSxDQUFDO1FBR3BDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBR2hDLG9C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QUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFekUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSTtZQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUM7WUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUc7WUFDdEIsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFqQmUsdUJBQVMsWUFpQnhCLENBQUE7SUFFRCxTQUFnQixXQUFXLENBQUMsSUFBVSxFQUFFLEdBQVMsRUFBRSxHQUFTO1FBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBSGUseUJBQVcsY0FHMUIsQ0FBQTtBQUNILENBQUMsRUFuQ2dCLGFBQWEsS0FBYixhQUFhLFFBbUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0aW1lRGF5LCB0aW1lTW9udGggfSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvZGF0ZS5waXBlJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1sYWJlbC9pbnB1dC1sYWJlbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtZGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRMYWJlbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIG1pbjogRGF0ZSA9IENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNaW47XG5cbiAgQElucHV0KClcbiAgbWF4OiBEYXRlID0gQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1heDtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodjogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLl92YWx1ZT8uZ2V0VGltZSgpID09PSB2Py5nZXRUaW1lKCkpIHJldHVybjtcbiAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgLy8gU2tpcCB0ZXh0IHN5bmMgd2hpbGUgdHlwaW5nIHNvIHdlIGRvbid0IHN0b21wIHRoZSB1c2VyJ3MgaW4tcHJvZ3Jlc3MgaW5wdXQuXG4gICAgaWYgKCF0aGlzLmhhc0ZvY3VzKSB0aGlzLmlucHV0VGV4dCA9IHYgPyB0aGlzLmZvcm1hdFZhbHVlKHYpIDogJyc7XG4gICAgaWYgKHYpIHRoaXMuc2V0QWN0aXZlTW9udGgodik7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBwcml2YXRlIF92YWx1ZT86IERhdGU7XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgZGF0ZSc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzaXplOiBEYXRlQ29tcG9uZW50LlNpemUgPSAnbWVkaXVtJztcblxuICBASW5wdXQoKVxuICBzaG93Q2xlYXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dUb2RheUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJylcbiAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICBhY3RpdmVZZWFyTW9udGggPSB0aW1lTW9udGguZmxvb3IobmV3IERhdGUoKSk7XG5cbiAgcmVhZG9ubHkgb3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgQElucHV0KClcbiAgc2V0IG9wZW4odjogYm9vbGVhbikge1xuICAgIHRoaXMub3BlbiQubmV4dCh2KTtcbiAgfVxuICBnZXQgb3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgdW5kZWZpbmVkPigpO1xuXG4gIGlucHV0VGV4dDogc3RyaW5nID0gJyc7XG4gIHByZXZpZXdWYWx1ZT86IERhdGU7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLy8gVGhlIGNhbGxvdXQgcmVuZGVycyB3aXRoIGlzTW9kYWw9ZmFsc2UgKG5vIGZ1bGwtdmlld3BvcnQgc2NyaW0pIGFuZCBjYW4ndFxuICAvLyBzZWxmLWNsb3NlIG9uIG91dHNpZGUgY2xpY2tzLiBBbnkgb3ZlcmxheSBsYXllciDigJQgaW5jbHVkaW5nIHNpYmxpbmdcbiAgLy8gb3ZlcmxheXMgbGlrZSB0aGUgbW9udGgveWVhciBzZWxlY3RzIOKAlCBjb3VudHMgYXMgXCJpbnNpZGVcIiB0aGUgcGlja2VyLlxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25Eb2N1bWVudE1vdXNlRG93bih0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcGVuJC5nZXRWYWx1ZSgpIHx8ICEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnLmNhbGxvdXQsIC5zY3JpbSwgLm92ZXJsYXktY29udGFpbmVyJykpIHJldHVybjtcbiAgICB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1pdCh1bmRlZmluZWQpO1xuICAgIHRoaXMub3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBzZWxlY3RUb2RheSgpOiB2b2lkIHtcbiAgICBjb25zdCB0b2RheSA9IHRpbWVEYXkuZmxvb3IobmV3IERhdGUoKSk7XG4gICAgaWYgKCFEYXRlQ29tcG9uZW50LmlzVmFsaWREYXRlKHRvZGF5LCB0aGlzLm1pbiwgdGhpcy5tYXgpKSByZXR1cm47XG4gICAgdGhpcy5jb21taXQodG9kYXkpO1xuICAgIHRoaXMub3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBnZXQgaXNUb2RheVNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERhdGVDb21wb25lbnQuaXNWYWxpZERhdGUoXG4gICAgICB0aW1lRGF5LmZsb29yKG5ldyBEYXRlKCkpLFxuICAgICAgdGhpcy5taW4sXG4gICAgICB0aGlzLm1heCxcbiAgICApO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFRleHQgPSB2YWx1ZTtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlSW5wdXQodmFsdWUpO1xuICAgIHRoaXMucHJldmlld1ZhbHVlID0gcGFyc2VkO1xuICAgIGlmIChwYXJzZWQpIHRoaXMuc2V0QWN0aXZlTW9udGgocGFyc2VkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uSW5wdXRCbHVyKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaGFzRm9jdXMgPSBmYWxzZTtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlSW5wdXQodGhpcy5pbnB1dFRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHRoaXMuY29tbWl0KHBhcnNlZCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pbnB1dFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmNvbW1pdCh1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbnZhbGlkIHRleHQg4oCUIHJldmVydCB0byB3aGF0ZXZlciB0aGUgY29tbWl0dGVkIHZhbHVlIHdhcy5cbiAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5fdmFsdWUgPyB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3ZhbHVlKSA6ICcnO1xuICAgIH1cbiAgICB0aGlzLnByZXZpZXdWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAvLyBDbG9zZSBvbiBrZXlib2FyZC1kcml2ZW4gZm9jdXMgY2hhbmdlcyAoVGFiIG91dCkuIFN0YXkgb3BlbiBpZiBmb2N1c1xuICAgIC8vIG1vdmVkIGludG8gYSBuZXN0ZWQgb3ZlcmxheSAoZS5nLiB0aGUgY2FsZW5kYXIncyBtb250aC95ZWFyIHNlbGVjdCkuXG4gICAgLy8gTW91c2UgY2xpY2tzIGluc2lkZSB0aGUgY2FsZW5kYXIgcHJldmVudERlZmF1bHQgbW91c2Vkb3duIHNvIHRoaXNcbiAgICAvLyBoYW5kbGVyIG5ldmVyIHJ1bnMgZm9yIHRoZW0uXG4gICAgY29uc3QgbmV4dFRhcmdldCA9IGV2ZW50Py5yZWxhdGVkVGFyZ2V0O1xuICAgIGNvbnN0IHN0YXlPcGVuID1cbiAgICAgIG5leHRUYXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG4gICAgICAodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMobmV4dFRhcmdldCkgfHxcbiAgICAgICAgISFuZXh0VGFyZ2V0LmNsb3Nlc3QoJy5jYWxsb3V0LCAuc2NyaW0sIC5vdmVybGF5LWNvbnRhaW5lcicpKTtcbiAgICBpZiAoIXN0YXlPcGVuKSB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25EYXRlU2VsZWN0KGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1pdCh0aW1lRGF5LmZsb29yKGRhdGUpKTtcbiAgICB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMub3BlbiQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbiQubmV4dCghdGhpcy5vcGVuJC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlucHV0KHRleHQ6IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IERhdGVDb21wb25lbnQucGFyc2VEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZWQgJiYgRGF0ZUNvbXBvbmVudC5pc1ZhbGlkRGF0ZShwYXJzZWQsIHRoaXMubWluLCB0aGlzLm1heClcbiAgICAgID8gdGltZURheS5mbG9vcihwYXJzZWQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlTW9udGgoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG1vbnRoID0gdGltZU1vbnRoLmZsb29yKGRhdGUpO1xuICAgIGlmIChtb250aC5nZXRUaW1lKCkgIT09IHRoaXMuYWN0aXZlWWVhck1vbnRoLmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5hY3RpdmVZZWFyTW9udGggPSBtb250aDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdChuZXh0OiBEYXRlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgdW5jaGFuZ2VkID0gbmV4dD8uZ2V0VGltZSgpID09PSB0aGlzLl92YWx1ZT8uZ2V0VGltZSgpO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV4dDtcbiAgICB0aGlzLmlucHV0VGV4dCA9IG5leHQgPyB0aGlzLmZvcm1hdFZhbHVlKG5leHQpIDogJyc7XG4gICAgdGhpcy5wcmV2aWV3VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKG5leHQpIHRoaXMuc2V0QWN0aXZlTW9udGgobmV4dCk7XG4gICAgaWYgKCF1bmNoYW5nZWQpIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIERhdGVDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgU2l6ZXMgPSBbXG4gICAgJ3hzbWFsbCcsXG4gICAgJ3NtYWxsJyxcbiAgICAnbWVkaXVtJyxcbiAgICAnbGFyZ2UnLFxuICAgICd4bGFyZ2UnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTaXplcylbbnVtYmVyXTtcblxuICAvLyBBY2NlcHRzIE1NL0REL1lZWVksIE0vRC9ZWSwgYW5kIFlZWVktTU0tREQgd2l0aCAvLCAtLCBvciAuIHNlcGFyYXRvcnMuXG4gIC8vIEEgNC1kaWdpdCBsZWFkaW5nIHNlZ21lbnQgaXMgdHJlYXRlZCBhcyB5ZWFyLlxuICBleHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKGlucHV0OiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnRyaW0oKS5zcGxpdCgvWy8uLV0vKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbnVtcyA9IHBhcnRzLm1hcChwID0+IHBhcnNlSW50KHAsIDEwKSk7XG4gICAgaWYgKG51bXMuc29tZShpc05hTikpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgW3llYXIsIG1vbnRoLCBkYXldID1cbiAgICAgIHBhcnRzWzBdLmxlbmd0aCA9PT0gNCA/IG51bXMgOiBbbnVtc1syXSwgbnVtc1swXSwgbnVtc1sxXV07XG4gICAgaWYgKHBhcnRzWzBdLmxlbmd0aCAhPT0gNCAmJiB5ZWFyIDwgMTAwKSB5ZWFyICs9IHllYXIgPCA1MCA/IDIwMDAgOiAxOTAwO1xuXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoIC0gMSAmJlxuICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheVxuICAgICAgPyBkYXRlXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRGF0ZShkYXRlOiBEYXRlLCBtaW46IERhdGUsIG1heDogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRpbWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gdGltZSA+PSBtaW4uZ2V0VGltZSgpICYmIHRpbWUgPD0gbWF4LmdldFRpbWUoKTtcbiAgfVxufVxuIiwiPHJpdi1pbnB1dC1sYWJlbFxuICBbbGFiZWxdPVwibGFiZWxcIlxuICBbaGVscF09XCJoZWxwXCJcbiAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgW3N0YXRlXT1cInN0YXRlXCJcbiAgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIlxuICBbbGFiZWxBY3Rpb25UZXh0XT1cImxhYmVsQWN0aW9uVGV4dFwiXG4gIChsYWJlbEFjdGlvbik9XCJsYWJlbEFjdGlvbi5lbWl0KCRldmVudClcIlxuPlxuICA8ZGl2XG4gICAgI3RyaWdnZXJcbiAgICBjbGFzcz1cInRyaWdnZXJcIlxuICAgIFtjbGFzcy54c21hbGxdPVwic2l6ZSA9PT0gJ3hzbWFsbCdcIlxuICAgIFtjbGFzcy5zbWFsbF09XCJzaXplID09PSAnc21hbGwnXCJcbiAgICBbY2xhc3MubGFyZ2VdPVwic2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgW2NsYXNzLnhsYXJnZV09XCJzaXplID09PSAneGxhcmdlJ1wiXG4gICAgW2NsYXNzLndhcm5pbmddPVwic3RhdGUgPT09ICd3YXJuaW5nJ1wiXG4gICAgW2NsYXNzLmVycm9yXT1cInN0YXRlID09PSAnZXJyb3InXCJcbiAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICAjaW5wdXRcbiAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFt2YWx1ZV09XCJpbnB1dFRleHRcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWwgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW4kIHwgYXN5bmNcIlxuICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCJcbiAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKGlucHV0LnZhbHVlKVwiXG4gICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoKVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJpbnB1dC5ibHVyKCk7IG9wZW4kLm5leHQoZmFsc2UpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiY2hldnJvblwiXG4gICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihvcGVuJCB8IGFzeW5jKSA/ICdDbG9zZSBjYWxlbmRhcicgOiAnT3BlbiBjYWxlbmRhcidcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICA+XG4gICAgICA8cml2LWljb24gW25hbWVdPVwiJ0NhbGVuZGFyJ1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3Jpdi1pbnB1dC1sYWJlbD5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJvcGVuJCB8IGFzeW5jXCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwidHJpZ2dlclwiXG4gICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAndG9wLWxlZnQnLFxuICAgICAgJ3RvcC1yaWdodCcsXG4gICAgICAnYm90dG9tLXJpZ2h0JyxcbiAgICAgICdib3R0b20tbGVmdCdcbiAgICBdXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgIChjbG9zZSk9XCJvcGVuJC5uZXh0KGZhbHNlKVwiXG4gID5cbiAgICA8ZGl2IChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgPHJpdi1jYWxlbmRhclxuICAgICAgICAgIFthY3RpdmVZZWFyTW9udGhdPVwiYWN0aXZlWWVhck1vbnRoXCJcbiAgICAgICAgICAoYWN0aXZlWWVhck1vbnRoQ2hhbmdlKT1cImFjdGl2ZVllYXJNb250aCA9ICRldmVudFwiXG4gICAgICAgICAgW2Rpc3BsYXlNaW5dPVwibWluXCJcbiAgICAgICAgICBbZGlzcGxheU1heF09XCJtYXhcIlxuICAgICAgICAgIFtzZWxlY3RhYmxlTWluXT1cIm1pblwiXG4gICAgICAgICAgW3NlbGVjdGFibGVNYXhdPVwibWF4XCJcbiAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJwcmV2aWV3VmFsdWUgPz8gdmFsdWVcIlxuICAgICAgICAgIChkYXRlU2VsZWN0KT1cIm9uRGF0ZVNlbGVjdCgkZXZlbnQpOyBpbnB1dC5ibHVyKClcIlxuICAgICAgICA+PC9yaXYtY2FsZW5kYXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmb290ZXIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b24gfHwgc2hvd1RvZGF5QnV0dG9uXCIgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoKTsgaW5wdXQuYmx1cigpXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIENsZWFyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93VG9kYXlCdXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwidG9kYXlcIlxuICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFt2YXJpYW50XT1cIidiYXNpYydcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNUb2RheVNlbGVjdGFibGVcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUb2RheSgpOyBpbnB1dC5ibHVyKClcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgVG9kYXlcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9kYXRlL2RhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvZGF0ZS9kYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQVEzRSxNQUFNLE9BQU8sYUFBYyxTQUFRLG1CQUFtQjtJQU9wRCxJQUNJLEtBQUssQ0FBQyxDQUFtQjtRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRTtZQUFFLE9BQU87UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFD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SUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFekUsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSTtZQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxHQUFHLENBQUM7WUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUc7WUFDdEIsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFqQmUsdUJBQVMsWUFpQnhCLENBQUE7SUFFRCxTQUFnQixXQUFXLENBQUMsSUFBVSxFQUFFLEdBQVMsRUFBRSxHQUFTO1FBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBSGUseUJBQVcsY0FHMUIsQ0FBQTtBQUNILENBQUMsRUFuQ2dCLGFBQWEsS0FBYixhQUFhLFFBbUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0aW1lRGF5LCB0aW1lTW9udGggfSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvZGF0ZS5waXBlJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1sYWJlbC9pbnB1dC1sYWJlbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtZGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRMYWJlbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIG1pbjogRGF0ZSA9IENhbGVuZGFyQ29tcG9uZW50LmRlZmF1bHRNaW47XG5cbiAgQElucHV0KClcbiAgbWF4OiBEYXRlID0gQ2FsZW5kYXJDb21wb25lbnQuZGVmYXVsdE1heDtcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodjogRGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0aGlzLl92YWx1ZT8uZ2V0VGltZSgpID09PSB2Py5nZXRUaW1lKCkpIHJldHVybjtcbiAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgLy8gU2tpcCB0ZXh0IHN5bmMgd2hpbGUgdHlwaW5nIHNvIHdlIGRvbid0IHN0b21wIHRoZSB1c2VyJ3MgaW4tcHJvZ3Jlc3MgaW5wdXQuXG4gICAgaWYgKCF0aGlzLmhhc0ZvY3VzKSB0aGlzLmlucHV0VGV4dCA9IHYgPyB0aGlzLmZvcm1hdFZhbHVlKHYpIDogJyc7XG4gICAgaWYgKHYpIHRoaXMuc2V0QWN0aXZlTW9udGgodik7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBwcml2YXRlIF92YWx1ZT86IERhdGU7XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgZGF0ZSc7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzaXplOiBEYXRlQ29tcG9uZW50LlNpemUgPSAnbWVkaXVtJztcblxuICBASW5wdXQoKVxuICBzaG93Q2xlYXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dUb2RheUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJylcbiAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICBhY3RpdmVZZWFyTW9udGggPSB0aW1lTW9udGguZmxvb3IobmV3IERhdGUoKSk7XG5cbiAgcmVhZG9ubHkgb3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgQElucHV0KClcbiAgc2V0IG9wZW4odjogYm9vbGVhbikge1xuICAgIHRoaXMub3BlbiQubmV4dCh2KTtcbiAgfVxuICBnZXQgb3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgdW5kZWZpbmVkPigpO1xuXG4gIGlucHV0VGV4dDogc3RyaW5nID0gJyc7XG4gIHByZXZpZXdWYWx1ZT86IERhdGU7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLy8gVGhlIGNhbGxvdXQgcmVuZGVycyB3aXRoIGlzTW9kYWw9ZmFsc2UgKG5vIGZ1bGwtdmlld3BvcnQgc2NyaW0pIGFuZCBjYW4ndFxuICAvLyBzZWxmLWNsb3NlIG9uIG91dHNpZGUgY2xpY2tzLiBBbnkgb3ZlcmxheSBsYXllciDigJQgaW5jbHVkaW5nIHNpYmxpbmdcbiAgLy8gb3ZlcmxheXMgbGlrZSB0aGUgbW9udGgveWVhciBzZWxlY3RzIOKAlCBjb3VudHMgYXMgXCJpbnNpZGVcIiB0aGUgcGlja2VyLlxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25Eb2N1bWVudE1vdXNlRG93bih0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcGVuJC5nZXRWYWx1ZSgpIHx8ICEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnLmNhbGxvdXQsIC5zY3JpbSwgLm92ZXJsYXktY29udGFpbmVyJykpIHJldHVybjtcbiAgICB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1pdCh1bmRlZmluZWQpO1xuICAgIHRoaXMub3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBzZWxlY3RUb2RheSgpOiB2b2lkIHtcbiAgICBjb25zdCB0b2RheSA9IHRpbWVEYXkuZmxvb3IobmV3IERhdGUoKSk7XG4gICAgaWYgKCFEYXRlQ29tcG9uZW50LmlzVmFsaWREYXRlKHRvZGF5LCB0aGlzLm1pbiwgdGhpcy5tYXgpKSByZXR1cm47XG4gICAgdGhpcy5jb21taXQodG9kYXkpO1xuICAgIHRoaXMub3BlbiQubmV4dChmYWxzZSk7XG4gIH1cblxuICBnZXQgaXNUb2RheVNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERhdGVDb21wb25lbnQuaXNWYWxpZERhdGUoXG4gICAgICB0aW1lRGF5LmZsb29yKG5ldyBEYXRlKCkpLFxuICAgICAgdGhpcy5taW4sXG4gICAgICB0aGlzLm1heCxcbiAgICApO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFRleHQgPSB2YWx1ZTtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlSW5wdXQodmFsdWUpO1xuICAgIHRoaXMucHJldmlld1ZhbHVlID0gcGFyc2VkO1xuICAgIGlmIChwYXJzZWQpIHRoaXMuc2V0QWN0aXZlTW9udGgocGFyc2VkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uSW5wdXRCbHVyKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaGFzRm9jdXMgPSBmYWxzZTtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlSW5wdXQodGhpcy5pbnB1dFRleHQpO1xuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHRoaXMuY29tbWl0KHBhcnNlZCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pbnB1dFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmNvbW1pdCh1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbnZhbGlkIHRleHQg4oCUIHJldmVydCB0byB3aGF0ZXZlciB0aGUgY29tbWl0dGVkIHZhbHVlIHdhcy5cbiAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5fdmFsdWUgPyB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3ZhbHVlKSA6ICcnO1xuICAgIH1cbiAgICB0aGlzLnByZXZpZXdWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAvLyBDbG9zZSBvbiBrZXlib2FyZC1kcml2ZW4gZm9jdXMgY2hhbmdlcyAoVGFiIG91dCkuIFN0YXkgb3BlbiBpZiBmb2N1c1xuICAgIC8vIG1vdmVkIGludG8gYSBuZXN0ZWQgb3ZlcmxheSAoZS5nLiB0aGUgY2FsZW5kYXIncyBtb250aC95ZWFyIHNlbGVjdCkuXG4gICAgLy8gTW91c2UgY2xpY2tzIGluc2lkZSB0aGUgY2FsZW5kYXIgcHJldmVudERlZmF1bHQgbW91c2Vkb3duIHNvIHRoaXNcbiAgICAvLyBoYW5kbGVyIG5ldmVyIHJ1bnMgZm9yIHRoZW0uXG4gICAgY29uc3QgbmV4dFRhcmdldCA9IGV2ZW50Py5yZWxhdGVkVGFyZ2V0O1xuICAgIGNvbnN0IHN0YXlPcGVuID1cbiAgICAgIG5leHRUYXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG4gICAgICAodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMobmV4dFRhcmdldCkgfHxcbiAgICAgICAgISFuZXh0VGFyZ2V0LmNsb3Nlc3QoJy5jYWxsb3V0LCAuc2NyaW0sIC5vdmVybGF5LWNvbnRhaW5lcicpKTtcbiAgICBpZiAoIXN0YXlPcGVuKSB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25EYXRlU2VsZWN0KGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1pdCh0aW1lRGF5LmZsb29yKGRhdGUpKTtcbiAgICB0aGlzLm9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzRm9jdXMgPSB0cnVlO1xuICAgIHRoaXMub3BlbiQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbiQubmV4dCghdGhpcy5vcGVuJC5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VmFsdWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlucHV0KHRleHQ6IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IERhdGVDb21wb25lbnQucGFyc2VEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZWQgJiYgRGF0ZUNvbXBvbmVudC5pc1ZhbGlkRGF0ZShwYXJzZWQsIHRoaXMubWluLCB0aGlzLm1heClcbiAgICAgID8gdGltZURheS5mbG9vcihwYXJzZWQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aXZlTW9udGgoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IG1vbnRoID0gdGltZU1vbnRoLmZsb29yKGRhdGUpO1xuICAgIGlmIChtb250aC5nZXRUaW1lKCkgIT09IHRoaXMuYWN0aXZlWWVhck1vbnRoLmdldFRpbWUoKSkge1xuICAgICAgdGhpcy5hY3RpdmVZZWFyTW9udGggPSBtb250aDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdChuZXh0OiBEYXRlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgdW5jaGFuZ2VkID0gbmV4dD8uZ2V0VGltZSgpID09PSB0aGlzLl92YWx1ZT8uZ2V0VGltZSgpO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV4dDtcbiAgICB0aGlzLmlucHV0VGV4dCA9IG5leHQgPyB0aGlzLmZvcm1hdFZhbHVlKG5leHQpIDogJyc7XG4gICAgdGhpcy5wcmV2aWV3VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKG5leHQpIHRoaXMuc2V0QWN0aXZlTW9udGgobmV4dCk7XG4gICAgaWYgKCF1bmNoYW5nZWQpIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIERhdGVDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgU2l6ZXMgPSBbXG4gICAgJ3hzbWFsbCcsXG4gICAgJ3NtYWxsJyxcbiAgICAnbWVkaXVtJyxcbiAgICAnbGFyZ2UnLFxuICAgICd4bGFyZ2UnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTaXplcylbbnVtYmVyXTtcblxuICAvLyBBY2NlcHRzIE1NL0REL1lZWVksIE0vRC9ZWSwgYW5kIFlZWVktTU0tREQgd2l0aCAvLCAtLCBvciAuIHNlcGFyYXRvcnMuXG4gIC8vIEEgNC1kaWdpdCBsZWFkaW5nIHNlZ21lbnQgaXMgdHJlYXRlZCBhcyB5ZWFyLlxuICBleHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKGlucHV0OiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnRyaW0oKS5zcGxpdCgvWy8uLV0vKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbnVtcyA9IHBhcnRzLm1hcChwID0+IHBhcnNlSW50KHAsIDEwKSk7XG4gICAgaWYgKG51bXMuc29tZShpc05hTikpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgW3llYXIsIG1vbnRoLCBkYXldID1cbiAgICAgIHBhcnRzWzBdLmxlbmd0aCA9PT0gNCA/IG51bXMgOiBbbnVtc1syXSwgbnVtc1swXSwgbnVtc1sxXV07XG4gICAgaWYgKHBhcnRzWzBdLmxlbmd0aCAhPT0gNCAmJiB5ZWFyIDwgMTAwKSB5ZWFyICs9IHllYXIgPCA1MCA/IDIwMDAgOiAxOTAwO1xuXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoIC0gMSAmJlxuICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheVxuICAgICAgPyBkYXRlXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRGF0ZShkYXRlOiBEYXRlLCBtaW46IERhdGUsIG1heDogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRpbWUgPSBkYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gdGltZSA+PSBtaW4uZ2V0VGltZSgpICYmIHRpbWUgPD0gbWF4LmdldFRpbWUoKTtcbiAgfVxufVxuIiwiPHJpdi1pbnB1dC1sYWJlbFxuICBbbGFiZWxdPVwibGFiZWxcIlxuICBbaGVscF09XCJoZWxwXCJcbiAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgW3N0YXRlXT1cInN0YXRlXCJcbiAgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIlxuICBbbGFiZWxBY3Rpb25UZXh0XT1cImxhYmVsQWN0aW9uVGV4dFwiXG4gIChsYWJlbEFjdGlvbik9XCJsYWJlbEFjdGlvbi5lbWl0KCRldmVudClcIlxuPlxuICA8ZGl2XG4gICAgI3RyaWdnZXJcbiAgICBjbGFzcz1cInRyaWdnZXJcIlxuICAgIFtjbGFzcy54c21hbGxdPVwic2l6ZSA9PT0gJ3hzbWFsbCdcIlxuICAgIFtjbGFzcy5zbWFsbF09XCJzaXplID09PSAnc21hbGwnXCJcbiAgICBbY2xhc3MubGFyZ2VdPVwic2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgW2NsYXNzLnhsYXJnZV09XCJzaXplID09PSAneGxhcmdlJ1wiXG4gICAgW2NsYXNzLndhcm5pbmddPVwic3RhdGUgPT09ICd3YXJuaW5nJ1wiXG4gICAgW2NsYXNzLmVycm9yXT1cInN0YXRlID09PSAnZXJyb3InXCJcbiAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICAjaW5wdXRcbiAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFt2YWx1ZV09XCJpbnB1dFRleHRcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWwgfHwgbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW4kIHwgYXN5bmNcIlxuICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCJcbiAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKGlucHV0LnZhbHVlKVwiXG4gICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoKVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJpbnB1dC5ibHVyKCk7IG9wZW4kLm5leHQoZmFsc2UpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiY2hldnJvblwiXG4gICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihvcGVuJCB8IGFzeW5jKSA/ICdDbG9zZSBjYWxlbmRhcicgOiAnT3BlbiBjYWxlbmRhcidcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICA+XG4gICAgICA8cml2LWljb24gW25hbWVdPVwiJ0NhbGVuZGFyJ1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3Jpdi1pbnB1dC1sYWJlbD5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJvcGVuJCB8IGFzeW5jXCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwidHJpZ2dlclwiXG4gICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAndG9wLWxlZnQnLFxuICAgICAgJ3RvcC1yaWdodCcsXG4gICAgICAnYm90dG9tLXJpZ2h0JyxcbiAgICAgICdib3R0b20tbGVmdCdcbiAgICBdXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgIChjbG9zZSk9XCJvcGVuJC5uZXh0KGZhbHNlKVwiXG4gID5cbiAgICA8ZGl2IChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgPHJpdi1jYWxlbmRhclxuICAgICAgICAgIFthY3RpdmVZZWFyTW9udGhdPVwiYWN0aXZlWWVhck1vbnRoXCJcbiAgICAgICAgICAoYWN0aXZlWWVhck1vbnRoQ2hhbmdlKT1cImFjdGl2ZVllYXJNb250aCA9ICRldmVudFwiXG4gICAgICAgICAgW2Rpc3BsYXlNaW5dPVwibWluXCJcbiAgICAgICAgICBbZGlzcGxheU1heF09XCJtYXhcIlxuICAgICAgICAgIFtzZWxlY3RhYmxlTWluXT1cIm1pblwiXG4gICAgICAgICAgW3NlbGVjdGFibGVNYXhdPVwibWF4XCJcbiAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJwcmV2aWV3VmFsdWUgPz8gdmFsdWVcIlxuICAgICAgICAgIChkYXRlU2VsZWN0KT1cIm9uRGF0ZVNlbGVjdCgkZXZlbnQpOyBpbnB1dC5ibHVyKClcIlxuICAgICAgICA+PC9yaXYtY2FsZW5kYXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmb290ZXIgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b24gfHwgc2hvd1RvZGF5QnV0dG9uXCIgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoKTsgaW5wdXQuYmx1cigpXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIENsZWFyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93VG9kYXlCdXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwidG9kYXlcIlxuICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFt2YXJpYW50XT1cIidiYXNpYydcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNUb2RheVNlbGVjdGFibGVcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUb2RheSgpOyBpbnB1dC5ibHVyKClcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgVG9kYXlcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19