@taiga-ui/addon-mobile 4.51.0 → 4.52.0-canary.0ec45da

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/components/mobile-calendar/mobile-calendar.component.d.ts +4 -4
  2. package/components/mobile-calendar-dropdown/mobile-calendar-dropdown.component.d.ts +1 -1
  3. package/components/sheet-dialog/sheet-dialog.directive.d.ts +4 -3
  4. package/components/sheet-dialog/sheet-dialog.options.d.ts +1 -1
  5. package/components/sheet-dialog/sheet-dialog.service.d.ts +9 -4
  6. package/directives/dropdown-mobile/dropdown-mobile.component.d.ts +9 -13
  7. package/directives/dropdown-mobile/dropdown-mobile.directive.d.ts +1 -2
  8. package/directives/dropdown-sheet/dropdown-sheet.component.d.ts +14 -0
  9. package/directives/dropdown-sheet/dropdown-sheet.directive.d.ts +6 -0
  10. package/directives/dropdown-sheet/index.d.ts +2 -0
  11. package/directives/index.d.ts +1 -1
  12. package/directives/ripple/ripple.directive.d.ts +1 -1
  13. package/fesm2022/taiga-ui-addon-mobile-components-bottom-sheet.mjs +7 -8
  14. package/fesm2022/taiga-ui-addon-mobile-components-bottom-sheet.mjs.map +1 -1
  15. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar-dropdown.mjs +23 -27
  16. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar-dropdown.mjs.map +1 -1
  17. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar-sheet.mjs +6 -8
  18. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar-sheet.mjs.map +1 -1
  19. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar.mjs +14 -16
  20. package/fesm2022/taiga-ui-addon-mobile-components-mobile-calendar.mjs.map +1 -1
  21. package/fesm2022/taiga-ui-addon-mobile-components-mobile-dialog.mjs +9 -10
  22. package/fesm2022/taiga-ui-addon-mobile-components-mobile-dialog.mjs.map +1 -1
  23. package/fesm2022/taiga-ui-addon-mobile-components-pull-to-refresh.mjs +21 -21
  24. package/fesm2022/taiga-ui-addon-mobile-components-pull-to-refresh.mjs.map +1 -1
  25. package/fesm2022/taiga-ui-addon-mobile-components-sheet-dialog.mjs +52 -41
  26. package/fesm2022/taiga-ui-addon-mobile-components-sheet-dialog.mjs.map +1 -1
  27. package/fesm2022/taiga-ui-addon-mobile-components-swipe-action.mjs +9 -9
  28. package/fesm2022/taiga-ui-addon-mobile-components-swipe-action.mjs.map +1 -1
  29. package/fesm2022/taiga-ui-addon-mobile-components-tab-bar.mjs +13 -14
  30. package/fesm2022/taiga-ui-addon-mobile-components-tab-bar.mjs.map +1 -1
  31. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-mobile.mjs +66 -89
  32. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-mobile.mjs.map +1 -1
  33. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-sheet.mjs +83 -0
  34. package/fesm2022/taiga-ui-addon-mobile-directives-dropdown-sheet.mjs.map +1 -0
  35. package/fesm2022/taiga-ui-addon-mobile-directives-elastic-sticky.mjs +8 -8
  36. package/fesm2022/taiga-ui-addon-mobile-directives-elastic-sticky.mjs.map +1 -1
  37. package/fesm2022/taiga-ui-addon-mobile-directives-responsive-dialog.mjs +6 -6
  38. package/fesm2022/taiga-ui-addon-mobile-directives-responsive-dialog.mjs.map +1 -1
  39. package/fesm2022/taiga-ui-addon-mobile-directives-ripple.mjs +18 -39
  40. package/fesm2022/taiga-ui-addon-mobile-directives-ripple.mjs.map +1 -1
  41. package/fesm2022/taiga-ui-addon-mobile-directives-touchable.mjs +5 -5
  42. package/fesm2022/taiga-ui-addon-mobile-directives-touchable.mjs.map +1 -1
  43. package/fesm2022/taiga-ui-addon-mobile-directives.mjs +1 -1
  44. package/fesm2022/taiga-ui-addon-mobile-services.mjs +5 -5
  45. package/fesm2022/taiga-ui-addon-mobile-services.mjs.map +1 -1
  46. package/package.json +16 -54
  47. package/styles/android/checkbox.less +2 -3
  48. package/styles/android/switch.less +0 -2
  49. package/styles/common/badge.less +2 -2
  50. package/styles/common/button.less +4 -0
  51. package/styles/common/chip.less +3 -8
  52. package/styles/common/notification-middle.less +9 -0
  53. package/styles/common/toast.less +21 -0
  54. package/styles/ios/checkbox.less +2 -4
  55. package/styles/ios/switch.less +1 -2
  56. package/styles/taiga-ui-mobile.less +9 -0
  57. package/directives/sidebar/index.d.ts +0 -3
  58. package/directives/sidebar/sidebar.component.d.ts +0 -21
  59. package/directives/sidebar/sidebar.d.ts +0 -6
  60. package/directives/sidebar/sidebar.directive.d.ts +0 -22
  61. package/esm2022/components/bottom-sheet/bottom-sheet.component.mjs +0 -49
  62. package/esm2022/components/bottom-sheet/index.mjs +0 -2
  63. package/esm2022/components/bottom-sheet/taiga-ui-addon-mobile-components-bottom-sheet.mjs +0 -5
  64. package/esm2022/components/index.mjs +0 -10
  65. package/esm2022/components/mobile-calendar/index.mjs +0 -5
  66. package/esm2022/components/mobile-calendar/mobile-calendar.component.mjs +0 -308
  67. package/esm2022/components/mobile-calendar/mobile-calendar.const.mjs +0 -35
  68. package/esm2022/components/mobile-calendar/mobile-calendar.providers.mjs +0 -27
  69. package/esm2022/components/mobile-calendar/mobile-calendar.strategy.mjs +0 -126
  70. package/esm2022/components/mobile-calendar/taiga-ui-addon-mobile-components-mobile-calendar.mjs +0 -5
  71. package/esm2022/components/mobile-calendar-dropdown/index.mjs +0 -3
  72. package/esm2022/components/mobile-calendar-dropdown/mobile-calendar-dropdown.component.mjs +0 -117
  73. package/esm2022/components/mobile-calendar-dropdown/mobile-calendar-dropdown.directive.mjs +0 -53
  74. package/esm2022/components/mobile-calendar-dropdown/taiga-ui-addon-mobile-components-mobile-calendar-dropdown.mjs +0 -5
  75. package/esm2022/components/mobile-calendar-sheet/index.mjs +0 -2
  76. package/esm2022/components/mobile-calendar-sheet/mobile-calendar-sheet.component.mjs +0 -25
  77. package/esm2022/components/mobile-calendar-sheet/taiga-ui-addon-mobile-components-mobile-calendar-sheet.mjs +0 -5
  78. package/esm2022/components/mobile-dialog/index.mjs +0 -4
  79. package/esm2022/components/mobile-dialog/mobile-dialog.component.mjs +0 -26
  80. package/esm2022/components/mobile-dialog/mobile-dialog.options.mjs +0 -17
  81. package/esm2022/components/mobile-dialog/mobile-dialog.service.mjs +0 -22
  82. package/esm2022/components/mobile-dialog/taiga-ui-addon-mobile-components-mobile-dialog.mjs +0 -5
  83. package/esm2022/components/pull-to-refresh/index.mjs +0 -6
  84. package/esm2022/components/pull-to-refresh/loader-android/loader-android.component.mjs +0 -46
  85. package/esm2022/components/pull-to-refresh/loader-ios/loader-ios.component.mjs +0 -39
  86. package/esm2022/components/pull-to-refresh/pull-to-refresh.component.mjs +0 -51
  87. package/esm2022/components/pull-to-refresh/pull-to-refresh.providers.mjs +0 -24
  88. package/esm2022/components/pull-to-refresh/pull-to-refresh.service.mjs +0 -37
  89. package/esm2022/components/pull-to-refresh/taiga-ui-addon-mobile-components-pull-to-refresh.mjs +0 -5
  90. package/esm2022/components/sheet-dialog/index.mjs +0 -5
  91. package/esm2022/components/sheet-dialog/sheet-dialog.component.mjs +0 -80
  92. package/esm2022/components/sheet-dialog/sheet-dialog.directive.mjs +0 -21
  93. package/esm2022/components/sheet-dialog/sheet-dialog.options.mjs +0 -24
  94. package/esm2022/components/sheet-dialog/sheet-dialog.service.mjs +0 -38
  95. package/esm2022/components/sheet-dialog/taiga-ui-addon-mobile-components-sheet-dialog.mjs +0 -5
  96. package/esm2022/components/swipe-action/index.mjs +0 -3
  97. package/esm2022/components/swipe-action/swipe-actions-auto-close.directive.mjs +0 -34
  98. package/esm2022/components/swipe-action/swipe-actions.component.mjs +0 -23
  99. package/esm2022/components/swipe-action/taiga-ui-addon-mobile-components-swipe-action.mjs +0 -5
  100. package/esm2022/components/tab-bar/index.mjs +0 -5
  101. package/esm2022/components/tab-bar/tab-bar-item.component.mjs +0 -26
  102. package/esm2022/components/tab-bar/tab-bar-item.directive.mjs +0 -27
  103. package/esm2022/components/tab-bar/tab-bar.component.mjs +0 -46
  104. package/esm2022/components/tab-bar/tab-bar.mjs +0 -9
  105. package/esm2022/components/tab-bar/taiga-ui-addon-mobile-components-tab-bar.mjs +0 -5
  106. package/esm2022/components/taiga-ui-addon-mobile-components.mjs +0 -5
  107. package/esm2022/directives/dropdown-mobile/dropdown-mobile.component.mjs +0 -98
  108. package/esm2022/directives/dropdown-mobile/dropdown-mobile.directive.mjs +0 -54
  109. package/esm2022/directives/dropdown-mobile/index.mjs +0 -3
  110. package/esm2022/directives/dropdown-mobile/taiga-ui-addon-mobile-directives-dropdown-mobile.mjs +0 -5
  111. package/esm2022/directives/elastic-sticky/elastic-sticky.directive.mjs +0 -23
  112. package/esm2022/directives/elastic-sticky/elastic-sticky.service.mjs +0 -53
  113. package/esm2022/directives/elastic-sticky/index.mjs +0 -3
  114. package/esm2022/directives/elastic-sticky/taiga-ui-addon-mobile-directives-elastic-sticky.mjs +0 -5
  115. package/esm2022/directives/index.mjs +0 -7
  116. package/esm2022/directives/responsive-dialog/index.mjs +0 -3
  117. package/esm2022/directives/responsive-dialog/responsive-dialog.directive.mjs +0 -21
  118. package/esm2022/directives/responsive-dialog/responsive-dialog.service.mjs +0 -34
  119. package/esm2022/directives/responsive-dialog/taiga-ui-addon-mobile-directives-responsive-dialog.mjs +0 -5
  120. package/esm2022/directives/ripple/index.mjs +0 -2
  121. package/esm2022/directives/ripple/ripple.directive.mjs +0 -98
  122. package/esm2022/directives/ripple/taiga-ui-addon-mobile-directives-ripple.mjs +0 -5
  123. package/esm2022/directives/sidebar/index.mjs +0 -4
  124. package/esm2022/directives/sidebar/sidebar.component.mjs +0 -45
  125. package/esm2022/directives/sidebar/sidebar.directive.mjs +0 -64
  126. package/esm2022/directives/sidebar/sidebar.mjs +0 -7
  127. package/esm2022/directives/sidebar/taiga-ui-addon-mobile-directives-sidebar.mjs +0 -5
  128. package/esm2022/directives/taiga-ui-addon-mobile-directives.mjs +0 -5
  129. package/esm2022/directives/touchable/index.mjs +0 -2
  130. package/esm2022/directives/touchable/taiga-ui-addon-mobile-directives-touchable.mjs +0 -5
  131. package/esm2022/directives/touchable/touchable.directive.mjs +0 -71
  132. package/esm2022/index.mjs +0 -4
  133. package/esm2022/services/index.mjs +0 -2
  134. package/esm2022/services/keyboard.service.mjs +0 -53
  135. package/esm2022/services/taiga-ui-addon-mobile-services.mjs +0 -5
  136. package/esm2022/taiga-ui-addon-mobile.mjs +0 -5
  137. package/fesm2022/taiga-ui-addon-mobile-directives-sidebar.mjs +0 -114
  138. package/fesm2022/taiga-ui-addon-mobile-directives-sidebar.mjs.map +0 -1
@@ -1,308 +0,0 @@
1
- import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport, } from '@angular/cdk/scrolling';
2
- import { AsyncPipe, DOCUMENT, NgForOf, NgIf } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, DestroyRef, EventEmitter, inject, Input, NgZone, Output, ViewChild, } from '@angular/core';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { TuiMobileCalendarSheet } from '@taiga-ui/addon-mobile/components/mobile-calendar-sheet';
6
- import { TuiRipple, TuiTouchable } from '@taiga-ui/addon-mobile/directives';
7
- import { TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
8
- import { MONTHS_IN_YEAR, TUI_FIRST_DAY, TUI_LAST_DAY, TuiDay, TuiDayRange, TuiMonth, } from '@taiga-ui/cdk/date-time';
9
- import { tuiTypedFromEvent, tuiZonefree, tuiZonefreeScheduler, } from '@taiga-ui/cdk/observables';
10
- import { TuiMapperPipe } from '@taiga-ui/cdk/pipes/mapper';
11
- import { TUI_IS_E2E, TUI_IS_IOS } from '@taiga-ui/cdk/tokens';
12
- import { TuiButton } from '@taiga-ui/core/components/button';
13
- import { TUI_CALENDAR_SHEET_OPTIONS } from '@taiga-ui/core/components/calendar';
14
- import { TuiLink } from '@taiga-ui/core/components/link';
15
- import { TuiMonthPipe } from '@taiga-ui/core/pipes/month';
16
- import { TuiOrderWeekDaysPipe } from '@taiga-ui/core/pipes/order-week-days';
17
- import { TUI_ANIMATIONS_SPEED, TUI_CLOSE_WORD, TUI_COMMON_ICONS, TUI_SHORT_WEEK_DAYS, } from '@taiga-ui/core/tokens';
18
- import { tuiGetDuration } from '@taiga-ui/core/utils/miscellaneous';
19
- import { TUI_CANCEL_WORD, TUI_CHOOSE_DAY_OR_RANGE_TEXTS, TUI_DONE_WORD, } from '@taiga-ui/kit/tokens';
20
- import { tuiToggleDay } from '@taiga-ui/kit/utils';
21
- import { BehaviorSubject, debounceTime, delay, distinctUntilChanged, filter, identity, map, mergeMap, race, skip, switchMap, take, takeUntil, timer, windowToggle, } from 'rxjs';
22
- import { RANGE, SCROLL_DEBOUNCE_TIME, STARTING_YEAR, YEARS_IN_ROW, } from './mobile-calendar.const';
23
- import { TUI_MOBILE_CALENDAR_PROVIDERS, TUI_VALUE_STREAM, } from './mobile-calendar.providers';
24
- import * as i0 from "@angular/core";
25
- class TuiMobileCalendar {
26
- constructor() {
27
- this.value$ = new BehaviorSubject(null);
28
- this.today = TuiDay.currentLocal();
29
- this.activeYear = 0;
30
- this.activeMonth = 0;
31
- this.destroyRef = inject(DestroyRef);
32
- this.doc = inject(DOCUMENT);
33
- this.speed = inject(TUI_ANIMATIONS_SPEED);
34
- this.ngZone = inject(NgZone);
35
- this.initialized = false;
36
- this.isIOS = inject(TUI_IS_IOS);
37
- this.isE2E = inject(TUI_IS_E2E);
38
- this.icons = inject(TUI_COMMON_ICONS);
39
- this.closeWord$ = inject(TUI_CLOSE_WORD);
40
- this.cancelWord$ = inject(TUI_CANCEL_WORD);
41
- this.doneWord$ = inject(TUI_DONE_WORD);
42
- this.unorderedWeekDays$ = inject(TUI_SHORT_WEEK_DAYS);
43
- this.chooseDayOrRangeTexts$ = inject(TUI_CHOOSE_DAY_OR_RANGE_TEXTS, {
44
- optional: true,
45
- });
46
- this.years = Array.from({ length: RANGE }, (_, i) => i + STARTING_YEAR);
47
- this.months = Array.from({ length: RANGE * 12 }, (_, i) => new TuiMonth(Math.floor(i / MONTHS_IN_YEAR) + STARTING_YEAR, i % MONTHS_IN_YEAR));
48
- /**
49
- * @deprecated use static DI options instead
50
- * ```
51
- * tuiCalendarSheetOptionsProvider({rangeMode: boolean})
52
- * ```
53
- * TODO(v5): delete it
54
- */
55
- this.single = !inject(TUI_CALENDAR_SHEET_OPTIONS).rangeMode;
56
- this.multi = false;
57
- this.min = TUI_FIRST_DAY;
58
- this.max = TUI_LAST_DAY;
59
- this.disabledItemHandler = TUI_FALSE_HANDLER;
60
- this.cancel = new EventEmitter();
61
- this.confirm = new EventEmitter();
62
- this.valueChange = this.value$.pipe(skip(1), distinctUntilChanged((a, b) => a?.toString() === b?.toString()), map((x) => (!this.single && x instanceof TuiDay ? new TuiDayRange(x, x) : x)));
63
- this.disabledItemHandlerMapper = (disabledItemHandler, min, max) => (item) => item.dayBefore(min) ||
64
- (max !== null && item.dayAfter(max)) ||
65
- disabledItemHandler(item);
66
- inject(TUI_VALUE_STREAM)
67
- .pipe(takeUntilDestroyed())
68
- .subscribe((value) => {
69
- this.value = value;
70
- });
71
- }
72
- set value(value) {
73
- if (value !== undefined) {
74
- this.value$.next(value);
75
- }
76
- }
77
- get value() {
78
- return this.value$.value;
79
- }
80
- ngAfterViewInit() {
81
- this.activeYear = this.initialYear;
82
- this.activeMonth = this.initialMonth;
83
- // Virtual scroll has not yet rendered items even in ngAfterViewInit
84
- this.waitScrolledChange();
85
- }
86
- setYear(year) {
87
- if (this.activeYear === year) {
88
- return;
89
- }
90
- this.activeMonth += this.getMonthOffset(year);
91
- this.activeYear = year;
92
- this.scrollToActiveYear('smooth');
93
- timer(0, tuiZonefreeScheduler(this.ngZone))
94
- .pipe(tuiZonefree(this.ngZone), takeUntilDestroyed(this.destroyRef))
95
- .subscribe(() => this.scrollToActiveMonth());
96
- }
97
- get yearWidth() {
98
- return this.doc.documentElement.clientWidth / YEARS_IN_ROW;
99
- }
100
- onClose() {
101
- this.cancel.emit();
102
- }
103
- onConfirm() {
104
- if (this.value) {
105
- this.confirm.emit(this.value);
106
- }
107
- else {
108
- this.cancel.emit();
109
- }
110
- }
111
- onDayClick(day) {
112
- if (this.single) {
113
- this.value = day;
114
- }
115
- else if (this.isMultiValue(this.value)) {
116
- this.value = tuiToggleDay(this.value, day);
117
- }
118
- else if (this.value instanceof TuiDay) {
119
- this.value = TuiDayRange.sort(this.value, day);
120
- }
121
- else if (this.value instanceof TuiDayRange) {
122
- this.value = day;
123
- }
124
- else if (!this.value) {
125
- this.value = day;
126
- }
127
- }
128
- getState(index) {
129
- if (this.isYearActive(index)) {
130
- return 'active';
131
- }
132
- if (this.isYearActive(index - 1) || this.isYearActive(index + 1)) {
133
- return 'adjacent';
134
- }
135
- return null;
136
- }
137
- onMonthChange(month) {
138
- // Skipping initial callback where index === 0
139
- if (!month || this.activeMonth === month) {
140
- return;
141
- }
142
- this.activeMonth = month;
143
- const activeYear = this.monthToYear(month);
144
- if (activeYear === this.activeYear) {
145
- return;
146
- }
147
- this.activeYear = activeYear;
148
- this.scrollToActiveYear();
149
- }
150
- get initialYear() {
151
- if (!this.value) {
152
- return this.today.year;
153
- }
154
- if (this.value instanceof TuiDay) {
155
- return this.value.year;
156
- }
157
- if (!(this.value instanceof TuiDayRange)) {
158
- return this.value?.[0]?.year ?? this.today.year;
159
- }
160
- return this.value.to.year;
161
- }
162
- get initialMonth() {
163
- if (!this.value) {
164
- return this.today.month + (this.today.year - STARTING_YEAR) * MONTHS_IN_YEAR;
165
- }
166
- if (this.value instanceof TuiDay) {
167
- return this.value.month + (this.value.year - STARTING_YEAR) * MONTHS_IN_YEAR;
168
- }
169
- if (!(this.value instanceof TuiDayRange)) {
170
- return ((this.value?.[0]?.month ?? this.today.month) +
171
- ((this.value?.[0]?.year ?? this.today.year) - STARTING_YEAR) *
172
- MONTHS_IN_YEAR);
173
- }
174
- return (this.value.to.month + (this.value.to.year - STARTING_YEAR) * MONTHS_IN_YEAR);
175
- }
176
- isMultiValue(day) {
177
- return !(day instanceof TuiDay) && !(day instanceof TuiDayRange) && this.multi;
178
- }
179
- getYearsViewportSize() {
180
- return this.yearsScrollRef?.getViewportSize() || 0;
181
- }
182
- updateViewportDimension() {
183
- this.yearsScrollRef?.checkViewportSize();
184
- this.monthsScrollRef?.checkViewportSize();
185
- }
186
- lateInit() {
187
- return this.getYearsViewportSize() > 0 ? identity : delay(200);
188
- }
189
- waitScrolledChange() {
190
- this.updateViewportDimension();
191
- this.monthsScrollRef?.scrolledIndexChange
192
- .pipe(delay(tuiGetDuration(this.speed)), this.lateInit(), take(1), takeUntilDestroyed(this.destroyRef))
193
- .subscribe(() => {
194
- this.initialized = true;
195
- this.updateViewportDimension();
196
- this.initYearScroll();
197
- this.initMonthScroll();
198
- this.scrollToActiveYear();
199
- this.scrollToActiveMonth();
200
- });
201
- }
202
- initYearScroll() {
203
- const { yearsScrollRef } = this;
204
- if (!yearsScrollRef) {
205
- return;
206
- }
207
- const touchstart$ = tuiTypedFromEvent(yearsScrollRef.elementRef.nativeElement, 'touchstart', { passive: true });
208
- const touchend$ = tuiTypedFromEvent(yearsScrollRef.elementRef.nativeElement, 'touchend', { passive: true });
209
- const click$ = tuiTypedFromEvent(yearsScrollRef.elementRef.nativeElement, 'click');
210
- // Refresh activeYear
211
- yearsScrollRef
212
- .elementScrolled()
213
- .pipe(
214
- // Ignore smooth scroll resulting from click on the exact year
215
- windowToggle(touchstart$, () => click$), mergeMap((x) => x),
216
- // Delay is required to run months scroll in the next frame to prevent flicker
217
- delay(0), map(() => Math.round(yearsScrollRef.measureScrollOffset() / this.yearWidth) +
218
- Math.floor(YEARS_IN_ROW / 2) +
219
- STARTING_YEAR), filter((activeYear) => activeYear !== this.activeYear), takeUntilDestroyed(this.destroyRef))
220
- .subscribe((activeYear) => {
221
- this.activeMonth += this.getMonthOffset(activeYear);
222
- this.activeYear = activeYear;
223
- this.scrollToActiveMonth();
224
- });
225
- // Smooth scroll to activeYear after scrolling is done
226
- touchstart$
227
- .pipe(switchMap(() => touchend$), switchMap(() => race(yearsScrollRef.elementScrolled(), timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone))).pipe(debounceTime(SCROLL_DEBOUNCE_TIME * 2, tuiZonefreeScheduler(this.ngZone)), take(1), takeUntil(touchstart$))), takeUntilDestroyed(this.destroyRef))
228
- .subscribe(() => this.scrollToActiveYear('smooth'));
229
- }
230
- initMonthScroll() {
231
- const { monthsScrollRef } = this;
232
- if (!monthsScrollRef) {
233
- return;
234
- }
235
- const touchstart$ = tuiTypedFromEvent(monthsScrollRef.elementRef.nativeElement, 'touchstart', { passive: true });
236
- const touchend$ = tuiTypedFromEvent(monthsScrollRef.elementRef.nativeElement, 'touchend', { passive: true });
237
- // Smooth scroll to the closest month after scrolling is done
238
- touchstart$
239
- .pipe(switchMap(() => touchend$), switchMap(() => race(monthsScrollRef.elementScrolled(), timer(SCROLL_DEBOUNCE_TIME, tuiZonefreeScheduler(this.ngZone))).pipe(debounceTime(SCROLL_DEBOUNCE_TIME * 2, tuiZonefreeScheduler(this.ngZone)), take(1), takeUntil(touchstart$))), takeUntilDestroyed(this.destroyRef))
240
- .subscribe(() => this.scrollToActiveMonth('smooth'));
241
- }
242
- scrollToActiveYear(behavior = 'auto') {
243
- this.yearsScrollRef?.scrollToIndex(Math.max(this.activeYear - STARTING_YEAR - 2, 0), this.isE2E ? 'auto' : behavior);
244
- }
245
- scrollToActiveMonth(behavior = 'auto') {
246
- this.monthsScrollRef?.scrollToIndex(this.activeMonth, this.isE2E ? 'auto' : behavior);
247
- }
248
- isYearActive(index) {
249
- return index === this.activeYear;
250
- }
251
- monthToYear(month) {
252
- return Math.ceil((month + 1) / MONTHS_IN_YEAR) + STARTING_YEAR - 1;
253
- }
254
- getMonthOffset(year) {
255
- return (year - this.activeYear) * MONTHS_IN_YEAR;
256
- }
257
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiMobileCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiMobileCalendar, isStandalone: true, selector: "tui-mobile-calendar", inputs: { single: "single", multi: "multi", min: "min", max: "max", disabledItemHandler: "disabledItemHandler", value: "value" }, outputs: { cancel: "cancel", confirm: "confirm", valueChange: "valueChange" }, host: { listeners: { "mousedown.prevent": "0" }, properties: { "class._ios": "isIOS", "class._initialized": "initialized" } }, providers: TUI_MOBILE_CALENDAR_PROVIDERS, viewQueries: [{ propertyName: "yearsScrollRef", first: true, predicate: ["yearsScrollRef"], descendants: true }, { propertyName: "monthsScrollRef", first: true, predicate: ["monthsScrollRef"], descendants: true }], ngImport: i0, template: "<header\n *ngIf=\"chooseDayOrRangeTexts$ | async as texts\"\n class=\"t-header\"\n>\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord$ | async }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord$ | async }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord$ | async }}\n </button>\n</header>\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n <div\n *ngFor=\"let day of unorderedWeekDays$ | tuiOrderWeekDays | async\"\n class=\"t-day\"\n >\n {{ day }}\n </div>\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n", styles: [":host{display:block;block-size:100%;font-family:-apple-system,BlinkMacSystemFont,Roboto,sans-serif;color:var(--tui-text-primary);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}:host ::ng-deep .t-cell:before,:host ::ng-deep .t-cell:after{transform:translateZ(1px)}.t-header{position:relative;display:flex;align-items:center;block-size:3.5rem;padding:0 1rem;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-header{block-size:2.75rem;border-block-end:none}.t-close{inline-size:1.5rem;block-size:1.5rem;margin-inline-end:2rem}:host._ios .t-close{display:none}.t-link{margin-inline-start:auto;flex-shrink:0;font-size:.875rem;line-height:1rem;font-weight:500;text-transform:uppercase;color:var(--tui-text-action)}.t-link_close{display:none}:host._ios .t-link{min-inline-size:3.75rem;text-align:end;font-size:.9375rem;line-height:1.125rem;font-weight:400;letter-spacing:.018125rem;text-transform:none}:host._ios .t-link_close{display:block;margin:0 auto 0 0;text-align:start}.t-label{flex-grow:1;margin:0;font-size:1.25rem;line-height:3.5rem;font-weight:500;letter-spacing:-.0125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t-label+.t-link{padding-inline-start:1rem}:host._ios .t-label{font-size:1.0625rem;font-weight:600;letter-spacing:-.025625rem;text-align:center}.t-years{scrollbar-width:none;-ms-overflow-style:none;block-size:4.0625rem;background-color:var(--tui-background-base);box-shadow:0 .5px var(--tui-border-normal)}.t-years::-webkit-scrollbar,.t-years::-webkit-scrollbar-thumb{display:none}:host._ios .t-years{background-color:transparent}.t-years-wrapper{display:flex;block-size:4.0625rem}.t-year{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;outline:none;inline-size:20vw;flex-shrink:0;font-size:.9375rem;font-weight:700;letter-spacing:.015625rem;cursor:pointer;opacity:.1;transform:scale(.73);transition:color,opacity,transform .2s}.t-year[data-state=adjacent]{transform:scale(.86);opacity:.3}.t-year[data-state=active]{color:var(--tui-text-action);opacity:1;transform:scale(1)}.t-week{display:flex;align-items:center;block-size:1.875rem;inline-size:20.75rem;max-inline-size:100%;margin:0 auto;font-size:.75rem}:host._ios .t-week{inline-size:22.625rem;font-size:.6875rem;font-weight:500;color:var(--tui-text-secondary)}.t-day{flex:1;text-align:center}.t-months{scrollbar-width:none;-ms-overflow-style:none;block-size:calc(100% - 9.5rem);box-shadow:0 -1px var(--tui-border-normal);overflow-x:hidden}.t-months::-webkit-scrollbar,.t-months::-webkit-scrollbar-thumb{display:none}:host._ios .t-months{block-size:calc(100% - 8.75rem)}.t-month-wrapper{display:flex;margin:.625rem 0 -.625rem;block-size:22.125rem;flex-direction:column}.t-month{block-size:2.75rem;inline-size:100%;line-height:2.75rem;padding-inline-start:1rem;font-size:.875rem;font-weight:500;text-transform:uppercase;margin:0 0 1.25rem;box-sizing:border-box;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-month{block-size:3.125rem;margin:0;border-block-end:none;text-transform:none;font-size:1.375rem;line-height:3.125rem;letter-spacing:.02rem;font-weight:700}.t-calendar{margin:0 auto;transition:opacity .2s}.t-week,.t-years,.t-months{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;opacity:0}:host(._initialized) .t-week,:host(._initialized) .t-years,:host(._initialized) .t-months{opacity:1}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "pipe", type: TuiMapperPipe, name: "tuiMapper" }, { kind: "component", type: TuiMobileCalendarSheet, selector: "tui-mobile-calendar-sheet" }, { kind: "pipe", type: TuiMonthPipe, name: "tuiMonth" }, { kind: "pipe", type: TuiOrderWeekDaysPipe, name: "tuiOrderWeekDays" }, { kind: "directive", type: TuiRipple, selector: "[tuiRipple]", inputs: ["tuiRipple"] }, { kind: "directive", type: TuiTouchable, selector: "[tuiTouchable]", inputs: ["tuiTouchable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
259
- }
260
- export { TuiMobileCalendar };
261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiMobileCalendar, decorators: [{
262
- type: Component,
263
- args: [{ standalone: true, selector: 'tui-mobile-calendar', imports: [
264
- AsyncPipe,
265
- CdkFixedSizeVirtualScroll,
266
- CdkVirtualForOf,
267
- CdkVirtualScrollViewport,
268
- NgForOf,
269
- NgIf,
270
- TuiButton,
271
- TuiLink,
272
- TuiMapperPipe,
273
- TuiMobileCalendarSheet,
274
- TuiMonthPipe,
275
- TuiOrderWeekDaysPipe,
276
- TuiRipple,
277
- TuiTouchable,
278
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: TUI_MOBILE_CALENDAR_PROVIDERS, host: {
279
- '[class._ios]': 'isIOS',
280
- '[class._initialized]': 'initialized',
281
- '(mousedown.prevent)': '0',
282
- }, template: "<header\n *ngIf=\"chooseDayOrRangeTexts$ | async as texts\"\n class=\"t-header\"\n>\n <button\n appearance=\"\"\n automation-id=\"tui-mobile-calendar__cancel\"\n tuiIconButton\n tuiRipple\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"onClose()\"\n >\n {{ closeWord$ | async }}\n </button>\n <button\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link t-link_close\"\n (click)=\"onClose()\"\n >\n {{ cancelWord$ | async }}\n </button>\n <h2\n automation-id=\"tui-mobile-calendar__label\"\n class=\"t-label\"\n >\n {{ single ? texts[0] : multi ? texts[2] : texts[1] }}\n </h2>\n <button\n automation-id=\"tui-mobile-calendar__confirm\"\n tuiLink\n tuiTouchable=\"opacity\"\n type=\"button\"\n class=\"t-link\"\n (click)=\"onConfirm()\"\n >\n {{ doneWord$ | async }}\n </button>\n</header>\n<cdk-virtual-scroll-viewport\n #yearsScrollRef\n orientation=\"horizontal\"\n class=\"t-years\"\n [itemSize]=\"yearWidth\"\n>\n <div class=\"t-years-wrapper\">\n <button\n *cdkVirtualFor=\"let index of years\"\n type=\"button\"\n class=\"t-year\"\n [attr.data-state]=\"getState(index)\"\n (click)=\"setYear(index)\"\n >\n {{ index }}\n </button>\n </div>\n</cdk-virtual-scroll-viewport>\n<div class=\"t-week\">\n <div\n *ngFor=\"let day of unorderedWeekDays$ | tuiOrderWeekDays | async\"\n class=\"t-day\"\n >\n {{ day }}\n </div>\n</div>\n<cdk-virtual-scroll-viewport\n #monthsScrollRef\n itemSize=\"354\"\n maxBufferPx=\"5000\"\n minBufferPx=\"0\"\n class=\"t-months\"\n (scrolledIndexChange)=\"onMonthChange($event)\"\n>\n <section\n *cdkVirtualFor=\"let month of months; templateCacheSize: 10\"\n class=\"t-month-wrapper\"\n >\n <h2 class=\"t-month\">{{ month | tuiMonth | async }}</h2>\n <tui-mobile-calendar-sheet\n class=\"t-calendar\"\n [disabledItemHandler]=\"disabledItemHandler | tuiMapper: disabledItemHandlerMapper : min : max\"\n [month]=\"month\"\n [single]=\"single\"\n [value]=\"value\"\n (dayClick)=\"onDayClick($event)\"\n />\n </section>\n</cdk-virtual-scroll-viewport>\n", styles: [":host{display:block;block-size:100%;font-family:-apple-system,BlinkMacSystemFont,Roboto,sans-serif;color:var(--tui-text-primary);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}:host ::ng-deep .t-cell:before,:host ::ng-deep .t-cell:after{transform:translateZ(1px)}.t-header{position:relative;display:flex;align-items:center;block-size:3.5rem;padding:0 1rem;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-header{block-size:2.75rem;border-block-end:none}.t-close{inline-size:1.5rem;block-size:1.5rem;margin-inline-end:2rem}:host._ios .t-close{display:none}.t-link{margin-inline-start:auto;flex-shrink:0;font-size:.875rem;line-height:1rem;font-weight:500;text-transform:uppercase;color:var(--tui-text-action)}.t-link_close{display:none}:host._ios .t-link{min-inline-size:3.75rem;text-align:end;font-size:.9375rem;line-height:1.125rem;font-weight:400;letter-spacing:.018125rem;text-transform:none}:host._ios .t-link_close{display:block;margin:0 auto 0 0;text-align:start}.t-label{flex-grow:1;margin:0;font-size:1.25rem;line-height:3.5rem;font-weight:500;letter-spacing:-.0125rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.t-label+.t-link{padding-inline-start:1rem}:host._ios .t-label{font-size:1.0625rem;font-weight:600;letter-spacing:-.025625rem;text-align:center}.t-years{scrollbar-width:none;-ms-overflow-style:none;block-size:4.0625rem;background-color:var(--tui-background-base);box-shadow:0 .5px var(--tui-border-normal)}.t-years::-webkit-scrollbar,.t-years::-webkit-scrollbar-thumb{display:none}:host._ios .t-years{background-color:transparent}.t-years-wrapper{display:flex;block-size:4.0625rem}.t-year{-webkit-appearance:none;appearance:none;padding:0;border:0;background:none;font:inherit;line-height:inherit;text-decoration:none;outline:none;inline-size:20vw;flex-shrink:0;font-size:.9375rem;font-weight:700;letter-spacing:.015625rem;cursor:pointer;opacity:.1;transform:scale(.73);transition:color,opacity,transform .2s}.t-year[data-state=adjacent]{transform:scale(.86);opacity:.3}.t-year[data-state=active]{color:var(--tui-text-action);opacity:1;transform:scale(1)}.t-week{display:flex;align-items:center;block-size:1.875rem;inline-size:20.75rem;max-inline-size:100%;margin:0 auto;font-size:.75rem}:host._ios .t-week{inline-size:22.625rem;font-size:.6875rem;font-weight:500;color:var(--tui-text-secondary)}.t-day{flex:1;text-align:center}.t-months{scrollbar-width:none;-ms-overflow-style:none;block-size:calc(100% - 9.5rem);box-shadow:0 -1px var(--tui-border-normal);overflow-x:hidden}.t-months::-webkit-scrollbar,.t-months::-webkit-scrollbar-thumb{display:none}:host._ios .t-months{block-size:calc(100% - 8.75rem)}.t-month-wrapper{display:flex;margin:.625rem 0 -.625rem;block-size:22.125rem;flex-direction:column}.t-month{block-size:2.75rem;inline-size:100%;line-height:2.75rem;padding-inline-start:1rem;font-size:.875rem;font-weight:500;text-transform:uppercase;margin:0 0 1.25rem;box-sizing:border-box;border-block-end:.5px solid var(--tui-border-normal)}:host._ios .t-month{block-size:3.125rem;margin:0;border-block-end:none;text-transform:none;font-size:1.375rem;line-height:3.125rem;letter-spacing:.02rem;font-weight:700}.t-calendar{margin:0 auto;transition:opacity .2s}.t-week,.t-years,.t-months{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;opacity:0}:host(._initialized) .t-week,:host(._initialized) .t-years,:host(._initialized) .t-months{opacity:1}\n"] }]
283
- }], ctorParameters: function () { return []; }, propDecorators: { yearsScrollRef: [{
284
- type: ViewChild,
285
- args: ['yearsScrollRef']
286
- }], monthsScrollRef: [{
287
- type: ViewChild,
288
- args: ['monthsScrollRef']
289
- }], single: [{
290
- type: Input
291
- }], multi: [{
292
- type: Input
293
- }], min: [{
294
- type: Input
295
- }], max: [{
296
- type: Input
297
- }], disabledItemHandler: [{
298
- type: Input
299
- }], cancel: [{
300
- type: Output
301
- }], confirm: [{
302
- type: Output
303
- }], valueChange: [{
304
- type: Output
305
- }], value: [{
306
- type: Input
307
- }] } });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLWNhbGVuZGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLW1vYmlsZS9jb21wb25lbnRzL21vYmlsZS1jYWxlbmRhci9tb2JpbGUtY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tbW9iaWxlL2NvbXBvbmVudHMvbW9iaWxlLWNhbGVuZGFyL21vYmlsZS1jYWxlbmRhci50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsZUFBZSxFQUNmLHdCQUF3QixHQUMzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFDL0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsY0FBYyxFQUNkLGFBQWEsRUFDYixZQUFZLEVBQ1osTUFBTSxFQUNOLFdBQVcsRUFDWCxRQUFRLEdBQ1gsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxvQkFBb0IsR0FDdkIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDM0QsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3RCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFDSCxlQUFlLEVBQ2YsNkJBQTZCLEVBQzdCLGFBQWEsR0FDaEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUNILGVBQWUsRUFDZixZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEdBQUcsRUFDSCxRQUFRLEVBRVIsSUFBSSxFQUNKLElBQUksRUFDSixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxHQUNmLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNILEtBQUssRUFDTCxvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFlBQVksR0FDZixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDSCw2QkFBNkIsRUFDN0IsZ0JBQWdCLEdBQ25CLE1BQU0sNkJBQTZCLENBQUM7O0FBRXJDLE1BNkJhLGlCQUFpQjtJQThFMUI7UUF2RWlCLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FFM0MsSUFBSSxDQUFDLENBQUM7UUFFUyxVQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNQLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsUUFBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixVQUFLLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUvQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNYLFVBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0IsVUFBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixVQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0QyxjQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRTtZQUM5RSxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFZ0IsVUFBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDakUsV0FBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQ2xDLEVBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUMsRUFDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDTCxJQUFJLFFBQVEsQ0FDUixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxhQUFhLEVBQzlDLENBQUMsR0FBRyxjQUFjLENBQ3JCLENBQ1IsQ0FBQztRQUVGOzs7Ozs7V0FNRztRQUVJLFdBQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUd2RCxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBR2QsUUFBRyxHQUFHLGFBQWEsQ0FBQztRQUdwQixRQUFHLEdBQUcsWUFBWSxDQUFDO1FBR25CLHdCQUFtQixHQUE4QixpQkFBaUIsQ0FBQztRQUcxRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUdsQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBRXZDLENBQUM7UUFHWSxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMxQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1Asb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQy9ELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNoRixDQUFDO1FBdUdpQiw4QkFBeUIsR0FHeEMsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ25CLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBMUcxQixNQUFNLENBQUMsZ0JBQWdCLENBQUM7YUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsSUFDVyxLQUFLLENBQUMsS0FBa0U7UUFDL0UsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUVyQyxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFZO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVsQyxLQUFLLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbkUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQWMsU0FBUztRQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUM7SUFDL0QsQ0FBQztJQUVTLE9BQU87UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxTQUFTO1FBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztJQUVTLFVBQVUsQ0FBQyxHQUFXO1FBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ3BCO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzlDO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLE1BQU0sRUFBRTtZQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNsRDthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssWUFBWSxXQUFXLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7U0FDcEI7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztTQUNwQjtJQUNMLENBQUM7SUFFUyxRQUFRLENBQUMsS0FBYTtRQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsT0FBTyxRQUFRLENBQUM7U0FDbkI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQzlELE9BQU8sVUFBVSxDQUFDO1NBQ3JCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVTLGFBQWEsQ0FBQyxLQUFhO1FBQ2pDLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFO1lBQ3RDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0MsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNoQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBVUQsSUFBWSxXQUFXO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztTQUMxQjtRQUVELElBQUksSUFBSSxDQUFDLEtBQUssWUFBWSxNQUFNLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztTQUMxQjtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFlBQVksV0FBVyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQ25EO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVksWUFBWTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxjQUFjLENBQUM7U0FDaEY7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLFlBQVksTUFBTSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxjQUFjLENBQUM7U0FDaEY7UUFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLFdBQVcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sQ0FDSCxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO29CQUN4RCxjQUFjLENBQ3JCLENBQUM7U0FDTDtRQUVELE9BQU8sQ0FDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLEdBQUcsY0FBYyxDQUM5RSxDQUFDO0lBQ04sQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFZO1FBQzdCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDbkYsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRU8sUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxlQUFlLEVBQUUsbUJBQW1CO2FBQ3BDLElBQUksQ0FDRCxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNqQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxjQUFjO1FBQ2xCLE1BQU0sRUFBQyxjQUFjLEVBQUMsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNqQixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FDakMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQ3ZDLFlBQVksRUFDWixFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FDbEIsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUMvQixjQUFjLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDdkMsVUFBVSxFQUNWLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUNsQixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQzVCLGNBQWMsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUN2QyxPQUFPLENBQ1YsQ0FBQztRQUVGLHFCQUFxQjtRQUNyQixjQUFjO2FBQ1QsZUFBZSxFQUFFO2FBQ2pCLElBQUk7UUFDRCw4REFBOEQ7UUFDOUQsWUFBWSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFDdkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEIsOEVBQThFO1FBQzlFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQ0MsR0FBRyxFQUFFLENBQ0QsSUFBSSxDQUFDLEtBQUssQ0FDTixjQUFjLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUN4RDtZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUM1QixhQUFhLENBQ3BCLEVBQ0QsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUN0RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3RDO2FBQ0EsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRVAsc0RBQXNEO1FBQ3RELFdBQVc7YUFDTixJQUFJLENBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUMxQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQ1gsSUFBSSxDQUNBLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFDaEMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNqRSxDQUFDLElBQUksQ0FDRixZQUFZLENBQ1Isb0JBQW9CLEdBQUcsQ0FBQyxFQUN4QixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQ3BDLEVBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FDekIsQ0FDSixFQUNELGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLGVBQWU7UUFDbkIsTUFBTSxFQUFDLGVBQWUsRUFBQyxHQUFHLElBQUksQ0FBQztRQUUvQixJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2xCLE9BQU87U0FDVjtRQUVELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUNqQyxlQUFlLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFDeEMsWUFBWSxFQUNaLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUNsQixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQy9CLGVBQWUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUN4QyxVQUFVLEVBQ1YsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQ2xCLENBQUM7UUFFRiw2REFBNkQ7UUFDN0QsV0FBVzthQUNOLElBQUksQ0FDRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDWCxJQUFJLENBQ0EsZUFBZSxDQUFDLGVBQWUsRUFBRSxFQUNqQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ2pFLENBQUMsSUFBSSxDQUNGLFlBQVksQ0FDUixvQkFBb0IsR0FBRyxDQUFDLEVBQ3hCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDcEMsRUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUN6QixDQUNKLEVBQ0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN0QzthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsV0FBMkIsTUFBTTtRQUN4RCxJQUFJLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUNqQyxDQUFDO0lBQ04sQ0FBQztJQUVPLG1CQUFtQixDQUFDLFdBQTJCLE1BQU07UUFDekQsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQy9CLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUNqQyxDQUFDO0lBQ04sQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFhO1FBQzlCLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBWTtRQUMvQixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDckQsQ0FBQzsrR0E1WVEsaUJBQWlCO21HQUFqQixpQkFBaUIsa1pBUGYsNkJBQTZCLGlQQzVHNUMsNC9FQTRGQSxvOUdERlEsU0FBUyw4Q0FDVCx5QkFBeUIsc0lBQ3pCLGVBQWUsNkxBQ2Ysd0JBQXdCLGlKQUN4QixPQUFPLG1IQUNQLElBQUksNkZBQ0osU0FBUyxvSUFDVCxPQUFPLHVGQUNQLGFBQWEsa0RBQ2Isc0JBQXNCLGlFQUN0QixZQUFZLDRDQUNaLG9CQUFvQix5REFDcEIsU0FBUywrRUFDVCxZQUFZOztTQVlQLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQTdCN0IsU0FBUztpQ0FDTSxJQUFJLFlBQ04scUJBQXFCLFdBQ3RCO3dCQUNMLFNBQVM7d0JBQ1QseUJBQXlCO3dCQUN6QixlQUFlO3dCQUNmLHdCQUF3Qjt3QkFDeEIsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLFNBQVM7d0JBQ1QsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLHNCQUFzQjt3QkFDdEIsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLFNBQVM7d0JBQ1QsWUFBWTtxQkFDZixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyw2QkFBNkIsUUFDbEM7d0JBQ0YsY0FBYyxFQUFFLE9BQU87d0JBQ3ZCLHNCQUFzQixFQUFFLGFBQWE7d0JBQ3JDLHFCQUFxQixFQUFFLEdBQUc7cUJBQzdCOzBFQUlnQixjQUFjO3NCQUQ5QixTQUFTO3VCQUFDLGdCQUFnQjtnQkFJVixlQUFlO3NCQUQvQixTQUFTO3VCQUFDLGlCQUFpQjtnQkE2Q3JCLE1BQU07c0JBRFosS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsR0FBRztzQkFEVCxLQUFLO2dCQUlDLEdBQUc7c0JBRFQsS0FBSztnQkFJQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBSVUsTUFBTTtzQkFEckIsTUFBTTtnQkFJUyxPQUFPO3NCQUR0QixNQUFNO2dCQU1TLFdBQVc7c0JBRDFCLE1BQU07Z0JBZ0JJLEtBQUs7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxufSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7QXN5bmNQaXBlLCBET0NVTUVOVCwgTmdGb3JPZiwgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgdHlwZSBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7VHVpTW9iaWxlQ2FsZW5kYXJTaGVldH0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS9jb21wb25lbnRzL21vYmlsZS1jYWxlbmRhci1zaGVldCc7XG5pbXBvcnQge1R1aVJpcHBsZSwgVHVpVG91Y2hhYmxlfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tbW9iaWxlL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtUVUlfRkFMU0VfSEFORExFUn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBNT05USFNfSU5fWUVBUixcbiAgICBUVUlfRklSU1RfREFZLFxuICAgIFRVSV9MQVNUX0RBWSxcbiAgICBUdWlEYXksXG4gICAgVHVpRGF5UmFuZ2UsXG4gICAgVHVpTW9udGgsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsvZGF0ZS10aW1lJztcbmltcG9ydCB7XG4gICAgdHVpVHlwZWRGcm9tRXZlbnQsXG4gICAgdHVpWm9uZWZyZWUsXG4gICAgdHVpWm9uZWZyZWVTY2hlZHVsZXIsXG59IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtUdWlNYXBwZXJQaXBlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3BpcGVzL21hcHBlcic7XG5pbXBvcnQge1RVSV9JU19FMkUsIFRVSV9JU19JT1N9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7dHlwZSBUdWlCb29sZWFuSGFuZGxlciwgdHlwZSBUdWlNYXBwZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdHlwZXMnO1xuaW1wb3J0IHtUdWlCdXR0b259IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7VFVJX0NBTEVOREFSX1NIRUVUX09QVElPTlN9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHtUdWlMaW5rfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL2xpbmsnO1xuaW1wb3J0IHtUdWlNb250aFBpcGV9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3BpcGVzL21vbnRoJztcbmltcG9ydCB7VHVpT3JkZXJXZWVrRGF5c1BpcGV9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3BpcGVzL29yZGVyLXdlZWstZGF5cyc7XG5pbXBvcnQge1xuICAgIFRVSV9BTklNQVRJT05TX1NQRUVELFxuICAgIFRVSV9DTE9TRV9XT1JELFxuICAgIFRVSV9DT01NT05fSUNPTlMsXG4gICAgVFVJX1NIT1JUX1dFRUtfREFZUyxcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7dHVpR2V0RHVyYXRpb259IGZyb20gJ0B0YWlnYS11aS9jb3JlL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtcbiAgICBUVUlfQ0FOQ0VMX1dPUkQsXG4gICAgVFVJX0NIT09TRV9EQVlfT1JfUkFOR0VfVEVYVFMsXG4gICAgVFVJX0RPTkVfV09SRCxcbn0gZnJvbSAnQHRhaWdhLXVpL2tpdC90b2tlbnMnO1xuaW1wb3J0IHt0dWlUb2dnbGVEYXl9IGZyb20gJ0B0YWlnYS11aS9raXQvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRlbGF5LFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbHRlcixcbiAgICBpZGVudGl0eSxcbiAgICBtYXAsXG4gICAgbWVyZ2VNYXAsXG4gICAgdHlwZSBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sXG4gICAgcmFjZSxcbiAgICBza2lwLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbCxcbiAgICB0aW1lcixcbiAgICB3aW5kb3dUb2dnbGUsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIFJBTkdFLFxuICAgIFNDUk9MTF9ERUJPVU5DRV9USU1FLFxuICAgIFNUQVJUSU5HX1lFQVIsXG4gICAgWUVBUlNfSU5fUk9XLFxufSBmcm9tICcuL21vYmlsZS1jYWxlbmRhci5jb25zdCc7XG5pbXBvcnQge1xuICAgIFRVSV9NT0JJTEVfQ0FMRU5EQVJfUFJPVklERVJTLFxuICAgIFRVSV9WQUxVRV9TVFJFQU0sXG59IGZyb20gJy4vbW9iaWxlLWNhbGVuZGFyLnByb3ZpZGVycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0dWktbW9iaWxlLWNhbGVuZGFyJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICAgICAgQ2RrVmlydHVhbEZvck9mLFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIE5nRm9yT2YsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpTGluayxcbiAgICAgICAgVHVpTWFwcGVyUGlwZSxcbiAgICAgICAgVHVpTW9iaWxlQ2FsZW5kYXJTaGVldCxcbiAgICAgICAgVHVpTW9udGhQaXBlLFxuICAgICAgICBUdWlPcmRlcldlZWtEYXlzUGlwZSxcbiAgICAgICAgVHVpUmlwcGxlLFxuICAgICAgICBUdWlUb3VjaGFibGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbW9iaWxlLWNhbGVuZGFyLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL21vYmlsZS1jYWxlbmRhci5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBUVUlfTU9CSUxFX0NBTEVOREFSX1BST1ZJREVSUyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MuX2lvc10nOiAnaXNJT1MnLFxuICAgICAgICAnW2NsYXNzLl9pbml0aWFsaXplZF0nOiAnaW5pdGlhbGl6ZWQnLFxuICAgICAgICAnKG1vdXNlZG93bi5wcmV2ZW50KSc6ICcwJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlNb2JpbGVDYWxlbmRhciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIEBWaWV3Q2hpbGQoJ3llYXJzU2Nyb2xsUmVmJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IHllYXJzU2Nyb2xsUmVmPzogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgQFZpZXdDaGlsZCgnbW9udGhzU2Nyb2xsUmVmJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vbnRoc1Njcm9sbFJlZj86IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICAgICAgVHVpRGF5IHwgVHVpRGF5UmFuZ2UgfCByZWFkb25seSBUdWlEYXlbXSB8IG51bGxcbiAgICA+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b2RheSA9IFR1aURheS5jdXJyZW50TG9jYWwoKTtcbiAgICBwcml2YXRlIGFjdGl2ZVllYXIgPSAwO1xuICAgIHByaXZhdGUgYWN0aXZlTW9udGggPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvYyA9IGluamVjdChET0NVTUVOVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGVlZCA9IGluamVjdChUVUlfQU5JTUFUSU9OU19TUEVFRCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0lPUyA9IGluamVjdChUVUlfSVNfSU9TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNFMkUgPSBpbmplY3QoVFVJX0lTX0UyRSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGljb25zID0gaW5qZWN0KFRVSV9DT01NT05fSUNPTlMpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjbG9zZVdvcmQkID0gaW5qZWN0KFRVSV9DTE9TRV9XT1JEKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuY2VsV29yZCQgPSBpbmplY3QoVFVJX0NBTkNFTF9XT1JEKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG9uZVdvcmQkID0gaW5qZWN0KFRVSV9ET05FX1dPUkQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB1bm9yZGVyZWRXZWVrRGF5cyQgPSBpbmplY3QoVFVJX1NIT1JUX1dFRUtfREFZUyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNob29zZURheU9yUmFuZ2VUZXh0cyQgPSBpbmplY3QoVFVJX0NIT09TRV9EQVlfT1JfUkFOR0VfVEVYVFMsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgeWVhcnMgPSBBcnJheS5mcm9tKHtsZW5ndGg6IFJBTkdFfSwgKF8sIGkpID0+IGkgKyBTVEFSVElOR19ZRUFSKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9udGhzID0gQXJyYXkuZnJvbShcbiAgICAgICAge2xlbmd0aDogUkFOR0UgKiAxMn0sXG4gICAgICAgIChfLCBpKSA9PlxuICAgICAgICAgICAgbmV3IFR1aU1vbnRoKFxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoaSAvIE1PTlRIU19JTl9ZRUFSKSArIFNUQVJUSU5HX1lFQVIsXG4gICAgICAgICAgICAgICAgaSAlIE1PTlRIU19JTl9ZRUFSLFxuICAgICAgICAgICAgKSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHN0YXRpYyBESSBvcHRpb25zIGluc3RlYWRcbiAgICAgKiBgYGBcbiAgICAgKiB0dWlDYWxlbmRhclNoZWV0T3B0aW9uc1Byb3ZpZGVyKHtyYW5nZU1vZGU6IGJvb2xlYW59KVxuICAgICAqIGBgYFxuICAgICAqIFRPRE8odjUpOiBkZWxldGUgaXRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaW5nbGUgPSAhaW5qZWN0KFRVSV9DQUxFTkRBUl9TSEVFVF9PUFRJT05TKS5yYW5nZU1vZGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtdWx0aSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbWluID0gVFVJX0ZJUlNUX0RBWTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1heCA9IFRVSV9MQVNUX0RBWTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkSXRlbUhhbmRsZXI6IFR1aUJvb2xlYW5IYW5kbGVyPFR1aURheT4gPSBUVUlfRkFMU0VfSEFORExFUjtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlybSA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgICAgIFR1aURheSB8IFR1aURheVJhbmdlIHwgcmVhZG9ubHkgVHVpRGF5W11cbiAgICA+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYT8udG9TdHJpbmcoKSA9PT0gYj8udG9TdHJpbmcoKSksXG4gICAgICAgIG1hcCgoeCkgPT4gKCF0aGlzLnNpbmdsZSAmJiB4IGluc3RhbmNlb2YgVHVpRGF5ID8gbmV3IFR1aURheVJhbmdlKHgsIHgpIDogeCkpLFxuICAgICk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaW5qZWN0KFRVSV9WQUxVRV9TVFJFQU0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBUdWlEYXkgfCBUdWlEYXlSYW5nZSB8IHJlYWRvbmx5IFR1aURheVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSQubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFR1aURheSB8IFR1aURheVJhbmdlIHwgcmVhZG9ubHkgVHVpRGF5W10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUkLnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlWWVhciA9IHRoaXMuaW5pdGlhbFllYXI7XG4gICAgICAgIHRoaXMuYWN0aXZlTW9udGggPSB0aGlzLmluaXRpYWxNb250aDtcblxuICAgICAgICAvLyBWaXJ0dWFsIHNjcm9sbCBoYXMgbm90IHlldCByZW5kZXJlZCBpdGVtcyBldmVuIGluIG5nQWZ0ZXJWaWV3SW5pdFxuICAgICAgICB0aGlzLndhaXRTY3JvbGxlZENoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRZZWFyKHllYXI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVZZWFyID09PSB5ZWFyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZU1vbnRoICs9IHRoaXMuZ2V0TW9udGhPZmZzZXQoeWVhcik7XG4gICAgICAgIHRoaXMuYWN0aXZlWWVhciA9IHllYXI7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVZZWFyKCdzbW9vdGgnKTtcblxuICAgICAgICB0aW1lcigwLCB0dWlab25lZnJlZVNjaGVkdWxlcih0aGlzLm5nWm9uZSkpXG4gICAgICAgICAgICAucGlwZSh0dWlab25lZnJlZSh0aGlzLm5nWm9uZSksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNjcm9sbFRvQWN0aXZlTW9udGgoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCB5ZWFyV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAvIFlFQVJTX0lOX1JPVztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkNvbmZpcm0oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm0uZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRheUNsaWNrKGRheTogVHVpRGF5KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNpbmdsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRheTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTXVsdGlWYWx1ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHR1aVRvZ2dsZURheSh0aGlzLnZhbHVlLCBkYXkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBUdWlEYXkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBUdWlEYXlSYW5nZS5zb3J0KHRoaXMudmFsdWUsIGRheSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIFR1aURheVJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF5O1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFN0YXRlKGluZGV4OiBudW1iZXIpOiAnYWN0aXZlJyB8ICdhZGphY2VudCcgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuaXNZZWFyQWN0aXZlKGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuICdhY3RpdmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNZZWFyQWN0aXZlKGluZGV4IC0gMSkgfHwgdGhpcy5pc1llYXJBY3RpdmUoaW5kZXggKyAxKSkge1xuICAgICAgICAgICAgcmV0dXJuICdhZGphY2VudCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Nb250aENoYW5nZShtb250aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIFNraXBwaW5nIGluaXRpYWwgY2FsbGJhY2sgd2hlcmUgaW5kZXggPT09IDBcbiAgICAgICAgaWYgKCFtb250aCB8fCB0aGlzLmFjdGl2ZU1vbnRoID09PSBtb250aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVNb250aCA9IG1vbnRoO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVllYXIgPSB0aGlzLm1vbnRoVG9ZZWFyKG1vbnRoKTtcblxuICAgICAgICBpZiAoYWN0aXZlWWVhciA9PT0gdGhpcy5hY3RpdmVZZWFyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVllYXIgPSBhY3RpdmVZZWFyO1xuICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlWWVhcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZWFkb25seSBkaXNhYmxlZEl0ZW1IYW5kbGVyTWFwcGVyOiBUdWlNYXBwZXI8XG4gICAgICAgIFtUdWlCb29sZWFuSGFuZGxlcjxUdWlEYXk+LCBUdWlEYXksIFR1aURheV0sXG4gICAgICAgIFR1aUJvb2xlYW5IYW5kbGVyPFR1aURheT5cbiAgICA+ID0gKGRpc2FibGVkSXRlbUhhbmRsZXIsIG1pbiwgbWF4KSA9PiAoaXRlbSkgPT5cbiAgICAgICAgaXRlbS5kYXlCZWZvcmUobWluKSB8fFxuICAgICAgICAobWF4ICE9PSBudWxsICYmIGl0ZW0uZGF5QWZ0ZXIobWF4KSkgfHxcbiAgICAgICAgZGlzYWJsZWRJdGVtSGFuZGxlcihpdGVtKTtcblxuICAgIHByaXZhdGUgZ2V0IGluaXRpYWxZZWFyKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9kYXkueWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgVHVpRGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS55ZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy52YWx1ZSBpbnN0YW5jZW9mIFR1aURheVJhbmdlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU/LlswXT8ueWVhciA/PyB0aGlzLnRvZGF5LnllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50by55ZWFyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGluaXRpYWxNb250aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZGF5Lm1vbnRoICsgKHRoaXMudG9kYXkueWVhciAtIFNUQVJUSU5HX1lFQVIpICogTU9OVEhTX0lOX1lFQVI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIFR1aURheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubW9udGggKyAodGhpcy52YWx1ZS55ZWFyIC0gU1RBUlRJTkdfWUVBUikgKiBNT05USFNfSU5fWUVBUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBUdWlEYXlSYW5nZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHRoaXMudmFsdWU/LlswXT8ubW9udGggPz8gdGhpcy50b2RheS5tb250aCkgK1xuICAgICAgICAgICAgICAgICgodGhpcy52YWx1ZT8uWzBdPy55ZWFyID8/IHRoaXMudG9kYXkueWVhcikgLSBTVEFSVElOR19ZRUFSKSAqXG4gICAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9ZRUFSXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudmFsdWUudG8ubW9udGggKyAodGhpcy52YWx1ZS50by55ZWFyIC0gU1RBUlRJTkdfWUVBUikgKiBNT05USFNfSU5fWUVBUlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNdWx0aVZhbHVlKGRheTogdW5rbm93bik6IGRheSBpcyByZWFkb25seSBUdWlEYXlbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiAhKGRheSBpbnN0YW5jZW9mIFR1aURheSkgJiYgIShkYXkgaW5zdGFuY2VvZiBUdWlEYXlSYW5nZSkgJiYgdGhpcy5tdWx0aTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFllYXJzVmlld3BvcnRTaXplKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXJzU2Nyb2xsUmVmPy5nZXRWaWV3cG9ydFNpemUoKSB8fCAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld3BvcnREaW1lbnNpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMueWVhcnNTY3JvbGxSZWY/LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgIHRoaXMubW9udGhzU2Nyb2xsUmVmPy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGF0ZUluaXQoKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRZZWFyc1ZpZXdwb3J0U2l6ZSgpID4gMCA/IGlkZW50aXR5IDogZGVsYXkoMjAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdhaXRTY3JvbGxlZENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydERpbWVuc2lvbigpO1xuXG4gICAgICAgIHRoaXMubW9udGhzU2Nyb2xsUmVmPy5zY3JvbGxlZEluZGV4Q2hhbmdlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWxheSh0dWlHZXREdXJhdGlvbih0aGlzLnNwZWVkKSksXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlSW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0RGltZW5zaW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0WWVhclNjcm9sbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdE1vbnRoU2Nyb2xsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZVllYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlTW9udGgoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFllYXJTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHt5ZWFyc1Njcm9sbFJlZn0gPSB0aGlzO1xuXG4gICAgICAgIGlmICgheWVhcnNTY3JvbGxSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdWNoc3RhcnQkID0gdHVpVHlwZWRGcm9tRXZlbnQoXG4gICAgICAgICAgICB5ZWFyc1Njcm9sbFJlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAndG91Y2hzdGFydCcsXG4gICAgICAgICAgICB7cGFzc2l2ZTogdHJ1ZX0sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRvdWNoZW5kJCA9IHR1aVR5cGVkRnJvbUV2ZW50KFxuICAgICAgICAgICAgeWVhcnNTY3JvbGxSZWYuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgJ3RvdWNoZW5kJyxcbiAgICAgICAgICAgIHtwYXNzaXZlOiB0cnVlfSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2xpY2skID0gdHVpVHlwZWRGcm9tRXZlbnQoXG4gICAgICAgICAgICB5ZWFyc1Njcm9sbFJlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnY2xpY2snLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggYWN0aXZlWWVhclxuICAgICAgICB5ZWFyc1Njcm9sbFJlZlxuICAgICAgICAgICAgLmVsZW1lbnRTY3JvbGxlZCgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgc21vb3RoIHNjcm9sbCByZXN1bHRpbmcgZnJvbSBjbGljayBvbiB0aGUgZXhhY3QgeWVhclxuICAgICAgICAgICAgICAgIHdpbmRvd1RvZ2dsZSh0b3VjaHN0YXJ0JCwgKCkgPT4gY2xpY2skKSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoeCkgPT4geCksXG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgaXMgcmVxdWlyZWQgdG8gcnVuIG1vbnRocyBzY3JvbGwgaW4gdGhlIG5leHQgZnJhbWUgdG8gcHJldmVudCBmbGlja2VyXG4gICAgICAgICAgICAgICAgZGVsYXkoMCksXG4gICAgICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyc1Njcm9sbFJlZi5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCkgLyB0aGlzLnllYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5mbG9vcihZRUFSU19JTl9ST1cgLyAyKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBTVEFSVElOR19ZRUFSLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChhY3RpdmVZZWFyKSA9PiBhY3RpdmVZZWFyICE9PSB0aGlzLmFjdGl2ZVllYXIpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoYWN0aXZlWWVhcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9udGggKz0gdGhpcy5nZXRNb250aE9mZnNldChhY3RpdmVZZWFyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVllYXIgPSBhY3RpdmVZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVNb250aCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU21vb3RoIHNjcm9sbCB0byBhY3RpdmVZZWFyIGFmdGVyIHNjcm9sbGluZyBpcyBkb25lXG4gICAgICAgIHRvdWNoc3RhcnQkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdG91Y2hlbmQkKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgcmFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXJzU2Nyb2xsUmVmLmVsZW1lbnRTY3JvbGxlZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIoU0NST0xMX0RFQk9VTkNFX1RJTUUsIHR1aVpvbmVmcmVlU2NoZWR1bGVyKHRoaXMubmdab25lKSksXG4gICAgICAgICAgICAgICAgICAgICkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1JPTExfREVCT1VOQ0VfVElNRSAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpWm9uZWZyZWVTY2hlZHVsZXIodGhpcy5uZ1pvbmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodG91Y2hzdGFydCQpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2Nyb2xsVG9BY3RpdmVZZWFyKCdzbW9vdGgnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0TW9udGhTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHttb250aHNTY3JvbGxSZWZ9ID0gdGhpcztcblxuICAgICAgICBpZiAoIW1vbnRoc1Njcm9sbFJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG91Y2hzdGFydCQgPSB0dWlUeXBlZEZyb21FdmVudChcbiAgICAgICAgICAgIG1vbnRoc1Njcm9sbFJlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAndG91Y2hzdGFydCcsXG4gICAgICAgICAgICB7cGFzc2l2ZTogdHJ1ZX0sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRvdWNoZW5kJCA9IHR1aVR5cGVkRnJvbUV2ZW50KFxuICAgICAgICAgICAgbW9udGhzU2Nyb2xsUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICd0b3VjaGVuZCcsXG4gICAgICAgICAgICB7cGFzc2l2ZTogdHJ1ZX0sXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gU21vb3RoIHNjcm9sbCB0byB0aGUgY2xvc2VzdCBtb250aCBhZnRlciBzY3JvbGxpbmcgaXMgZG9uZVxuICAgICAgICB0b3VjaHN0YXJ0JFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRvdWNoZW5kJCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHJhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aHNTY3JvbGxSZWYuZWxlbWVudFNjcm9sbGVkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lcihTQ1JPTExfREVCT1VOQ0VfVElNRSwgdHVpWm9uZWZyZWVTY2hlZHVsZXIodGhpcy5uZ1pvbmUpKSxcbiAgICAgICAgICAgICAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUk9MTF9ERUJPVU5DRV9USU1FICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlab25lZnJlZVNjaGVkdWxlcih0aGlzLm5nWm9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0b3VjaHN0YXJ0JCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zY3JvbGxUb0FjdGl2ZU1vbnRoKCdzbW9vdGgnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0FjdGl2ZVllYXIoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gJ2F1dG8nKTogdm9pZCB7XG4gICAgICAgIHRoaXMueWVhcnNTY3JvbGxSZWY/LnNjcm9sbFRvSW5kZXgoXG4gICAgICAgICAgICBNYXRoLm1heCh0aGlzLmFjdGl2ZVllYXIgLSBTVEFSVElOR19ZRUFSIC0gMiwgMCksXG4gICAgICAgICAgICB0aGlzLmlzRTJFID8gJ2F1dG8nIDogYmVoYXZpb3IsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0FjdGl2ZU1vbnRoKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdhdXRvJyk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vbnRoc1Njcm9sbFJlZj8uc2Nyb2xsVG9JbmRleChcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9udGgsXG4gICAgICAgICAgICB0aGlzLmlzRTJFID8gJ2F1dG8nIDogYmVoYXZpb3IsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1llYXJBY3RpdmUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaW5kZXggPT09IHRoaXMuYWN0aXZlWWVhcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vbnRoVG9ZZWFyKG1vbnRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKChtb250aCArIDEpIC8gTU9OVEhTX0lOX1lFQVIpICsgU1RBUlRJTkdfWUVBUiAtIDE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb250aE9mZnNldCh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKHllYXIgLSB0aGlzLmFjdGl2ZVllYXIpICogTU9OVEhTX0lOX1lFQVI7XG4gICAgfVxufVxuIiwiPGhlYWRlclxuICAgICpuZ0lmPVwiY2hvb3NlRGF5T3JSYW5nZVRleHRzJCB8IGFzeW5jIGFzIHRleHRzXCJcbiAgICBjbGFzcz1cInQtaGVhZGVyXCJcbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIGFwcGVhcmFuY2U9XCJcIlxuICAgICAgICBhdXRvbWF0aW9uLWlkPVwidHVpLW1vYmlsZS1jYWxlbmRhcl9fY2FuY2VsXCJcbiAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICB0dWlSaXBwbGVcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwidC1jbG9zZVwiXG4gICAgICAgIFtpY29uU3RhcnRdPVwiaWNvbnMuY2xvc2VcIlxuICAgICAgICBbc3R5bGUuYm9yZGVyLXJhZGl1cy4lXT1cIjEwMFwiXG4gICAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIlxuICAgID5cbiAgICAgICAge3sgY2xvc2VXb3JkJCB8IGFzeW5jIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICB0dWlMaW5rXG4gICAgICAgIHR1aVRvdWNoYWJsZT1cIm9wYWNpdHlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJ0LWxpbmsgdC1saW5rX2Nsb3NlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiXG4gICAgPlxuICAgICAgICB7eyBjYW5jZWxXb3JkJCB8IGFzeW5jIH19XG4gICAgPC9idXR0b24+XG4gICAgPGgyXG4gICAgICAgIGF1dG9tYXRpb24taWQ9XCJ0dWktbW9iaWxlLWNhbGVuZGFyX19sYWJlbFwiXG4gICAgICAgIGNsYXNzPVwidC1sYWJlbFwiXG4gICAgPlxuICAgICAgICB7eyBzaW5nbGUgPyB0ZXh0c1swXSA6IG11bHRpID8gdGV4dHNbMl0gOiB0ZXh0c1sxXSB9fVxuICAgIDwvaDI+XG4gICAgPGJ1dHRvblxuICAgICAgICBhdXRvbWF0aW9uLWlkPVwidHVpLW1vYmlsZS1jYWxlbmRhcl9fY29uZmlybVwiXG4gICAgICAgIHR1aUxpbmtcbiAgICAgICAgdHVpVG91Y2hhYmxlPVwib3BhY2l0eVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInQtbGlua1wiXG4gICAgICAgIChjbGljayk9XCJvbkNvbmZpcm0oKVwiXG4gICAgPlxuICAgICAgICB7eyBkb25lV29yZCQgfCBhc3luYyB9fVxuICAgIDwvYnV0dG9uPlxuPC9oZWFkZXI+XG48Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgI3llYXJzU2Nyb2xsUmVmXG4gICAgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICBjbGFzcz1cInQteWVhcnNcIlxuICAgIFtpdGVtU2l6ZV09XCJ5ZWFyV2lkdGhcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJ0LXllYXJzLXdyYXBwZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaW5kZXggb2YgeWVhcnNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInQteWVhclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXN0YXRlXT1cImdldFN0YXRlKGluZGV4KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0WWVhcihpbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBpbmRleCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuPGRpdiBjbGFzcz1cInQtd2Vla1wiPlxuICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiB1bm9yZGVyZWRXZWVrRGF5cyQgfCB0dWlPcmRlcldlZWtEYXlzIHwgYXN5bmNcIlxuICAgICAgICBjbGFzcz1cInQtZGF5XCJcbiAgICA+XG4gICAgICAgIHt7IGRheSB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG48Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgI21vbnRoc1Njcm9sbFJlZlxuICAgIGl0ZW1TaXplPVwiMzU0XCJcbiAgICBtYXhCdWZmZXJQeD1cIjUwMDBcIlxuICAgIG1pbkJ1ZmZlclB4PVwiMFwiXG4gICAgY2xhc3M9XCJ0LW1vbnRoc1wiXG4gICAgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwib25Nb250aENoYW5nZSgkZXZlbnQpXCJcbj5cbiAgICA8c2VjdGlvblxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBtb250aCBvZiBtb250aHM7IHRlbXBsYXRlQ2FjaGVTaXplOiAxMFwiXG4gICAgICAgIGNsYXNzPVwidC1tb250aC13cmFwcGVyXCJcbiAgICA+XG4gICAgICAgIDxoMiBjbGFzcz1cInQtbW9udGhcIj57eyBtb250aCB8IHR1aU1vbnRoIHwgYXN5bmMgfX08L2gyPlxuICAgICAgICA8dHVpLW1vYmlsZS1jYWxlbmRhci1zaGVldFxuICAgICAgICAgICAgY2xhc3M9XCJ0LWNhbGVuZGFyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZEl0ZW1IYW5kbGVyXT1cImRpc2FibGVkSXRlbUhhbmRsZXIgfCB0dWlNYXBwZXI6IGRpc2FibGVkSXRlbUhhbmRsZXJNYXBwZXIgOiBtaW4gOiBtYXhcIlxuICAgICAgICAgICAgW21vbnRoXT1cIm1vbnRoXCJcbiAgICAgICAgICAgIFtzaW5nbGVdPVwic2luZ2xlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoZGF5Q2xpY2spPVwib25EYXlDbGljaygkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICA8L3NlY3Rpb24+XG48L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiJdfQ==
@@ -1,35 +0,0 @@
1
- import { MONTHS_IN_YEAR } from '@taiga-ui/cdk/date-time';
2
- function getCycle(options) {
3
- return Array.from({ length: options.yearCycle }, (_, i) => Array.from({ length: MONTHS_IN_YEAR }, (_, month) => options.label +
4
- weekCount({ year: i, month, startingYear: options.startingYear }) *
5
- options.week));
6
- }
7
- function weekCount(options) {
8
- const firstOfMonth = new Date(options.year + options.startingYear, options.month, 1);
9
- const lastOfMonth = new Date(options.year + options.startingYear, options.month + 1, 0);
10
- const days = lastOfMonth.getDate() + (firstOfMonth.getDay() || 7) - 1;
11
- return Math.ceil(days / 7);
12
- }
13
- export const SCROLL_DEBOUNCE_TIME = 80;
14
- export const YEARS_IN_ROW = 5;
15
- export const STARTING_YEAR = 1900;
16
- export const RANGE = 196;
17
- export const BUFFER = 500;
18
- export const ANDROID_LABEL = 64;
19
- export const ANDROID_WEEK = 48;
20
- export const IOS_LABEL = 50;
21
- export const IOS_WEEK = 50;
22
- export const YEARLY_CYCLE = 28;
23
- export const ANDROID_CYCLE = getCycle({
24
- label: ANDROID_LABEL,
25
- week: ANDROID_WEEK,
26
- yearCycle: YEARLY_CYCLE,
27
- startingYear: STARTING_YEAR,
28
- });
29
- export const IOS_CYCLE = getCycle({
30
- label: IOS_LABEL,
31
- week: IOS_WEEK,
32
- yearCycle: YEARLY_CYCLE,
33
- startingYear: STARTING_YEAR,
34
- });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLWNhbGVuZGFyLmNvbnN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRkb24tbW9iaWxlL2NvbXBvbmVudHMvbW9iaWxlLWNhbGVuZGFyL21vYmlsZS1jYWxlbmRhci5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsU0FBUyxRQUFRLENBQUMsT0FLakI7SUFDRyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3BELEtBQUssQ0FBQyxJQUFJLENBQ04sRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFDLEVBQ3hCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ1QsT0FBTyxDQUFDLEtBQUs7UUFDYixTQUFTLENBQUMsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBQyxDQUFDO1lBQzNELE9BQU8sQ0FBQyxJQUFJLENBQ3ZCLENBQ0osQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxPQUE0RDtJQUMzRSxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FDeEIsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxFQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsRUFDakIsQ0FBQyxDQUNKLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN6QixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQzFCLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLEtBQUssRUFBRSxhQUFhO0lBQ3BCLElBQUksRUFBRSxZQUFZO0lBQ2xCLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFlBQVksRUFBRSxhQUFhO0NBQzlCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDOUIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsSUFBSSxFQUFFLFFBQVE7SUFDZCxTQUFTLEVBQUUsWUFBWTtJQUN2QixZQUFZLEVBQUUsYUFBYTtDQUM5QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01PTlRIU19JTl9ZRUFSfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RhdGUtdGltZSc7XG5cbmZ1bmN0aW9uIGdldEN5Y2xlKG9wdGlvbnM6IHtcbiAgICBsYWJlbDogbnVtYmVyO1xuICAgIHdlZWs6IG51bWJlcjtcbiAgICB5ZWFyQ3ljbGU6IG51bWJlcjtcbiAgICBzdGFydGluZ1llYXI6IG51bWJlcjtcbn0pOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IG51bWJlcltdPiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDogb3B0aW9ucy55ZWFyQ3ljbGV9LCAoXywgaSkgPT5cbiAgICAgICAgQXJyYXkuZnJvbShcbiAgICAgICAgICAgIHtsZW5ndGg6IE1PTlRIU19JTl9ZRUFSfSxcbiAgICAgICAgICAgIChfLCBtb250aCkgPT5cbiAgICAgICAgICAgICAgICBvcHRpb25zLmxhYmVsICtcbiAgICAgICAgICAgICAgICB3ZWVrQ291bnQoe3llYXI6IGksIG1vbnRoLCBzdGFydGluZ1llYXI6IG9wdGlvbnMuc3RhcnRpbmdZZWFyfSkgKlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndlZWssXG4gICAgICAgICksXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gd2Vla0NvdW50KG9wdGlvbnM6IHt5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IHN0YXJ0aW5nWWVhcjogbnVtYmVyfSk6IG51bWJlciB7XG4gICAgY29uc3QgZmlyc3RPZk1vbnRoID0gbmV3IERhdGUob3B0aW9ucy55ZWFyICsgb3B0aW9ucy5zdGFydGluZ1llYXIsIG9wdGlvbnMubW9udGgsIDEpO1xuICAgIGNvbnN0IGxhc3RPZk1vbnRoID0gbmV3IERhdGUoXG4gICAgICAgIG9wdGlvbnMueWVhciArIG9wdGlvbnMuc3RhcnRpbmdZZWFyLFxuICAgICAgICBvcHRpb25zLm1vbnRoICsgMSxcbiAgICAgICAgMCxcbiAgICApO1xuICAgIGNvbnN0IGRheXMgPSBsYXN0T2ZNb250aC5nZXREYXRlKCkgKyAoZmlyc3RPZk1vbnRoLmdldERheSgpIHx8IDcpIC0gMTtcblxuICAgIHJldHVybiBNYXRoLmNlaWwoZGF5cyAvIDcpO1xufVxuXG5leHBvcnQgY29uc3QgU0NST0xMX0RFQk9VTkNFX1RJTUUgPSA4MDtcbmV4cG9ydCBjb25zdCBZRUFSU19JTl9ST1cgPSA1O1xuZXhwb3J0IGNvbnN0IFNUQVJUSU5HX1lFQVIgPSAxOTAwO1xuZXhwb3J0IGNvbnN0IFJBTkdFID0gMTk2O1xuZXhwb3J0IGNvbnN0IEJVRkZFUiA9IDUwMDtcbmV4cG9ydCBjb25zdCBBTkRST0lEX0xBQkVMID0gNjQ7XG5leHBvcnQgY29uc3QgQU5EUk9JRF9XRUVLID0gNDg7XG5leHBvcnQgY29uc3QgSU9TX0xBQkVMID0gNTA7XG5leHBvcnQgY29uc3QgSU9TX1dFRUsgPSA1MDtcbmV4cG9ydCBjb25zdCBZRUFSTFlfQ1lDTEUgPSAyODtcblxuZXhwb3J0IGNvbnN0IEFORFJPSURfQ1lDTEUgPSBnZXRDeWNsZSh7XG4gICAgbGFiZWw6IEFORFJPSURfTEFCRUwsXG4gICAgd2VlazogQU5EUk9JRF9XRUVLLFxuICAgIHllYXJDeWNsZTogWUVBUkxZX0NZQ0xFLFxuICAgIHN0YXJ0aW5nWWVhcjogU1RBUlRJTkdfWUVBUixcbn0pO1xuXG5leHBvcnQgY29uc3QgSU9TX0NZQ0xFID0gZ2V0Q3ljbGUoe1xuICAgIGxhYmVsOiBJT1NfTEFCRUwsXG4gICAgd2VlazogSU9TX1dFRUssXG4gICAgeWVhckN5Y2xlOiBZRUFSTFlfQ1lDTEUsXG4gICAgc3RhcnRpbmdZZWFyOiBTVEFSVElOR19ZRUFSLFxufSk7XG4iXX0=
@@ -1,27 +0,0 @@
1
- import { VIRTUAL_SCROLL_STRATEGY } from '@angular/cdk/scrolling';
2
- import { InjectionToken, Optional } from '@angular/core';
3
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
- import { tuiWatch } from '@taiga-ui/cdk/observables';
5
- import { TuiScrollService } from '@taiga-ui/cdk/services';
6
- import { TUI_IS_IOS } from '@taiga-ui/cdk/tokens';
7
- import { TUI_CALENDAR_DATE_STREAM } from '@taiga-ui/kit/tokens';
8
- import { EMPTY } from 'rxjs';
9
- import { TuiMobileCalendarStrategy } from './mobile-calendar.strategy';
10
- /**
11
- * Stream for updating value
12
- */
13
- export const TUI_VALUE_STREAM = new InjectionToken(ngDevMode ? 'TUI_VALUE_STREAM' : '');
14
- export const TUI_MOBILE_CALENDAR_PROVIDERS = [
15
- TuiScrollService,
16
- {
17
- provide: VIRTUAL_SCROLL_STRATEGY,
18
- deps: [TUI_IS_IOS, TuiScrollService],
19
- useClass: TuiMobileCalendarStrategy,
20
- },
21
- {
22
- provide: TUI_VALUE_STREAM,
23
- deps: [[new Optional(), TUI_CALENDAR_DATE_STREAM]],
24
- useFactory: (value$) => (value$ || EMPTY).pipe(tuiWatch(), takeUntilDestroyed()),
25
- },
26
- ];
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLWNhbGVuZGFyLnByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLW1vYmlsZS9jb21wb25lbnRzL21vYmlsZS1jYWxlbmRhci9tb2JpbGUtY2FsZW5kYXIucHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxjQUFjLEVBQUUsUUFBUSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBQyxLQUFLLEVBQWtCLE1BQU0sTUFBTSxDQUFDO0FBRTVDLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRXJFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQzlDLFNBQVMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdEMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFlO0lBQ3JELGdCQUFnQjtJQUNoQjtRQUNJLE9BQU8sRUFBRSx1QkFBdUI7UUFDaEMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDO1FBQ3BDLFFBQVEsRUFBRSx5QkFBeUI7S0FDdEM7SUFDRDtRQUNJLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDbEQsVUFBVSxFQUFFLENBQ1IsTUFBNkMsRUFDZixFQUFFLENBQ2hDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0tBQy9EO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VklSVFVBTF9TQ1JPTExfU1RSQVRFR1l9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwsIHR5cGUgUHJvdmlkZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7dHlwZSBUdWlEYXlSYW5nZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kYXRlLXRpbWUnO1xuaW1wb3J0IHt0dWlXYXRjaH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1R1aVNjcm9sbFNlcnZpY2V9IGZyb20gJ0B0YWlnYS11aS9jZGsvc2VydmljZXMnO1xuaW1wb3J0IHtUVUlfSVNfSU9TfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge1RVSV9DQUxFTkRBUl9EQVRFX1NUUkVBTX0gZnJvbSAnQHRhaWdhLXVpL2tpdC90b2tlbnMnO1xuaW1wb3J0IHtFTVBUWSwgdHlwZSBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtUdWlNb2JpbGVDYWxlbmRhclN0cmF0ZWd5fSBmcm9tICcuL21vYmlsZS1jYWxlbmRhci5zdHJhdGVneSc7XG5cbi8qKlxuICogU3RyZWFtIGZvciB1cGRhdGluZyB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgVFVJX1ZBTFVFX1NUUkVBTSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZhYmxlPFR1aURheVJhbmdlIHwgbnVsbD4+KFxuICAgIG5nRGV2TW9kZSA/ICdUVUlfVkFMVUVfU1RSRUFNJyA6ICcnLFxuKTtcblxuZXhwb3J0IGNvbnN0IFRVSV9NT0JJTEVfQ0FMRU5EQVJfUFJPVklERVJTOiBQcm92aWRlcltdID0gW1xuICAgIFR1aVNjcm9sbFNlcnZpY2UsXG4gICAge1xuICAgICAgICBwcm92aWRlOiBWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSxcbiAgICAgICAgZGVwczogW1RVSV9JU19JT1MsIFR1aVNjcm9sbFNlcnZpY2VdLFxuICAgICAgICB1c2VDbGFzczogVHVpTW9iaWxlQ2FsZW5kYXJTdHJhdGVneSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgcHJvdmlkZTogVFVJX1ZBTFVFX1NUUkVBTSxcbiAgICAgICAgZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgVFVJX0NBTEVOREFSX0RBVEVfU1RSRUFNXV0sXG4gICAgICAgIHVzZUZhY3Rvcnk6IChcbiAgICAgICAgICAgIHZhbHVlJDogT2JzZXJ2YWJsZTxUdWlEYXlSYW5nZSB8IG51bGw+IHwgbnVsbCxcbiAgICAgICAgKTogT2JzZXJ2YWJsZTxUdWlEYXlSYW5nZSB8IG51bGw+ID0+XG4gICAgICAgICAgICAodmFsdWUkIHx8IEVNUFRZKS5waXBlKHR1aVdhdGNoKCksIHRha2VVbnRpbERlc3Ryb3llZCgpKSxcbiAgICB9LFxuXTtcbiJdfQ==