@acorex/components 18.14.0 → 18.14.1-next.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. package/calendar/lib/calendar.component.d.ts +16 -5
  2. package/calendar/lib/calendar.module.d.ts +2 -1
  3. package/check-box/lib/check-box.component.d.ts +13 -5
  4. package/cron-job/README.md +3 -0
  5. package/cron-job/index.d.ts +8 -0
  6. package/cron-job/lib/cron-job-container/cron-job-container.component.d.ts +31 -0
  7. package/cron-job/lib/cron-job.module.d.ts +25 -0
  8. package/cron-job/lib/cron-job.service.d.ts +22 -0
  9. package/cron-job/lib/day/day.component.d.ts +22 -0
  10. package/cron-job/lib/day/day.model.d.ts +61 -0
  11. package/cron-job/lib/day/day.service.d.ts +17 -0
  12. package/cron-job/lib/hours/hours.component.d.ts +14 -0
  13. package/cron-job/lib/hours/hours.model.d.ts +5 -0
  14. package/cron-job/lib/hours/hours.service.d.ts +13 -0
  15. package/cron-job/lib/minutes/minutes.component.d.ts +14 -0
  16. package/cron-job/lib/minutes/minutes.model.d.ts +5 -0
  17. package/cron-job/lib/minutes/minutes.service.d.ts +13 -0
  18. package/cron-job/lib/month/month.component.d.ts +16 -0
  19. package/cron-job/lib/month/month.model.d.ts +5 -0
  20. package/cron-job/lib/month/month.service.d.ts +14 -0
  21. package/cron-job/lib/seconds/seconds.component.d.ts +14 -0
  22. package/cron-job/lib/seconds/seconds.model.d.ts +5 -0
  23. package/cron-job/lib/seconds/seconds.service.d.ts +13 -0
  24. package/cron-job/lib/types/iexpression.d.ts +3 -0
  25. package/cron-job/lib/types/shared.model.d.ts +37 -0
  26. package/cron-job/lib/year/year.component.d.ts +15 -0
  27. package/cron-job/lib/year/year.model.d.ts +16 -0
  28. package/cron-job/lib/year/year.service.d.ts +12 -0
  29. package/datetime-input/lib/datetime-input.component.d.ts +9 -0
  30. package/datetime-picker/lib/datetime-picker.component.d.ts +1 -0
  31. package/esm2022/alert/lib/alert.component.mjs +10 -14
  32. package/esm2022/avatar/lib/avatar.component.mjs +2 -2
  33. package/esm2022/calendar/lib/calendar.component.mjs +186 -158
  34. package/esm2022/calendar/lib/calendar.module.mjs +5 -4
  35. package/esm2022/check-box/lib/check-box.component.mjs +39 -22
  36. package/esm2022/common/lib/components/selection-base.component.class.mjs +2 -1
  37. package/esm2022/cron-job/acorex-components-cron-job.mjs +5 -0
  38. package/esm2022/cron-job/index.mjs +9 -0
  39. package/esm2022/cron-job/lib/cron-job-container/cron-job-container.component.mjs +90 -0
  40. package/esm2022/cron-job/lib/cron-job.module.mjs +80 -0
  41. package/esm2022/cron-job/lib/cron-job.service.mjs +60 -0
  42. package/esm2022/cron-job/lib/day/day.component.mjs +61 -0
  43. package/esm2022/cron-job/lib/day/day.model.mjs +88 -0
  44. package/esm2022/cron-job/lib/day/day.service.mjs +196 -0
  45. package/esm2022/cron-job/lib/hours/hours.component.mjs +38 -0
  46. package/esm2022/cron-job/lib/hours/hours.model.mjs +8 -0
  47. package/esm2022/cron-job/lib/hours/hours.service.mjs +82 -0
  48. package/esm2022/cron-job/lib/minutes/minutes.component.mjs +38 -0
  49. package/esm2022/cron-job/lib/minutes/minutes.model.mjs +8 -0
  50. package/esm2022/cron-job/lib/minutes/minutes.service.mjs +82 -0
  51. package/esm2022/cron-job/lib/month/month.component.mjs +47 -0
  52. package/esm2022/cron-job/lib/month/month.model.mjs +8 -0
  53. package/esm2022/cron-job/lib/month/month.service.mjs +96 -0
  54. package/esm2022/cron-job/lib/seconds/seconds.component.mjs +38 -0
  55. package/esm2022/cron-job/lib/seconds/seconds.model.mjs +8 -0
  56. package/esm2022/cron-job/lib/seconds/seconds.service.mjs +82 -0
  57. package/esm2022/cron-job/lib/types/iexpression.mjs +2 -0
  58. package/esm2022/cron-job/lib/types/shared.model.mjs +49 -0
  59. package/esm2022/cron-job/lib/year/year.component.mjs +45 -0
  60. package/esm2022/cron-job/lib/year/year.model.mjs +28 -0
  61. package/esm2022/cron-job/lib/year/year.service.mjs +82 -0
  62. package/esm2022/datetime-input/lib/datetime-input.component.mjs +38 -10
  63. package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +17 -4
  64. package/esm2022/list/lib/list.component.mjs +3 -3
  65. package/esm2022/loading/lib/loading.component.mjs +7 -3
  66. package/esm2022/loading/lib/loading.service.mjs +3 -3
  67. package/esm2022/radio/lib/radio.component.mjs +3 -3
  68. package/esm2022/selection-list/lib/selection-list.component.mjs +18 -28
  69. package/esm2022/text-box/lib/text-box.component.mjs +11 -8
  70. package/esm2022/time-line/lib/time-line-item.component.mjs +3 -3
  71. package/esm2022/time-line/lib/time-line.component.mjs +18 -4
  72. package/fesm2022/acorex-components-action-sheet.mjs +1 -1
  73. package/fesm2022/acorex-components-alert.mjs +10 -14
  74. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  75. package/fesm2022/acorex-components-audio-wave.mjs +1 -1
  76. package/fesm2022/acorex-components-avatar.mjs +3 -3
  77. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  78. package/fesm2022/acorex-components-badge.mjs +1 -1
  79. package/fesm2022/acorex-components-bottom-navigation.mjs +1 -1
  80. package/fesm2022/acorex-components-breadcrumbs.mjs +1 -1
  81. package/fesm2022/acorex-components-button-group.mjs +1 -1
  82. package/fesm2022/acorex-components-button.mjs +1 -1
  83. package/fesm2022/acorex-components-calendar.mjs +188 -160
  84. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  85. package/fesm2022/acorex-components-check-box.mjs +39 -22
  86. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  87. package/fesm2022/acorex-components-chips.mjs +1 -1
  88. package/fesm2022/acorex-components-circular-progress.mjs +1 -1
  89. package/fesm2022/acorex-components-collapse.mjs +1 -1
  90. package/fesm2022/acorex-components-color-box.mjs +1 -1
  91. package/fesm2022/acorex-components-color-palette.mjs +1 -1
  92. package/fesm2022/acorex-components-comment.mjs +1 -1
  93. package/fesm2022/acorex-components-common.mjs +2 -1
  94. package/fesm2022/acorex-components-common.mjs.map +1 -1
  95. package/fesm2022/acorex-components-conversation.mjs +1 -1
  96. package/fesm2022/acorex-components-cron-job.mjs +1191 -0
  97. package/fesm2022/acorex-components-cron-job.mjs.map +1 -0
  98. package/fesm2022/acorex-components-data-pager.mjs +1 -1
  99. package/fesm2022/acorex-components-data-table.mjs +1 -1
  100. package/fesm2022/acorex-components-datetime-box.mjs +1 -1
  101. package/fesm2022/acorex-components-datetime-input.mjs +36 -8
  102. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  103. package/fesm2022/acorex-components-datetime-picker.mjs +16 -3
  104. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  105. package/fesm2022/acorex-components-decorators.mjs +1 -1
  106. package/fesm2022/acorex-components-dialog.mjs +1 -1
  107. package/fesm2022/acorex-components-drawer.mjs +1 -1
  108. package/fesm2022/acorex-components-dropdown-button.mjs +1 -1
  109. package/fesm2022/acorex-components-dropdown.mjs +1 -1
  110. package/fesm2022/acorex-components-form.mjs +1 -1
  111. package/fesm2022/acorex-components-image-editor.mjs +1 -1
  112. package/fesm2022/acorex-components-image.mjs +1 -1
  113. package/fesm2022/acorex-components-json-viewer.mjs +1 -1
  114. package/fesm2022/acorex-components-label.mjs +1 -1
  115. package/fesm2022/acorex-components-list.mjs +3 -3
  116. package/fesm2022/acorex-components-list.mjs.map +1 -1
  117. package/fesm2022/acorex-components-loading-dialog.mjs +1 -1
  118. package/fesm2022/acorex-components-loading.mjs +9 -5
  119. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  120. package/fesm2022/acorex-components-map.mjs +1 -1
  121. package/fesm2022/acorex-components-media-viewer.mjs +1 -1
  122. package/fesm2022/acorex-components-menu.mjs +1 -1
  123. package/fesm2022/acorex-components-nav.mjs +1 -1
  124. package/fesm2022/acorex-components-navbar.mjs +1 -1
  125. package/fesm2022/acorex-components-notification.mjs +1 -1
  126. package/fesm2022/acorex-components-number-box.mjs +1 -1
  127. package/fesm2022/acorex-components-otp.mjs +1 -1
  128. package/fesm2022/acorex-components-page.mjs +1 -1
  129. package/fesm2022/acorex-components-paint.mjs +1 -1
  130. package/fesm2022/acorex-components-password-box.mjs +1 -1
  131. package/fesm2022/acorex-components-phone-box.mjs +1 -1
  132. package/fesm2022/acorex-components-picker.mjs +1 -1
  133. package/fesm2022/acorex-components-popover.mjs +1 -1
  134. package/fesm2022/acorex-components-popup.mjs +1 -1
  135. package/fesm2022/acorex-components-progress-bar.mjs +1 -1
  136. package/fesm2022/acorex-components-qrcode.mjs +1 -1
  137. package/fesm2022/acorex-components-radio.mjs +3 -3
  138. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  139. package/fesm2022/acorex-components-range-slider.mjs +1 -1
  140. package/fesm2022/acorex-components-rate-picker.mjs +1 -1
  141. package/fesm2022/acorex-components-result.mjs +1 -1
  142. package/fesm2022/acorex-components-routing-progress.mjs +1 -1
  143. package/fesm2022/acorex-components-scheduler.mjs +1 -1
  144. package/fesm2022/acorex-components-search-box.mjs +1 -1
  145. package/fesm2022/acorex-components-select-box.mjs +1 -1
  146. package/fesm2022/acorex-components-selection-list.mjs +18 -28
  147. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  148. package/fesm2022/acorex-components-side-menu.mjs +1 -1
  149. package/fesm2022/acorex-components-skeleton.mjs +1 -1
  150. package/fesm2022/acorex-components-slider.mjs +1 -1
  151. package/fesm2022/acorex-components-step-wizard.mjs +1 -1
  152. package/fesm2022/acorex-components-switch.mjs +1 -1
  153. package/fesm2022/acorex-components-tabs.mjs +1 -1
  154. package/fesm2022/acorex-components-tag.mjs +1 -1
  155. package/fesm2022/acorex-components-text-area.mjs +1 -1
  156. package/fesm2022/acorex-components-text-box.mjs +10 -7
  157. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  158. package/fesm2022/acorex-components-time-line.mjs +19 -5
  159. package/fesm2022/acorex-components-time-line.mjs.map +1 -1
  160. package/fesm2022/acorex-components-toast.mjs +1 -1
  161. package/fesm2022/acorex-components-tooltip.mjs +1 -1
  162. package/fesm2022/acorex-components-uploader.mjs +1 -1
  163. package/fesm2022/acorex-components-wysiwyg.mjs +1 -1
  164. package/package.json +7 -1
  165. package/selection-list/lib/selection-list.component.d.ts +4 -12
  166. package/text-box/lib/text-box.component.d.ts +2 -2
  167. package/time-line/lib/time-line.component.d.ts +2 -0
@@ -1,14 +1,15 @@
1
1
  import { AXValuableComponent, MXInteractiveComponent, MXValueComponent, } from '@acorex/components/common';
2
2
  import { AXDateTimeRange } from '@acorex/core/date-time';
3
- import { ChangeDetectionStrategy, Component, HostBinding, HostListener, ViewEncapsulation, forwardRef } from '@angular/core';
3
+ import { ChangeDetectionStrategy, Component, HostBinding, HostListener, ViewEncapsulation, forwardRef, } from '@angular/core';
4
4
  import { AXUnsubscriber } from '@acorex/core/utils';
5
5
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
6
  import { classes } from 'polytype';
7
- import { MXCalendarBaseComponent } from './calendar.class';
7
+ import { MXCalendarBaseComponent, } from './calendar.class';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@acorex/core/utils";
10
10
  import * as i2 from "@angular/common";
11
- import * as i3 from "@acorex/core/translation";
11
+ import * as i3 from "@acorex/components/common";
12
+ import * as i4 from "@acorex/core/translation";
12
13
  /**
13
14
  * A calendar component that provides a customizable calendar view with various options for selection, navigation, and styling.
14
15
  *
@@ -18,31 +19,6 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
18
19
  get displayRange() {
19
20
  return new AXDateTimeRange(this.views[0].range.startTime, this.views[this.views.length - 1].range.endTime);
20
21
  }
21
- /**
22
- * @ignore
23
- */
24
- _setDisplayRange(current) {
25
- switch (this.activeView) {
26
- case 'year': {
27
- const y = current.startOf('year').year;
28
- const min = y - (y % 10);
29
- const max = min + 9;
30
- return new AXDateTimeRange(this.calendarService.create({
31
- year: min,
32
- month: 1,
33
- date: 1,
34
- }, this.type), this.calendarService.create({
35
- year: max,
36
- month: 12,
37
- date: 28,
38
- }, this.type));
39
- }
40
- case 'month':
41
- return new AXDateTimeRange(current.startOf('year'), current.endOf('year').add('day', -1));
42
- default:
43
- return new AXDateTimeRange(current.startOf('month'), current.endOf('month'));
44
- }
45
- }
46
22
  /**
47
23
  * @ignore
48
24
  */
@@ -111,7 +87,6 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
111
87
  /**
112
88
  * @ignore
113
89
  */
114
- ngOnDestroy() { }
115
90
  render() {
116
91
  if (!this._viewStartDate)
117
92
  return;
@@ -130,137 +105,175 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
130
105
  };
131
106
  this.views = [];
132
107
  for (let i = 0; i < this.count; i++) {
133
- let unit = 'month';
134
- let value = i;
135
- //
136
- if (this.activeView == 'day') {
137
- unit = 'month';
138
- value = i;
108
+ switch (this.activeView) {
109
+ case 'day':
110
+ this.dayView(i, applyCellClass);
111
+ break;
112
+ case 'month':
113
+ this.monthView(i, applyCellClass);
114
+ break;
115
+ case 'year':
116
+ this.yearView(i, applyCellClass);
117
+ break;
139
118
  }
140
- else if (this.activeView == 'month') {
141
- unit = 'year';
142
- value = i;
119
+ }
120
+ this.cdr.markForCheck();
121
+ }
122
+ /**
123
+ * @ignore
124
+ */
125
+ _setDisplayRange(current) {
126
+ switch (this.activeView) {
127
+ case 'year': {
128
+ const y = current.startOf('year').year;
129
+ const min = y - (y % 10);
130
+ const max = min + 9;
131
+ return new AXDateTimeRange(this.calendarService.create({
132
+ year: min,
133
+ month: 1,
134
+ date: 1,
135
+ }, this.type), this.calendarService.create({
136
+ year: max,
137
+ month: 12,
138
+ date: 28,
139
+ }, this.type));
140
+ }
141
+ case 'month':
142
+ return new AXDateTimeRange(current.startOf('year'), current.endOf('year').add('day', -1));
143
+ default:
144
+ return new AXDateTimeRange(current.startOf('month'), current.endOf('month'));
145
+ }
146
+ }
147
+ /**
148
+ * @ignore
149
+ */
150
+ dayView(i, applyCellClass) {
151
+ const current = this._viewStartDate.add('month', i);
152
+ const view = {
153
+ range: this._setDisplayRange(current),
154
+ slots: [],
155
+ };
156
+ this.views.push(view);
157
+ const a = view.range.enumurate('day');
158
+ view.slots = a.map((d, i) => {
159
+ const r = {};
160
+ r.date = d;
161
+ r.text = d.dayOfMonth;
162
+ r.tooltip = d.format('longDate');
163
+ r.today = d.equal(this._today, 'day');
164
+ r.selected = this.value && d.equal(this.value, 'day');
165
+ r.holiday = this.isHoliday(d) || this.isWeekend(d);
166
+ r.disabled =
167
+ (this.minValue && d.compare(this.minValue, 'day') == -1) ||
168
+ (this.maxValue && d.compare(this.maxValue, 'day') == 1) ||
169
+ this.isDisabled(d);
170
+ //
171
+ const focused = d.dayOfMonth == this._footPrint.day &&
172
+ d.monthOfYear == this._footPrint.month &&
173
+ d.year == this._footPrint.year;
174
+ //
175
+ if (r.disabled) {
176
+ r.cssClass = {
177
+ 'ax-state-disabled': true,
178
+ };
143
179
  }
144
180
  else {
145
- unit = 'year';
146
- value = i * 10;
181
+ r.cssClass = {
182
+ 'ax-state-today': r.today,
183
+ 'ax-state-selected': r.selected,
184
+ 'ax-state-holiday': r.holiday,
185
+ // 'ax-state-focused': focused,
186
+ };
147
187
  }
188
+ // ax-col-start-1 ax-col-start-2 ax-col-start-3 ax-col-start-4 ax-col-start-5 ax-col-start-6 ax-col-start-7
189
+ r.cssClass[`ax-column-start-${view.range.startTime.dayOfWeek}`] = i == 0;
190
+ if (this.cellClass)
191
+ applyCellClass(r);
192
+ return r;
193
+ });
194
+ }
195
+ /**
196
+ * @ignore
197
+ */
198
+ monthView(i, applyCellClass) {
199
+ const current = this._viewStartDate.add('year', i);
200
+ const view = {
201
+ range: this._setDisplayRange(current),
202
+ slots: [],
203
+ };
204
+ this.views.push(view);
205
+ const a = view.range.enumurate('month');
206
+ view.slots = a.map((d, i) => {
207
+ const r = {};
208
+ r.date = d;
209
+ r.text = d.format('MMM');
210
+ r.tooltip = d.format('MMMM YYYY');
211
+ r.today = d.equal(this._today, 'month');
148
212
  //
149
- const current = this._viewStartDate.add(unit, value);
150
- const view = {
151
- range: this._setDisplayRange(current),
152
- slots: [],
153
- };
154
- this.views.push(view);
213
+ r.disabled =
214
+ (this.minValue && d.compare(this.minValue, 'month') == -1) ||
215
+ (this.maxValue && d.compare(this.maxValue, 'month') == 1);
155
216
  //
156
- // year view
157
- if (this.activeView == 'year') {
158
- const a = view.range.enumurate('year');
159
- view.slots = a.map((d, i) => {
160
- const r = {};
161
- r.date = d;
162
- //
163
- r.text = d.format('YYYY');
164
- r.tooltip = d.format('YYYY');
165
- //
166
- r.today = d.equal(this._today, 'year');
167
- //
168
- r.selected = this.value && this.depth == 'year' && d.equal(this.value, 'year');
169
- //
170
- const focused = d.year == this._footPrint.year;
171
- //
172
- r.disabled =
173
- (this.minValue && d.compare(this.minValue, 'year') == -1) || (this.maxValue && d.compare(this.maxValue, 'year') == 1);
174
- //
175
- if (r.disabled) {
176
- r.cssClass = {
177
- 'ax-state-disabled': r.disabled,
178
- };
179
- }
180
- else {
181
- r.cssClass = {
182
- 'ax-state-today': r.today,
183
- 'ax-state-selected': r.selected,
184
- 'ax-state-focused': focused,
185
- };
186
- }
187
- applyCellClass(r);
188
- return r;
189
- });
217
+ r.selected = this.value && this.depth == 'month' && d.equal(this.value, 'month');
218
+ //
219
+ const focused = d.monthOfYear == this._footPrint.month && d.year == this._footPrint.year;
220
+ //
221
+ if (r.disabled) {
222
+ r.cssClass = {
223
+ 'ax-state-disabled': r.disabled,
224
+ };
225
+ }
226
+ else {
227
+ r.cssClass = {
228
+ 'ax-state-today': r.today,
229
+ 'ax-state-selected': r.selected,
230
+ 'ax-state-focused': focused,
231
+ };
190
232
  }
191
- // month view
192
- else if (this.activeView == 'month') {
193
- const a = view.range.enumurate('month');
194
- view.slots = a.map((d, i) => {
195
- const r = {};
196
- r.date = d;
197
- r.text = d.format('MMM');
198
- r.tooltip = d.format('MMMM YYYY');
199
- r.today = d.equal(this._today, 'month');
200
- //
201
- r.disabled =
202
- (this.minValue && d.compare(this.minValue, 'month') == -1) || (this.maxValue && d.compare(this.maxValue, 'month') == 1);
203
- //
204
- r.selected = this.value && this.depth == 'month' && d.equal(this.value, 'month');
205
- //
206
- const focused = d.monthOfYear == this._footPrint.month && d.year == this._footPrint.year;
207
- //
208
- if (r.disabled) {
209
- r.cssClass = {
210
- 'ax-state-disabled': r.disabled,
211
- };
212
- }
213
- else {
214
- r.cssClass = {
215
- 'ax-state-today': r.today,
216
- 'ax-state-selected': r.selected,
217
- 'ax-state-focused': focused,
218
- };
219
- }
220
- applyCellClass(r);
221
- return r;
222
- });
233
+ applyCellClass(r);
234
+ return r;
235
+ });
236
+ }
237
+ /**
238
+ * @ignore
239
+ */
240
+ yearView(i, applyCellClass) {
241
+ const current = this._viewStartDate.add('year', i * 10);
242
+ const view = {
243
+ range: this._setDisplayRange(current),
244
+ slots: [],
245
+ };
246
+ this.views.push(view);
247
+ const a = view.range.enumurate('year');
248
+ view.slots = a.map((d, i) => {
249
+ const r = {};
250
+ r.date = d;
251
+ r.text = d.format('YYYY');
252
+ r.tooltip = d.format('YYYY');
253
+ r.today = d.equal(this._today, 'year');
254
+ r.selected = this.value && this.depth == 'year' && d.equal(this.value, 'year');
255
+ //
256
+ const focused = d.year == this._footPrint.year;
257
+ //
258
+ r.disabled =
259
+ (this.minValue && d.compare(this.minValue, 'year') == -1) ||
260
+ (this.maxValue && d.compare(this.maxValue, 'year') == 1);
261
+ //
262
+ if (r.disabled) {
263
+ r.cssClass = {
264
+ 'ax-state-disabled': r.disabled,
265
+ };
223
266
  }
224
- // day view
225
267
  else {
226
- const a = view.range.enumurate('day');
227
- view.slots = a.map((d, i) => {
228
- const r = {};
229
- r.date = d;
230
- r.text = d.dayOfMonth;
231
- r.tooltip = d.format('longDate');
232
- r.today = d.equal(this._today, 'day');
233
- r.selected = this.value && d.equal(this.value, 'day');
234
- r.holiday = this.isHoliday(d) || this.isWeekend(d);
235
- r.disabled =
236
- (this.minValue && d.compare(this.minValue, 'day') == -1) ||
237
- (this.maxValue && d.compare(this.maxValue, 'day') == 1) ||
238
- this.isDisabled(d);
239
- //
240
- const focused = d.dayOfMonth == this._footPrint.day && d.monthOfYear == this._footPrint.month && d.year == this._footPrint.year;
241
- //
242
- if (r.disabled) {
243
- r.cssClass = {
244
- 'ax-state-disabled': true,
245
- };
246
- }
247
- else {
248
- r.cssClass = {
249
- 'ax-state-today': r.today,
250
- 'ax-state-selected': r.selected,
251
- 'ax-state-holiday': r.holiday,
252
- //'ax-state-focused': focused,
253
- };
254
- }
255
- // ax-col-start-1 ax-col-start-2 ax-col-start-3 ax-col-start-4 ax-col-start-5 ax-col-start-6 ax-col-start-7
256
- r.cssClass[`ax-column-start-${view.range.startTime.dayOfWeek}`] = i == 0;
257
- if (this.cellClass)
258
- applyCellClass(r);
259
- return r;
260
- });
268
+ r.cssClass = {
269
+ 'ax-state-today': r.today,
270
+ 'ax-state-selected': r.selected,
271
+ 'ax-state-focused': focused,
272
+ };
261
273
  }
262
- }
263
- this.cdr.markForCheck();
274
+ applyCellClass(r);
275
+ return r;
276
+ });
264
277
  }
265
278
  /**
266
279
  * @ignore
@@ -292,13 +305,12 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
292
305
  nativeEvent: e,
293
306
  });
294
307
  //
295
- const val = this.calendarService.create(slot.date.date, this.type);
296
308
  if (this.activeView == 'day') {
297
309
  this._setDate(slot.date.date);
298
310
  }
299
311
  else if (this.activeView == 'month' && this.depth == 'day') {
300
312
  this.activeView = 'day';
301
- this._footPrint.month = val.monthOfYear;
313
+ this._footPrint.month = this.calendarService.create(slot.date.date, this.type).monthOfYear;
302
314
  this.navTo(slot.date);
303
315
  }
304
316
  else if (this.activeView == 'month' && this.depth == 'month') {
@@ -306,7 +318,7 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
306
318
  }
307
319
  else if (this.activeView == 'year' && (this.depth == 'day' || this.depth == 'month')) {
308
320
  this.activeView = 'month';
309
- this._footPrint.year = val.year;
321
+ this._footPrint.year = this.calendarService.create(slot.date.date, this.type).year;
310
322
  this.navTo(slot.date);
311
323
  }
312
324
  else if (this.activeView == 'year' && this.depth == 'year') {
@@ -331,7 +343,10 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
331
343
  * @ignore
332
344
  */
333
345
  internalOptionChanged(e) {
334
- if (e.name == 'depth' || e.name == 'activeView' || e.name == 'disabledDates' || e.name == 'holidayDates') {
346
+ if (e.name == 'depth' ||
347
+ e.name == 'activeView' ||
348
+ e.name == 'disabledDates' ||
349
+ e.name == 'holidayDates') {
335
350
  this.render();
336
351
  }
337
352
  if (e.name == 'type') {
@@ -364,7 +379,20 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
364
379
  this._footPrint.year = val.year;
365
380
  this._footPrint.month = val.monthOfYear;
366
381
  this._footPrint.day = val.dayOfMonth;
367
- this.render();
382
+ const calendarSlots = Array.from(document.querySelectorAll('.ax-calendar-slot'));
383
+ const selectedSlot = document.querySelector('.ax-state-selected');
384
+ if (selectedSlot) {
385
+ selectedSlot.classList.remove('ax-state-selected');
386
+ }
387
+ else {
388
+ this.render();
389
+ }
390
+ calendarSlots.forEach((element) => {
391
+ element = element;
392
+ if (element.textContent == this._footPrint.day) {
393
+ element.classList.add('ax-state-selected');
394
+ }
395
+ });
368
396
  }
369
397
  /**
370
398
  * @ignore
@@ -539,7 +567,7 @@ export class AXCalendarComponent extends classes((MXValueComponent), MXInteracti
539
567
  useExisting: AXCalendarComponent,
540
568
  },
541
569
  AXUnsubscriber,
542
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <div\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
570
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <button\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </button>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n [axRipple]=\"true\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column;justify-content:center;align-items:center}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
543
571
  }
544
572
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXCalendarComponent, decorators: [{
545
573
  type: Component,
@@ -589,7 +617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
589
617
  useExisting: AXCalendarComponent,
590
618
  },
591
619
  AXUnsubscriber,
592
- ], template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <div\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <div\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </div>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"] }]
620
+ ], template: "<ng-content select=\"ax-header\"></ng-content>\n<div class=\"ax-calendar-body\">\n @for (v of views; let i = $index, first = $first, last = $last; track i) {\n @switch (activeView) {\n @case ('year') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-state-disabled\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }} - {{ v.range.endTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon ax-next\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-year\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n @for (slot of v.slots; track slot.text) {\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n }\n </div>\n }\n @case ('month') {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-slots ax-calendar-slots-month\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <button\n tabindex=\"0\"\n *ngFor=\"let slot of v.slots\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ getMonthName(slot.date, 'short') | translate | async }}\n </div>\n }\n </button>\n </div>\n }\n @default {\n @if (showNavigation) {\n <div class=\"ax-calendar-view-header\">\n <div class=\"ax-calendar-header-info\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'year')\"\n >\n {{ v.range.startTime.format('YYYY') }}\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded\"\n (click)=\"_handleNavClick($event, 'month')\"\n >\n {{ getMonthName(v.range.startTime, 'long') | translate | async }}\n </button>\n </div>\n @if (last) {\n <div class=\"ax-calendar-header-buttons\">\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handlePrevClick()\"\n [title]=\"'prev' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-left\"></i>\n </button>\n <button\n type=\"button\"\n [attr.disabled]=\"disabled ? '' : null\"\n [attr.readonly]=\"readonly ? '' : null\"\n class=\"ax-general-button ax-button-rounded ax-button-icon\"\n (click)=\"_handleNextClick()\"\n [title]=\"'next' | translate | async\"\n >\n <i class=\"ax-icon ax-icon-chevron-right\"></i>\n </button>\n </div>\n }\n </div>\n }\n <div class=\"ax-calendar-week\">\n <div *ngFor=\"let d of _weekdays\">{{ 'dateTime.weekdays.short.' + d | translate | async }}</div>\n </div>\n <div class=\"ax-calendar-slots ax-calendar-slots-day\" [ngClass]=\"{ 'ax-default': !cellTemplate }\">\n <ng-container *ngFor=\"let slot of v.slots\">\n <button\n tabindex=\"0\"\n class=\"ax-calendar-slot\"\n [class.ax-state-disabled]=\"disabled\"\n [ngClass]=\"slot.cssClass\"\n (click)=\"_handleSlotClick($event, slot)\"\n [axRipple]=\"true\"\n >\n @if (cellTemplate) {\n <div>\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: { slot: slot } }\">\n </ng-container>\n </div>\n } @else {\n <div [title]=\"slot.tooltip\">\n {{ slot.text }}\n </div>\n }\n </button>\n </ng-container>\n </div>\n }\n }\n }\n</div>\n<ng-content select=\"ax-footer\"></ng-content>\n", styles: [".ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{outline-color:rgba(var(--ax-color-primary-200))!important;background-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-200))}.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(.ax-dark ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-200))!important;border-color:rgba(var(--ax-color-danger-200))!important;color:rgba(var(--ax-color-danger-fore-tint))!important}.ax-dark ax-calendar .ax-calendar-footer:is(.ax-dark ax-calendar .ax-calendar-footer:focus,.ax-dark ax-calendar .ax-calendar-footer:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-200))}html[dir=rtl] ax-calendar .ax-calendar-header-buttons .ax-icon{-moz-transform:scale(-1,1);-o-transform:scale(-1,1);-webkit-transform:scale(-1,1);transform:scaleX(-1)}ax-calendar{display:block;width:100%;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));color:rgba(var(--ax-color-surface-fore),var(--tw-text-opacity))}ax-calendar.ax-state-disabled .ax-calendar-slots{cursor:not-allowed;opacity:.5}ax-calendar.ax-state-readonly .ax-calendar-slots{cursor:text}ax-calendar .ax-calendar-header{display:flex;justify-content:space-between;padding-left:.25rem;padding-right:.25rem;padding-top:.25rem}ax-calendar .ax-calendar-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body{display:flex;flex-direction:column;justify-content:center;align-items:center}@media (min-width: 1024px){ax-calendar .ax-calendar-body{flex-direction:column}}ax-calendar .ax-calendar-body>div{width:100%;flex:1 1 0%}@media (min-width: 768px){ax-calendar .ax-calendar-body>div{width:20rem}}ax-calendar .ax-calendar-body .ax-calendar-view-header{display:flex;justify-content:space-between;border-bottom-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-info{font-weight:500}ax-calendar .ax-calendar-body .ax-calendar-view-header .ax-calendar-header-buttons{display:flex}ax-calendar .ax-calendar-body .ax-calendar-slots{display:grid;gap:.25rem;padding:1rem}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot{position:relative;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--ax-rounded-border-default);text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-surface-fore));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:before{content:\"\";float:left;padding-top:100%}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:after{content:\"\";clear:both;display:block}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-disabled,ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:hover.ax-state-selected){background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible:not(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled){outline-width:2px;outline-color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot:focus-visible.ax-state-disabled{outline-style:dashed;outline-width:2px}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-1{grid-column-start:1}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-2{grid-column-start:2}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-3{grid-column-start:3}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-4{grid-column-start:4}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-5{grid-column-start:5}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-6{grid-column-start:6}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-column-start-7{grid-column-start:7}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-other{opacity:.05}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today{border-width:1px;border-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-today.ax-state-holiday{border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-focused{border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected{background-color:rgba(var(--ax-color-primary-500));color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{background-color:rgba(var(--ax-color-danger-500))!important;color:rgba(var(--ax-color-danger-fore))!important}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-selected.ax-state-holiday{color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday{color:rgba(var(--ax-color-danger-500))}ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:is(ax-calendar .ax-calendar-body .ax-calendar-slots .ax-calendar-slot.ax-state-holiday:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-danger-500))!important;border-color:rgba(var(--ax-color-danger-500))!important}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-day{grid-template-columns:repeat(7,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-year,ax-calendar .ax-calendar-body .ax-calendar-slots.ax-calendar-slots-month{grid-template-columns:repeat(4,minmax(0,1fr))}ax-calendar .ax-calendar-body .ax-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding-left:.5rem;padding-right:.5rem;padding-top:.75rem}ax-calendar .ax-calendar-body .ax-calendar-week>div{position:relative;margin:.125rem;display:flex;cursor:pointer;align-items:center;justify-content:center;text-align:center;font-size:.875rem;line-height:1.25rem}ax-calendar .ax-calendar-footer{margin-top:1.25rem;display:flex;align-items:center;justify-content:center}ax-calendar .ax-calendar-footer .ax-today-button{display:block;height:var(--ax-size-default);width:100%;cursor:pointer;border-radius:var(--ax-rounded-border-default);background-color:rgba(var(--ax-color-primary-500));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgba(var(--ax-color-primary-fore))}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-calendar .ax-calendar-footer .ax-today-button.ax-state-readonly{cursor:text;opacity:.75}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:hover):not(.ax-state-disabled){background-color:rgba(var(--ax-color-primary-600))}ax-calendar .ax-calendar-footer .ax-today-button:is(ax-calendar .ax-calendar-footer .ax-today-button:focus,ax-calendar .ax-calendar-footer .ax-today-button:focus-visible):not(.ax-state-disabled){outline-color:rgba(var(--ax-color-primary-500),1)}.ax-calendar-picker{display:flex;width:100%}.ax-calendar-picker ax-picker{flex:1 1 0%}.ax-overlay-pane ax-calendar{border-style:none}\n"] }]
593
621
  }], ctorParameters: () => [{ type: i1.AXUnsubscriber }], propDecorators: { __hostClass: [{
594
622
  type: HostBinding,
595
623
  args: ['class']
@@ -597,4 +625,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
597
625
  type: HostListener,
598
626
  args: ['keydown', ['$event']]
599
627
  }] } });
600
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLG1CQUFtQixFQUVuQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFjLGVBQWUsRUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUEwRCx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQUVuSDs7OztHQUlHO0FBeURILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUFPLENBQUMsQ0FBQSxnQkFBNkIsQ0FBQSxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDO0lBQzlILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUss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b0JBQW9CO3dCQUNwQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTtxQkFDZCxhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLHFCQUFxQjt5QkFDakM7d0JBQ0QsY0FBYztxQkFDZjttRkF5Y1csV0FBVztzQkFEdEIsV0FBVzt1QkFBQyxPQUFPO2dCQTBEcEIscUJBQXFCO3NCQURwQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFYQ2xpY2tFdmVudCxcbiAgQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgTVhDb21wb25lbnRPcHRpb25DaGFuZ2VkLFxuICBNWEludGVyYWN0aXZlQ29tcG9uZW50LFxuICBNWFZhbHVlQ29tcG9uZW50LFxufSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYRGF0ZVRpbWUsIEFYRGF0ZVRpbWVSYW5nZSwgVGltZVVuaXQgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2xhc3NlcyB9IGZyb20gJ3BvbHl0eXBlJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJWaWV3LCBBWENhbGVuZGFyVmlld1Nsb3QsIEFYQ2FsZW5kYXJWaWV3VHlwZSwgTVhDYWxlbmRhckJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLmNsYXNzJztcblxuLyoqXG4gKiBBIGNhbGVuZGFyIGNvbXBvbmVudCB0aGF0IHByb3ZpZGVzIGEgY3VzdG9taXphYmxlIGNhbGVuZGFyIHZpZXcgd2l0aCB2YXJpb3VzIG9wdGlvbnMgZm9yIHNlbGVjdGlvbiwgbmF2aWdhdGlvbiwgYW5kIHN0eWxpbmcuXG4gKlxuICogQGNhdGVnb3J5IENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW5wdXRzOiBbXG4gICAgJ3J0bCcsXG4gICAgJ3JlYWRvbmx5JyxcbiAgICAndmFsdWUnLFxuICAgICduYW1lJyxcbiAgICAnZGlzYWJsZWQnLFxuICAgICdkZXB0aCcsXG4gICAgJ2FjdGl2ZVZpZXcnLFxuICAgICdtaW5WYWx1ZScsXG4gICAgJ21heFZhbHVlJyxcbiAgICAnZGlzYWJsZWREYXRlcycsXG4gICAgJ2hvbGlkYXlEYXRlcycsXG4gICAgJ3R5cGUnLFxuICAgICdjZWxsVGVtcGxhdGUnLFxuICAgICdjZWxsQ2xhc3MnLFxuICAgICdzaG93TmF2aWdhdGlvbicsXG4gICAgJ2NvdW50JyxcbiAgICAnbmFtZScsXG4gICAgJ2lkJyxcbiAgXSxcbiAgb3V0cHV0czogW1xuICAgICdvbk9wdGlvbkNoYW5nZWQnLFxuICAgICd2YWx1ZUNoYW5nZScsXG4gICAgJ29uVmFsdWVDaGFuZ2VkJyxcbiAgICAnbWluVmFsdWVDaGFuZ2UnLFxuICAgICdtYXhWYWx1ZUNoYW5nZScsXG4gICAgJ29uQmx1cicsXG4gICAgJ29uRm9jdXMnLFxuICAgICdkZXB0aENoYW5nZScsXG4gICAgJ3R5cGVDaGFuZ2UnLFxuICAgICdhY3RpdmVWaWV3Q2hhbmdlJyxcbiAgICAnZGlzYWJsZWREYXRlc0NoYW5nZScsXG4gICAgJ2hvbGlkYXlEYXRlc0NoYW5nZScsXG4gICAgJ29uTmF2aWdhdGUnLFxuICAgICdvblNsb3RDbGljaycsXG4gICAgJ2NvdW50Q2hhbmdlJyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWENhbGVuZGFyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhWYWx1YWJsZUNvbXBvbmVudCxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWENhbGVuZGFyQ29tcG9uZW50LFxuICAgIH0sXG4gICAgQVhVbnN1YnNjcmliZXIsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYQ2FsZW5kYXJDb21wb25lbnQgZXh0ZW5kcyBjbGFzc2VzKE1YVmFsdWVDb21wb25lbnQ8RGF0ZSB8IG51bGw+LCBNWEludGVyYWN0aXZlQ29tcG9uZW50LCBNWENhbGVuZGFyQmFzZUNvbXBvbmVudCkge1xuICBwdWJsaWMgZ2V0IGRpc3BsYXlSYW5nZSgpOiBBWERhdGVUaW1lUmFuZ2Uge1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKHRoaXMudmlld3NbMF0ucmFuZ2Uuc3RhcnRUaW1lLCB0aGlzLnZpZXdzW3RoaXMudmlld3MubGVuZ3RoIC0gMV0ucmFuZ2UuZW5kVGltZSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3NldERpc3BsYXlSYW5nZShjdXJyZW50OiBBWERhdGVUaW1lKTogQVhEYXRlVGltZVJhbmdlIHtcbiAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlldykge1xuICAgICAgY2FzZSAneWVhcic6IHtcbiAgICAgICAgY29uc3QgeSA9IGN1cnJlbnQuc3RhcnRPZigneWVhcicpLnllYXI7XG4gICAgICAgIGNvbnN0IG1pbiA9IHkgLSAoeSAlIDEwKTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWluICsgOTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lUmFuZ2UoXG4gICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB5ZWFyOiBtaW4sXG4gICAgICAgICAgICAgIG1vbnRoOiAxLFxuICAgICAgICAgICAgICBkYXRlOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudHlwZSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeWVhcjogbWF4LFxuICAgICAgICAgICAgICBtb250aDogMTIsXG4gICAgICAgICAgICAgIGRhdGU6IDI4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudHlwZSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWVSYW5nZShjdXJyZW50LnN0YXJ0T2YoJ3llYXInKSwgY3VycmVudC5lbmRPZigneWVhcicpLmFkZCgnZGF5JywgLTEpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKGN1cnJlbnQuc3RhcnRPZignbW9udGgnKSwgY3VycmVudC5lbmRPZignbW9udGgnKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCksIHRoaXMudHlwZSk7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF92aWV3U3RhcnREYXRlITogQVhEYXRlVGltZTtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX25hdlVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfZm9vdFByaW50ID0ge1xuICAgIHllYXI6IG51bGwsXG4gICAgbW9udGg6IG51bGwsXG4gICAgZGF5OiBudWxsLFxuICB9O1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIHZpZXdzOiBBWENhbGVuZGFyVmlld1tdID0gW107XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3dlZWtkYXlzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFZhbHVlcygpIHtcbiAgICB0aGlzLl90b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpLCB0aGlzLnR5cGUpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gdGhpcy5fdG9kYXkuY2FsZW5kYXIud2Vla2RheXM7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3JlZnJlc2goKSB7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICAgIHRoaXMubmF2VG8odGhpcy52YWx1ZSB8fCB0aGlzLl90b2RheSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuc3Vic2NyaWJlcjogQVhVbnN1YnNjcmliZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm9uSG9saWRheXNDaGFuZ2VkLnBpcGUodW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyQ2hhbmdlcyQucGlwZSh1bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5nb1RvZGF5KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIG92ZXJyaWRlIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuX3ZpZXdTdGFydERhdGUpIHJldHVybjtcbiAgICBjb25zdCBhcHBseUNlbGxDbGFzcyA9IChzbG90OiBBWENhbGVuZGFyVmlld1Nsb3QsIGNlbGxDbGFzczogYW55ID0gdGhpcy5jZWxsQ2xhc3MpID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIGNlbGxDbGFzcykge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIGNlbGxDbGFzcy5zcGxpdCgnICcpLmZvckVhY2goKGMpID0+IChzbG90LmNzc0NsYXNzW2NdID0gdHJ1ZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2xvdC5jc3NDbGFzcywgY2VsbENsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGFwcGx5Q2VsbENsYXNzKHNsb3QsIGNlbGxDbGFzcyhzbG90LmRhdGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudmlld3MgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnQ7IGkrKykge1xuICAgICAgbGV0IHVuaXQ6IFRpbWVVbml0ID0gJ21vbnRoJztcbiAgICAgIGxldCB2YWx1ZTogbnVtYmVyID0gaTtcbiAgICAgIC8vXG4gICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB7XG4gICAgICAgIHVuaXQgPSAnbW9udGgnO1xuICAgICAgICB2YWx1ZSA9IGk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB7XG4gICAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgICAgIHZhbHVlID0gaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVuaXQgPSAneWVhcic7XG4gICAgICAgIHZhbHVlID0gaSAqIDEwO1xuICAgICAgfVxuICAgICAgLy9cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl92aWV3U3RhcnREYXRlLmFkZCh1bml0LCB2YWx1ZSk7XG4gICAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgICAgcmFuZ2U6IHRoaXMuX3NldERpc3BsYXlSYW5nZShjdXJyZW50KSxcbiAgICAgICAgc2xvdHM6IFtdLFxuICAgICAgfTtcbiAgICAgIHRoaXMudmlld3MucHVzaCh2aWV3KTtcbiAgICAgIC8vXG4gICAgICAvLyB5ZWFyIHZpZXdcbiAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ3llYXInKSB7XG4gICAgICAgIGNvbnN0IGEgPSB2aWV3LnJhbmdlLmVudW11cmF0ZSgneWVhcicpO1xuXG4gICAgICAgIHZpZXcuc2xvdHMgPSBhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHI6IGFueSA9IHt9O1xuICAgICAgICAgIHIuZGF0ZSA9IGQ7XG4gICAgICAgICAgLy9cbiAgICAgICAgICByLnRleHQgPSBkLmZvcm1hdCgnWVlZWScpO1xuICAgICAgICAgIHIudG9vbHRpcCA9IGQuZm9ybWF0KCdZWVlZJyk7XG4gICAgICAgICAgLy9cbiAgICAgICAgICByLnRvZGF5ID0gZC5lcXVhbCh0aGlzLl90b2RheSwgJ3llYXInKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIHRoaXMuZGVwdGggPT0gJ3llYXInICYmIGQuZXF1YWwodGhpcy52YWx1ZSwgJ3llYXInKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBkLnllYXIgPT0gdGhpcy5fZm9vdFByaW50LnllYXI7XG4gICAgICAgICAgLy9cbiAgICAgICAgICByLmRpc2FibGVkID1cbiAgICAgICAgICAgICh0aGlzLm1pblZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1pblZhbHVlLCAneWVhcicpID09IC0xKSB8fCAodGhpcy5tYXhWYWx1ZSAmJiBkLmNvbXBhcmUodGhpcy5tYXhWYWx1ZSwgJ3llYXInKSA9PSAxKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICAgICAnYXgtc3RhdGUtZGlzYWJsZWQnOiByLmRpc2FibGVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgci5jc3NDbGFzcyA9IHtcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXNlbGVjdGVkJzogci5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLWZvY3VzZWQnOiBmb2N1c2VkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXBwbHlDZWxsQ2xhc3Mocik7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gbW9udGggdmlld1xuICAgICAgZWxzZSBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdtb250aCcpIHtcbiAgICAgICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCdtb250aCcpO1xuICAgICAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCByOiBhbnkgPSB7fTtcbiAgICAgICAgICByLmRhdGUgPSBkO1xuICAgICAgICAgIHIudGV4dCA9IGQuZm9ybWF0KCdNTU0nKTtcbiAgICAgICAgICByLnRvb2x0aXAgPSBkLmZvcm1hdCgnTU1NTSBZWVlZJyk7XG4gICAgICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICdtb250aCcpO1xuICAgICAgICAgIC8vXG4gICAgICAgICAgci5kaXNhYmxlZCA9XG4gICAgICAgICAgICAodGhpcy5taW5WYWx1ZSAmJiBkLmNvbXBhcmUodGhpcy5taW5WYWx1ZSwgJ21vbnRoJykgPT0gLTEpIHx8ICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAnbW9udGgnKSA9PSAxKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIHRoaXMuZGVwdGggPT0gJ21vbnRoJyAmJiBkLmVxdWFsKHRoaXMudmFsdWUsICdtb250aCcpO1xuICAgICAgICAgIC8vXG4gICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGQubW9udGhPZlllYXIgPT0gdGhpcy5fZm9vdFByaW50Lm1vbnRoICYmIGQueWVhciA9PSB0aGlzLl9mb290UHJpbnQueWVhcjtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICAgICAnYXgtc3RhdGUtZGlzYWJsZWQnOiByLmRpc2FibGVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgci5jc3NDbGFzcyA9IHtcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLXNlbGVjdGVkJzogci5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLWZvY3VzZWQnOiBmb2N1c2VkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXBwbHlDZWxsQ2xhc3Mocik7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZGF5IHZpZXdcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBhID0gdmlldy5yYW5nZS5lbnVtdXJhdGUoJ2RheScpO1xuICAgICAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCByOiBhbnkgPSB7fTtcbiAgICAgICAgICByLmRhdGUgPSBkO1xuICAgICAgICAgIHIudGV4dCA9IGQuZGF5T2ZNb250aDtcbiAgICAgICAgICByLnRvb2x0aXAgPSBkLmZvcm1hdCgnbG9uZ0RhdGUnKTtcbiAgICAgICAgICByLnRvZGF5ID0gZC5lcXVhbCh0aGlzLl90b2RheSwgJ2RheScpO1xuICAgICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIGQuZXF1YWwodGhpcy52YWx1ZSwgJ2RheScpO1xuICAgICAgICAgIHIuaG9saWRheSA9IHRoaXMuaXNIb2xpZGF5KGQpIHx8IHRoaXMuaXNXZWVrZW5kKGQpO1xuICAgICAgICAgIHIuZGlzYWJsZWQgPVxuICAgICAgICAgICAgKHRoaXMubWluVmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWluVmFsdWUsICdkYXknKSA9PSAtMSkgfHxcbiAgICAgICAgICAgICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAnZGF5JykgPT0gMSkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZChkKTtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBkLmRheU9mTW9udGggPT0gdGhpcy5fZm9vdFByaW50LmRheSAmJiBkLm1vbnRoT2ZZZWFyID09IHRoaXMuX2Zvb3RQcmludC5tb250aCAmJiBkLnllYXIgPT0gdGhpcy5fZm9vdFByaW50LnllYXI7XG4gICAgICAgICAgLy9cbiAgICAgICAgICBpZiAoci5kaXNhYmxlZCkge1xuICAgICAgICAgICAgci5jc3NDbGFzcyA9IHtcbiAgICAgICAgICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgICAgICdheC1zdGF0ZS10b2RheSc6IHIudG9kYXksXG4gICAgICAgICAgICAgICdheC1zdGF0ZS1zZWxlY3RlZCc6IHIuc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICdheC1zdGF0ZS1ob2xpZGF5Jzogci5ob2xpZGF5LFxuICAgICAgICAgICAgICAvLydheC1zdGF0ZS1mb2N1c2VkJzogZm9jdXNlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGF4LWNvbC1zdGFydC0xIGF4LWNvbC1zdGFydC0yIGF4LWNvbC1zdGFydC0zIGF4LWNvbC1zdGFydC00IGF4LWNvbC1zdGFydC01IGF4LWNvbC1zdGFydC02IGF4LWNvbC1zdGFydC03XG4gICAgICAgICAgci5jc3NDbGFzc1tgYXgtY29sdW1uLXN0YXJ0LSR7dmlldy5yYW5nZS5zdGFydFRpbWUuZGF5T2ZXZWVrfWBdID0gaSA9PSAwO1xuICAgICAgICAgIGlmICh0aGlzLmNlbGxDbGFzcykgYXBwbHlDZWxsQ2xhc3Mocik7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVQcmV2Q2xpY2soKSB7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLnByZXYoKTtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVOZXh0Q2xpY2soKSB7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVTbG90Q2xpY2soZTogTW91c2VFdmVudCwgc2xvdDogQVhDYWxlbmRhclZpZXdTbG90KSB7XG4gICAgaWYgKHNsb3QuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIC8vXG4gICAgdGhpcy5vblNsb3RDbGljay5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGl0ZW06IHNsb3QuZGF0ZS5kYXRlLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgICBuYXRpdmVFdmVudDogZSxcbiAgICB9KTtcbiAgICAvL1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShzbG90LmRhdGUuZGF0ZSwgdGhpcy50eXBlKTtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnICYmIHRoaXMuZGVwdGggPT0gJ2RheScpIHtcbiAgICAgIHRoaXMuYWN0aXZlVmlldyA9ICdkYXknO1xuICAgICAgdGhpcy5fZm9vdFByaW50Lm1vbnRoID0gdmFsLm1vbnRoT2ZZZWFyO1xuICAgICAgdGhpcy5uYXZUbyhzbG90LmRhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdtb250aCcgJiYgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAneWVhcicgJiYgKHRoaXMuZGVwdGggPT0gJ2RheScgfHwgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSkge1xuICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gJ21vbnRoJztcbiAgICAgIHRoaXMuX2Zvb3RQcmludC55ZWFyID0gdmFsLnllYXI7XG4gICAgICB0aGlzLm5hdlRvKHNsb3QuZGF0ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ3llYXInICYmIHRoaXMuZGVwdGggPT0gJ3llYXInKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlTmF2Q2xpY2soZTogQVhDbGlja0V2ZW50IHwgYW55LCB2aWV3OiBBWENhbGVuZGFyVmlld1R5cGUpIHtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlVmlldyA9IHZpZXc7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVmlldygpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB0aGlzLmFjdGl2ZVZpZXcgPSAnbW9udGgnO1xuICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB0aGlzLmFjdGl2ZVZpZXcgPSAneWVhcic7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbE9wdGlvbkNoYW5nZWQoZTogTVhDb21wb25lbnRPcHRpb25DaGFuZ2VkKSB7XG4gICAgaWYgKGUubmFtZSA9PSAnZGVwdGgnIHx8IGUubmFtZSA9PSAnYWN0aXZlVmlldycgfHwgZS5uYW1lID09ICdkaXNhYmxlZERhdGVzJyB8fCBlLm5hbWUgPT0gJ2hvbGlkYXlEYXRlcycpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT0gJ3R5cGUnKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW50ZXJuYWxTZXRWYWx1ZSh2YWx1ZTogRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY29udmVydCh2YWx1ZSk7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCh2KTtcbiAgICBpZiAoaXNEaXNhYmxlZCkgcmV0dXJuIG51bGw7XG4gICAgZWxzZSByZXR1cm4gdi5kYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW50ZXJuYWxWYWx1ZUNoYW5nZWQodmFsdWU/OiBEYXRlKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHZhbHVlLCB0aGlzLnR5cGUpO1xuICAgIGlmIChcbiAgICAgICF0aGlzLl92aWV3U3RhcnREYXRlIHx8XG4gICAgICB2YWwuY29tcGFyZSh0aGlzLmRpc3BsYXlSYW5nZS5zdGFydFRpbWUsIHRoaXMuYWN0aXZlVmlldykgPT0gLTEgfHxcbiAgICAgIHZhbC5jb21wYXJlKHRoaXMuZGlzcGxheVJhbmdlLmVuZFRpbWUsIHRoaXMuYWN0aXZlVmlldykgPT0gMVxuICAgICkge1xuICAgICAgdGhpcy5fdmlld1N0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5fZm9vdFByaW50LnllYXIgPSB2YWwueWVhcjtcbiAgICB0aGlzLl9mb290UHJpbnQubW9udGggPSB2YWwubW9udGhPZlllYXI7XG4gICAgdGhpcy5fZm9vdFByaW50LmRheSA9IHZhbC5kYXlPZk1vbnRoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlR29Ub2RheSgpIHtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuX3NldERhdGUodGhpcy5fdG9kYXkuZGF0ZSk7XG4gICAgdGhpcy5nb1RvZGF5KCk7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IGl0ZW0uXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fbmF2TmV4dFByZXYoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgaXRlbS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJldigpIHtcbiAgICB0aGlzLl9uYXZOZXh0UHJldih0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGZvY3VzIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2FsZW5kYXIgc2xvdCBvciB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsb3QuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG92ZXJyaWRlIGZvY3VzKCkge1xuICAgIGNvbnN0IGZ1bmMgPSAoczogc3RyaW5nKSA9PiB0aGlzLmdldEhvc3RFbGVtZW50KCkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4ocyk7XG4gICAgY29uc3QgZGl2ID0gZnVuYygnLmF4LWNhbGVuZGFyLXNsb3RzPmRpdi5heC1zdGF0ZS1zZWxlY3RlZCcpIHx8IGZ1bmMoJy5heC1jYWxlbmRhci1zbG90cz5kaXYnKTtcbiAgICBkaXY/LmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX25hdk5leHRQcmV2KHByZXY6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzaWduID0gcHJldiA/IC0xIDogMTtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB0aGlzLm5hdlRvKHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCdtb250aCcsIHNpZ24gKiAxICogdGhpcy5jb3VudCkpO1xuICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB0aGlzLm5hdlRvKHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCd5ZWFyJywgc2lnbiAqIDEgKiB0aGlzLmNvdW50KSk7XG4gICAgZWxzZSB0aGlzLm5hdlRvKHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCd5ZWFyJywgc2lnbiAqIDEwICogdGhpcy5jb3VudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgY3VycmVudCBkYXRlLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBnb1RvZGF5KCkge1xuICAgIHRoaXMubmF2VG8odGhpcy5fdG9kYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBkYXRlIGFuZCB1cGRhdGVzIHRoZSB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIG5hdmlnYXRlIHRvLCB3aGljaCBjYW4gYmUgYSBgRGF0ZWAgb2JqZWN0IG9yIGFuIGBBWERhdGVUaW1lYCBpbnN0YW5jZS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmF2VG8oZGF0ZTogRGF0ZSB8IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jb252ZXJ0KGRhdGUsIHRoaXMudHlwZSk7XG4gICAgdGhpcy5fdmlld1N0YXJ0RGF0ZSA9IHZhbC5zdGFydE9mKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICAvL3RvIG1ha2Ugc3VyZSBpdHMgcmVuZHJlZCBhbmQgZGlzcGxheVJhbmdlIGlzIG5vdCBudWxsXG4gICAgaWYgKHRoaXMudmlld3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdnIgPSB0aGlzLmRpc3BsYXlSYW5nZTtcbiAgICAgIHRoaXMub25OYXZpZ2F0ZS5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICBpc1VzZXJJbnRlcmFjdGlvbjogdGhpcy5fbmF2VXNlckludGVyYWN0aW9uLFxuICAgICAgICBzdGFydDogdnIuc3RhcnRUaW1lPy5kYXRlLFxuICAgICAgICBlbmQ6IHZyLmVuZFRpbWU/LmRhdGUsXG4gICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLmdldEhvc3RFbGVtZW50KCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwcml2YXRlIGdldCBfX2hvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IF9jbGFzc2VzID0ge1xuICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZCxcbiAgICAgICdheC1zdGF0ZS1yZWFkb25seSc6IHRoaXMucmVhZG9ubHksXG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoX2NsYXNzZXMpXG4gICAgICAuZmlsdGVyKChjKSA9PiBjWzFdKVxuICAgICAgLm1hcCgoYykgPT4gY1swXSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3NldERhdGUodmFsdWU6IERhdGUpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5jb21taXRWYWx1ZSh0aGlzLmNhbGVuZGFyU2VydmljZS5jb252ZXJ0KHZhbHVlLCB0aGlzLnR5cGUpLnN0YXJ0T2YoKS5kYXRlLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWQoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGlzYWJsZWREYXRlcykgJiYgdGhpcy5kaXNhYmxlZERhdGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZERhdGVzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZCwgJ2RheScpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZXMgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcyhkYXRlLmRhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGdoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgbGV0IGRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ob2xpZGF5RGF0ZXMpICYmIHRoaXMuaG9saWRheURhdGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICBkaCA9IHRoaXMuaG9saWRheURhdGVzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZCwgJ2RheScpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmhvbGlkYXlEYXRlcyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkaCA9IHRoaXMuaG9saWRheURhdGVzKGRhdGUuZGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBnaCB8fCBkaDtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGlzV2Vla2VuZChkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2Vla2VuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnJlc29sdmVDYWxlbmRhcih0aGlzLnR5cGUpLndlZWtlbmQ7XG4gICAgcmV0dXJuIHdlZWtlbmQuaW5jbHVkZXMoZGF0ZS5kYXlPZldlZWsgLSAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIF9oYW5kbGVPbktleWRvd25FdmVudChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy9UT0RPOiBjb21wbGV0ZSBrZXlib2FkIG5hdmlnYXRpb25cbiAgICBjb25zdCBpZ25vcmUgPSAoKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG4gICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnIHx8IGUuY29kZSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgZS5jb2RlID09PSAnQXJyb3dSaWdodCcgPyB0aGlzLm5leHQoKSA6IHRoaXMucHJldigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICAgIGlnbm9yZSgpO1xuICAgIH0gZWxzZSBpZiAoZS5jb2RlID09PSAnQXJyb3dVcCcgfHwgZS5jb2RlID09PSAnQXJyb3dEb3duJykge1xuICAgICAgaWYgKGUuY3RybEtleSkge1xuICAgICAgICBlLmNvZGUgPT09ICdBcnJvd1VwJyA/IHRoaXMubmV4dCgpIDogdGhpcy5wcmV2KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSwgNTApO1xuICAgICAgfVxuICAgICAgaWdub3JlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TW9udGhOYW1lKGRhdGU6IEFYRGF0ZVRpbWUsIHN0eWxlOiAnc2hvcnQnIHwgJ2xvbmcnKSB7XG4gICAgcmV0dXJuIGBkYXRlVGltZS5tb250aHMuJHtkYXRlLmNhbGVuZGFyLm5hbWUoKX0uJHtzdHlsZX0uJHtkYXRlLm1vbnRoT2ZZZWFyIC0gMX1gO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJheC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG48ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItYm9keVwiPlxuICBAZm9yICh2IG9mIHZpZXdzOyBsZXQgaSA9ICRpbmRleCwgZmlyc3QgPSAkZmlyc3QsIGxhc3QgPSAkbGFzdDsgdHJhY2sgaSkge1xuICAgIEBzd2l0Y2ggKGFjdGl2ZVZpZXcpIHtcbiAgICAgIEBjYXNlICgneWVhcicpIHtcbiAgICAgICAgQGlmIChzaG93TmF2aWdhdGlvbikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci12aWV3LWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1pbmZvXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWQgYXgtc3RhdGUtZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmF2Q2xpY2soJGV2ZW50LCAneWVhcicpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHYucmFuZ2Uuc3RhcnRUaW1lLmZvcm1hdCgnWVlZWScpIH19IC0ge3sgdi5yYW5nZS5lbmRUaW1lLmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uIGF4LW5leHRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVQcmV2Q2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3ByZXYnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWNoZXZyb24tbGVmdFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWQgYXgtYnV0dG9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVOZXh0Q2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ25leHQnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLWNoZXZyb24tcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1zbG90cyBheC1jYWxlbmRhci1zbG90cy15ZWFyXCIgW25nQ2xhc3NdPVwieyAnYXgtZGVmYXVsdCc6ICFjZWxsVGVtcGxhdGUgfVwiPlxuICAgICAgICAgIEBmb3IgKHNsb3Qgb2Ygdi5zbG90czsgdHJhY2sgc2xvdC50ZXh0KSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNsb3QuY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVNsb3RDbGljaygkZXZlbnQsIHNsb3QpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFt0aXRsZV09XCJzbG90LnRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNsb3QudGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdtb250aCcpIHtcbiAgICAgICAgQGlmIChzaG93TmF2aWdhdGlvbikge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci12aWV3LWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1pbmZvXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmF2Q2xpY2soJGV2ZW50LCAneWVhcicpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHYucmFuZ2Uuc3RhcnRUaW1lLmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlUHJldkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwcmV2JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmV4dENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIiduZXh0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdHMgYXgtY2FsZW5kYXItc2xvdHMtbW9udGhcIiBbbmdDbGFzc109XCJ7ICdheC1kZWZhdWx0JzogIWNlbGxUZW1wbGF0ZSB9XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzbG90IG9mIHYuc2xvdHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1jYWxlbmRhci1zbG90XCJcbiAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzbG90LmNzc0NsYXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlU2xvdENsaWNrKCRldmVudCwgc2xvdClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdiBbdGl0bGVdPVwic2xvdC50b29sdGlwXCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0TW9udGhOYW1lKHNsb3QuZGF0ZSwgJ3Nob3J0JykgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAZGVmYXVsdCB7XG4gICAgICAgIEBpZiAoc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItdmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5hdkNsaWNrKCRldmVudCwgJ3llYXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB2LnJhbmdlLnN0YXJ0VGltZS5mb3JtYXQoJ1lZWVknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVOYXZDbGljaygkZXZlbnQsICdtb250aCcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldE1vbnRoTmFtZSh2LnJhbmdlLnN0YXJ0VGltZSwgJ2xvbmcnKSB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWhlYWRlci1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlUHJldkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwcmV2JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmV4dENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIiduZXh0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItd2Vla1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGQgb2YgX3dlZWtkYXlzXCI+e3sgJ2RhdGVUaW1lLndlZWtkYXlzLnNob3J0LicgKyBkIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1zbG90cyBheC1jYWxlbmRhci1zbG90cy1kYXlcIiBbbmdDbGFzc109XCJ7ICdheC1kZWZhdWx0JzogIWNlbGxUZW1wbGF0ZSB9XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2xvdCBvZiB2LnNsb3RzXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNsb3QuY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVNsb3RDbGljaygkZXZlbnQsIHNsb3QpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFt0aXRsZV09XCJzbG90LnRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNsb3QudGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICB9XG48L2Rpdj5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LWZvb3RlclwiPjwvbmctY29udGVudD5cbiJdfQ==
628
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLG1CQUFtQixFQUVuQixzQkFBc0IsRUFDdEIsZ0JBQWdCLEdBQ2pCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBSUwsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQUUxQjs7OztHQUlHO0FBeURILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUFPLENBQzlDLENBQUEsZ0JBQTZCLENBQUEsRUFDN0Isc0JBQXNCLEVBQ3RCLHVCQUF1QixDQUN4QjtJQUNDLElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksZUFBZSxDQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENB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NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcscUJBQXFCO3lCQUNqQzt3QkFDRCxjQUFjO3FCQUNmO21GQWtmVyxXQUFXO3NCQUR0QixXQUFXO3VCQUFDLE9BQU87Z0JBMERwQixxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVhDbGlja0V2ZW50LFxuICBBWFZhbHVhYmxlQ29tcG9uZW50LFxuICBNWENvbXBvbmVudE9wdGlvbkNoYW5nZWQsXG4gIE1YSW50ZXJhY3RpdmVDb21wb25lbnQsXG4gIE1YVmFsdWVDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgQVhEYXRlVGltZSwgQVhEYXRlVGltZVJhbmdlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2xhc3NlcyB9IGZyb20gJ3BvbHl0eXBlJztcbmltcG9ydCB7XG4gIEFYQ2FsZW5kYXJWaWV3LFxuICBBWENhbGVuZGFyVmlld1Nsb3QsXG4gIEFYQ2FsZW5kYXJWaWV3VHlwZSxcbiAgTVhDYWxlbmRhckJhc2VDb21wb25lbnQsXG59IGZyb20gJy4vY2FsZW5kYXIuY2xhc3MnO1xuXG4vKipcbiAqIEEgY2FsZW5kYXIgY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgYSBjdXN0b21pemFibGUgY2FsZW5kYXIgdmlldyB3aXRoIHZhcmlvdXMgb3B0aW9ucyBmb3Igc2VsZWN0aW9uLCBuYXZpZ2F0aW9uLCBhbmQgc3R5bGluZy5cbiAqXG4gKiBAY2F0ZWdvcnkgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbnB1dHM6IFtcbiAgICAncnRsJyxcbiAgICAncmVhZG9ubHknLFxuICAgICd2YWx1ZScsXG4gICAgJ25hbWUnLFxuICAgICdkaXNhYmxlZCcsXG4gICAgJ2RlcHRoJyxcbiAgICAnYWN0aXZlVmlldycsXG4gICAgJ21pblZhbHVlJyxcbiAgICAnbWF4VmFsdWUnLFxuICAgICdkaXNhYmxlZERhdGVzJyxcbiAgICAnaG9saWRheURhdGVzJyxcbiAgICAndHlwZScsXG4gICAgJ2NlbGxUZW1wbGF0ZScsXG4gICAgJ2NlbGxDbGFzcycsXG4gICAgJ3Nob3dOYXZpZ2F0aW9uJyxcbiAgICAnY291bnQnLFxuICAgICduYW1lJyxcbiAgICAnaWQnLFxuICBdLFxuICBvdXRwdXRzOiBbXG4gICAgJ29uT3B0aW9uQ2hhbmdlZCcsXG4gICAgJ3ZhbHVlQ2hhbmdlJyxcbiAgICAnb25WYWx1ZUNoYW5nZWQnLFxuICAgICdtaW5WYWx1ZUNoYW5nZScsXG4gICAgJ21heFZhbHVlQ2hhbmdlJyxcbiAgICAnb25CbHVyJyxcbiAgICAnb25Gb2N1cycsXG4gICAgJ2RlcHRoQ2hhbmdlJyxcbiAgICAndHlwZUNoYW5nZScsXG4gICAgJ2FjdGl2ZVZpZXdDaGFuZ2UnLFxuICAgICdkaXNhYmxlZERhdGVzQ2hhbmdlJyxcbiAgICAnaG9saWRheURhdGVzQ2hhbmdlJyxcbiAgICAnb25OYXZpZ2F0ZScsXG4gICAgJ29uU2xvdENsaWNrJyxcbiAgICAnY291bnRDaGFuZ2UnLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFYQ2FsZW5kYXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFZhbHVhYmxlQ29tcG9uZW50LFxuICAgICAgdXNlRXhpc3Rpbmc6IEFYQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgfSxcbiAgICBBWFVuc3Vic2NyaWJlcixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhDYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIGNsYXNzZXMoXG4gIE1YVmFsdWVDb21wb25lbnQ8RGF0ZSB8IG51bGw+LFxuICBNWEludGVyYWN0aXZlQ29tcG9uZW50LFxuICBNWENhbGVuZGFyQmFzZUNvbXBvbmVudCxcbikge1xuICBwdWJsaWMgZ2V0IGRpc3BsYXlSYW5nZSgpOiBBWERhdGVUaW1lUmFuZ2Uge1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKFxuICAgICAgdGhpcy52aWV3c1swXS5yYW5nZS5zdGFydFRpbWUsXG4gICAgICB0aGlzLnZpZXdzW3RoaXMudmlld3MubGVuZ3RoIC0gMV0ucmFuZ2UuZW5kVGltZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCksIHRoaXMudHlwZSk7XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF92aWV3U3RhcnREYXRlITogQVhEYXRlVGltZTtcblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX25hdlVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfZm9vdFByaW50ID0ge1xuICAgIHllYXI6IG51bGwsXG4gICAgbW9udGg6IG51bGwsXG4gICAgZGF5OiBudWxsLFxuICB9O1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIHZpZXdzOiBBWENhbGVuZGFyVmlld1tdID0gW107XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX3dlZWtkYXlzOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFZhbHVlcygpIHtcbiAgICB0aGlzLl90b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpLCB0aGlzLnR5cGUpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gdGhpcy5fdG9kYXkuY2FsZW5kYXIud2Vla2RheXM7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgX3JlZnJlc2goKSB7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICAgIHRoaXMubmF2VG8odGhpcy52YWx1ZSB8fCB0aGlzLl90b2RheSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuc3Vic2NyaWJlcjogQVhVbnN1YnNjcmliZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLm9uSG9saWRheXNDaGFuZ2VkLnBpcGUodW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyQ2hhbmdlcyQucGlwZSh1bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5faW5pdFZhbHVlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5nb1RvZGF5KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBvdmVycmlkZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLl92aWV3U3RhcnREYXRlKSByZXR1cm47XG4gICAgY29uc3QgYXBwbHlDZWxsQ2xhc3MgPSAoc2xvdDogQVhDYWxlbmRhclZpZXdTbG90LCBjZWxsQ2xhc3M6IGFueSA9IHRoaXMuY2VsbENsYXNzKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiBjZWxsQ2xhc3MpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICBjZWxsQ2xhc3Muc3BsaXQoJyAnKS5mb3JFYWNoKChjKSA9PiAoc2xvdC5jc3NDbGFzc1tjXSA9IHRydWUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHNsb3QuY3NzQ2xhc3MsIGNlbGxDbGFzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBhcHBseUNlbGxDbGFzcyhzbG90LCBjZWxsQ2xhc3Moc2xvdC5kYXRlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZpZXdzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHtcbiAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3KSB7XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgdGhpcy5kYXlWaWV3KGksIGFwcGx5Q2VsbENsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMubW9udGhWaWV3KGksIGFwcGx5Q2VsbENsYXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy55ZWFyVmlldyhpLCBhcHBseUNlbGxDbGFzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9zZXREaXNwbGF5UmFuZ2UoY3VycmVudDogQVhEYXRlVGltZSk6IEFYRGF0ZVRpbWVSYW5nZSB7XG4gICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgIGNvbnN0IHkgPSBjdXJyZW50LnN0YXJ0T2YoJ3llYXInKS55ZWFyO1xuICAgICAgICBjb25zdCBtaW4gPSB5IC0gKHkgJSAxMCk7XG4gICAgICAgIGNvbnN0IG1heCA9IG1pbiArIDk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZVJhbmdlKFxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgeWVhcjogbWluLFxuICAgICAgICAgICAgICBtb250aDogMSxcbiAgICAgICAgICAgICAgZGF0ZTogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnR5cGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHllYXI6IG1heCxcbiAgICAgICAgICAgICAgbW9udGg6IDEyLFxuICAgICAgICAgICAgICBkYXRlOiAyOCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnR5cGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lUmFuZ2UoY3VycmVudC5zdGFydE9mKCd5ZWFyJyksIGN1cnJlbnQuZW5kT2YoJ3llYXInKS5hZGQoJ2RheScsIC0xKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWVSYW5nZShjdXJyZW50LnN0YXJ0T2YoJ21vbnRoJyksIGN1cnJlbnQuZW5kT2YoJ21vbnRoJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBkYXlWaWV3KGk6IG51bWJlciwgYXBwbHlDZWxsQ2xhc3M6IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgnbW9udGgnLCBpKTtcbiAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgIHJhbmdlOiB0aGlzLl9zZXREaXNwbGF5UmFuZ2UoY3VycmVudCksXG4gICAgICBzbG90czogW10sXG4gICAgfTtcbiAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCdkYXknKTtcbiAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHI6IGFueSA9IHt9O1xuICAgICAgci5kYXRlID0gZDtcbiAgICAgIHIudGV4dCA9IGQuZGF5T2ZNb250aDtcbiAgICAgIHIudG9vbHRpcCA9IGQuZm9ybWF0KCdsb25nRGF0ZScpO1xuICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICdkYXknKTtcbiAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLnZhbHVlICYmIGQuZXF1YWwodGhpcy52YWx1ZSwgJ2RheScpO1xuICAgICAgci5ob2xpZGF5ID0gdGhpcy5pc0hvbGlkYXkoZCkgfHwgdGhpcy5pc1dlZWtlbmQoZCk7XG4gICAgICByLmRpc2FibGVkID1cbiAgICAgICAgKHRoaXMubWluVmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWluVmFsdWUsICdkYXknKSA9PSAtMSkgfHxcbiAgICAgICAgKHRoaXMubWF4VmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWF4VmFsdWUsICdkYXknKSA9PSAxKSB8fFxuICAgICAgICB0aGlzLmlzRGlzYWJsZWQoZCk7XG4gICAgICAvL1xuICAgICAgY29uc3QgZm9jdXNlZCA9XG4gICAgICAgIGQuZGF5T2ZNb250aCA9PSB0aGlzLl9mb290UHJpbnQuZGF5ICYmXG4gICAgICAgIGQubW9udGhPZlllYXIgPT0gdGhpcy5fZm9vdFByaW50Lm1vbnRoICYmXG4gICAgICAgIGQueWVhciA9PSB0aGlzLl9mb290UHJpbnQueWVhcjtcbiAgICAgIC8vXG4gICAgICBpZiAoci5kaXNhYmxlZCkge1xuICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICdheC1zdGF0ZS1kaXNhYmxlZCc6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByLmNzc0NsYXNzID0ge1xuICAgICAgICAgICdheC1zdGF0ZS10b2RheSc6IHIudG9kYXksXG4gICAgICAgICAgJ2F4LXN0YXRlLXNlbGVjdGVkJzogci5zZWxlY3RlZCxcbiAgICAgICAgICAnYXgtc3RhdGUtaG9saWRheSc6IHIuaG9saWRheSxcbiAgICAgICAgICAvLyAnYXgtc3RhdGUtZm9jdXNlZCc6IGZvY3VzZWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBheC1jb2wtc3RhcnQtMSBheC1jb2wtc3RhcnQtMiBheC1jb2wtc3RhcnQtMyBheC1jb2wtc3RhcnQtNCBheC1jb2wtc3RhcnQtNSBheC1jb2wtc3RhcnQtNiBheC1jb2wtc3RhcnQtN1xuICAgICAgci5jc3NDbGFzc1tgYXgtY29sdW1uLXN0YXJ0LSR7dmlldy5yYW5nZS5zdGFydFRpbWUuZGF5T2ZXZWVrfWBdID0gaSA9PSAwO1xuICAgICAgaWYgKHRoaXMuY2VsbENsYXNzKSBhcHBseUNlbGxDbGFzcyhyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIG1vbnRoVmlldyhpOiBudW1iZXIsIGFwcGx5Q2VsbENsYXNzOiBhbnkpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fdmlld1N0YXJ0RGF0ZS5hZGQoJ3llYXInLCBpKTtcbiAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgIHJhbmdlOiB0aGlzLl9zZXREaXNwbGF5UmFuZ2UoY3VycmVudCksXG4gICAgICBzbG90czogW10sXG4gICAgfTtcbiAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCdtb250aCcpO1xuICAgIHZpZXcuc2xvdHMgPSBhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgY29uc3QgcjogYW55ID0ge307XG4gICAgICByLmRhdGUgPSBkO1xuICAgICAgci50ZXh0ID0gZC5mb3JtYXQoJ01NTScpO1xuICAgICAgci50b29sdGlwID0gZC5mb3JtYXQoJ01NTU0gWVlZWScpO1xuICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICdtb250aCcpO1xuICAgICAgLy9cbiAgICAgIHIuZGlzYWJsZWQgPVxuICAgICAgICAodGhpcy5taW5WYWx1ZSAmJiBkLmNvbXBhcmUodGhpcy5taW5WYWx1ZSwgJ21vbnRoJykgPT0gLTEpIHx8XG4gICAgICAgICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAnbW9udGgnKSA9PSAxKTtcbiAgICAgIC8vXG4gICAgICByLnNlbGVjdGVkID0gdGhpcy52YWx1ZSAmJiB0aGlzLmRlcHRoID09ICdtb250aCcgJiYgZC5lcXVhbCh0aGlzLnZhbHVlLCAnbW9udGgnKTtcbiAgICAgIC8vXG4gICAgICBjb25zdCBmb2N1c2VkID0gZC5tb250aE9mWWVhciA9PSB0aGlzLl9mb290UHJpbnQubW9udGggJiYgZC55ZWFyID09IHRoaXMuX2Zvb3RQcmludC55ZWFyO1xuICAgICAgLy9cbiAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogci5kaXNhYmxlZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAnYXgtc3RhdGUtc2VsZWN0ZWQnOiByLnNlbGVjdGVkLFxuICAgICAgICAgICdheC1zdGF0ZS1mb2N1c2VkJzogZm9jdXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGFwcGx5Q2VsbENsYXNzKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgeWVhclZpZXcoaTogbnVtYmVyLCBhcHBseUNlbGxDbGFzczogYW55KSB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3ZpZXdTdGFydERhdGUuYWRkKCd5ZWFyJywgaSAqIDEwKTtcbiAgICBjb25zdCB2aWV3OiBBWENhbGVuZGFyVmlldyA9IHtcbiAgICAgIHJhbmdlOiB0aGlzLl9zZXREaXNwbGF5UmFuZ2UoY3VycmVudCksXG4gICAgICBzbG90czogW10sXG4gICAgfTtcbiAgICB0aGlzLnZpZXdzLnB1c2godmlldyk7XG4gICAgY29uc3QgYSA9IHZpZXcucmFuZ2UuZW51bXVyYXRlKCd5ZWFyJyk7XG5cbiAgICB2aWV3LnNsb3RzID0gYS5tYXAoKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IHI6IGFueSA9IHt9O1xuICAgICAgci5kYXRlID0gZDtcbiAgICAgIHIudGV4dCA9IGQuZm9ybWF0KCdZWVlZJyk7XG4gICAgICByLnRvb2x0aXAgPSBkLmZvcm1hdCgnWVlZWScpO1xuICAgICAgci50b2RheSA9IGQuZXF1YWwodGhpcy5fdG9kYXksICd5ZWFyJyk7XG4gICAgICByLnNlbGVjdGVkID0gdGhpcy52YWx1ZSAmJiB0aGlzLmRlcHRoID09ICd5ZWFyJyAmJiBkLmVxdWFsKHRoaXMudmFsdWUsICd5ZWFyJyk7XG4gICAgICAvL1xuICAgICAgY29uc3QgZm9jdXNlZCA9IGQueWVhciA9PSB0aGlzLl9mb290UHJpbnQueWVhcjtcbiAgICAgIC8vXG4gICAgICByLmRpc2FibGVkID1cbiAgICAgICAgKHRoaXMubWluVmFsdWUgJiYgZC5jb21wYXJlKHRoaXMubWluVmFsdWUsICd5ZWFyJykgPT0gLTEpIHx8XG4gICAgICAgICh0aGlzLm1heFZhbHVlICYmIGQuY29tcGFyZSh0aGlzLm1heFZhbHVlLCAneWVhcicpID09IDEpO1xuICAgICAgLy9cbiAgICAgIGlmIChyLmRpc2FibGVkKSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLWRpc2FibGVkJzogci5kaXNhYmxlZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIuY3NzQ2xhc3MgPSB7XG4gICAgICAgICAgJ2F4LXN0YXRlLXRvZGF5Jzogci50b2RheSxcbiAgICAgICAgICAnYXgtc3RhdGUtc2VsZWN0ZWQnOiByLnNlbGVjdGVkLFxuICAgICAgICAgICdheC1zdGF0ZS1mb2N1c2VkJzogZm9jdXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGFwcGx5Q2VsbENsYXNzKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlUHJldkNsaWNrKCkge1xuICAgIHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5wcmV2KCk7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlTmV4dENsaWNrKCkge1xuICAgIHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlU2xvdENsaWNrKGU6IE1vdXNlRXZlbnQsIHNsb3Q6IEFYQ2FsZW5kYXJWaWV3U2xvdCkge1xuICAgIGlmIChzbG90LmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAvL1xuICAgIHRoaXMub25TbG90Q2xpY2suZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBpdGVtOiBzbG90LmRhdGUuZGF0ZSxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgfSk7XG4gICAgLy9cbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnICYmIHRoaXMuZGVwdGggPT0gJ2RheScpIHtcbiAgICAgIHRoaXMuYWN0aXZlVmlldyA9ICdkYXknO1xuICAgICAgdGhpcy5fZm9vdFByaW50Lm1vbnRoID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNsb3QuZGF0ZS5kYXRlLCB0aGlzLnR5cGUpLm1vbnRoT2ZZZWFyO1xuICAgICAgdGhpcy5uYXZUbyhzbG90LmRhdGUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdtb250aCcgJiYgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAneWVhcicgJiYgKHRoaXMuZGVwdGggPT0gJ2RheScgfHwgdGhpcy5kZXB0aCA9PSAnbW9udGgnKSkge1xuICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gJ21vbnRoJztcbiAgICAgIHRoaXMuX2Zvb3RQcmludC55ZWFyID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNsb3QuZGF0ZS5kYXRlLCB0aGlzLnR5cGUpLnllYXI7XG4gICAgICB0aGlzLm5hdlRvKHNsb3QuZGF0ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ3llYXInICYmIHRoaXMuZGVwdGggPT0gJ3llYXInKSB7XG4gICAgICB0aGlzLl9zZXREYXRlKHNsb3QuZGF0ZS5kYXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBfaGFuZGxlTmF2Q2xpY2soZTogQVhDbGlja0V2ZW50IHwgYW55LCB2aWV3OiBBWENhbGVuZGFyVmlld1R5cGUpIHtcbiAgICB0aGlzLl9uYXZVc2VySW50ZXJhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlVmlldyA9IHZpZXc7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlVmlldygpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09ICdkYXknKSB0aGlzLmFjdGl2ZVZpZXcgPSAnbW9udGgnO1xuICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnbW9udGgnKSB0aGlzLmFjdGl2ZVZpZXcgPSAneWVhcic7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbE9wdGlvbkNoYW5nZWQoZTogTVhDb21wb25lbnRPcHRpb25DaGFuZ2VkKSB7XG4gICAgaWYgKFxuICAgICAgZS5uYW1lID09ICdkZXB0aCcgfHxcbiAgICAgIGUubmFtZSA9PSAnYWN0aXZlVmlldycgfHxcbiAgICAgIGUubmFtZSA9PSAnZGlzYWJsZWREYXRlcycgfHxcbiAgICAgIGUubmFtZSA9PSAnaG9saWRheURhdGVzJ1xuICAgICkge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gICAgaWYgKGUubmFtZSA9PSAndHlwZScpIHtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbFNldFZhbHVlKHZhbHVlOiBEYXRlKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHYgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jb252ZXJ0KHZhbHVlKTtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkKHYpO1xuICAgIGlmIChpc0Rpc2FibGVkKSByZXR1cm4gbnVsbDtcbiAgICBlbHNlIHJldHVybiB2LmRhdGU7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbnRlcm5hbFZhbHVlQ2hhbmdlZCh2YWx1ZT86IERhdGUpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodmFsdWUsIHRoaXMudHlwZSk7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX3ZpZXdTdGFydERhdGUgfHxcbiAgICAgIHZhbC5jb21wYXJlKHRoaXMuZGlzcGxheVJhbmdlLnN0YXJ0VGltZSwgdGhpcy5hY3RpdmVWaWV3KSA9PSAtMSB8fFxuICAgICAgdmFsLmNvbXBhcmUodGhpcy5kaXNwbGF5UmFuZ2UuZW5kVGltZSwgdGhpcy5hY3RpdmVWaWV3KSA9PSAxXG4gICAgKSB7XG4gICAgICB0aGlzLl92aWV3U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHZhbHVlLCB0aGlzLnR5cGUpO1xuICAgIH1cbiAgICB0aGlzLl9mb290UHJpbnQueWVhciA9IHZhbC55ZWFyO1xuICAgIHRoaXMuX2Zvb3RQcmludC5tb250aCA9IHZhbC5tb250aE9mWWVhcjtcbiAgICB0aGlzLl9mb290UHJpbnQuZGF5ID0gdmFsLmRheU9mTW9udGg7XG5cbiAgICBjb25zdCBjYWxlbmRhclNsb3RzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXgtY2FsZW5kYXItc2xvdCcpKTtcbiAgICBjb25zdCBzZWxlY3RlZFNsb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXgtc3RhdGUtc2VsZWN0ZWQnKTtcbiAgICBpZiAoc2VsZWN0ZWRTbG90KSB7XG4gICAgICBzZWxlY3RlZFNsb3QuY2xhc3NMaXN0LnJlbW92ZSgnYXgtc3RhdGUtc2VsZWN0ZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gICAgY2FsZW5kYXJTbG90cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChlbGVtZW50LnRleHRDb250ZW50ID09IHRoaXMuX2Zvb3RQcmludC5kYXkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1zdGF0ZS1zZWxlY3RlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgX2hhbmRsZUdvVG9kYXkoKSB7XG4gICAgdGhpcy5fbmF2VXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXREYXRlKHRoaXMuX3RvZGF5LmRhdGUpO1xuICAgIHRoaXMuZ29Ub2RheSgpO1xuICAgIHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgbmV4dCBpdGVtLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZXh0KCkge1xuICAgIHRoaXMuX25hdk5leHRQcmV2KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIGl0ZW0uXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByZXYoKSB7XG4gICAgdGhpcy5fbmF2TmV4dFByZXYodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmb2N1cyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhbGVuZGFyIHNsb3Qgb3IgdGhlIGZpcnN0IGF2YWlsYWJsZSBzbG90LlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvdmVycmlkZSBmb2N1cygpIHtcbiAgICBjb25zdCBmdW5jID0gKHM6IHN0cmluZykgPT4gdGhpcy5nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KHMpO1xuICAgIGNvbnN0IGRpdiA9IGZ1bmMoJy5heC1jYWxlbmRhci1zbG90cz5kaXYuYXgtc3RhdGUtc2VsZWN0ZWQnKSB8fCBmdW5jKCcuYXgtY2FsZW5kYXItc2xvdHM+ZGl2Jyk7XG4gICAgZGl2Py5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9uYXZOZXh0UHJldihwcmV2OiBib29sZWFuKSB7XG4gICAgY29uc3Qgc2lnbiA9IHByZXYgPyAtMSA6IDE7XG4gICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PSAnZGF5JykgdGhpcy5uYXZUbyh0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgnbW9udGgnLCBzaWduICogMSAqIHRoaXMuY291bnQpKTtcbiAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT0gJ21vbnRoJykgdGhpcy5uYXZUbyh0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgneWVhcicsIHNpZ24gKiAxICogdGhpcy5jb3VudCkpO1xuICAgIGVsc2UgdGhpcy5uYXZUbyh0aGlzLl92aWV3U3RhcnREYXRlLmFkZCgneWVhcicsIHNpZ24gKiAxMCAqIHRoaXMuY291bnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIGN1cnJlbnQgZGF0ZS5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ29Ub2RheSgpIHtcbiAgICB0aGlzLm5hdlRvKHRoaXMuX3RvZGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpZWQgZGF0ZSBhbmQgdXBkYXRlcyB0aGUgdmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBuYXZpZ2F0ZSB0bywgd2hpY2ggY2FuIGJlIGEgYERhdGVgIG9iamVjdCBvciBhbiBgQVhEYXRlVGltZWAgaW5zdGFuY2UuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG5hdlRvKGRhdGU6IERhdGUgfCBBWERhdGVUaW1lKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY29udmVydChkYXRlLCB0aGlzLnR5cGUpO1xuICAgIHRoaXMuX3ZpZXdTdGFydERhdGUgPSB2YWwuc3RhcnRPZigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgLy90byBtYWtlIHN1cmUgaXRzIHJlbmRyZWQgYW5kIGRpc3BsYXlSYW5nZSBpcyBub3QgbnVsbFxuICAgIGlmICh0aGlzLnZpZXdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHZyID0gdGhpcy5kaXNwbGF5UmFuZ2U7XG4gICAgICB0aGlzLm9uTmF2aWdhdGUuZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRoaXMuX25hdlVzZXJJbnRlcmFjdGlvbixcbiAgICAgICAgc3RhcnQ6IHZyLnN0YXJ0VGltZT8uZGF0ZSxcbiAgICAgICAgZW5kOiB2ci5lbmRUaW1lPy5kYXRlLFxuICAgICAgICBodG1sRWxlbWVudDogdGhpcy5nZXRIb3N0RWxlbWVudCgpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHJpdmF0ZSBnZXQgX19ob3N0Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBjb25zdCBfY2xhc3NlcyA9IHtcbiAgICAgICdheC1zdGF0ZS1kaXNhYmxlZCc6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAnYXgtc3RhdGUtcmVhZG9ubHknOiB0aGlzLnJlYWRvbmx5LFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKF9jbGFzc2VzKVxuICAgICAgLmZpbHRlcigoYykgPT4gY1sxXSlcbiAgICAgIC5tYXAoKGMpID0+IGNbMF0pXG4gICAgICAuam9pbignICcpO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcml2YXRlIF9zZXREYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuY29tbWl0VmFsdWUodGhpcy5jYWxlbmRhclNlcnZpY2UuY29udmVydCh2YWx1ZSwgdGhpcy50eXBlKS5zdGFydE9mKCkuZGF0ZSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpc0Rpc2FibGVkKGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRpc2FibGVkRGF0ZXMpICYmIHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggIT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKChkKSA9PiBkYXRlLmVxdWFsKGQsICdkYXknKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGVzID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMoZGF0ZS5kYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqICBAaWdub3JlXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNIb2xpZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBnaCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGxldCBkaCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuaG9saWRheURhdGVzKSAmJiB0aGlzLmhvbGlkYXlEYXRlcy5sZW5ndGggIT0gMCkge1xuICAgICAgZGggPSB0aGlzLmhvbGlkYXlEYXRlcy5zb21lKChkKSA9PiBkYXRlLmVxdWFsKGQsICdkYXknKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5ob2xpZGF5RGF0ZXMgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGggPSB0aGlzLmhvbGlkYXlEYXRlcyhkYXRlLmRhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gZ2ggfHwgZGg7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIHByb3RlY3RlZCBpc1dlZWtlbmQoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHdlZWtlbmQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5yZXNvbHZlQ2FsZW5kYXIodGhpcy50eXBlKS53ZWVrZW5kO1xuICAgIHJldHVybiB3ZWVrZW5kLmluY2x1ZGVzKGRhdGUuZGF5T2ZXZWVrIC0gMSk7XG4gIH1cblxuICAvKipcbiAgICogIEBpZ25vcmVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBfaGFuZGxlT25LZXlkb3duRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vVE9ETzogY29tcGxldGUga2V5Ym9hZCBuYXZpZ2F0aW9uXG4gICAgY29uc3QgaWdub3JlID0gKCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuICAgIGlmIChlLmNvZGUgPT09ICdBcnJvd1JpZ2h0JyB8fCBlLmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgIGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnID8gdGhpcy5uZXh0KCkgOiB0aGlzLnByZXYoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgICBpZ25vcmUoKTtcbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PT0gJ0Fycm93VXAnIHx8IGUuY29kZSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgZS5jb2RlID09PSAnQXJyb3dVcCcgPyB0aGlzLm5leHQoKSA6IHRoaXMucHJldigpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICAgIGlnbm9yZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQGlnbm9yZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE1vbnRoTmFtZShkYXRlOiBBWERhdGVUaW1lLCBzdHlsZTogJ3Nob3J0JyB8ICdsb25nJykge1xuICAgIHJldHVybiBgZGF0ZVRpbWUubW9udGhzLiR7ZGF0ZS5jYWxlbmRhci5uYW1lKCl9LiR7c3R5bGV9LiR7ZGF0ZS5tb250aE9mWWVhciAtIDF9YDtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLWJvZHlcIj5cbiAgQGZvciAodiBvZiB2aWV3czsgbGV0IGkgPSAkaW5kZXgsIGZpcnN0ID0gJGZpcnN0LCBsYXN0ID0gJGxhc3Q7IHRyYWNrIGkpIHtcbiAgICBAc3dpdGNoIChhY3RpdmVWaWV3KSB7XG4gICAgICBAY2FzZSAoJ3llYXInKSB7XG4gICAgICAgIEBpZiAoc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItdmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LXN0YXRlLWRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5hdkNsaWNrKCRldmVudCwgJ3llYXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB2LnJhbmdlLnN0YXJ0VGltZS5mb3JtYXQoJ1lZWVknKSB9fSAtIHt7IHYucmFuZ2UuZW5kVGltZS5mb3JtYXQoJ1lZWVknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvbiBheC1uZXh0XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlUHJldkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwcmV2JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLWxlZnRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkIGF4LWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmV4dENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIiduZXh0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdHMgYXgtY2FsZW5kYXItc2xvdHMteWVhclwiIFtuZ0NsYXNzXT1cInsgJ2F4LWRlZmF1bHQnOiAhY2VsbFRlbXBsYXRlIH1cIj5cbiAgICAgICAgICBAZm9yIChzbG90IG9mIHYuc2xvdHM7IHRyYWNrIHNsb3QudGV4dCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWNhbGVuZGFyLXNsb3RcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzbG90LmNzc0NsYXNzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVTbG90Q2xpY2soJGV2ZW50LCBzbG90KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHNsb3Q6IHNsb3QgfSB9XCI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBbdGl0bGVdPVwic2xvdC50b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzbG90LnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnbW9udGgnKSB7XG4gICAgICAgIEBpZiAoc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItdmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLnJlYWRvbmx5XT1cInJlYWRvbmx5ID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWdlbmVyYWwtYnV0dG9uIGF4LWJ1dHRvbi1yb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5hdkNsaWNrKCRldmVudCwgJ3llYXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyB2LnJhbmdlLnN0YXJ0VGltZS5mb3JtYXQoJ1lZWVknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVByZXZDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncHJldicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1sZWZ0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5leHRDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInbmV4dCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLXNsb3RzIGF4LWNhbGVuZGFyLXNsb3RzLW1vbnRoXCIgW25nQ2xhc3NdPVwieyAnYXgtZGVmYXVsdCc6ICFjZWxsVGVtcGxhdGUgfVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2xvdCBvZiB2LnNsb3RzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdFwiXG4gICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwic2xvdC5jc3NDbGFzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVNsb3RDbGljaygkZXZlbnQsIHNsb3QpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGNlbGxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHNsb3Q6IHNsb3QgfSB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgW3RpdGxlXT1cInNsb3QudG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgIHt7IGdldE1vbnRoTmFtZShzbG90LmRhdGUsICdzaG9ydCcpIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGRlZmF1bHQge1xuICAgICAgICBAaWYgKHNob3dOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLXZpZXctaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItaGVhZGVyLWluZm9cIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gJycgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVOYXZDbGljaygkZXZlbnQsICd5ZWFyJylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdi5yYW5nZS5zdGFydFRpbWUuZm9ybWF0KCdZWVlZJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZ2VuZXJhbC1idXR0b24gYXgtYnV0dG9uLXJvdW5kZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGFuZGxlTmF2Q2xpY2soJGV2ZW50LCAnbW9udGgnKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRNb250aE5hbWUodi5yYW5nZS5zdGFydFRpbWUsICdsb25nJykgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1jYWxlbmRhci1oZWFkZXItYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZVByZXZDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncHJldicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1sZWZ0XCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwicmVhZG9ubHkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1nZW5lcmFsLWJ1dHRvbiBheC1idXR0b24tcm91bmRlZCBheC1idXR0b24taWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hhbmRsZU5leHRDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInbmV4dCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJheC1pY29uIGF4LWljb24tY2hldnJvbi1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWNhbGVuZGFyLXdlZWtcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkIG9mIF93ZWVrZGF5c1wiPnt7ICdkYXRlVGltZS53ZWVrZGF5cy5zaG9ydC4nICsgZCB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtY2FsZW5kYXItc2xvdHMgYXgtY2FsZW5kYXItc2xvdHMtZGF5XCIgW25nQ2xhc3NdPVwieyAnYXgtZGVmYXVsdCc6ICFjZWxsVGVtcGxhdGUgfVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNsb3Qgb2Ygdi5zbG90c1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWNhbGVuZGFyLXNsb3RcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzbG90LmNzc0NsYXNzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVTbG90Q2xpY2soJGV2ZW50LCBzbG90KVwiXG4gICAgICAgICAgICAgIFtheFJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2xvdDogc2xvdCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFt0aXRsZV09XCJzbG90LnRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNsb3QudGV4dCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgfVxuICB9XG48L2Rpdj5cbjxuZy1jb250ZW50IHNlbGVjdD1cImF4LWZvb3RlclwiPjwvbmctY29udGVudD5cbiJdfQ==