@wavemaker/app-ng-runtime 11.14.2-rc.6311 → 11.15.0-1.246

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 (177) hide show
  1. package/build-task/bundles/index.umd.js +13 -2
  2. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
  3. package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
  4. package/build-task/fesm2022/index.mjs +13 -2
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/base/bundles/index.umd.js +271 -128
  7. package/components/base/esm2022/public_api.mjs +2 -2
  8. package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
  9. package/components/base/esm2022/utils/live-utils.mjs +10 -7
  10. package/components/base/esm2022/utils/widget-utils.mjs +8 -1
  11. package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
  12. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
  13. package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
  14. package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
  15. package/components/base/fesm2022/index.mjs +273 -129
  16. package/components/base/fesm2022/index.mjs.map +1 -1
  17. package/components/base/public_api.d.ts +1 -1
  18. package/components/base/utils/autolayout-utils.d.ts +29 -0
  19. package/components/base/utils/widget-utils.d.ts +1 -0
  20. package/components/base/widgets/common/container/container.directive.d.ts +7 -9
  21. package/components/basic/label/bundles/index.umd.js +4 -0
  22. package/components/basic/label/esm2022/label.directive.mjs +5 -1
  23. package/components/basic/label/fesm2022/index.mjs +4 -0
  24. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  25. package/components/basic/search/bundles/index.umd.js +13 -11
  26. package/components/basic/search/esm2022/search.component.mjs +14 -12
  27. package/components/basic/search/fesm2022/index.mjs +13 -11
  28. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  29. package/components/chart/bundles/index.umd.js +2 -2
  30. package/components/chart/esm2022/chart.utils.mjs +3 -3
  31. package/components/chart/fesm2022/index.mjs +2 -2
  32. package/components/chart/fesm2022/index.mjs.map +1 -1
  33. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
  34. package/components/containers/accordion/accordion.directive.d.ts +4 -0
  35. package/components/containers/accordion/bundles/index.umd.js +34 -0
  36. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
  37. package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
  38. package/components/containers/accordion/fesm2022/index.mjs +36 -2
  39. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  40. package/components/containers/tabs/bundles/index.umd.js +34 -0
  41. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
  42. package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
  43. package/components/containers/tabs/fesm2022/index.mjs +36 -2
  44. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  45. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
  46. package/components/containers/tabs/tabs.component.d.ts +5 -1
  47. package/components/containers/wizard/bundles/index.umd.js +46 -2
  48. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
  49. package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
  50. package/components/containers/wizard/fesm2022/index.mjs +48 -4
  51. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  52. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
  53. package/components/containers/wizard/wizard.component.d.ts +1 -0
  54. package/components/data/form/bundles/index.umd.js +28 -1
  55. package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
  56. package/components/data/form/esm2022/form.component.mjs +24 -2
  57. package/components/data/form/esm2022/form.props.mjs +3 -2
  58. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
  59. package/components/data/form/fesm2022/index.mjs +29 -2
  60. package/components/data/form/fesm2022/index.mjs.map +1 -1
  61. package/components/data/form/form.component.d.ts +3 -0
  62. package/components/data/list/bundles/index.umd.js +0 -9
  63. package/components/data/list/esm2022/list-item.directive.mjs +1 -10
  64. package/components/data/list/fesm2022/index.mjs +0 -9
  65. package/components/data/list/fesm2022/index.mjs.map +1 -1
  66. package/components/data/pagination/bundles/index.umd.js +6 -2
  67. package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
  68. package/components/data/pagination/fesm2022/index.mjs +6 -2
  69. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  70. package/components/data/table/bundles/index.umd.js +21 -4
  71. package/components/data/table/esm2022/table.component.mjs +22 -5
  72. package/components/data/table/fesm2022/index.mjs +21 -4
  73. package/components/data/table/fesm2022/index.mjs.map +1 -1
  74. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
  75. package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
  76. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
  77. package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
  78. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  79. package/components/input/checkbox/bundles/index.umd.js +12 -3
  80. package/components/input/checkbox/checkbox.component.d.ts +2 -0
  81. package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
  82. package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
  83. package/components/input/checkbox/fesm2022/index.mjs +12 -3
  84. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  85. package/components/input/checkboxset/bundles/index.umd.js +12 -1
  86. package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
  87. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
  88. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
  89. package/components/input/checkboxset/fesm2022/index.mjs +12 -1
  90. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  91. package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
  92. package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
  93. package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
  94. package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
  95. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
  96. package/components/input/epoch/date/bundles/index.umd.js +4 -3
  97. package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
  98. package/components/input/epoch/date/fesm2022/index.mjs +4 -3
  99. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  100. package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
  101. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
  102. package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
  103. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
  104. package/components/input/file-upload/bundles/index.umd.js +1 -1
  105. package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
  106. package/components/input/file-upload/fesm2022/index.mjs +1 -1
  107. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  108. package/components/input/radioset/bundles/index.umd.js +13 -1
  109. package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
  110. package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
  111. package/components/input/radioset/fesm2022/index.mjs +13 -1
  112. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  113. package/components/input/radioset/radioset.component.d.ts +1 -0
  114. package/components/input/slider/bundles/index.umd.js +86 -16
  115. package/components/input/slider/esm2022/slider.component.mjs +76 -9
  116. package/components/input/slider/esm2022/slider.props.mjs +5 -1
  117. package/components/input/slider/fesm2022/index.mjs +79 -8
  118. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  119. package/components/input/slider/slider.component.d.ts +12 -3
  120. package/components/input/text/bundles/index.umd.js +24 -3
  121. package/components/input/text/esm2022/input-text/input-text.component.mjs +6 -3
  122. package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
  123. package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
  124. package/components/input/text/fesm2022/index.mjs +24 -3
  125. package/components/input/text/fesm2022/index.mjs.map +1 -1
  126. package/components/input/text/input-text/input-text.component.d.ts +4 -0
  127. package/components/input/text/number-locale/number-locale.d.ts +12 -0
  128. package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
  129. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
  130. package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
  131. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  132. package/components/navigation/popover/bundles/index.umd.js +12 -0
  133. package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
  134. package/components/navigation/popover/fesm2022/index.mjs +12 -0
  135. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  136. package/components/navigation/popover/popover.component.d.ts +2 -0
  137. package/components/page/default/bundles/index.umd.js +0 -4
  138. package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
  139. package/components/page/default/fesm2022/index.mjs +0 -4
  140. package/components/page/default/fesm2022/index.mjs.map +1 -1
  141. package/components/page/header/bundles/index.umd.js +4 -3
  142. package/components/page/header/esm2022/header.component.mjs +5 -4
  143. package/components/page/header/fesm2022/index.mjs +4 -3
  144. package/components/page/header/fesm2022/index.mjs.map +1 -1
  145. package/components/page/header/header.component.d.ts +2 -1
  146. package/core/bundles/index.umd.js +90 -6
  147. package/core/enums/enums.d.ts +1 -0
  148. package/core/esm2022/enums/enums.mjs +2 -1
  149. package/core/esm2022/utils/build-utils.mjs +5 -1
  150. package/core/esm2022/utils/utils.mjs +5 -2
  151. package/core/esm2022/utils/watcher.mjs +83 -4
  152. package/core/fesm2022/index.mjs +91 -4
  153. package/core/fesm2022/index.mjs.map +1 -1
  154. package/core/utils/watcher.d.ts +2 -0
  155. package/npm-shrinkwrap.json +2 -2
  156. package/oAuth/esm2022/oAuth.service.mjs +1 -1
  157. package/oAuth/fesm2022/index.mjs.map +1 -1
  158. package/oAuth/oAuth.service.d.ts +1 -1
  159. package/package-lock.json +2 -2
  160. package/package.json +1 -1
  161. package/runtime/base/bundles/index.umd.js +33 -31
  162. package/runtime/base/components/base-prefab.component.d.ts +6 -4
  163. package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
  164. package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
  165. package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
  166. package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
  167. package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
  168. package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
  169. package/runtime/base/fesm2022/index.mjs +34 -31
  170. package/runtime/base/fesm2022/index.mjs.map +1 -1
  171. package/runtime/base/runtime-base.module.d.ts +2 -1
  172. package/runtime/dynamic/app/app.config.d.ts +1 -1
  173. package/runtime/dynamic/bundles/index.umd.js +1 -1
  174. package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
  175. package/runtime/dynamic/fesm2022/index.mjs +2 -2
  176. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  177. package/scripts/datatable/datatable.js +17 -15
@@ -70,6 +70,7 @@ export class DateComponent extends BaseDateTimeComponent {
70
70
  this.dateContainerCls = `app-date-${this.widgetId}`;
71
71
  this._dateOptions.containerClass = `app-date ${this.dateContainerCls}`;
72
72
  this._dateOptions.showWeekNumbers = false;
73
+ this._dateOptions.customTodayClass = 'current-date';
73
74
  this._bsDefaultLoadCheck = true;
74
75
  this.datepattern = this.appDefaults.dateFormat || getDisplayDateTimeFormat(FormWidgetType.DATE);
75
76
  this.updateFormat('datepattern');
@@ -129,9 +130,9 @@ export class DateComponent extends BaseDateTimeComponent {
129
130
  onDatePickerOpen() {
130
131
  this.isOpen = true;
131
132
  this.activeDate = this.bsDataValue ? this.bsDataValue : (this.timeZone ? getMomentLocaleObject(this.timeZone) : new Date());
132
- if (!this.bsDataValue) {
133
- this.hightlightToday(this.activeDate);
134
- }
133
+ // if (!this.bsDataValue) {
134
+ // this.hightlightToday(this.activeDate);
135
+ // }
135
136
  this.updateIMask();
136
137
  if (this.bsDatePickerDirective && (this.dateNotInRange || this.invalidDateTimeFormat)) {
137
138
  this.bsDatePickerDirective._bsValue = null;
@@ -341,4 +342,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
341
342
  type: ViewChild,
342
343
  args: ['dateInput', { read: IMaskDirective }]
343
344
  }] } });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvZGF0ZS9zcmMvZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvZGF0ZS9zcmMvZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWEsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUNILHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLFdBQVcsRUFFWCxjQUFjLEVBQ2QsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3hCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFB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Z0hBQ0EsY0FBYyxvREMxR2xELHM0RkErRUEsNENEN0NjLHVCQUF1QixnUEFBRSxXQUFXLHNNQUFFLGtCQUFrQjs7NEZBU3pELGFBQWE7a0JBWHpCLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLFlBQ3pELFVBQVUsYUFFVDt3QkFDUCxTQUFTLGdCQUFnQixpQkFBaUIsRUFBRSxJQUFJLENBQUM7d0JBQ2pELFNBQVMsZ0JBQWdCLGFBQWEsRUFBRSxJQUFJLENBQUM7d0JBQzdDLGtCQUFrQixlQUFlO3FCQUNwQzs7MEJBd0VJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRO3lDQVJHLHFCQUFxQjtzQkFBaEUsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ2tCLEtBQUs7c0JBQXRELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SU1hc2tEaXJlY3RpdmUsIElNYXNrTW9kdWxlfSBmcm9tICdhbmd1bGFyLWltYXNrJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPcHRpb25hbCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QnNEYXRlcGlja2VyRGlyZWN0aXZlLCBCc0RhdGVwaWNrZXJNb2R1bGV9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQge1xuICAgIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBBcHBEZWZhdWx0cyxcbiAgICBFVkVOVF9MSUZFLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGdldERhdGVPYmosXG4gICAgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0LFxuICAgIGdldEZvcm1hdHRlZERhdGUsXG4gICAgZ2V0TW9tZW50TG9jYWxlT2JqZWN0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7SVdpZGdldENvbmZpZywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWYsIHNldEZvY3VzVHJhcCwgc3R5bGVyfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7QmFzZURhdGVUaW1lQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dC9lcG9jaC9iYXNlLWRhdGUtdGltZSc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vZGF0ZS5wcm9wcyc7XG5pbXBvcnQge3ZhbGlkYXRlVGhlTWFza2VkRGF0ZX0gZnJvbSAnLi9pbWFza1V0aWwnO1xuaW1wb3J0IHtpbmNsdWRlcywgaXNOYU4sIHBhcnNlSW50fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQge0RhdGVUaW1lUGlja2VyQ29tcG9uZW50fSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvaW5wdXQvZXBvY2gvZGF0ZS10aW1lLXBpY2tlclwiO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQ7XG5cbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGUgaW5wdXQtZ3JvdXAnO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tZGF0ZScsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIElNYXNrTW9kdWxlLCBCc0RhdGVwaWNrZXJNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtRGF0ZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKERhdGVDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKERhdGVDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRGF0ZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0ZVRpbWVDb21wb25lbnQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgYnNEYXRhVmFsdWU7XG4gICAgcHVibGljIHNob3dkcm9wZG93bm9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYXRlQ29udGFpbmVyQ2xzOiBzdHJpbmc7XG4gICAgcHVibGljIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2JzRGVmYXVsdExvYWRDaGVjazogYm9vbGVhbjtcbiAgICBwdWJsaWMgaGludDogc3RyaW5nO1xuICAgIHB1YmxpYyBhcmlhbGFiZWw6IHN0cmluZztcblxuICAgIHByaXZhdGUgZGVyZWdpc3RlckV2ZW50TGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBpc0N1cnJlbnREYXRlO1xuICAgIHByaXZhdGUgZm9jdXNUcmFwO1xuICAgIHByaXZhdGUgc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgbWFzaztcbiAgICBwcml2YXRlIG1hc2tEYXRlSW5wdXRGb3JtYXQ7XG4gICAgcHJpdmF0ZSBtYXNrRGF0ZUlucHV0Rm9ybWF0UGxhY2Vob2xkZXI7XG5cbiAgICBnZXQgdGltZXN0YW1wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ic0RhdGFWYWx1ZSA/IHRoaXMuYnNEYXRhVmFsdWUudmFsdWVPZigpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCBkYXRlSW5wdXRGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlT3B0aW9ucy5kYXRlSW5wdXRGb3JtYXQgfHwgJ3l5eXktTU0tZGQnO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dkYXRlZm9ybWF0YXNwbGFjZWhvbGRlciAmJiB0aGlzLmltYXNrPy5tYXNrUmVmICYmIHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5ic0RhdGFWYWx1ZSwgdGhpcy5tYXNrRGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIHRoaXMuYnNEYXRhVmFsdWUsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgIH1cblxuICAgIGdldCBuYXRpdmVEaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIHRoaXMuYnNEYXRhVmFsdWUsICd5eXl5LU1NLWRkJywgdGhpcy50aW1lWm9uZSwgbnVsbCwgdGhpcy5pc0N1cnJlbnREYXRlLCB0aGlzKSB8fCAnJztcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2V0IGRhdGF2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5ic0RhdGFWYWx1ZSwgdGhpcy5vdXRwdXRmb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgfHwgJyc7XG4gICAgfVxuXG4gICAgLy8gVG9kb1tTaHViaGFtXTogbmVlZHMgdG8gYmUgcmVkZWZpbmVkXG4gICAgLy8gc2V0cyB0aGUgZGF0YVZhbHVlIGFuZCBjb21wdXRlcyB0aGUgZGlzcGxheSBtb2RlbCB2YWx1ZXNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc2V0IGRhdGF2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgaWYgKG5ld1ZhbCA9PT0gQ1VSUkVOVF9EQVRFKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0YVZhbHVlID0gdGhpcy50aW1lWm9uZSA/IGdldE1vbWVudExvY2FsZU9iamVjdCh0aGlzLnRpbWVab25lKSA6IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudERhdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ic0RhdGFWYWx1ZSA9IG5ld1ZhbCA/IGdldERhdGVPYmoobmV3VmFsLCB7IGlzTmF0aXZlUGlja2VyOiB0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQgfSwgdGhpcy50aW1lWm9uZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudERhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1cGRhdGUgdGhlIHByZXZpb3VzIGRhdGF2YWx1ZS5cbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZChCc0RhdGVwaWNrZXJEaXJlY3RpdmUpIHByb3RlY3RlZCBic0RhdGVQaWNrZXJEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnZGF0ZUlucHV0JywgeyByZWFkOiBJTWFza0RpcmVjdGl2ZSB9KSBpbWFzazogSU1hc2tEaXJlY3RpdmU8YW55PjtcblxuICAgIC8vIFRPRE8gdXNlIEJzTG9jYWxlU2VydmljZSB0byBzZXQgdGhlIGN1cnJlbnQgdXNlcidzIGxvY2FsZSB0byBzZWUgdGhlIGxvY2FsaXplZCBsYWJlbHNcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgYXBwRGVmYXVsdHM6IEFwcERlZmF1bHRzLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLmRhdGVDb250YWluZXJDbHMgPSBgYXBwLWRhdGUtJHt0aGlzLndpZGdldElkfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmNvbnRhaW5lckNsYXNzID0gYGFwcC1kYXRlICR7dGhpcy5kYXRlQ29udGFpbmVyQ2xzfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9ic0RlZmF1bHRMb2FkQ2hlY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVwYXR0ZXJuID0gdGhpcy5hcHBEZWZhdWx0cy5kYXRlRm9ybWF0IHx8IGdldERpc3BsYXlEYXRlVGltZUZvcm1hdChGb3JtV2lkZ2V0VHlwZS5EQVRFKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoJ2RhdGVwYXR0ZXJuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRlIGlucHV0IGNoYW5nZXNcbiAgICAgKi9cbiAgICBvbkRpc3BsYXlEYXRlQ2hhbmdlKCRldmVudCwgaXNOYXRpdmVQaWNrZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlNYXNrKCk7XG4gICAgICAgIGlmICh0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnB1dFZhbCA9ICRldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlucHV0IGlzIGNsZWFyZWQsIHRoZSBpbnB1dCB2YWx1ZSBiZWNvbWVzIG1hc2tEYXRlSW5wdXRGb3JtYXRQbGFjZWhvbGRlci4gVGhpcyBjYXVzZXMgYSB2YWxpZGF0aW9uIGVycm9yLlxuICAgICAgICAvLyBXaGVuIHRoZSBpbnB1dCB2YWx1ZSBpcyBlcXVhbCB0byBtYXNrRGF0ZUlucHV0Rm9ybWF0UGxhY2Vob2xkZXIsIGl0IG1lYW5zIHRoYXQgdGhlIGlucHV0IGlzIGluIGFuIGVtcHR5IHN0YXRlLlxuICAgICAgICBpZiAodGhpcy5zaG93ZGF0ZWZvcm1hdGFzcGxhY2Vob2xkZXIgJiYgaW5wdXRWYWwgPT09IHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdFBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBpbnB1dFZhbCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VmFsID0gZ2V0RGF0ZU9iaihpbnB1dFZhbCwgeyBwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJuLCBpc05hdGl2ZVBpY2tlcjogaXNOYXRpdmVQaWNrZXIgfSk7XG4gICAgICAgIC8vIGRhdGUgcGF0dGVybiB2YWxpZGF0aW9uXG4gICAgICAgIC8vIGlmIGludmFsaWQgcGF0dGVybiBpcyBlbnRlcmVkLCBkZXZpY2UgaXMgc2hvd2luZyBhbiBlcnJvci5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm1hdFZhbGlkYXRpb24obmV3VmFsLCBpbnB1dFZhbCwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluIGRhdGUgYW5kIG1heCBkYXRlIHZhbGlkYXRpb24gaW4gbW9iaWxlIHZpZXcuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIGFuIGFsZXJ0LlxuICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50LCB0aGlzLmRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUobmV3VmFsKTtcbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkYXRhVmFsdWUgYW5kIGNvbXB1dGVzIHRoZSBkaXNwbGF5IG1vZGVsIHZhbHVlc1xuICAgIHByaXZhdGUgc2V0RGF0YVZhbHVlKG5ld1ZhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAvLyBtaW4gZGF0ZSBhbmQgbWF4IGRhdGUgdmFsaWRhdGlvbiBpbiB3ZWIuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCk7XG4gICAgICAgIGlmIChnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG5ld1ZhbCwgdGhpcy5kYXRlSW5wdXRGb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgPT09IHRoaXMuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwodGhpcy5kaXNwbGF5VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLmRhdGVOb3RJblJhbmdlKXtcbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0YVZhbHVlID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSU1hc2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ic0RhdGFWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YXZhbHVlPT09IHRoaXMuZ2V0UHJldkRhdGFWYWx1ZSgpKXtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlPWdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5kYXRhdmFsdWUsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpXG4gICAgICAgICAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5kaXNwbGF5LWlucHV0JykudmFsKGRhdGUpO31cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB7fSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25EYXRlUGlja2VyT3BlbigpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmJzRGF0YVZhbHVlID8gdGhpcy5ic0RhdGFWYWx1ZSA6ICh0aGlzLnRpbWVab25lID8gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRoaXMudGltZVpvbmUpIDogbmV3IERhdGUoKSk7XG4gICAgICAgIGlmICghdGhpcy5ic0RhdGFWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5oaWdodGxpZ2h0VG9kYXkodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUlNYXNrKCk7XG4gICAgICAgIGlmICh0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZSAmJiAodGhpcy5kYXRlTm90SW5SYW5nZXx8dGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQpKSB7XG4gICAgICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fYnNWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIHR3byBpbnB1dCB0YWdzKFRvIG1haW50YWluIHRoZSBtb2RhbCBhbmQgcHJveHkgbW9kYWwpIGZvciB0aGUgZGF0ZSBjb250cm9sLlxuICAgICAgICAvLyBTbyBhY3R1YWwgYm9vdHN0cmFwIGlucHV0IHRhcmdldCB3aWR0aCB3ZSBtYWRlIGl0IHRvIDAsIHNvIGJvb3RzdHJhcCBjYWxjdWxhdGluZyB0aGUgY2FsZW5kYXIgY29udGFpbmVyIHRvcCBwb3NpdGlvbiBpbXByb3Blcmx5LlxuICAgICAgICAvLyBUbyBmaXggdGhlIGNvbnRhaW5lciB0b3AgcG9zaXRpb24gc2V0IHRoZSB3aWR0aCAxcHg7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGVsLWhvbGRlcicpLndpZHRoKCcxcHgnKTtcbiAgICAgICAgY29uc3QgZHBDb250YWluZXJFbCA9ICQoJ2JzLWRhdGVwaWNrZXItY29udGFpbmVyJyk7XG4gICAgICAgIGRwQ29udGFpbmVyRWwuYXR0cignYXJpYS1sYWJlbCcsICdVc2UgQXJyb3cga2V5cyB0byBuYXZpZ2F0ZSBkYXRlcywgQ2hvb3NlIERhdGUgZnJvbSBkYXRlcGlja2VyJyk7XG4gICAgICAgICQoJy5icy1jYWxlbmRhci1jb250YWluZXInKS5yZW1vdmVBdHRyKCdyb2xlJyk7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJDb250YWluZXIgPSAkKCcuYnMtZGF0ZXBpY2tlci1jb250YWluZXInKVswXTtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXAgPSBzZXRGb2N1c1RyYXAoZGF0ZVBpY2tlckNvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlcktleWJvYXJkRXZlbnRzKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oJCgnYnMtZGF0ZXBpY2tlci1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fZGF0ZXBpY2tlcik7XG4gICAgICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMoJCgnYnMtZGF0ZXBpY2tlci1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fZGF0ZXBpY2tlcik7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVpvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5QnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5kYXRlQ29udGFpbmVyQ2xzfSAuYnMtZGF0ZXBpY2tlci1idXR0b25zIC5idG4tdG9kYXktd3JhcHBlciBidXR0b25gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHNldFRvZGF5VFpIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9kYXlUWiA9IGdldE1vbWVudExvY2FsZU9iamVjdCh0aGlzLnRpbWVab25lKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3IERhdGUodGhpcy5ic0RhdGFWYWx1ZSkudG9EYXRlU3RyaW5nKCkgIT09IG5ldyBEYXRlKHRvZGF5VFopLnRvRGF0ZVN0cmluZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnNEYXRhVmFsdWUgPSB0b2RheVRaO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2RheUJ0bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHNldFRvZGF5VFpIYW5kbGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0b2RheUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNldFRvZGF5VFpIYW5kbGVyKVxuICAgICAgICB9XG4gICAgfVxuICAgIG9uSW5wdXRCbHVyKCRldmVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlNYXNrKCk7XG4gICAgICAgIGlmICghJCgkZXZlbnQucmVsYXRlZFRhcmdldCkuaGFzQ2xhc3MoJ2N1cnJlbnQtZGF0ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdibHVyJywgeyAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVJTWFzaygpIHtcbiAgICAgICAgdGhpcy5pbWFzaz8ubWFza1JlZj8udXBkYXRlVmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZURhdGVwaWNrZXJEcm9wZG93bigpIHtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXA/LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgdGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ibHVyRGF0ZUlucHV0KHRoaXMuaXNPcGVuKTtcbiAgICB9XG5cbiAgICAvLyBjaGFuZ2UgYW5kIGJsdXIgZXZlbnRzIGFyZSBhZGRlZCBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFpbmNsdWRlcyhbJ2JsdXInLCAnZm9jdXMnLCAnY2hhbmdlJywgJ2NsaWNrJ10sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIHRvZ2dsZSB0aGUgZHJvcGRvd24gb2YgdGhlIGRhdGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZURwRHJvcGRvd24oJGV2ZW50LCBza2lwRm9jdXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAvLyBGaXhlcyBjbGljayBldmVudCBnZXR0aW5nIHRyaWdncmVkIHR3aWNlIGluIE1vYmlsZSBkZXZpY2VzLlxuICAgICAgICAgICAgaWYgKCFza2lwRm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0ZVRpbWVJbnB1dEZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NsaWNrJywgeyAkZXZlbnQ6ICRldmVudCB9KTtcbiAgICAgICAgICAgIC8vICB0aGlzLmZvY3VzT25JbnB1dEVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQgJiYgJCgkZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhKHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSkpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5hZGRCb2R5Q2xpY2tMaXN0ZW5lcih0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5pc09wZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQm9keUNsaWNrTGlzdGVuZXIoc2tpcExpc3RlbmVyKSB7XG4gICAgICAgIGlmICghc2tpcExpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnNEYXRlQ29udGFpbmVyRWxlbWVudCA9IGJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMuZGF0ZUNvbnRhaW5lckNsc31gKTtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckV2ZW50TGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50KGJvZHlFbGVtZW50LCBic0RhdGVDb250YWluZXJFbGVtZW50LCB0aGlzLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBFVkVOVF9MSUZFLk9OQ0UsIHRydWUpO1xuICAgICAgICB9LCAzNTApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRyaWdnZXJlZCB3aGVuIHByZXNzaW5nIGtleSBvbiB0aGUgZGF0ZSBpbnB1dFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc3BsYXlLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbikpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldERhdGVPYmooZXZlbnQudGFyZ2V0LnZhbHVlLCB7IHBhdHRlcm46IHRoaXMuZGF0ZXBhdHRlcm4gfSk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBuZXdWYWwsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dFZhbCA9IGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyICYmIGlucHV0VmFsID09PSB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXRQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAmJiB0aGlzLmRhdGVwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGlucHV0VmFsKSAmJiBwYXJzZUludChpbnB1dFZhbCkgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0VmFsICYmIGlucHV0VmFsICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5ic1ZhbHVlID0gaW5wdXRWYWwgPyBuZXdWYWwgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJTWFzaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZURwRHJvcGRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVEYXRlcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGUgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgKi9cbiAgICBvbkRhdGVDaGFuZ2UobmV3VmFsKTogdm9pZCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAgTmd4LWJvb3RzdHJhcCB1cGdyYWRlIDogVG8gYXZvaWQgdGhlIHBhZ2UgbG9hZCBkYXRlY2hhbmdlIGV2ZW50O1xuICAgICAgICAgKiAgVE9ETzpcbiAgICAgICAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS92YWxvci1zb2Z0d2FyZS9uZ3gtYm9vdHN0cmFwL2lzc3Vlcy82MDE2XG4gICAgICAgICAqICBGb3IgYWJvdmUgaXNzdWUsIG9uY2Ugd2UgZ2V0IHRoZSBzb2x1dGlvbiBmcm9tIE5neC1Cb290c3RyYXAgdGVhbSwgIHJlbW92ZSB0aGUgX2JzRGVmYXVsdExvYWRDaGVjayBjaGVjayBhbmQgdXBkYXRlIGFjY29yZGluZ2x5LlxuICAgICAgICAgKiAqL1xuICAgICAgICBpZiAodGhpcy5fYnNEZWZhdWx0TG9hZENoZWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9ic0RlZmF1bHRMb2FkQ2hlY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Nob3dkYXRlZm9ybWF0YXNwbGFjZWhvbGRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyID0gbnY7XG4gICAgICAgICAgICB0aGlzLmltYXNrPy5kZXN0cm95TWFzaygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyICYmIHRoaXMuZGF0ZXBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrID0gdmFsaWRhdGVUaGVNYXNrZWREYXRlKHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMuc2VsZWN0ZWRMb2NhbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZUlucHV0Rm9ybWF0O1xuICAgICAgICAgICAgICAgIHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdCA9ICh0aGlzLmRhdGVJbnB1dEZvcm1hdC5zcGxpdCgnZCcpLmxlbmd0aCAtIDEpID09PSAxID8gdGhpcy5tYXNrRGF0ZUlucHV0Rm9ybWF0LnJlcGxhY2UoJ2QnLCAnZGQnKSA6IHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdDtcbiAgICAgICAgICAgICAgICB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXQgPSAodGhpcy5kYXRlSW5wdXRGb3JtYXQuc3BsaXQoJ00nKS5sZW5ndGggLSAxKSA9PT0gMSA/IHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdC5yZXBsYWNlKCdNJywgJ01NJykgOiB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrRGF0ZUlucHV0Rm9ybWF0UGxhY2Vob2xkZXIgPSB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXQudG9VcHBlckNhc2UoKS5yZXBsYWNlKCdFRUVFJywgJ0VFRUVFRScpLnJlcGxhY2UoJ01NTU0nLCAnTU1NJyk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJTWFzaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhbiB1cCBldmVudCBsaXN0ZW5lciBkZXJlZ2lzdGVyIGZ1bmN0aW9uXG4gICAgICAgIGlmICh0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgVmlld0NoaWxkIHJlZmVyZW5jZXNcbiAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUgPSBudWxsO1xuICAgICAgICB0aGlzLmltYXNrID0gbnVsbDtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IERlYWN0aXZhdGUgZm9jdXMgdHJhcCBpZiBhY3RpdmVcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIHJlbW92ZUtleXVwTGlzdGVuZXIgaWYgc2V0XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZUtleXVwTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlS2V5dXBMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVLZXl1cExpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGwgcGFyZW50IG5nT25EZXN0cm95IChCYXNlRGF0ZVRpbWVDb21wb25lbnQgaGFzIGNsZWFudXApXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGFwcC10ZXh0Ym94IGFwcC1kYXRlaW5wdXQgZGlzcGxheS1pbnB1dFwiXG4gIGZvY3VzLXRhcmdldFxuICB0eXBlPVwidGV4dFwiXG4gIFtuYW1lXT1cIm5hbWVcIlxuICAjZGF0ZUlucHV0XG4gIFtpbWFza109XCJtYXNrXCJcbiAgW3VubWFza109XCJ0cnVlXCJcbiAgW3RhYmluZGV4XT1cImxvYWROYXRpdmVEYXRlSW5wdXQgPyAnLTEnIDogdGFiaW5kZXhcIlxuICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhIWxvYWROYXRpdmVEYXRlSW5wdXRcIlxuICBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCJcbiAgKGNsaWNrKT1cInRvZ2dsZURwRHJvcGRvd24oJGV2ZW50LCB0cnVlKVwiXG4gIChmb2N1cyk9XCJvbkRhdGVUaW1lSW5wdXRGb2N1cygpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7IHVwZGF0ZUlNYXNrKClcIlxuICAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbcmVhZE9ubHldPVwiaXNSZWFkT25seVwiXG4gIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhbGFiZWxcIlxuICAoY2hhbmdlKT1cIm9uRGlzcGxheURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gIChrZXlkb3duKT1cInRoaXMuX3RyaWdnZXJlZEJ5VXNlciA9IHRydWU7IG9uRGlzcGxheUtleWRvd24oJGV2ZW50KTtcIj5cblxuPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tdGltZVwiXG4gICAgW3RhYmluZGV4XT1cImxvYWROYXRpdmVEYXRlSW5wdXQgPyAnLTEnIDogdGFiaW5kZXhcIlxuICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiEhbG9hZE5hdGl2ZURhdGVJbnB1dFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRpc3BsYXlWYWx1ZSA/ICdDaGFuZ2UgRGF0ZSAnICsgZGlzcGxheVZhbHVlIDogJ0Nob29zZSBkYXRlIGJ5IHByZXNzaW5nIGVudGVyJ1wiXG4gICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRHBEcm9wZG93bigkZXZlbnQsIGZhbHNlKVwiPlxuICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgY2xhc3M9XCJhcHAtaWNvbiB3bS1zbC1sIHNsLWNhbGVuZGFyXCI+PC9pPlxuICA8L2J1dHRvbj5cbjwvc3Bhbj5cbjxkaXYgc3R5bGU9XCJ3aWR0aDogMDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+XG4gIDxpbnB1dCBjbGFzcz1cIm1vZGVsLWhvbGRlclwiXG4gICAgYXJpYS1sYWJlbD1cImRhdGVwaWNrZXIgZHJvcGRvd25tZW51XCJcbiAgICBhcmlhLWNvbnRyb2xzPVwiZGF0ZVwiXG4gICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhIWxvYWROYXRpdmVEYXRlSW5wdXRcIlxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyVGFyZ2V0IHx8ICcud20tYXBwJ1wiXG4gICAgW2JzQ29uZmlnXT1cIl9kYXRlT3B0aW9uc1wiXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICNkYXRlcGlja2VyPVwiYnNEYXRlcGlja2VyXCJcbiAgICBic0RhdGVwaWNrZXJcbiAgICBbZGF5c0Rpc2FibGVkXT1cImV4Y2x1ZGVkRGF5c1RvRGlzYWJsZVwiXG4gICAgW2RhdGVzRGlzYWJsZWRdPVwiZXhjbHVkZWREYXRlc1RvRGlzYWJsZVwiXG4gICAgcGxhY2VtZW50PVwiYm90dG9tIHJpZ2h0XCJcbiAgICBbaXNEaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgW2JzVmFsdWVdPVwiYnNEYXRhVmFsdWVcIlxuICAgIChvblNob3duKT1cIm9uRGF0ZVBpY2tlck9wZW4oKVwiXG4gICAgKG9uSGlkZGVuKT1cImhpZGVEYXRlcGlja2VyRHJvcGRvd24oKVwiXG4gICAgKGJzVmFsdWVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlKCRldmVudClcIj5cbjwvZGl2PlxuXG5AaWYgKGxvYWROYXRpdmVEYXRlSW5wdXQpIHtcbiAgPHdtLWRhdGV0aW1lcGlja2VyXG4gICAgZGF0ZVRpbWVQaWNrZXJcbiAgICBtb2RlPVwiREFURVwiXG4gICAgW2NvbmZpZ109XCJfZGF0ZU9wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwibW9kYWxcIlxuICAgIFtleGNsdWRlZERheXNUb0Rpc2FibGVdPVwiZXhjbHVkZWREYXlzVG9EaXNhYmxlXCJcbiAgICBbZXhjbHVkZWREYXRlc1RvRGlzYWJsZV09XCJleGNsdWRlZERhdGVzVG9EaXNhYmxlXCJcbiAgICBbZGlzcGxheUZvcm1hdF09XCJkYXRlSW5wdXRGb3JtYXRcIlxuICAgIFt2YWx1ZV09XCJic0RhdGFWYWx1ZVwiXG4gICAgKGNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiPlxuICA8L3dtLWRhdGV0aW1lcGlja2VyPlxuICA8ZGl2IGNsYXNzPVwibW9iaWxlLWlucHV0IG1vYmlsZS1kYXRlcGlja2VyLWNvbnRhaW5lclwiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4IHx8IDBcIlxuICAgIChjbGljayk9XCIhKGRpc2FibGVkIHx8IHJlYWRvbmx5KSAmJiBzaG93RGF0ZVBpY2tlck1vZGFsKGJzRGF0YVZhbHVlKVwiXG4gICAgKGZvY3VzKT1cIm9uRGF0ZVRpbWVJbnB1dEZvY3VzKHRydWUpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7XCJcbiAgICAoYmx1cik9XCJvbkRhdGVUaW1lSW5wdXRCbHVyKCk7IGludm9rZU9uVG91Y2hlZCgkZXZlbnQpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRpc3BsYXlWYWx1ZSA/ICdDaGFuZ2UgRGF0ZSAnICsgZGlzcGxheVZhbHVlIDogYXJpYWxhYmVsIHx8ICdDaG9vc2UgRGF0ZSdcIlxuICAgIHJvbGU9XCJidXR0b25cIj5cbiAgPC9kaXY+XG59XG4iXX0=
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvZGF0ZS9zcmMvZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvaW5wdXQvZXBvY2gvZGF0ZS9zcmMvZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWEsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUNILHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLFdBQVcsRUFFWCxjQUFjLEVBQ2QsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3hCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFB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LHM0RkErRUEsNENEN0NjLHVCQUF1QixnUEFBRSxXQUFXLHNNQUFFLGtCQUFrQjs7NEZBU3pELGFBQWE7a0JBWHpCLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLFlBQ3pELFVBQVUsYUFFVDt3QkFDUCxTQUFTLGdCQUFnQixpQkFBaUIsRUFBRSxJQUFJLENBQUM7d0JBQ2pELFNBQVMsZ0JBQWdCLGFBQWEsRUFBRSxJQUFJLENBQUM7d0JBQzdDLGtCQUFrQixlQUFlO3FCQUNwQzs7MEJBd0VJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFBRyxRQUFRO3lDQVJHLHFCQUFxQjtzQkFBaEUsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ2tCLEtBQUs7c0JBQXRELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SU1hc2tEaXJlY3RpdmUsIElNYXNrTW9kdWxlfSBmcm9tICdhbmd1bGFyLWltYXNrJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPcHRpb25hbCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QnNEYXRlcGlja2VyRGlyZWN0aXZlLCBCc0RhdGVwaWNrZXJNb2R1bGV9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQge1xuICAgIGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQsXG4gICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24sXG4gICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyxcbiAgICBBcHBEZWZhdWx0cyxcbiAgICBFVkVOVF9MSUZFLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGdldERhdGVPYmosXG4gICAgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0LFxuICAgIGdldEZvcm1hdHRlZERhdGUsXG4gICAgZ2V0TW9tZW50TG9jYWxlT2JqZWN0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7SVdpZGdldENvbmZpZywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWYsIHNldEZvY3VzVHJhcCwgc3R5bGVyfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7QmFzZURhdGVUaW1lQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dC9lcG9jaC9iYXNlLWRhdGUtdGltZSc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vZGF0ZS5wcm9wcyc7XG5pbXBvcnQge3ZhbGlkYXRlVGhlTWFza2VkRGF0ZX0gZnJvbSAnLi9pbWFza1V0aWwnO1xuaW1wb3J0IHtpbmNsdWRlcywgaXNOYU4sIHBhcnNlSW50fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQge0RhdGVUaW1lUGlja2VyQ29tcG9uZW50fSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvaW5wdXQvZXBvY2gvZGF0ZS10aW1lLXBpY2tlclwiO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQ7XG5cbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGUgaW5wdXQtZ3JvdXAnO1xuY29uc3QgV0lER0VUX0NPTkZJRzogSVdpZGdldENvbmZpZyA9IHtcbiAgICB3aWRnZXRUeXBlOiAnd20tZGF0ZScsXG4gICAgaG9zdENsYXNzOiBERUZBVUxUX0NMU1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIElNYXNrTW9kdWxlLCBCc0RhdGVwaWNrZXJNb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtRGF0ZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKERhdGVDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKERhdGVDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRGF0ZUNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGF0ZVRpbWVDb21wb25lbnQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgYnNEYXRhVmFsdWU7XG4gICAgcHVibGljIHNob3dkcm9wZG93bm9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkYXRlQ29udGFpbmVyQ2xzOiBzdHJpbmc7XG4gICAgcHVibGljIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2JzRGVmYXVsdExvYWRDaGVjazogYm9vbGVhbjtcbiAgICBwdWJsaWMgaGludDogc3RyaW5nO1xuICAgIHB1YmxpYyBhcmlhbGFiZWw6IHN0cmluZztcblxuICAgIHByaXZhdGUgZGVyZWdpc3RlckV2ZW50TGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBpc0N1cnJlbnREYXRlO1xuICAgIHByaXZhdGUgZm9jdXNUcmFwO1xuICAgIHByaXZhdGUgc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgbWFzaztcbiAgICBwcml2YXRlIG1hc2tEYXRlSW5wdXRGb3JtYXQ7XG4gICAgcHJpdmF0ZSBtYXNrRGF0ZUlucHV0Rm9ybWF0UGxhY2Vob2xkZXI7XG5cbiAgICBnZXQgdGltZXN0YW1wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ic0RhdGFWYWx1ZSA/IHRoaXMuYnNEYXRhVmFsdWUudmFsdWVPZigpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCBkYXRlSW5wdXRGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlT3B0aW9ucy5kYXRlSW5wdXRGb3JtYXQgfHwgJ3l5eXktTU0tZGQnO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dkYXRlZm9ybWF0YXNwbGFjZWhvbGRlciAmJiB0aGlzLmltYXNrPy5tYXNrUmVmICYmIHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5ic0RhdGFWYWx1ZSwgdGhpcy5tYXNrRGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIHRoaXMuYnNEYXRhVmFsdWUsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpIHx8ICcnO1xuICAgIH1cblxuICAgIGdldCBuYXRpdmVEaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIHRoaXMuYnNEYXRhVmFsdWUsICd5eXl5LU1NLWRkJywgdGhpcy50aW1lWm9uZSwgbnVsbCwgdGhpcy5pc0N1cnJlbnREYXRlLCB0aGlzKSB8fCAnJztcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2V0IGRhdGF2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5ic0RhdGFWYWx1ZSwgdGhpcy5vdXRwdXRmb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgfHwgJyc7XG4gICAgfVxuXG4gICAgLy8gVG9kb1tTaHViaGFtXTogbmVlZHMgdG8gYmUgcmVkZWZpbmVkXG4gICAgLy8gc2V0cyB0aGUgZGF0YVZhbHVlIGFuZCBjb21wdXRlcyB0aGUgZGlzcGxheSBtb2RlbCB2YWx1ZXNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgc2V0IGRhdGF2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgaWYgKG5ld1ZhbCA9PT0gQ1VSUkVOVF9EQVRFKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0YVZhbHVlID0gdGhpcy50aW1lWm9uZSA/IGdldE1vbWVudExvY2FsZU9iamVjdCh0aGlzLnRpbWVab25lKSA6IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudERhdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ic0RhdGFWYWx1ZSA9IG5ld1ZhbCA/IGdldERhdGVPYmoobmV3VmFsLCB7IGlzTmF0aXZlUGlja2VyOiB0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQgfSwgdGhpcy50aW1lWm9uZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmlzQ3VycmVudERhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1cGRhdGUgdGhlIHByZXZpb3VzIGRhdGF2YWx1ZS5cbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZChCc0RhdGVwaWNrZXJEaXJlY3RpdmUpIHByb3RlY3RlZCBic0RhdGVQaWNrZXJEaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgnZGF0ZUlucHV0JywgeyByZWFkOiBJTWFza0RpcmVjdGl2ZSB9KSBpbWFzazogSU1hc2tEaXJlY3RpdmU8YW55PjtcblxuICAgIC8vIFRPRE8gdXNlIEJzTG9jYWxlU2VydmljZSB0byBzZXQgdGhlIGN1cnJlbnQgdXNlcidzIGxvY2FsZSB0byBzZWUgdGhlIGxvY2FsaXplZCBsYWJlbHNcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgYXBwRGVmYXVsdHM6IEFwcERlZmF1bHRzLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLmRhdGVDb250YWluZXJDbHMgPSBgYXBwLWRhdGUtJHt0aGlzLndpZGdldElkfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmNvbnRhaW5lckNsYXNzID0gYGFwcC1kYXRlICR7dGhpcy5kYXRlQ29udGFpbmVyQ2xzfWA7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jdXN0b21Ub2RheUNsYXNzPSdjdXJyZW50LWRhdGUnO1xuICAgICAgICB0aGlzLl9ic0RlZmF1bHRMb2FkQ2hlY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVwYXR0ZXJuID0gdGhpcy5hcHBEZWZhdWx0cy5kYXRlRm9ybWF0IHx8IGdldERpc3BsYXlEYXRlVGltZUZvcm1hdChGb3JtV2lkZ2V0VHlwZS5EQVRFKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoJ2RhdGVwYXR0ZXJuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRlIGlucHV0IGNoYW5nZXNcbiAgICAgKi9cbiAgICBvbkRpc3BsYXlEYXRlQ2hhbmdlKCRldmVudCwgaXNOYXRpdmVQaWNrZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlNYXNrKCk7XG4gICAgICAgIGlmICh0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbnRlclByZXNzZWRPbkRhdGVJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnB1dFZhbCA9ICRldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlucHV0IGlzIGNsZWFyZWQsIHRoZSBpbnB1dCB2YWx1ZSBiZWNvbWVzIG1hc2tEYXRlSW5wdXRGb3JtYXRQbGFjZWhvbGRlci4gVGhpcyBjYXVzZXMgYSB2YWxpZGF0aW9uIGVycm9yLlxuICAgICAgICAvLyBXaGVuIHRoZSBpbnB1dCB2YWx1ZSBpcyBlcXVhbCB0byBtYXNrRGF0ZUlucHV0Rm9ybWF0UGxhY2Vob2xkZXIsIGl0IG1lYW5zIHRoYXQgdGhlIGlucHV0IGlzIGluIGFuIGVtcHR5IHN0YXRlLlxuICAgICAgICBpZiAodGhpcy5zaG93ZGF0ZWZvcm1hdGFzcGxhY2Vob2xkZXIgJiYgaW5wdXRWYWwgPT09IHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdFBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICBpbnB1dFZhbCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VmFsID0gZ2V0RGF0ZU9iaihpbnB1dFZhbCwgeyBwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJuLCBpc05hdGl2ZVBpY2tlcjogaXNOYXRpdmVQaWNrZXIgfSk7XG4gICAgICAgIC8vIGRhdGUgcGF0dGVybiB2YWxpZGF0aW9uXG4gICAgICAgIC8vIGlmIGludmFsaWQgcGF0dGVybiBpcyBlbnRlcmVkLCBkZXZpY2UgaXMgc2hvd2luZyBhbiBlcnJvci5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm1hdFZhbGlkYXRpb24obmV3VmFsLCBpbnB1dFZhbCwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluIGRhdGUgYW5kIG1heCBkYXRlIHZhbGlkYXRpb24gaW4gbW9iaWxlIHZpZXcuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIGFuIGFsZXJ0LlxuICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50LCB0aGlzLmRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUobmV3VmFsKTtcbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkYXRhVmFsdWUgYW5kIGNvbXB1dGVzIHRoZSBkaXNwbGF5IG1vZGVsIHZhbHVlc1xuICAgIHByaXZhdGUgc2V0RGF0YVZhbHVlKG5ld1ZhbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAvLyBtaW4gZGF0ZSBhbmQgbWF4IGRhdGUgdmFsaWRhdGlvbiBpbiB3ZWIuXG4gICAgICAgIC8vIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCk7XG4gICAgICAgIGlmIChnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG5ld1ZhbCwgdGhpcy5kYXRlSW5wdXRGb3JtYXQsIHRoaXMudGltZVpvbmUsIG51bGwsIHRoaXMuaXNDdXJyZW50RGF0ZSwgdGhpcykgPT09IHRoaXMuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwodGhpcy5kaXNwbGF5VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLmRhdGVOb3RJblJhbmdlKXtcbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJzRGF0YVZhbHVlID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSU1hc2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ic0RhdGFWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuZGF0YXZhbHVlPT09IHRoaXMuZ2V0UHJldkRhdGFWYWx1ZSgpKXtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlPWdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgdGhpcy5kYXRhdmFsdWUsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpXG4gICAgICAgICAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5kaXNwbGF5LWlucHV0JykudmFsKGRhdGUpO31cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB7fSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25EYXRlUGlja2VyT3BlbigpIHtcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmJzRGF0YVZhbHVlID8gdGhpcy5ic0RhdGFWYWx1ZSA6ICh0aGlzLnRpbWVab25lID8gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRoaXMudGltZVpvbmUpIDogbmV3IERhdGUoKSk7XG4gICAgICAgIC8vIGlmICghdGhpcy5ic0RhdGFWYWx1ZSkge1xuICAgICAgICAvLyAgICAgdGhpcy5oaWdodGxpZ2h0VG9kYXkodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLnVwZGF0ZUlNYXNrKCk7XG4gICAgICAgIGlmICh0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZSAmJiAodGhpcy5kYXRlTm90SW5SYW5nZXx8dGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQpKSB7XG4gICAgICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fYnNWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBhcmUgdXNpbmcgdGhlIHR3byBpbnB1dCB0YWdzKFRvIG1haW50YWluIHRoZSBtb2RhbCBhbmQgcHJveHkgbW9kYWwpIGZvciB0aGUgZGF0ZSBjb250cm9sLlxuICAgICAgICAvLyBTbyBhY3R1YWwgYm9vdHN0cmFwIGlucHV0IHRhcmdldCB3aWR0aCB3ZSBtYWRlIGl0IHRvIDAsIHNvIGJvb3RzdHJhcCBjYWxjdWxhdGluZyB0aGUgY2FsZW5kYXIgY29udGFpbmVyIHRvcCBwb3NpdGlvbiBpbXByb3Blcmx5LlxuICAgICAgICAvLyBUbyBmaXggdGhlIGNvbnRhaW5lciB0b3AgcG9zaXRpb24gc2V0IHRoZSB3aWR0aCAxcHg7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGVsLWhvbGRlcicpLndpZHRoKCcxcHgnKTtcbiAgICAgICAgY29uc3QgZHBDb250YWluZXJFbCA9ICQoJ2JzLWRhdGVwaWNrZXItY29udGFpbmVyJyk7XG4gICAgICAgIGRwQ29udGFpbmVyRWwuYXR0cignYXJpYS1sYWJlbCcsICdVc2UgQXJyb3cga2V5cyB0byBuYXZpZ2F0ZSBkYXRlcywgQ2hvb3NlIERhdGUgZnJvbSBkYXRlcGlja2VyJyk7XG4gICAgICAgICQoJy5icy1jYWxlbmRhci1jb250YWluZXInKS5yZW1vdmVBdHRyKCdyb2xlJyk7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJDb250YWluZXIgPSAkKCcuYnMtZGF0ZXBpY2tlci1jb250YWluZXInKVswXTtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXAgPSBzZXRGb2N1c1RyYXAoZGF0ZVBpY2tlckNvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNUcmFwLmFjdGl2YXRlKCk7XG4gICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlcktleWJvYXJkRXZlbnRzKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oJCgnYnMtZGF0ZXBpY2tlci1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fZGF0ZXBpY2tlcik7XG4gICAgICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMoJCgnYnMtZGF0ZXBpY2tlci1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5fZGF0ZXBpY2tlcik7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZVpvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvZGF5QnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5kYXRlQ29udGFpbmVyQ2xzfSAuYnMtZGF0ZXBpY2tlci1idXR0b25zIC5idG4tdG9kYXktd3JhcHBlciBidXR0b25gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHNldFRvZGF5VFpIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9kYXlUWiA9IGdldE1vbWVudExvY2FsZU9iamVjdCh0aGlzLnRpbWVab25lKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3IERhdGUodGhpcy5ic0RhdGFWYWx1ZSkudG9EYXRlU3RyaW5nKCkgIT09IG5ldyBEYXRlKHRvZGF5VFopLnRvRGF0ZVN0cmluZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnNEYXRhVmFsdWUgPSB0b2RheVRaO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2RheUJ0bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHNldFRvZGF5VFpIYW5kbGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0b2RheUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNldFRvZGF5VFpIYW5kbGVyKVxuICAgICAgICB9XG4gICAgfVxuICAgIG9uSW5wdXRCbHVyKCRldmVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUlNYXNrKCk7XG4gICAgICAgIGlmICghJCgkZXZlbnQucmVsYXRlZFRhcmdldCkuaGFzQ2xhc3MoJ2N1cnJlbnQtZGF0ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZU9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdibHVyJywgeyAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVJTWFzaygpIHtcbiAgICAgICAgdGhpcy5pbWFzaz8ubWFza1JlZj8udXBkYXRlVmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZURhdGVwaWNrZXJEcm9wZG93bigpIHtcbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c1RyYXA/LmRlYWN0aXZhdGUoKTtcbiAgICAgICAgdGhpcy5pc0VudGVyUHJlc3NlZE9uRGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ibHVyRGF0ZUlucHV0KHRoaXMuaXNPcGVuKTtcbiAgICB9XG5cbiAgICAvLyBjaGFuZ2UgYW5kIGJsdXIgZXZlbnRzIGFyZSBhZGRlZCBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFpbmNsdWRlcyhbJ2JsdXInLCAnZm9jdXMnLCAnY2hhbmdlJywgJ2NsaWNrJ10sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIHRvIHRvZ2dsZSB0aGUgZHJvcGRvd24gb2YgdGhlIGRhdGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZURwRHJvcGRvd24oJGV2ZW50LCBza2lwRm9jdXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAvLyBGaXhlcyBjbGljayBldmVudCBnZXR0aW5nIHRyaWdncmVkIHR3aWNlIGluIE1vYmlsZSBkZXZpY2VzLlxuICAgICAgICAgICAgaWYgKCFza2lwRm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0ZVRpbWVJbnB1dEZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NsaWNrJywgeyAkZXZlbnQ6ICRldmVudCB9KTtcbiAgICAgICAgICAgIC8vICB0aGlzLmZvY3VzT25JbnB1dEVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQgJiYgJCgkZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhKHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSkpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5hZGRCb2R5Q2xpY2tMaXN0ZW5lcih0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5pc09wZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQm9keUNsaWNrTGlzdGVuZXIoc2tpcExpc3RlbmVyKSB7XG4gICAgICAgIGlmICghc2tpcExpc3RlbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnNEYXRlQ29udGFpbmVyRWxlbWVudCA9IGJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMuZGF0ZUNvbnRhaW5lckNsc31gKTtcbiAgICAgICAgICAgIHRoaXMuZGVyZWdpc3RlckV2ZW50TGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50KGJvZHlFbGVtZW50LCBic0RhdGVDb250YWluZXJFbGVtZW50LCB0aGlzLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIHRoaXMuaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCh0aGlzLnNob3dkcm9wZG93bm9uKSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBFVkVOVF9MSUZFLk9OQ0UsIHRydWUpO1xuICAgICAgICB9LCAzNTApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHRyaWdnZXJlZCB3aGVuIHByZXNzaW5nIGtleSBvbiB0aGUgZGF0ZSBpbnB1dFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRpc3BsYXlLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQodGhpcy5zaG93ZHJvcGRvd25vbikpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldERhdGVPYmooZXZlbnQudGFyZ2V0LnZhbHVlLCB7IHBhdHRlcm46IHRoaXMuZGF0ZXBhdHRlcm4gfSk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBuZXdWYWwsIHRoaXMuZGF0ZUlucHV0Rm9ybWF0LCB0aGlzLnRpbWVab25lLCBudWxsLCB0aGlzLmlzQ3VycmVudERhdGUsIHRoaXMpO1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dFZhbCA9IGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyICYmIGlucHV0VmFsID09PSB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXRQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAmJiB0aGlzLmRhdGVwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGlucHV0VmFsKSAmJiBwYXJzZUludChpbnB1dFZhbCkgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0VmFsICYmIGlucHV0VmFsICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRW50ZXJQcmVzc2VkT25EYXRlSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJzRGF0ZVBpY2tlckRpcmVjdGl2ZS5ic1ZhbHVlID0gaW5wdXRWYWwgPyBuZXdWYWwgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJTWFzaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZURwRHJvcGRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVEYXRlcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGUgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgKi9cbiAgICBvbkRhdGVDaGFuZ2UobmV3VmFsKTogdm9pZCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAgTmd4LWJvb3RzdHJhcCB1cGdyYWRlIDogVG8gYXZvaWQgdGhlIHBhZ2UgbG9hZCBkYXRlY2hhbmdlIGV2ZW50O1xuICAgICAgICAgKiAgVE9ETzpcbiAgICAgICAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS92YWxvci1zb2Z0d2FyZS9uZ3gtYm9vdHN0cmFwL2lzc3Vlcy82MDE2XG4gICAgICAgICAqICBGb3IgYWJvdmUgaXNzdWUsIG9uY2Ugd2UgZ2V0IHRoZSBzb2x1dGlvbiBmcm9tIE5neC1Cb290c3RyYXAgdGVhbSwgIHJlbW92ZSB0aGUgX2JzRGVmYXVsdExvYWRDaGVjayBjaGVjayBhbmQgdXBkYXRlIGFjY29yZGluZ2x5LlxuICAgICAgICAgKiAqL1xuICAgICAgICBpZiAodGhpcy5fYnNEZWZhdWx0TG9hZENoZWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9ic0RlZmF1bHRMb2FkQ2hlY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Nob3dkYXRlZm9ybWF0YXNwbGFjZWhvbGRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyID0gbnY7XG4gICAgICAgICAgICB0aGlzLmltYXNrPy5kZXN0cm95TWFzaygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd2RhdGVmb3JtYXRhc3BsYWNlaG9sZGVyICYmIHRoaXMuZGF0ZXBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrID0gdmFsaWRhdGVUaGVNYXNrZWREYXRlKHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMuc2VsZWN0ZWRMb2NhbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZUlucHV0Rm9ybWF0O1xuICAgICAgICAgICAgICAgIHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdCA9ICh0aGlzLmRhdGVJbnB1dEZvcm1hdC5zcGxpdCgnZCcpLmxlbmd0aCAtIDEpID09PSAxID8gdGhpcy5tYXNrRGF0ZUlucHV0Rm9ybWF0LnJlcGxhY2UoJ2QnLCAnZGQnKSA6IHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdDtcbiAgICAgICAgICAgICAgICB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXQgPSAodGhpcy5kYXRlSW5wdXRGb3JtYXQuc3BsaXQoJ00nKS5sZW5ndGggLSAxKSA9PT0gMSA/IHRoaXMubWFza0RhdGVJbnB1dEZvcm1hdC5yZXBsYWNlKCdNJywgJ01NJykgOiB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrRGF0ZUlucHV0Rm9ybWF0UGxhY2Vob2xkZXIgPSB0aGlzLm1hc2tEYXRlSW5wdXRGb3JtYXQudG9VcHBlckNhc2UoKS5yZXBsYWNlKCdFRUVFJywgJ0VFRUVFRScpLnJlcGxhY2UoJ01NTU0nLCAnTU1NJyk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJTWFzaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhbiB1cCBldmVudCBsaXN0ZW5lciBkZXJlZ2lzdGVyIGZ1bmN0aW9uXG4gICAgICAgIGlmICh0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmRlcmVnaXN0ZXJFdmVudExpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgVmlld0NoaWxkIHJlZmVyZW5jZXNcbiAgICAgICAgdGhpcy5ic0RhdGVQaWNrZXJEaXJlY3RpdmUgPSBudWxsO1xuICAgICAgICB0aGlzLmltYXNrID0gbnVsbDtcblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IERlYWN0aXZhdGUgZm9jdXMgdHJhcCBpZiBhY3RpdmVcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IENsZWFyIHJlbW92ZUtleXVwTGlzdGVuZXIgaWYgc2V0XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZUtleXVwTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlS2V5dXBMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVLZXl1cExpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGwgcGFyZW50IG5nT25EZXN0cm95IChCYXNlRGF0ZVRpbWVDb21wb25lbnQgaGFzIGNsZWFudXApXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGFwcC10ZXh0Ym94IGFwcC1kYXRlaW5wdXQgZGlzcGxheS1pbnB1dFwiXG4gIGZvY3VzLXRhcmdldFxuICB0eXBlPVwidGV4dFwiXG4gIFtuYW1lXT1cIm5hbWVcIlxuICAjZGF0ZUlucHV0XG4gIFtpbWFza109XCJtYXNrXCJcbiAgW3VubWFza109XCJ0cnVlXCJcbiAgW3RhYmluZGV4XT1cImxvYWROYXRpdmVEYXRlSW5wdXQgPyAnLTEnIDogdGFiaW5kZXhcIlxuICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhIWxvYWROYXRpdmVEYXRlSW5wdXRcIlxuICBbdmFsdWVdPVwiZGlzcGxheVZhbHVlXCJcbiAgKGNsaWNrKT1cInRvZ2dsZURwRHJvcGRvd24oJGV2ZW50LCB0cnVlKVwiXG4gIChmb2N1cyk9XCJvbkRhdGVUaW1lSW5wdXRGb2N1cygpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7IHVwZGF0ZUlNYXNrKClcIlxuICAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbcmVhZE9ubHldPVwiaXNSZWFkT25seVwiXG4gIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhbGFiZWxcIlxuICAoY2hhbmdlKT1cIm9uRGlzcGxheURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gIChrZXlkb3duKT1cInRoaXMuX3RyaWdnZXJlZEJ5VXNlciA9IHRydWU7IG9uRGlzcGxheUtleWRvd24oJGV2ZW50KTtcIj5cblxuPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tdGltZVwiXG4gICAgW3RhYmluZGV4XT1cImxvYWROYXRpdmVEYXRlSW5wdXQgPyAnLTEnIDogdGFiaW5kZXhcIlxuICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiEhbG9hZE5hdGl2ZURhdGVJbnB1dFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRpc3BsYXlWYWx1ZSA/ICdDaGFuZ2UgRGF0ZSAnICsgZGlzcGxheVZhbHVlIDogJ0Nob29zZSBkYXRlIGJ5IHByZXNzaW5nIGVudGVyJ1wiXG4gICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlRHBEcm9wZG93bigkZXZlbnQsIGZhbHNlKVwiPlxuICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgY2xhc3M9XCJhcHAtaWNvbiB3bS1zbC1sIHNsLWNhbGVuZGFyXCI+PC9pPlxuICA8L2J1dHRvbj5cbjwvc3Bhbj5cbjxkaXYgc3R5bGU9XCJ3aWR0aDogMDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+XG4gIDxpbnB1dCBjbGFzcz1cIm1vZGVsLWhvbGRlclwiXG4gICAgYXJpYS1sYWJlbD1cImRhdGVwaWNrZXIgZHJvcGRvd25tZW51XCJcbiAgICBhcmlhLWNvbnRyb2xzPVwiZGF0ZVwiXG4gICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhIWxvYWROYXRpdmVEYXRlSW5wdXRcIlxuICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyVGFyZ2V0IHx8ICcud20tYXBwJ1wiXG4gICAgW2JzQ29uZmlnXT1cIl9kYXRlT3B0aW9uc1wiXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICNkYXRlcGlja2VyPVwiYnNEYXRlcGlja2VyXCJcbiAgICBic0RhdGVwaWNrZXJcbiAgICBbZGF5c0Rpc2FibGVkXT1cImV4Y2x1ZGVkRGF5c1RvRGlzYWJsZVwiXG4gICAgW2RhdGVzRGlzYWJsZWRdPVwiZXhjbHVkZWREYXRlc1RvRGlzYWJsZVwiXG4gICAgcGxhY2VtZW50PVwiYm90dG9tIHJpZ2h0XCJcbiAgICBbaXNEaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG4gICAgW2JzVmFsdWVdPVwiYnNEYXRhVmFsdWVcIlxuICAgIChvblNob3duKT1cIm9uRGF0ZVBpY2tlck9wZW4oKVwiXG4gICAgKG9uSGlkZGVuKT1cImhpZGVEYXRlcGlja2VyRHJvcGRvd24oKVwiXG4gICAgKGJzVmFsdWVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlKCRldmVudClcIj5cbjwvZGl2PlxuXG5AaWYgKGxvYWROYXRpdmVEYXRlSW5wdXQpIHtcbiAgPHdtLWRhdGV0aW1lcGlja2VyXG4gICAgZGF0ZVRpbWVQaWNrZXJcbiAgICBtb2RlPVwiREFURVwiXG4gICAgW2NvbmZpZ109XCJfZGF0ZU9wdGlvbnNcIlxuICAgIFtwbGFjZW1lbnRdPVwibW9kYWxcIlxuICAgIFtleGNsdWRlZERheXNUb0Rpc2FibGVdPVwiZXhjbHVkZWREYXlzVG9EaXNhYmxlXCJcbiAgICBbZXhjbHVkZWREYXRlc1RvRGlzYWJsZV09XCJleGNsdWRlZERhdGVzVG9EaXNhYmxlXCJcbiAgICBbZGlzcGxheUZvcm1hdF09XCJkYXRlSW5wdXRGb3JtYXRcIlxuICAgIFt2YWx1ZV09XCJic0RhdGFWYWx1ZVwiXG4gICAgKGNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiPlxuICA8L3dtLWRhdGV0aW1lcGlja2VyPlxuICA8ZGl2IGNsYXNzPVwibW9iaWxlLWlucHV0IG1vYmlsZS1kYXRlcGlja2VyLWNvbnRhaW5lclwiXG4gICAgW3RhYmluZGV4XT1cInRhYmluZGV4IHx8IDBcIlxuICAgIChjbGljayk9XCIhKGRpc2FibGVkIHx8IHJlYWRvbmx5KSAmJiBzaG93RGF0ZVBpY2tlck1vZGFsKGJzRGF0YVZhbHVlKVwiXG4gICAgKGZvY3VzKT1cIm9uRGF0ZVRpbWVJbnB1dEZvY3VzKHRydWUpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7XCJcbiAgICAoYmx1cik9XCJvbkRhdGVUaW1lSW5wdXRCbHVyKCk7IGludm9rZU9uVG91Y2hlZCgkZXZlbnQpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRpc3BsYXlWYWx1ZSA/ICdDaGFuZ2UgRGF0ZSAnICsgZGlzcGxheVZhbHVlIDogYXJpYWxhYmVsIHx8ICdDaG9vc2UgRGF0ZSdcIlxuICAgIHJvbGU9XCJidXR0b25cIj5cbiAgPC9kaXY+XG59XG4iXX0=
@@ -224,6 +224,7 @@ class DateComponent extends BaseDateTimeComponent {
224
224
  this.dateContainerCls = `app-date-${this.widgetId}`;
225
225
  this._dateOptions.containerClass = `app-date ${this.dateContainerCls}`;
226
226
  this._dateOptions.showWeekNumbers = false;
227
+ this._dateOptions.customTodayClass = 'current-date';
227
228
  this._bsDefaultLoadCheck = true;
228
229
  this.datepattern = this.appDefaults.dateFormat || getDisplayDateTimeFormat(FormWidgetType.DATE);
229
230
  this.updateFormat('datepattern');
@@ -283,9 +284,9 @@ class DateComponent extends BaseDateTimeComponent {
283
284
  onDatePickerOpen() {
284
285
  this.isOpen = true;
285
286
  this.activeDate = this.bsDataValue ? this.bsDataValue : (this.timeZone ? getMomentLocaleObject(this.timeZone) : new Date());
286
- if (!this.bsDataValue) {
287
- this.hightlightToday(this.activeDate);
288
- }
287
+ // if (!this.bsDataValue) {
288
+ // this.hightlightToday(this.activeDate);
289
+ // }
289
290
  this.updateIMask();
290
291
  if (this.bsDatePickerDirective && (this.dateNotInRange || this.invalidDateTimeFormat)) {
291
292
  this.bsDatePickerDirective._bsValue = null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../projects/components/widgets/input/epoch/date/src/date.props.ts","../../../../../../projects/components/widgets/input/epoch/date/src/imaskUtil.ts","../../../../../../projects/components/widgets/input/epoch/date/src/date.component.ts","../../../../../../projects/components/widgets/input/epoch/date/src/date.component.html","../../../../../../projects/components/widgets/input/epoch/date/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\nimport {FormWidgetType} from '@wm/core';\n\nexport const dateProps = new Map(\n [\n ['autofocus', PROP_BOOLEAN],\n ['class', PROP_STRING],\n ['dataentrymode', { value: 'default', ...PROP_STRING }],\n ['datavaluesource', PROP_ANY],\n ['datavalue', PROP_STRING],\n ['datepattern', PROP_STRING],\n ['disabled', PROP_BOOLEAN],\n ['excludedays', PROP_STRING],\n ['excludedates', PROP_STRING],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['maxdate', PROP_STRING],\n ['mindate', PROP_STRING],\n ['name', PROP_STRING],\n ['outputformat', { value: 'yyyy-MM-dd', ...PROP_STRING }],\n ['placeholder', { value: 'Select Date', ...PROP_STRING }],\n ['readonly', PROP_BOOLEAN],\n ['required', PROP_BOOLEAN],\n ['shortcutkey', PROP_STRING],\n ['show', { value: true, ...PROP_BOOLEAN }],\n ['showdropdownon', { value: 'default', ...PROP_STRING }],\n ['showbuttonbar', { value: true, ...PROP_BOOLEAN }], // TODO not addressed\n ['showcustompicker', { value: false, ...PROP_BOOLEAN }],\n ['showindevice', { displayType: 'inline-block', value: 'all', ...PROP_STRING }],\n ['showweeks', { value: false, ...PROP_BOOLEAN }],\n ['tabindex', { value: 0, ...PROP_NUMBER }],\n ['selectfromothermonth', { value: true, ...PROP_BOOLEAN }],\n ['todaybutton', { value: true, ...PROP_BOOLEAN }],\n ['clearbutton', { value: true, ...PROP_BOOLEAN }],\n ['adaptiveposition', {value: true, ...PROP_BOOLEAN}],\n ['todaybuttonlabel', { value: 'LABEL_TODAY_DATE', ...PROP_STRING }],\n ['clearbuttonlabel', { value: 'LABEL_CLEAR_DATE', ...PROP_STRING }],\n ['showdateformatasplaceholder', PROP_BOOLEAN],\n ['viewmode', { value: 'day', ...PROP_STRING }]\n ]\n);\n\nexport const registerProps = () => {\n register(\n 'wm-date',\n dateProps\n );\n registerFormWidget(\n FormWidgetType.DATE,\n new Map(dateProps)\n );\n};\n","import IMask from \"imask\";\nimport * as momentLib from 'moment';\nconst moment = momentLib.default || window['moment'];\n\nexport function validateTheMaskedDate (format, locale) {\n if(format == 'timestamp') {\n return false;\n }\n let modifiedFormat = format.toUpperCase().replace(/E/g, 'd');\n if((modifiedFormat.split('D').length - 1) === 1) {\n modifiedFormat = modifiedFormat.replace('D', 'DD');\n }\n if((modifiedFormat.split('M').length - 1) === 1 ) {\n modifiedFormat = modifiedFormat.replace('M', 'MM');\n }\n const parseFn= str => {\n return moment(str, modifiedFormat).toDate();\n };\n const formatFn = date => {\n return moment(date, modifiedFormat).format(modifiedFormat);\n };\n return {\n mask: Date,\n pattern: modifiedFormat,\n format: formatFn,\n parse: parseFn,\n\n blocks: {\n YYYY: {\n mask: IMask.MaskedRange,\n from: 1900,\n to: 9999,\n placeholderChar:'Y',\n maxLength: 4,\n },\n YYY: {\n mask: IMask.MaskedRange,\n from: 900,\n to: 999,\n placeholderChar:'Y',\n maxLength: 3,\n },\n YY: {\n mask: IMask.MaskedRange,\n from: 0,\n to: 99,\n placeholderChar:'Y',\n maxLength: 2,\n },\n Y: {\n mask: IMask.MaskedRange,\n from: 1900,\n to: 9999,\n placeholderChar:'Y',\n maxLength: 4,\n },\n M: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n placeholderChar:'M',\n maxLength: 2,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n placeholderChar:'M',\n maxLength: 2,\n },\n MMM: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 12 }, (_, i) =>\n new Date(0, i).toLocaleString(locale, { month: 'short' })\n ),\n placeholderChar:'M',\n maxLength: 3,\n },\n MMMM: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 12 }, (_, i) =>\n new Date(0, i).toLocaleString(locale, { month: 'long' })\n ),\n placeholderChar: \"M\",\n maxLength: 4\n },\n DD: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n placeholderChar:'D',\n maxLength: 2,\n },\n D: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n placeholderChar:'D',\n maxLength: 2,\n },\n ddd: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 7 }, (_, i) =>\n new Date(0, 0, i + 1).toLocaleString(locale, { weekday: 'short' })\n ),\n placeholderChar:'E',\n maxLength: 3,\n },\n dddd: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 7 }, (_, i) =>\n new Date(0, 0, i + 1).toLocaleString(locale, { weekday: 'long' })\n ),\n placeholderChar:'E',\n minLength: 6,\n },\n },\n autofix: true,\n lazy: false,\n overwrite: true,\n skipInvalid: true\n }\n}\n","import {IMaskDirective, IMaskModule} from 'angular-imask';\nimport {ChangeDetectorRef, Component, Inject, Injector, OnDestroy, Optional, ViewChild} from '@angular/core';\nimport {NG_VALIDATORS, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BsDatepickerDirective, BsDatepickerModule} from 'ngx-bootstrap/datepicker';\nimport {\n addEventListenerOnElement,\n adjustContainerPosition,\n adjustContainerRightEdges,\n AppDefaults,\n EVENT_LIFE,\n FormWidgetType,\n getDateObj,\n getDisplayDateTimeFormat,\n getFormattedDate,\n getMomentLocaleObject\n} from '@wm/core';\nimport {IWidgetConfig, provideAs, provideAsWidgetRef, setFocusTrap, styler} from '@wm/components/base';\nimport {BaseDateTimeComponent} from '@wm/components/input/epoch/base-date-time';\nimport {registerProps} from './date.props';\nimport {validateTheMaskedDate} from './imaskUtil';\nimport {includes, isNaN, parseInt} from \"lodash-es\";\nimport {DateTimePickerComponent} from \"@wm/components/input/epoch/date-time-picker\";\n\ndeclare const _, $;\n\nconst CURRENT_DATE = 'CURRENT_DATE';\nconst DEFAULT_CLS = 'app-date input-group';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-date',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n standalone: true,\n imports: [DateTimePickerComponent, IMaskModule, BsDatepickerModule],\n selector: '[wmDate]',\n templateUrl: './date.component.html',\n providers: [\n provideAs(DateComponent, NG_VALUE_ACCESSOR, true),\n provideAs(DateComponent, NG_VALIDATORS, true),\n provideAsWidgetRef(DateComponent)\n ]\n})\nexport class DateComponent extends BaseDateTimeComponent {\n static initializeProps = registerProps();\n\n public bsDataValue;\n public showdropdownon: string;\n private dateContainerCls: string;\n public isOpen: boolean = false;\n private isEnterPressedOnDateInput = false;\n private _bsDefaultLoadCheck: boolean;\n public hint: string;\n public arialabel: string;\n\n private deregisterEventListener;\n private isCurrentDate;\n private focusTrap;\n private showdateformatasplaceholder = false;\n mask;\n private maskDateInputFormat;\n private maskDateInputFormatPlaceholder;\n\n get timestamp() {\n return this.bsDataValue ? this.bsDataValue.valueOf() : undefined;\n }\n\n get dateInputFormat() {\n return this._dateOptions.dateInputFormat || 'yyyy-MM-dd';\n }\n\n get displayValue() {\n if (this.showdateformatasplaceholder && this.imask?.maskRef && this.maskDateInputFormat) {\n return getFormattedDate(this.datePipe, this.bsDataValue, this.maskDateInputFormat, this.timeZone, null, this.isCurrentDate, this) || '';\n }\n return getFormattedDate(this.datePipe, this.bsDataValue, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this) || '';\n }\n\n get nativeDisplayValue() {\n return getFormattedDate(this.datePipe, this.bsDataValue, 'yyyy-MM-dd', this.timeZone, null, this.isCurrentDate, this) || '';\n }\n\n // @ts-ignore\n get datavalue() {\n return getFormattedDate(this.datePipe, this.bsDataValue, this.outputformat, this.timeZone, null, this.isCurrentDate, this) || '';\n }\n\n // Todo[Shubham]: needs to be redefined\n // sets the dataValue and computes the display model values\n // @ts-ignore\n set datavalue(newVal) {\n if (newVal === CURRENT_DATE) {\n setTimeout(() => {\n this.bsDataValue = this.timeZone ? getMomentLocaleObject(this.timeZone) : new Date();\n }, 50);\n this.isCurrentDate = true;\n } else {\n this.bsDataValue = newVal ? getDateObj(newVal, { isNativePicker: this.loadNativeDateInput }, this.timeZone) : undefined;\n this.isCurrentDate = false;\n }\n // update the previous datavalue.\n this.invokeOnChange(this.datavalue, undefined, true);\n this.cdRef.detectChanges();\n }\n\n @ViewChild(BsDatepickerDirective) protected bsDatePickerDirective;\n @ViewChild('dateInput', { read: IMaskDirective }) imask: IMaskDirective<any>;\n\n // TODO use BsLocaleService to set the current user's locale to see the localized labels\n constructor(\n inj: Injector,\n private cdRef: ChangeDetectorRef,\n private appDefaults: AppDefaults,\n @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any\n ) {\n super(inj, WIDGET_CONFIG, explicitContext);\n styler(this.nativeElement, this);\n\n this.dateContainerCls = `app-date-${this.widgetId}`;\n this._dateOptions.containerClass = `app-date ${this.dateContainerCls}`;\n this._dateOptions.showWeekNumbers = false;\n this._bsDefaultLoadCheck = true;\n this.datepattern = this.appDefaults.dateFormat || getDisplayDateTimeFormat(FormWidgetType.DATE);\n this.updateFormat('datepattern');\n }\n /**\n * This is an internal method triggered when the date input changes\n */\n onDisplayDateChange($event, isNativePicker: boolean = false) {\n this.updateIMask();\n if (this.isEnterPressedOnDateInput) {\n this.isEnterPressedOnDateInput = false;\n return;\n }\n let inputVal = $event.target.value;\n // When the input is cleared, the input value becomes maskDateInputFormatPlaceholder. This causes a validation error.\n // When the input value is equal to maskDateInputFormatPlaceholder, it means that the input is in an empty state.\n if (this.showdateformatasplaceholder && inputVal === this.maskDateInputFormatPlaceholder) {\n inputVal = \"\";\n }\n const newVal = getDateObj(inputVal, { pattern: this.datepattern, isNativePicker: isNativePicker });\n // date pattern validation\n // if invalid pattern is entered, device is showing an error.\n if (!this.formatValidation(newVal, inputVal, isNativePicker)) {\n return;\n }\n // min date and max date validation in mobile view.\n // if invalid dates are entered, device is showing an alert.\n if (isNativePicker && this.minDateMaxDateValidationOnInput(newVal, $event, this.displayValue, isNativePicker)) {\n return;\n }\n this.setDataValue(newVal);\n }\n\n // sets the dataValue and computes the display model values\n private setDataValue(newVal): void {\n this.invalidDateTimeFormat = false;\n // min date and max date validation in web.\n // if invalid dates are entered, device is showing validation message.\n this.minDateMaxDateValidationOnInput(newVal);\n if (getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this) === this.displayValue) {\n $(this.nativeElement).find('.display-input').val(this.displayValue);\n }\n if(!this.dateNotInRange){\n if (newVal) {\n this.bsDataValue = newVal;\n this.updateIMask();\n } else {\n this.bsDataValue = undefined;\n }\n if(this.datavalue=== this.getPrevDataValue()){\n const date=getFormattedDate(this.datePipe, this.datavalue, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this)\n $(this.nativeElement).find('.display-input').val(date);}\n }\n this.invokeOnChange(this.datavalue, {}, true);\n }\n\n onDatePickerOpen() {\n this.isOpen = true;\n this.activeDate = this.bsDataValue ? this.bsDataValue : (this.timeZone ? getMomentLocaleObject(this.timeZone) : new Date());\n if (!this.bsDataValue) {\n this.hightlightToday(this.activeDate);\n }\n this.updateIMask();\n if (this.bsDatePickerDirective && (this.dateNotInRange||this.invalidDateTimeFormat)) {\n this.bsDatePickerDirective._bsValue = null;\n }\n\n // We are using the two input tags(To maintain the modal and proxy modal) for the date control.\n // So actual bootstrap input target width we made it to 0, so bootstrap calculating the calendar container top position improperly.\n // To fix the container top position set the width 1px;\n this.$element.find('.model-holder').width('1px');\n const dpContainerEl = $('bs-datepicker-container');\n dpContainerEl.attr('aria-label', 'Use Arrow keys to navigate dates, Choose Date from datepicker');\n $('.bs-calendar-container').removeAttr('role');\n const datePickerContainer = $('.bs-datepicker-container')[0];\n this.focusTrap = setFocusTrap(datePickerContainer, true);\n this.focusTrap.activate();\n this.addDatepickerKeyboardEvents(this, false);\n adjustContainerPosition($('bs-datepicker-container'), this.nativeElement, this.bsDatePickerDirective._datepicker);\n adjustContainerRightEdges($('bs-datepicker-container'), this.nativeElement, this.bsDatePickerDirective._datepicker);\n\n if (this.timeZone) {\n const todayBtn = document.querySelector(`.${this.dateContainerCls} .bs-datepicker-buttons .btn-today-wrapper button`) as HTMLElement;\n const setTodayTZHandler = (event) => {\n const todayTZ = getMomentLocaleObject(this.timeZone);\n if (new Date(this.bsDataValue).toDateString() !== new Date(todayTZ).toDateString()) {\n this.bsDataValue = todayTZ;\n }\n todayBtn.removeEventListener('click', setTodayTZHandler);\n };\n todayBtn.addEventListener('click', setTodayTZHandler)\n }\n }\n onInputBlur($event) {\n this.updateIMask();\n if (!$($event.relatedTarget).hasClass('current-date')) {\n this.invokeOnTouched();\n this.invokeEventCallback('blur', { $event });\n }\n }\n\n updateIMask() {\n this.imask?.maskRef?.updateValue();\n }\n\n public hideDatepickerDropdown() {\n this.invokeOnTouched();\n this.isOpen = false;\n this.focusTrap?.deactivate();\n this.isEnterPressedOnDateInput = false;\n if (this.deregisterEventListener) {\n this.deregisterEventListener();\n }\n this.blurDateInput(this.isOpen);\n }\n\n // change and blur events are added from the template\n protected handleEvent(node: HTMLElement, eventName: string, callback: Function, locals: any) {\n if (!includes(['blur', 'focus', 'change', 'click'], eventName)) {\n super.handleEvent(node, eventName, callback, locals);\n }\n }\n\n /**\n * This is an internal method used to toggle the dropdown of the date widget\n */\n public toggleDpDropdown($event, skipFocus: boolean = false) {\n if (this.loadNativeDateInput) {\n // Fixes click event getting triggred twice in Mobile devices.\n if (!skipFocus) {\n this.onDateTimeInputFocus();\n }\n }\n if ($event.type === 'click') {\n this.invokeEventCallback('click', { $event: $event });\n // this.focusOnInputEl();\n }\n if ($event.target && $($event.target).is('input') && !(this.isDropDownDisplayEnabledOnInput(this.showdropdownon))) {\n $event.stopPropagation();\n return;\n }\n this.bsDatePickerDirective.toggle();\n this.addBodyClickListener(this.bsDatePickerDirective.isOpen);\n }\n\n private addBodyClickListener(skipListener) {\n if (!skipListener) {\n return;\n }\n const bodyElement = document.querySelector('body');\n setTimeout(() => {\n const bsDateContainerElement = bodyElement.querySelector(`.${this.dateContainerCls}`);\n this.deregisterEventListener = addEventListenerOnElement(bodyElement, bsDateContainerElement, this.nativeElement, 'click', this.isDropDownDisplayEnabledOnInput(this.showdropdownon), () => {\n this.isOpen = false;\n }, EVENT_LIFE.ONCE, true);\n }, 350);\n }\n\n /**\n * This is an internal method triggered when pressing key on the date input\n */\n public onDisplayKeydown(event) {\n if (this.isDropDownDisplayEnabledOnInput(this.showdropdownon)) {\n event.stopPropagation();\n if (event.key === 'Enter') {\n const newVal = getDateObj(event.target.value, { pattern: this.datepattern });\n event.preventDefault();\n const formattedDate = getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this);\n let inputVal = event.target.value.trim();\n if (this.showdateformatasplaceholder && inputVal === this.maskDateInputFormatPlaceholder) {\n inputVal = \"\";\n }\n if (inputVal && this.datepattern === 'timestamp') {\n if (!isNaN(inputVal) && parseInt(inputVal) !== formattedDate) {\n this.invalidDateTimeFormat = true;\n this.invokeOnChange(this.datavalue, event, false);\n }\n } else if (inputVal && inputVal !== formattedDate) {\n this.invalidDateTimeFormat = true;\n this.invokeOnChange(this.datavalue, event, false);\n } else {\n this.invalidDateTimeFormat = false;\n this.isEnterPressedOnDateInput = true;\n this.bsDatePickerDirective.bsValue = inputVal ? newVal : '';\n this.updateIMask();\n }\n this.toggleDpDropdown(event);\n } else {\n this.hideDatepickerDropdown();\n }\n } else {\n this.hideDatepickerDropdown();\n }\n }\n\n /**\n * This is an internal method triggered when the date selection changes\n */\n onDateChange(newVal): void {\n /**\n * Ngx-bootstrap upgrade : To avoid the page load datechange event;\n * TODO:\n * https://github.com/valor-software/ngx-bootstrap/issues/6016\n * For above issue, once we get the solution from Ngx-Bootstrap team, remove the _bsDefaultLoadCheck check and update accordingly.\n * */\n if (this._bsDefaultLoadCheck) {\n this._bsDefaultLoadCheck = false;\n return;\n }\n\n this.setDataValue(newVal);\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'showdateformatasplaceholder') {\n this.showdateformatasplaceholder = nv;\n this.imask?.destroyMask();\n if (this.showdateformatasplaceholder && this.datepattern !== 'timestamp') {\n this.mask = validateTheMaskedDate(this.datepattern, this.selectedLocale);\n this.maskDateInputFormat = this.dateInputFormat;\n this.maskDateInputFormat = (this.dateInputFormat.split('d').length - 1) === 1 ? this.maskDateInputFormat.replace('d', 'dd') : this.maskDateInputFormat;\n this.maskDateInputFormat = (this.dateInputFormat.split('M').length - 1) === 1 ? this.maskDateInputFormat.replace('M', 'MM') : this.maskDateInputFormat;\n this.maskDateInputFormatPlaceholder = this.maskDateInputFormat.toUpperCase().replace('EEEE', 'EEEEEE').replace('MMMM', 'MMM');\n this.updateIMask();\n }\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Clean up event listener deregister function\n if (this.deregisterEventListener) {\n this.deregisterEventListener();\n this.deregisterEventListener = null;\n }\n\n // MEMORY LEAK FIX: Clear ViewChild references\n this.bsDatePickerDirective = null;\n this.imask = null;\n\n // MEMORY LEAK FIX: Deactivate focus trap if active\n if (this.focusTrap) {\n this.focusTrap.deactivate();\n this.focusTrap = null;\n }\n\n // MEMORY LEAK FIX: Clear removeKeyupListener if set\n if (this.removeKeyupListener) {\n this.removeKeyupListener();\n this.removeKeyupListener = null;\n }\n\n // Call parent ngOnDestroy (BaseDateTimeComponent has cleanup)\n super.ngOnDestroy();\n }\n}\n","<input class=\"form-control app-textbox app-dateinput display-input\"\n focus-target\n type=\"text\"\n [name]=\"name\"\n #dateInput\n [imask]=\"mask\"\n [unmask]=\"true\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event); updateIMask()\"\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]=\"arialabel\"\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 [attr.aria-expanded]=\"isOpen\"\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 || '.wm-app'\"\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@if (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 (click)=\"!(disabled || readonly) && showDatePickerModal(bsDataValue)\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event);\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : arialabel || 'Choose Date'\"\n role=\"button\">\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGO,MAAM,SAAS,GAAG,IAAI,GAAG,CAC5B;IACI,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,CAAC;IACvD,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IAC7B,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,aAAa,EAAE,WAAW,CAAC;IAC5B,CAAC,UAAU,EAAE,YAAY,CAAC;IAC1B,CAAC,aAAa,EAAE,WAAW,CAAC;IAC5B,CAAC,cAAc,EAAE,WAAW,CAAC;IAC7B,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,SAAS,EAAE,WAAW,CAAC;IACxB,CAAC,SAAS,EAAE,WAAW,CAAC;IACxB,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC;IACzD,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAAC;IACzD,CAAC,UAAU,EAAE,YAAY,CAAC;IAC1B,CAAC,UAAU,EAAE,YAAY,CAAC;IAC1B,CAAC,aAAa,EAAE,WAAW,CAAC;IAC5B,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1C,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,CAAC;AACxD,IAAA,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IACnD,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;AACvD,IAAA,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;IAC/E,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;IAChD,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC;IAC1C,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1D,CAAC,aAAa,EAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAClD,CAAC,aAAa,EAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAClD,CAAC,kBAAkB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAC,CAAC;IACpD,CAAC,kBAAkB,EAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAAC;IACpE,CAAC,kBAAkB,EAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAAC;IACpE,CAAC,6BAA6B,EAAE,YAAY,CAAC;IAC7C,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE;AAChD,CAAA,CACJ;AAEM,MAAM,aAAa,GAAG,MAAK;AAC9B,IAAA,QAAQ,CACJ,SAAS,EACT,SAAS,CACZ;IACD,kBAAkB,CACd,cAAc,CAAC,IAAI,EACnB,IAAI,GAAG,CAAC,SAAS,CAAC,CACrB;AACL,CAAC;;ACjDD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC;AAE9C,SAAU,qBAAqB,CAAE,MAAM,EAAE,MAAM,EAAA;AACjD,IAAA,IAAG,MAAM,IAAI,WAAW,EAAE;AACtB,QAAA,OAAO,KAAK;IAChB;AACA,IAAA,IAAI,cAAc,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC5D,IAAA,IAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE;QAC7C,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;IACtD;AACA,IAAA,IAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,EAAG;QAC9C,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;IACtD;AACA,IAAA,MAAM,OAAO,GAAG,GAAG,IAAG;QAClB,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,MAAM,EAAE;AAC/C,IAAA,CAAC;AACD,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAG;QAChB,OAAO,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;AAC9D,IAAA,CAAC;IACL,OAAO;AACH,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,KAAK,EAAE,OAAO;AAEd,QAAA,MAAM,EAAE;AACJ,YAAA,IAAI,EAAE;gBACF,IAAI,EAAE,KAAK,CAAC,WAAW;AACnB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,EAAE,EAAE,IAAI;AACR,gBAAA,eAAe,EAAC,GAAG;AACvB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,GAAG,EAAE;gBACD,IAAI,EAAE,KAAK,CAAC,WAAW;AACvB,gBAAA,IAAI,EAAE,GAAG;AACT,gBAAA,EAAE,EAAE,GAAG;AACP,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,EAAE,EAAE;gBACA,IAAI,EAAE,KAAK,CAAC,WAAW;AACvB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,CAAC,EAAE;gBACC,IAAI,EAAE,KAAK,CAAC,WAAW;AACvB,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,EAAE,EAAE,IAAI;AACR,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,CAAC,EAAE;gBACC,IAAI,EAAE,KAAK,CAAC,WAAW;AACvB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,EAAE,EAAE;gBACA,IAAI,EAAE,KAAK,CAAC,WAAW;AACvB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,GAAG,EAAE;gBACD,IAAI,EAAE,KAAK,CAAC,UAAU;AACtB,gBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAClC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAC5D;AACD,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACF,IAAI,EAAE,KAAK,CAAC,UAAU;AACvB,gBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KACjC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAC3D;AACD,gBAAA,eAAe,EAAE,GAAG;AACpB,gBAAA,SAAS,EAAE;AACd,aAAA;AACD,YAAA,EAAE,EAAE;gBACA,IAAI,EAAE,KAAK,CAAC,WAAW;AACvB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,CAAC,EAAE;gBACC,IAAI,EAAE,KAAK,CAAC,WAAW;AACvB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,EAAE,EAAE,EAAE;AACN,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,GAAG,EAAE;gBACD,IAAI,EAAE,KAAK,CAAC,UAAU;AACtB,gBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KACjC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CACrE;AACD,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACD,YAAA,IAAI,EAAE;gBACF,IAAI,EAAE,KAAK,CAAC,UAAU;AACtB,gBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KACjC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CACpE;AACD,gBAAA,eAAe,EAAC,GAAG;AACnB,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,WAAW,EAAE;KAChB;AACL;;ACjGA,MAAM,YAAY,GAAG,cAAc;AACnC,MAAM,WAAW,GAAG,sBAAsB;AAC1C,MAAM,aAAa,GAAkB;AACjC,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,SAAS,EAAE;CACd;AAaK,MAAO,aAAc,SAAQ,qBAAqB,CAAA;AAC7C,IAAA,SAAA,IAAA,CAAA,eAAe,GAAG,aAAa,EAAhB,CAAmB;AAmBzC,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,SAAS;IACpE;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,YAAY;IAC5D;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACrF,YAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE;QAC3I;AACA,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE;IACvI;AAEA,IAAA,IAAI,kBAAkB,GAAA;QAClB,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE;IAC/H;;AAGA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE;IACpI;;;;IAKA,IAAI,SAAS,CAAC,MAAM,EAAA;AAChB,QAAA,IAAI,MAAM,KAAK,YAAY,EAAE;YACzB,UAAU,CAAC,MAAK;gBACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE;YACxF,CAAC,EAAE,EAAE,CAAC;AACN,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC7B;aAAO;YACH,IAAI,CAAC,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS;AACvH,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC9B;;QAEA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;IAC9B;;AAMA,IAAA,WAAA,CACI,GAAa,EACL,KAAwB,EACxB,WAAwB,EACQ,eAAoB,EAAA;AAE5D,QAAA,KAAK,CAAC,GAAG,EAAE,aAAa,EAAE,eAAe,CAAC;QAJlC,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,WAAW,GAAX,WAAW;QA/DhB,IAAA,CAAA,MAAM,GAAY,KAAK;QACtB,IAAA,CAAA,yBAAyB,GAAG,KAAK;QAQjC,IAAA,CAAA,2BAA2B,GAAG,KAAK;AA0DvC,QAAA,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;QAEhC,IAAI,CAAC,gBAAgB,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,QAAQ,EAAE;QACnD,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,YAAY,IAAI,CAAC,gBAAgB,CAAA,CAAE;AACtE,QAAA,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,KAAK;AACzC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC;AAC/F,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;IACpC;AACA;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAM,EAAE,cAAA,GAA0B,KAAK,EAAA;QACvD,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAChC,YAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;YACtC;QACJ;AACA,QAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK;;;QAGlC,IAAI,IAAI,CAAC,2BAA2B,IAAI,QAAQ,KAAK,IAAI,CAAC,8BAA8B,EAAE;YACtF,QAAQ,GAAG,EAAE;QACjB;AACA,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;;;AAGlG,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE;YAC1D;QACJ;;;AAGA,QAAA,IAAI,cAAc,IAAI,IAAI,CAAC,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE;YAC3G;QACJ;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAC7B;;AAGQ,IAAA,YAAY,CAAC,MAAM,EAAA;AACvB,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;;;AAGlC,QAAA,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE;AACpI,YAAA,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QACvE;AACA,QAAA,IAAG,CAAC,IAAI,CAAC,cAAc,EAAC;YACpB,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM;gBACzB,IAAI,CAAC,WAAW,EAAE;YACtB;iBAAO;AACH,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;YAChC;YACA,IAAG,IAAI,CAAC,SAAS,KAAI,IAAI,CAAC,gBAAgB,EAAE,EAAC;AACzC,gBAAA,MAAM,IAAI,GAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;AAC/H,gBAAA,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAAC;QAC/D;QACA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC;IACjD;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AAC3H,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QACzC;QACA,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,qBAAqB,KAAK,IAAI,CAAC,cAAc,IAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE;AACjF,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,GAAG,IAAI;QAC9C;;;;AAKA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;AAChD,QAAA,MAAM,aAAa,GAAG,CAAC,CAAC,yBAAyB,CAAC;AAClD,QAAA,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,+DAA+D,CAAC;QACjG,CAAC,CAAC,wBAAwB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9C,MAAM,mBAAmB,GAAG,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AACzB,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC;AAC7C,QAAA,uBAAuB,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;AACjH,QAAA,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;AAEnH,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAA,iDAAA,CAAmD,CAAgB;AACpI,YAAA,MAAM,iBAAiB,GAAG,CAAC,KAAK,KAAI;gBAChC,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACpD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;AAChF,oBAAA,IAAI,CAAC,WAAW,GAAG,OAAO;gBAC9B;AACA,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC;AAC5D,YAAA,CAAC;AACD,YAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC;QACzD;IACJ;AACA,IAAA,WAAW,CAAC,MAAM,EAAA;QACd,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACnD,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;QAChD;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE;IACtC;IAEO,sBAAsB,GAAA;QACzB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE;AAC5B,QAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,EAAE;QAClC;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;;AAGU,IAAA,WAAW,CAAC,IAAiB,EAAE,SAAiB,EAAE,QAAkB,EAAE,MAAW,EAAA;AACvF,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE;YAC5D,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC;QACxD;IACJ;AAEA;;AAEG;AACI,IAAA,gBAAgB,CAAC,MAAM,EAAE,SAAA,GAAqB,KAAK,EAAA;AACtD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;;YAE1B,IAAI,CAAC,SAAS,EAAE;gBACZ,IAAI,CAAC,oBAAoB,EAAE;YAC/B;QACJ;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;QAEzD;AACA,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE;YAC/G,MAAM,CAAC,eAAe,EAAE;YACxB;QACJ;AACA,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE;QACnC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;IAChE;AAEQ,IAAA,oBAAoB,CAAC,YAAY,EAAA;QACrC,IAAI,CAAC,YAAY,EAAE;YACf;QACJ;QACA,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAClD,UAAU,CAAC,MAAK;AACZ,YAAA,MAAM,sBAAsB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAA,CAAE,CAAC;YACrF,IAAI,CAAC,uBAAuB,GAAG,yBAAyB,CAAC,WAAW,EAAE,sBAAsB,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,MAAK;AACvL,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACvB,CAAC,EAAA,CAAA,wBAAmB,IAAI,CAAC;QAC7B,CAAC,EAAE,GAAG,CAAC;IACX;AAEA;;AAEG;AACI,IAAA,gBAAgB,CAAC,KAAK,EAAA;QACzB,IAAI,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YAC3D,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;AACvB,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5E,KAAK,CAAC,cAAc,EAAE;gBACtB,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;gBAClI,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;gBACxC,IAAI,IAAI,CAAC,2BAA2B,IAAI,QAAQ,KAAK,IAAI,CAAC,8BAA8B,EAAE;oBACtF,QAAQ,GAAG,EAAE;gBACjB;gBACA,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;AAC9C,oBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,aAAa,EAAE;AAC1D,wBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;wBACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;oBACrD;gBACJ;AAAO,qBAAA,IAAI,QAAQ,IAAI,QAAQ,KAAK,aAAa,EAAE;AAC/C,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;oBACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;gBACrD;qBAAO;AACH,oBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,oBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,oBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,EAAE;oBAC3D,IAAI,CAAC,WAAW,EAAE;gBACtB;AACA,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAChC;iBAAO;gBACH,IAAI,CAAC,sBAAsB,EAAE;YACjC;QACJ;aAAO;YACH,IAAI,CAAC,sBAAsB,EAAE;QACjC;IACJ;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,MAAM,EAAA;AACf;;;;;AAKK;AACL,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;YAChC;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,gBAAgB,CAAC,GAAW,EAAE,EAAO,EAAE,EAAQ,EAAA;AAC3C,QAAA,IAAI,GAAG,KAAK,6BAA6B,EAAE;AACvC,YAAA,IAAI,CAAC,2BAA2B,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE;YACzB,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;AACtE,gBAAA,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;AACxE,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe;AAC/C,gBAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB;AACtJ,gBAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB;gBACtJ,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;gBAC7H,IAAI,CAAC,WAAW,EAAE;YACtB;QACJ;aAAO;YACH,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;QACvC;IACJ;IAEA,WAAW,GAAA;;AAEP,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;QACvC;;AAGA,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;AAGjB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACzB;;AAGA,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QACnC;;QAGA,KAAK,CAAC,WAAW,EAAE;IACvB;AA7US,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,sGAsEV,kBAAkB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAtErB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EANX;AACP,YAAA,SAAS,CAAC,aAAa,EAAE,iBAAiB,EAAE,IAAI,CAAC;AACjD,YAAA,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;YAC7C,kBAAkB,CAAC,aAAa;SACnC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgEU,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACA,cAAc,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1GlD,s4FA+EA,4CD7Cc,uBAAuB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FASzD,aAAa,EAAA,UAAA,EAAA,CAAA;kBAXzB,SAAS;iCACM,IAAI,EAAA,OAAA,EACP,CAAC,uBAAuB,EAAE,WAAW,EAAE,kBAAkB,CAAC,EAAA,QAAA,EACzD,UAAU,EAAA,SAAA,EAET;AACP,wBAAA,SAAS,CAAA,aAAA,EAAgB,iBAAiB,EAAE,IAAI,CAAC;AACjD,wBAAA,SAAS,CAAA,aAAA,EAAgB,aAAa,EAAE,IAAI,CAAC;AAC7C,wBAAA,kBAAkB,CAAA,aAAA;AACrB,qBAAA,EAAA,QAAA,EAAA,s4FAAA,EAAA;;0BAwEI,MAAM;2BAAC,kBAAkB;;0BAAG;yCARW,qBAAqB,EAAA,CAAA;sBAAhE,SAAS;uBAAC,qBAAqB;gBACkB,KAAK,EAAA,CAAA;sBAAtD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;;;AE1GpD;;AAEG;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../projects/components/widgets/input/epoch/date/src/date.props.ts","../../../../../../projects/components/widgets/input/epoch/date/src/imaskUtil.ts","../../../../../../projects/components/widgets/input/epoch/date/src/date.component.ts","../../../../../../projects/components/widgets/input/epoch/date/src/date.component.html","../../../../../../projects/components/widgets/input/epoch/date/src/index.ts"],"sourcesContent":["import {PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget} from '@wm/components/base';\nimport {FormWidgetType} from '@wm/core';\n\nexport const dateProps = new Map(\n [\n ['autofocus', PROP_BOOLEAN],\n ['class', PROP_STRING],\n ['dataentrymode', { value: 'default', ...PROP_STRING }],\n ['datavaluesource', PROP_ANY],\n ['datavalue', PROP_STRING],\n ['datepattern', PROP_STRING],\n ['disabled', PROP_BOOLEAN],\n ['excludedays', PROP_STRING],\n ['excludedates', PROP_STRING],\n ['hint', PROP_STRING],\n ['arialabel', PROP_STRING],\n ['maxdate', PROP_STRING],\n ['mindate', PROP_STRING],\n ['name', PROP_STRING],\n ['outputformat', { value: 'yyyy-MM-dd', ...PROP_STRING }],\n ['placeholder', { value: 'Select Date', ...PROP_STRING }],\n ['readonly', PROP_BOOLEAN],\n ['required', PROP_BOOLEAN],\n ['shortcutkey', PROP_STRING],\n ['show', { value: true, ...PROP_BOOLEAN }],\n ['showdropdownon', { value: 'default', ...PROP_STRING }],\n ['showbuttonbar', { value: true, ...PROP_BOOLEAN }], // TODO not addressed\n ['showcustompicker', { value: false, ...PROP_BOOLEAN }],\n ['showindevice', { displayType: 'inline-block', value: 'all', ...PROP_STRING }],\n ['showweeks', { value: false, ...PROP_BOOLEAN }],\n ['tabindex', { value: 0, ...PROP_NUMBER }],\n ['selectfromothermonth', { value: true, ...PROP_BOOLEAN }],\n ['todaybutton', { value: true, ...PROP_BOOLEAN }],\n ['clearbutton', { value: true, ...PROP_BOOLEAN }],\n ['adaptiveposition', {value: true, ...PROP_BOOLEAN}],\n ['todaybuttonlabel', { value: 'LABEL_TODAY_DATE', ...PROP_STRING }],\n ['clearbuttonlabel', { value: 'LABEL_CLEAR_DATE', ...PROP_STRING }],\n ['showdateformatasplaceholder', PROP_BOOLEAN],\n ['viewmode', { value: 'day', ...PROP_STRING }]\n ]\n);\n\nexport const registerProps = () => {\n register(\n 'wm-date',\n dateProps\n );\n registerFormWidget(\n FormWidgetType.DATE,\n new Map(dateProps)\n );\n};\n","import IMask from \"imask\";\nimport * as momentLib from 'moment';\nconst moment = momentLib.default || window['moment'];\n\nexport function validateTheMaskedDate (format, locale) {\n if(format == 'timestamp') {\n return false;\n }\n let modifiedFormat = format.toUpperCase().replace(/E/g, 'd');\n if((modifiedFormat.split('D').length - 1) === 1) {\n modifiedFormat = modifiedFormat.replace('D', 'DD');\n }\n if((modifiedFormat.split('M').length - 1) === 1 ) {\n modifiedFormat = modifiedFormat.replace('M', 'MM');\n }\n const parseFn= str => {\n return moment(str, modifiedFormat).toDate();\n };\n const formatFn = date => {\n return moment(date, modifiedFormat).format(modifiedFormat);\n };\n return {\n mask: Date,\n pattern: modifiedFormat,\n format: formatFn,\n parse: parseFn,\n\n blocks: {\n YYYY: {\n mask: IMask.MaskedRange,\n from: 1900,\n to: 9999,\n placeholderChar:'Y',\n maxLength: 4,\n },\n YYY: {\n mask: IMask.MaskedRange,\n from: 900,\n to: 999,\n placeholderChar:'Y',\n maxLength: 3,\n },\n YY: {\n mask: IMask.MaskedRange,\n from: 0,\n to: 99,\n placeholderChar:'Y',\n maxLength: 2,\n },\n Y: {\n mask: IMask.MaskedRange,\n from: 1900,\n to: 9999,\n placeholderChar:'Y',\n maxLength: 4,\n },\n M: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n placeholderChar:'M',\n maxLength: 2,\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n placeholderChar:'M',\n maxLength: 2,\n },\n MMM: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 12 }, (_, i) =>\n new Date(0, i).toLocaleString(locale, { month: 'short' })\n ),\n placeholderChar:'M',\n maxLength: 3,\n },\n MMMM: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 12 }, (_, i) =>\n new Date(0, i).toLocaleString(locale, { month: 'long' })\n ),\n placeholderChar: \"M\",\n maxLength: 4\n },\n DD: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n placeholderChar:'D',\n maxLength: 2,\n },\n D: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n placeholderChar:'D',\n maxLength: 2,\n },\n ddd: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 7 }, (_, i) =>\n new Date(0, 0, i + 1).toLocaleString(locale, { weekday: 'short' })\n ),\n placeholderChar:'E',\n maxLength: 3,\n },\n dddd: {\n mask: IMask.MaskedEnum,\n enum: Array.from({ length: 7 }, (_, i) =>\n new Date(0, 0, i + 1).toLocaleString(locale, { weekday: 'long' })\n ),\n placeholderChar:'E',\n minLength: 6,\n },\n },\n autofix: true,\n lazy: false,\n overwrite: true,\n skipInvalid: true\n }\n}\n","import {IMaskDirective, IMaskModule} from 'angular-imask';\nimport {ChangeDetectorRef, Component, Inject, Injector, OnDestroy, Optional, ViewChild} from '@angular/core';\nimport {NG_VALIDATORS, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BsDatepickerDirective, BsDatepickerModule} from 'ngx-bootstrap/datepicker';\nimport {\n addEventListenerOnElement,\n adjustContainerPosition,\n adjustContainerRightEdges,\n AppDefaults,\n EVENT_LIFE,\n FormWidgetType,\n getDateObj,\n getDisplayDateTimeFormat,\n getFormattedDate,\n getMomentLocaleObject\n} from '@wm/core';\nimport {IWidgetConfig, provideAs, provideAsWidgetRef, setFocusTrap, styler} from '@wm/components/base';\nimport {BaseDateTimeComponent} from '@wm/components/input/epoch/base-date-time';\nimport {registerProps} from './date.props';\nimport {validateTheMaskedDate} from './imaskUtil';\nimport {includes, isNaN, parseInt} from \"lodash-es\";\nimport {DateTimePickerComponent} from \"@wm/components/input/epoch/date-time-picker\";\n\ndeclare const _, $;\n\nconst CURRENT_DATE = 'CURRENT_DATE';\nconst DEFAULT_CLS = 'app-date input-group';\nconst WIDGET_CONFIG: IWidgetConfig = {\n widgetType: 'wm-date',\n hostClass: DEFAULT_CLS\n};\n\n@Component({\n standalone: true,\n imports: [DateTimePickerComponent, IMaskModule, BsDatepickerModule],\n selector: '[wmDate]',\n templateUrl: './date.component.html',\n providers: [\n provideAs(DateComponent, NG_VALUE_ACCESSOR, true),\n provideAs(DateComponent, NG_VALIDATORS, true),\n provideAsWidgetRef(DateComponent)\n ]\n})\nexport class DateComponent extends BaseDateTimeComponent {\n static initializeProps = registerProps();\n\n public bsDataValue;\n public showdropdownon: string;\n private dateContainerCls: string;\n public isOpen: boolean = false;\n private isEnterPressedOnDateInput = false;\n private _bsDefaultLoadCheck: boolean;\n public hint: string;\n public arialabel: string;\n\n private deregisterEventListener;\n private isCurrentDate;\n private focusTrap;\n private showdateformatasplaceholder = false;\n mask;\n private maskDateInputFormat;\n private maskDateInputFormatPlaceholder;\n\n get timestamp() {\n return this.bsDataValue ? this.bsDataValue.valueOf() : undefined;\n }\n\n get dateInputFormat() {\n return this._dateOptions.dateInputFormat || 'yyyy-MM-dd';\n }\n\n get displayValue() {\n if (this.showdateformatasplaceholder && this.imask?.maskRef && this.maskDateInputFormat) {\n return getFormattedDate(this.datePipe, this.bsDataValue, this.maskDateInputFormat, this.timeZone, null, this.isCurrentDate, this) || '';\n }\n return getFormattedDate(this.datePipe, this.bsDataValue, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this) || '';\n }\n\n get nativeDisplayValue() {\n return getFormattedDate(this.datePipe, this.bsDataValue, 'yyyy-MM-dd', this.timeZone, null, this.isCurrentDate, this) || '';\n }\n\n // @ts-ignore\n get datavalue() {\n return getFormattedDate(this.datePipe, this.bsDataValue, this.outputformat, this.timeZone, null, this.isCurrentDate, this) || '';\n }\n\n // Todo[Shubham]: needs to be redefined\n // sets the dataValue and computes the display model values\n // @ts-ignore\n set datavalue(newVal) {\n if (newVal === CURRENT_DATE) {\n setTimeout(() => {\n this.bsDataValue = this.timeZone ? getMomentLocaleObject(this.timeZone) : new Date();\n }, 50);\n this.isCurrentDate = true;\n } else {\n this.bsDataValue = newVal ? getDateObj(newVal, { isNativePicker: this.loadNativeDateInput }, this.timeZone) : undefined;\n this.isCurrentDate = false;\n }\n // update the previous datavalue.\n this.invokeOnChange(this.datavalue, undefined, true);\n this.cdRef.detectChanges();\n }\n\n @ViewChild(BsDatepickerDirective) protected bsDatePickerDirective;\n @ViewChild('dateInput', { read: IMaskDirective }) imask: IMaskDirective<any>;\n\n // TODO use BsLocaleService to set the current user's locale to see the localized labels\n constructor(\n inj: Injector,\n private cdRef: ChangeDetectorRef,\n private appDefaults: AppDefaults,\n @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any\n ) {\n super(inj, WIDGET_CONFIG, explicitContext);\n styler(this.nativeElement, this);\n\n this.dateContainerCls = `app-date-${this.widgetId}`;\n this._dateOptions.containerClass = `app-date ${this.dateContainerCls}`;\n this._dateOptions.showWeekNumbers = false;\n this._dateOptions.customTodayClass='current-date';\n this._bsDefaultLoadCheck = true;\n this.datepattern = this.appDefaults.dateFormat || getDisplayDateTimeFormat(FormWidgetType.DATE);\n this.updateFormat('datepattern');\n }\n /**\n * This is an internal method triggered when the date input changes\n */\n onDisplayDateChange($event, isNativePicker: boolean = false) {\n this.updateIMask();\n if (this.isEnterPressedOnDateInput) {\n this.isEnterPressedOnDateInput = false;\n return;\n }\n let inputVal = $event.target.value;\n // When the input is cleared, the input value becomes maskDateInputFormatPlaceholder. This causes a validation error.\n // When the input value is equal to maskDateInputFormatPlaceholder, it means that the input is in an empty state.\n if (this.showdateformatasplaceholder && inputVal === this.maskDateInputFormatPlaceholder) {\n inputVal = \"\";\n }\n const newVal = getDateObj(inputVal, { pattern: this.datepattern, isNativePicker: isNativePicker });\n // date pattern validation\n // if invalid pattern is entered, device is showing an error.\n if (!this.formatValidation(newVal, inputVal, isNativePicker)) {\n return;\n }\n // min date and max date validation in mobile view.\n // if invalid dates are entered, device is showing an alert.\n if (isNativePicker && this.minDateMaxDateValidationOnInput(newVal, $event, this.displayValue, isNativePicker)) {\n return;\n }\n this.setDataValue(newVal);\n }\n\n // sets the dataValue and computes the display model values\n private setDataValue(newVal): void {\n this.invalidDateTimeFormat = false;\n // min date and max date validation in web.\n // if invalid dates are entered, device is showing validation message.\n this.minDateMaxDateValidationOnInput(newVal);\n if (getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this) === this.displayValue) {\n $(this.nativeElement).find('.display-input').val(this.displayValue);\n }\n if(!this.dateNotInRange){\n if (newVal) {\n this.bsDataValue = newVal;\n this.updateIMask();\n } else {\n this.bsDataValue = undefined;\n }\n if(this.datavalue=== this.getPrevDataValue()){\n const date=getFormattedDate(this.datePipe, this.datavalue, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this)\n $(this.nativeElement).find('.display-input').val(date);}\n }\n this.invokeOnChange(this.datavalue, {}, true);\n }\n\n onDatePickerOpen() {\n this.isOpen = true;\n this.activeDate = this.bsDataValue ? this.bsDataValue : (this.timeZone ? getMomentLocaleObject(this.timeZone) : new Date());\n // if (!this.bsDataValue) {\n // this.hightlightToday(this.activeDate);\n // }\n this.updateIMask();\n if (this.bsDatePickerDirective && (this.dateNotInRange||this.invalidDateTimeFormat)) {\n this.bsDatePickerDirective._bsValue = null;\n }\n\n // We are using the two input tags(To maintain the modal and proxy modal) for the date control.\n // So actual bootstrap input target width we made it to 0, so bootstrap calculating the calendar container top position improperly.\n // To fix the container top position set the width 1px;\n this.$element.find('.model-holder').width('1px');\n const dpContainerEl = $('bs-datepicker-container');\n dpContainerEl.attr('aria-label', 'Use Arrow keys to navigate dates, Choose Date from datepicker');\n $('.bs-calendar-container').removeAttr('role');\n const datePickerContainer = $('.bs-datepicker-container')[0];\n this.focusTrap = setFocusTrap(datePickerContainer, true);\n this.focusTrap.activate();\n this.addDatepickerKeyboardEvents(this, false);\n adjustContainerPosition($('bs-datepicker-container'), this.nativeElement, this.bsDatePickerDirective._datepicker);\n adjustContainerRightEdges($('bs-datepicker-container'), this.nativeElement, this.bsDatePickerDirective._datepicker);\n\n if (this.timeZone) {\n const todayBtn = document.querySelector(`.${this.dateContainerCls} .bs-datepicker-buttons .btn-today-wrapper button`) as HTMLElement;\n const setTodayTZHandler = (event) => {\n const todayTZ = getMomentLocaleObject(this.timeZone);\n if (new Date(this.bsDataValue).toDateString() !== new Date(todayTZ).toDateString()) {\n this.bsDataValue = todayTZ;\n }\n todayBtn.removeEventListener('click', setTodayTZHandler);\n };\n todayBtn.addEventListener('click', setTodayTZHandler)\n }\n }\n onInputBlur($event) {\n this.updateIMask();\n if (!$($event.relatedTarget).hasClass('current-date')) {\n this.invokeOnTouched();\n this.invokeEventCallback('blur', { $event });\n }\n }\n\n updateIMask() {\n this.imask?.maskRef?.updateValue();\n }\n\n public hideDatepickerDropdown() {\n this.invokeOnTouched();\n this.isOpen = false;\n this.focusTrap?.deactivate();\n this.isEnterPressedOnDateInput = false;\n if (this.deregisterEventListener) {\n this.deregisterEventListener();\n }\n this.blurDateInput(this.isOpen);\n }\n\n // change and blur events are added from the template\n protected handleEvent(node: HTMLElement, eventName: string, callback: Function, locals: any) {\n if (!includes(['blur', 'focus', 'change', 'click'], eventName)) {\n super.handleEvent(node, eventName, callback, locals);\n }\n }\n\n /**\n * This is an internal method used to toggle the dropdown of the date widget\n */\n public toggleDpDropdown($event, skipFocus: boolean = false) {\n if (this.loadNativeDateInput) {\n // Fixes click event getting triggred twice in Mobile devices.\n if (!skipFocus) {\n this.onDateTimeInputFocus();\n }\n }\n if ($event.type === 'click') {\n this.invokeEventCallback('click', { $event: $event });\n // this.focusOnInputEl();\n }\n if ($event.target && $($event.target).is('input') && !(this.isDropDownDisplayEnabledOnInput(this.showdropdownon))) {\n $event.stopPropagation();\n return;\n }\n this.bsDatePickerDirective.toggle();\n this.addBodyClickListener(this.bsDatePickerDirective.isOpen);\n }\n\n private addBodyClickListener(skipListener) {\n if (!skipListener) {\n return;\n }\n const bodyElement = document.querySelector('body');\n setTimeout(() => {\n const bsDateContainerElement = bodyElement.querySelector(`.${this.dateContainerCls}`);\n this.deregisterEventListener = addEventListenerOnElement(bodyElement, bsDateContainerElement, this.nativeElement, 'click', this.isDropDownDisplayEnabledOnInput(this.showdropdownon), () => {\n this.isOpen = false;\n }, EVENT_LIFE.ONCE, true);\n }, 350);\n }\n\n /**\n * This is an internal method triggered when pressing key on the date input\n */\n public onDisplayKeydown(event) {\n if (this.isDropDownDisplayEnabledOnInput(this.showdropdownon)) {\n event.stopPropagation();\n if (event.key === 'Enter') {\n const newVal = getDateObj(event.target.value, { pattern: this.datepattern });\n event.preventDefault();\n const formattedDate = getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, null, this.isCurrentDate, this);\n let inputVal = event.target.value.trim();\n if (this.showdateformatasplaceholder && inputVal === this.maskDateInputFormatPlaceholder) {\n inputVal = \"\";\n }\n if (inputVal && this.datepattern === 'timestamp') {\n if (!isNaN(inputVal) && parseInt(inputVal) !== formattedDate) {\n this.invalidDateTimeFormat = true;\n this.invokeOnChange(this.datavalue, event, false);\n }\n } else if (inputVal && inputVal !== formattedDate) {\n this.invalidDateTimeFormat = true;\n this.invokeOnChange(this.datavalue, event, false);\n } else {\n this.invalidDateTimeFormat = false;\n this.isEnterPressedOnDateInput = true;\n this.bsDatePickerDirective.bsValue = inputVal ? newVal : '';\n this.updateIMask();\n }\n this.toggleDpDropdown(event);\n } else {\n this.hideDatepickerDropdown();\n }\n } else {\n this.hideDatepickerDropdown();\n }\n }\n\n /**\n * This is an internal method triggered when the date selection changes\n */\n onDateChange(newVal): void {\n /**\n * Ngx-bootstrap upgrade : To avoid the page load datechange event;\n * TODO:\n * https://github.com/valor-software/ngx-bootstrap/issues/6016\n * For above issue, once we get the solution from Ngx-Bootstrap team, remove the _bsDefaultLoadCheck check and update accordingly.\n * */\n if (this._bsDefaultLoadCheck) {\n this._bsDefaultLoadCheck = false;\n return;\n }\n\n this.setDataValue(newVal);\n }\n\n onPropertyChange(key: string, nv: any, ov?: any) {\n if (key === 'showdateformatasplaceholder') {\n this.showdateformatasplaceholder = nv;\n this.imask?.destroyMask();\n if (this.showdateformatasplaceholder && this.datepattern !== 'timestamp') {\n this.mask = validateTheMaskedDate(this.datepattern, this.selectedLocale);\n this.maskDateInputFormat = this.dateInputFormat;\n this.maskDateInputFormat = (this.dateInputFormat.split('d').length - 1) === 1 ? this.maskDateInputFormat.replace('d', 'dd') : this.maskDateInputFormat;\n this.maskDateInputFormat = (this.dateInputFormat.split('M').length - 1) === 1 ? this.maskDateInputFormat.replace('M', 'MM') : this.maskDateInputFormat;\n this.maskDateInputFormatPlaceholder = this.maskDateInputFormat.toUpperCase().replace('EEEE', 'EEEEEE').replace('MMMM', 'MMM');\n this.updateIMask();\n }\n } else {\n super.onPropertyChange(key, nv, ov);\n }\n }\n\n ngOnDestroy() {\n // MEMORY LEAK FIX: Clean up event listener deregister function\n if (this.deregisterEventListener) {\n this.deregisterEventListener();\n this.deregisterEventListener = null;\n }\n\n // MEMORY LEAK FIX: Clear ViewChild references\n this.bsDatePickerDirective = null;\n this.imask = null;\n\n // MEMORY LEAK FIX: Deactivate focus trap if active\n if (this.focusTrap) {\n this.focusTrap.deactivate();\n this.focusTrap = null;\n }\n\n // MEMORY LEAK FIX: Clear removeKeyupListener if set\n if (this.removeKeyupListener) {\n this.removeKeyupListener();\n this.removeKeyupListener = null;\n }\n\n // Call parent ngOnDestroy (BaseDateTimeComponent has cleanup)\n super.ngOnDestroy();\n }\n}\n","<input class=\"form-control app-textbox app-dateinput display-input\"\n focus-target\n type=\"text\"\n [name]=\"name\"\n #dateInput\n [imask]=\"mask\"\n [unmask]=\"true\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event); updateIMask()\"\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]=\"arialabel\"\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 [attr.aria-expanded]=\"isOpen\"\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 || '.wm-app'\"\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@if (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 (click)=\"!(disabled || readonly) && showDatePickerModal(bsDataValue)\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event);\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : arialabel || 'Choose Date'\"\n role=\"button\">\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -147,6 +147,7 @@
147
147
  this.dateContainerCls = `app-date-${this.widgetId}`;
148
148
  this._dateOptions.containerClass = `app-date ${this.dateContainerCls}`;
149
149
  this._dateOptions.showWeekNumbers = false;
150
+ this._dateOptions.customTodayClass = 'current-date';
150
151
  this.datepattern = this.appDefaults.dateTimeFormat || i1.getDisplayDateTimeFormat(i1.FormWidgetType.DATETIME);
151
152
  this.updateFormat('datepattern');
152
153
  }
@@ -231,7 +232,7 @@
231
232
  this.focusTimePickerPopover(this);
232
233
  this.bindTimePickerKeyboardEvents();
233
234
  i1.adjustContainerPosition($('bs-dropdown-container'), this.nativeElement, this.bsDropdown._dropdown, $('bs-dropdown-container .dropdown-menu'));
234
- i1.adjustContainerRightEdges($('bs-dropdown-container'), this.nativeElement, this.bsDropdown._dropdown, $('bs-dropdown-container .dropdown-menu'));
235
+ // adjustContainerRightEdges($('bs-dropdown-container'), this.nativeElement, this.bsDropdown._dropdown, $('bs-dropdown-container .dropdown-menu'));
235
236
  }
236
237
  onDatePickerOpen() {
237
238
  this.isDateOpen = !this.isDateOpen;
@@ -247,9 +248,9 @@
247
248
  this.focusTrap = base.setFocusTrap(datePickerContainer, true);
248
249
  this.focusTrap.activate();
249
250
  this.bsDateValue ? this.activeDate = this.bsDateValue : this.activeDate = new Date();
250
- if (!this.bsDateValue) {
251
- this.hightlightToday(this.activeDate);
252
- }
251
+ // if (!this.bsDateValue) {
252
+ // this.hightlightToday(this.activeDate);
253
+ // }
253
254
  this.addDatepickerKeyboardEvents(this, true);
254
255
  i1.adjustContainerPosition($('bs-datepicker-container'), this.nativeElement, this.bsDatePickerDirective._datepicker);
255
256
  }