@progressio_resources/gravity-design-system 3.6.6 → 3.6.8
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.
- package/esm2022/lib/components/gravity-date-picker/components/day-calendar/day-calendar.component.mjs +271 -0
- package/esm2022/lib/components/gravity-date-picker/components/day-calendar/range-days-calendar.utils.mjs +224 -0
- package/esm2022/lib/components/gravity-date-picker/components/month-calendar/month-calendar.component.mjs +110 -0
- package/esm2022/lib/components/gravity-date-picker/components/year-calendar/year-calendar.component.mjs +111 -0
- package/esm2022/lib/components/gravity-date-picker/gravity-date-picker.component.mjs +85 -0
- package/esm2022/lib/components/gravity-date-picker/shared/date-picker.constants.mjs +61 -0
- package/esm2022/lib/components/gravity-date-picker/shared/date-picker.modal.mjs +2 -0
- package/esm2022/lib/components/gravity-date-picker/shared/date-picker.utils.mjs +111 -0
- package/esm2022/lib/components/gravity-dropdown-label/gravity-dropdown-label.component.mjs +3 -3
- package/esm2022/lib/components/gravity-icon-button/gravity-icon-button.component.mjs +2 -2
- package/esm2022/lib/components/gravity-link/gravity-link.component.mjs +2 -2
- package/esm2022/lib/components/gravity-text-field/gravity-text-field.component.mjs +12 -6
- package/esm2022/lib/gravity-design-system.module.mjs +9 -12
- package/esm2022/lib/layout/gravity-header/gravity-header.component.mjs +3 -3
- package/esm2022/lib/layout/gravity-menu/gravity-menu.component.mjs +4 -5
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/progressio_resources-gravity-design-system.mjs +527 -245
- package/fesm2022/progressio_resources-gravity-design-system.mjs.map +1 -1
- package/lib/components/gravity-date-picker/components/day-calendar/day-calendar.component.d.ts +108 -0
- package/lib/components/{gravity-calendar-next → gravity-date-picker}/components/day-calendar/range-days-calendar.utils.d.ts +5 -2
- package/lib/components/gravity-date-picker/components/month-calendar/month-calendar.component.d.ts +71 -0
- package/lib/components/gravity-date-picker/components/year-calendar/year-calendar.component.d.ts +72 -0
- package/lib/components/gravity-date-picker/gravity-date-picker.component.d.ts +63 -0
- package/lib/components/gravity-date-picker/shared/date-picker.constants.d.ts +52 -0
- package/lib/components/{gravity-calendar-next/shared/calendar.modal.d.ts → gravity-date-picker/shared/date-picker.modal.d.ts} +8 -4
- package/lib/components/gravity-date-picker/shared/date-picker.utils.d.ts +10 -0
- package/lib/components/gravity-text-field/gravity-text-field.component.d.ts +5 -3
- package/lib/gravity-design-system.module.d.ts +18 -19
- package/lib/layout/gravity-menu/gravity-menu.component.d.ts +2 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2022/lib/components/gravity-calendar-next/components/day-calendar/day-calendar.component.mjs +0 -216
- package/esm2022/lib/components/gravity-calendar-next/components/day-calendar/range-days-calendar.utils.mjs +0 -73
- package/esm2022/lib/components/gravity-calendar-next/components/dual-month-calendar/dual-month-calendar.component.mjs +0 -109
- package/esm2022/lib/components/gravity-calendar-next/components/month-calendar/month-calendar.component.mjs +0 -95
- package/esm2022/lib/components/gravity-calendar-next/components/year-calendar/year-calendar.component.mjs +0 -94
- package/esm2022/lib/components/gravity-calendar-next/gravity-calendar-next.component.mjs +0 -75
- package/esm2022/lib/components/gravity-calendar-next/shared/calendar.constants.mjs +0 -21
- package/esm2022/lib/components/gravity-calendar-next/shared/calendar.modal.mjs +0 -2
- package/esm2022/lib/components/gravity-calendar-next/shared/calendar.utils.mjs +0 -16
- package/lib/components/gravity-calendar-next/components/day-calendar/day-calendar.component.d.ts +0 -61
- package/lib/components/gravity-calendar-next/components/dual-month-calendar/dual-month-calendar.component.d.ts +0 -46
- package/lib/components/gravity-calendar-next/components/month-calendar/month-calendar.component.d.ts +0 -39
- package/lib/components/gravity-calendar-next/components/year-calendar/year-calendar.component.d.ts +0 -38
- package/lib/components/gravity-calendar-next/gravity-calendar-next.component.d.ts +0 -21
- package/lib/components/gravity-calendar-next/shared/calendar.constants.d.ts +0 -22
- package/lib/components/gravity-calendar-next/shared/calendar.utils.d.ts +0 -5
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { CALENDAR_I18N, DAYS_SHORT_EN, DAYS_SHORT_ES, MONTHS_EN, MONTHS_ES } from "../../shared/date-picker.constants";
|
|
3
|
+
import { dateToCalendarDay, getStartDate, changeDate, calendarDateToDate, isPeriodAvailable } from '../../shared/date-picker.utils';
|
|
4
|
+
import { getRangeSelectionClass, isPreview, onApplyRageDate, onClearHover, onDateKeyup, onHoverDay, onSelectDaysRange, processPreselectedRangeDate, searchDate } from "./range-days-calendar.utils";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "../../../gravity-button/gravity-button.component";
|
|
8
|
+
import * as i3 from "../../../gravity-icon-button/gravity-icon-button.component";
|
|
9
|
+
import * as i4 from "../../../gravity-icon/gravity-icon.component";
|
|
10
|
+
import * as i5 from "../../../gravity-text-field/gravity-text-field.component";
|
|
11
|
+
import * as i6 from "../../../gravity-link/gravity-link.component";
|
|
12
|
+
import * as i7 from "../../../gravity-dropdown-label/gravity-dropdown-label.component";
|
|
13
|
+
import * as i8 from "../month-calendar/month-calendar.component";
|
|
14
|
+
import * as i9 from "../year-calendar/year-calendar.component";
|
|
15
|
+
export class DayCalendarComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.range = false;
|
|
18
|
+
this.restart = false;
|
|
19
|
+
this.appyOnClose = false;
|
|
20
|
+
this.currentDate = new Date();
|
|
21
|
+
this.navType = 'both';
|
|
22
|
+
this.clearHover = new EventEmitter();
|
|
23
|
+
this.clearSelection = new EventEmitter();
|
|
24
|
+
this.changeMonth = new EventEmitter();
|
|
25
|
+
this.hoverDay = new EventEmitter();
|
|
26
|
+
this.openIntegratedCalendar = new EventEmitter();
|
|
27
|
+
this.selectedRage = new EventEmitter();
|
|
28
|
+
this.calendarResponse = new EventEmitter();
|
|
29
|
+
this.changeMonthYearResponse = new EventEmitter();
|
|
30
|
+
this.endDateError = '';
|
|
31
|
+
this.startDateError = '';
|
|
32
|
+
this.endFieldDisabled = false;
|
|
33
|
+
this.startFieldDisabled = false;
|
|
34
|
+
this.selectedRangeEnd = null;
|
|
35
|
+
this.selectedRangeStart = null;
|
|
36
|
+
this.showYearCalendar = false;
|
|
37
|
+
this.showMonthCalendar = false;
|
|
38
|
+
this.focused = 'start';
|
|
39
|
+
this.hoveredDay = null;
|
|
40
|
+
this.selectedDay = null;
|
|
41
|
+
this.changeDate = changeDate;
|
|
42
|
+
this.isPreview = isPreview;
|
|
43
|
+
this.searchDate = searchDate;
|
|
44
|
+
this.onHoverDay = onHoverDay;
|
|
45
|
+
this.onDateKeyup = onDateKeyup;
|
|
46
|
+
this.onClearHover = onClearHover;
|
|
47
|
+
this.calendarDateToDate = calendarDateToDate;
|
|
48
|
+
this.isPeriodAvailable = isPeriodAvailable;
|
|
49
|
+
}
|
|
50
|
+
get i18n() { return CALENDAR_I18N[this.appearance.language]; }
|
|
51
|
+
get monthsList() { return this.appearance.language === 'en' ? MONTHS_EN : MONTHS_ES; }
|
|
52
|
+
get daysList() { return this.appearance.language === 'en' ? DAYS_SHORT_EN : DAYS_SHORT_ES; }
|
|
53
|
+
trackByWeek(index, _) { return index; }
|
|
54
|
+
trackByDay(_, day) {
|
|
55
|
+
return `${day.monthYear.year}-${day.monthYear.month}-${day.day}`;
|
|
56
|
+
}
|
|
57
|
+
ngOnChanges(changes) {
|
|
58
|
+
const shouldRestart = changes['restart'] && this.restart;
|
|
59
|
+
const shouldAppy = changes['appyOnClose'] && this.appyOnClose;
|
|
60
|
+
const shouldProcessPreSelected = changes['preSelectedDate'] && this.config.initDate;
|
|
61
|
+
if (shouldAppy) {
|
|
62
|
+
this.applySelectedDate();
|
|
63
|
+
}
|
|
64
|
+
if (shouldRestart || shouldProcessPreSelected) {
|
|
65
|
+
this.processInitDate();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
processInitDate() {
|
|
69
|
+
if (this.range) {
|
|
70
|
+
setTimeout(() => { processPreselectedRangeDate(this); }, 0);
|
|
71
|
+
}
|
|
72
|
+
else if (this.config.initDate instanceof Date) {
|
|
73
|
+
this.currentDate = getStartDate(this.config.initDate);
|
|
74
|
+
this.selectedDay = dateToCalendarDay(this.config.initDate);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
isDateSelected() {
|
|
78
|
+
return !this.range ? !!this.selectedDay : !!this.selectedRangeStart && !!this.selectedRangeEnd;
|
|
79
|
+
}
|
|
80
|
+
getDaySelectionClass(day) {
|
|
81
|
+
if (!day.inCurrentMonth)
|
|
82
|
+
return 'disabled';
|
|
83
|
+
const dayDate = new Date(day.monthYear.year, day.monthYear.month, day.day);
|
|
84
|
+
if (this.config?.minDate) {
|
|
85
|
+
if (dayDate < this.config.minDate)
|
|
86
|
+
return 'disabled';
|
|
87
|
+
}
|
|
88
|
+
if (this.config?.maxDate) {
|
|
89
|
+
if (dayDate > this.config.maxDate)
|
|
90
|
+
return 'disabled';
|
|
91
|
+
}
|
|
92
|
+
return this.range ? getRangeSelectionClass(this, day) : this.getSingleDaySelectionClass(day);
|
|
93
|
+
}
|
|
94
|
+
getSingleDaySelectionClass(day) {
|
|
95
|
+
if (this.selectedDay && day.day === this.selectedDay.day &&
|
|
96
|
+
day.monthYear.month === this.selectedDay.monthYear.month &&
|
|
97
|
+
day.monthYear.year === this.selectedDay.monthYear.year) {
|
|
98
|
+
return 'sl single';
|
|
99
|
+
}
|
|
100
|
+
return '';
|
|
101
|
+
}
|
|
102
|
+
onSelectDay(day) {
|
|
103
|
+
if (!day.inCurrentMonth)
|
|
104
|
+
return;
|
|
105
|
+
if (!this.range) {
|
|
106
|
+
this.selectedDay = day;
|
|
107
|
+
const currentDate = calendarDateToDate(day);
|
|
108
|
+
this.calendarResponse.emit(currentDate);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
onSelectDaysRange(this, day);
|
|
112
|
+
this.selectedRage.emit(day);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
applySelectedDate() {
|
|
116
|
+
if (this.range) {
|
|
117
|
+
if (this.selectedRangeStart && this.selectedRangeEnd) {
|
|
118
|
+
onApplyRageDate(this);
|
|
119
|
+
}
|
|
120
|
+
else if (this.endDateField && this.startDateField) {
|
|
121
|
+
this.clearSelectedDate('all');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else if (this.selectedDay) {
|
|
125
|
+
const date = calendarDateToDate(this.selectedDay);
|
|
126
|
+
this.calendarResponse.emit(date);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
clearSelectedDate(clearTarget) {
|
|
130
|
+
if (this.range && (clearTarget === 'all' || clearTarget === 'end')) {
|
|
131
|
+
this.endDateError = '';
|
|
132
|
+
this.endDateField.focus();
|
|
133
|
+
this.selectedRangeEnd = null;
|
|
134
|
+
this.startFieldDisabled = false;
|
|
135
|
+
this.endDateField.inputValue = '';
|
|
136
|
+
if (this.selectedRangeStart) {
|
|
137
|
+
this.currentDate = calendarDateToDate(this.selectedRangeStart);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (this.range && (clearTarget === 'all' || clearTarget === 'start')) {
|
|
141
|
+
this.startDateError = '';
|
|
142
|
+
this.startDateField.focus();
|
|
143
|
+
this.endFieldDisabled = false;
|
|
144
|
+
this.selectedRangeStart = null;
|
|
145
|
+
this.startDateField.inputValue = '';
|
|
146
|
+
if (this.selectedRangeEnd) {
|
|
147
|
+
this.currentDate = calendarDateToDate(this.selectedRangeEnd);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (this.range && this.selectedRangeStart === null && this.selectedRangeEnd === null) {
|
|
151
|
+
this.focused = 'start';
|
|
152
|
+
this.startDateField.focus();
|
|
153
|
+
this.currentDate = new Date();
|
|
154
|
+
}
|
|
155
|
+
this.selectedDay = null;
|
|
156
|
+
this.notification = null;
|
|
157
|
+
if (!this.range) {
|
|
158
|
+
this.currentDate = new Date();
|
|
159
|
+
}
|
|
160
|
+
this.clearSelection.emit();
|
|
161
|
+
}
|
|
162
|
+
handleCalendarResponse(date, isMonth) {
|
|
163
|
+
if (!(date instanceof Date))
|
|
164
|
+
return;
|
|
165
|
+
const year = isMonth ? this.currentDate.getFullYear() : date.getFullYear();
|
|
166
|
+
const month = isMonth ? date.getMonth() : this.currentDate.getMonth();
|
|
167
|
+
this.currentDate = new Date(year, month, this.currentDate.getDate());
|
|
168
|
+
if (isMonth) {
|
|
169
|
+
this.initMonth = this.currentDate;
|
|
170
|
+
this.showMonthCalendar = false;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.initYear = this.currentDate;
|
|
174
|
+
this.showYearCalendar = false;
|
|
175
|
+
}
|
|
176
|
+
this.changeMonthYearResponse.emit(this.currentDate);
|
|
177
|
+
}
|
|
178
|
+
handleOnClickDropdownLabel(isMonth) {
|
|
179
|
+
this.initMonth = isMonth ? this.currentDate : this.initMonth;
|
|
180
|
+
this.initYear = !isMonth ? this.currentDate : this.initYear;
|
|
181
|
+
this.showMonthCalendar = isMonth;
|
|
182
|
+
this.showYearCalendar = !isMonth;
|
|
183
|
+
this.openIntegratedCalendar.emit();
|
|
184
|
+
}
|
|
185
|
+
getMonthGrid() {
|
|
186
|
+
let week = [];
|
|
187
|
+
const today = new Date();
|
|
188
|
+
const grid = [];
|
|
189
|
+
const baseDate = this.currentDate;
|
|
190
|
+
const month = baseDate.getMonth();
|
|
191
|
+
const year = baseDate.getFullYear();
|
|
192
|
+
const firstDay = new Date(year, month, 1);
|
|
193
|
+
const startWeekday = (firstDay.getDay() + 6) % 7;
|
|
194
|
+
const daysInMonth = new Date(year, month + 1, 0).getDate();
|
|
195
|
+
const daysInPrevMonth = new Date(year, month, 0).getDate();
|
|
196
|
+
// fill days from previous month
|
|
197
|
+
for (let i = startWeekday - 1; i >= 0; i--) {
|
|
198
|
+
const day = daysInPrevMonth - i;
|
|
199
|
+
const weekDay = (startWeekday - 1 - i + 7) % 7;
|
|
200
|
+
week.push({ day, monthYear: { month: month - 1, year: year }, isToday: false, inCurrentMonth: false, weekDay });
|
|
201
|
+
}
|
|
202
|
+
// fill days from current month
|
|
203
|
+
for (let d = 1; d <= daysInMonth; d++) {
|
|
204
|
+
const isToday = d === today.getDate() && month === today.getMonth() && year === today.getFullYear();
|
|
205
|
+
const weekDay = week.length % 7;
|
|
206
|
+
week.push({ day: d, monthYear: { month: month, year: year }, isToday, inCurrentMonth: true, weekDay });
|
|
207
|
+
if (week.length === 7) {
|
|
208
|
+
grid.push(week);
|
|
209
|
+
week = [];
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// fill remaining days from next month
|
|
213
|
+
let nextDay = 1;
|
|
214
|
+
while (week.length < 7) {
|
|
215
|
+
const weekDay = week.length;
|
|
216
|
+
week.push({ day: nextDay++, monthYear: { month: month + 1, year: year }, isToday: false, inCurrentMonth: false, weekDay });
|
|
217
|
+
}
|
|
218
|
+
const hasCurrentMonthDay = week.some(day => day.inCurrentMonth);
|
|
219
|
+
if (hasCurrentMonthDay) {
|
|
220
|
+
grid.push(week);
|
|
221
|
+
}
|
|
222
|
+
return grid;
|
|
223
|
+
}
|
|
224
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DayCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
225
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DayCalendarComponent, selector: "day-calendar", inputs: { initYear: "initYear", initMonth: "initMonth", config: "config", range: "range", restart: "restart", appyOnClose: "appyOnClose", currentDate: "currentDate", appearance: "appearance", navType: "navType" }, outputs: { clearHover: "clearHover", clearSelection: "clearSelection", changeMonth: "changeMonth", hoverDay: "hoverDay", openIntegratedCalendar: "openIntegratedCalendar", selectedRage: "selectedRage", calendarResponse: "calendarResponse", changeMonthYearResponse: "changeMonthYearResponse" }, viewQueries: [{ propertyName: "endDateField", first: true, predicate: ["endDate"], descendants: true }, { propertyName: "startDateField", first: true, predicate: ["startDate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section *ngIf=\"showMonthCalendar\">\n <month-calendar\n [config]=\"config\"\n [integratedMode]=\"true\"\n [restart]=\"showMonthCalendar\"\n (response)=\"handleCalendarResponse($event, true)\" [initDate]=\"initMonth\"\n [appearance]=\"{language: appearance.language, isMobile: appearance.isMobile, actions: false, }\">\n </month-calendar>\n</section>\n\n<section *ngIf=\"showYearCalendar\">\n <year-calendar\n [config]=\"config\"\n [integratedMode]=\"true\"\n [restart]=\"showYearCalendar\"\n (response)=\"handleCalendarResponse($event, false)\" [initDate]=\"initYear\"\n [appearance]=\"{language: appearance.language, isMobile: appearance.isMobile, actions: false}\">\n </year-calendar>\n</section>\n\n<div *ngIf=\"!showYearCalendar && !showMonthCalendar\" class=\"gravity-calendar-content\" [class.mobile]=\"appearance.isMobile\">\n <span *ngIf=\"!appearance.isMobile\" class=\"hr-label sm-bold title\">{{range ? i18n.select_range : i18n.select_date}}</span>\n\n <div *ngIf=\"range\" class=\"selected-dates\">\n <gravity-text-field #startDate\n [size]=\"'sm'\"\n [width]=\"'short'\"\n [label]=\"i18n.start_date\"\n [inputContentType]=\"'date'\"\n [supportText]=\"startDateError\"\n [placeholder]=\"i18n.date_placeholder\"\n [clickOnRightIcon]=\"!startFieldDisabled\"\n (keyup)=\"onDateKeyup(this, $event, 'start')\"\n (clickIconRight)=\"clearSelectedDate('start')\"\n (focusout)=\"searchDate(this, startDate.inputValue, 'start')\"\n [iconRight]=\"(selectedRangeStart || startDate.inputValue.length > 9) ? 'unsuccess' : ''\"\n (click)=\"focused = 'start'; selectedRangeStart ? currentDate = calendarDateToDate(selectedRangeStart) : null\"\n [customState]=\"startFieldDisabled ? 'disabled' : startDateError ? 'typed-error' : (startDate.inputValue.length < 1 ? 'default' : 'typing')\"/>\n\n <gravity-text-field #endDate\n [size]=\"'sm'\"\n [width]=\"'short'\"\n [label]=\"i18n.end_date\"\n [inputContentType]=\"'date'\"\n [supportText]=\"endDateError\"\n [placeholder]=\"i18n.date_placeholder\"\n [clickOnRightIcon]=\"!endFieldDisabled\"\n (keyup)=\"onDateKeyup(this, $event, 'end')\"\n (clickIconRight)=\"clearSelectedDate('end')\"\n (focusout)=\"searchDate(this, endDate.inputValue, 'end')\"\n [iconRight]=\"(selectedRangeEnd || endDate.inputValue.length > 9) ? 'unsuccess' : ''\"\n (click)=\" focused = 'end'; selectedRangeEnd ? currentDate = calendarDateToDate(selectedRangeEnd) : null\"\n [customState]=\"endFieldDisabled ? 'disabled' : endDateError ? 'typed-error' : (endDate.inputValue.length < 1 ? 'default' : 'typing')\"/>\n </div>\n\n <section class=\"gravity-calendar-header\" [class.mobile]=\"appearance.isMobile\">\n <gravity-icon-button [type]=\"'primary'\" [size]=\"'sm'\" [icon]=\"'arrow-left'\" [supportText]=\"i18n.preview_month\"\n (clickOnIcon)=\"currentDate = changeDate(-1, currentDate, true); changeMonth.emit(-1)\"\n [state]=\"(navType === 'prev' || navType === 'both') && (appearance.state !== 'disabled') &&\n isPeriodAvailable(currentDate, config.minDate, 'month', 'prev') ? 'active' : 'disabled'\"/>\n\n <div class=\"month-year-label\">\n <gravity-dropdown-label [fontClass]=\"'hr-title sm-bold'\" [size]=\"'sm'\" [label]=\"monthsList[currentDate.getMonth()]\"\n [state]=\"appearance.state === 'disabled' ? 'inactive' : 'active'\" (onClickLabel)=\"handleOnClickDropdownLabel(true)\"> </gravity-dropdown-label>\n\n <gravity-dropdown-label [fontClass]=\"'hr-title sm-bold'\" [size]=\"'sm'\" [label]=\"currentDate.getFullYear().toString()\"\n [state]=\"appearance.state === 'disabled' ? 'inactive' : 'active'\" (onClickLabel)=\"handleOnClickDropdownLabel(false)\"> </gravity-dropdown-label>\n </div>\n\n <gravity-icon-button [type]=\"'primary'\" [size]=\"'sm'\" [icon]=\"'arrow-right'\" [supportText]=\"i18n.next_month\"\n (clickOnIcon)=\"currentDate = changeDate(1, currentDate, true); changeMonth.emit(1)\"\n [state]=\"(navType === 'next' || navType === 'both') && (appearance.state !== 'disabled') &&\n isPeriodAvailable(currentDate, config.maxDate, 'month', 'next') ? 'active' : 'disabled'\"/>\n </section>\n\n <section class=\"gravity-calendar-body\" [class.mobile]=\"appearance.isMobile\">\n <section class=\"days-name-line\">\n <div class=\"days-name\">\n <span class=\"hr-body\" [ngClass]=\"appearance.isMobile ? 'md-regular' : 'sm-regular'\"\n *ngFor=\"let day of daysList\"> {{ day }} </span>\n </div>\n\n <div class=\"separator-line\"></div>\n </section>\n\n <section class=\"days-number-selector\">\n <div class=\"days-number-table\">\n <div class=\"week-row\" *ngFor=\"let week of getMonthGrid(); trackBy: trackByWeek\">\n <span class=\"hr-body\" *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.preview]=\"range ? isPreview(this, day) : null\"\n [class.disabled]=\"!day.inCurrentMonth\" [class.today]=\"day.isToday\"\n (mouseenter)=\"range ? onHoverDay(this, day) : null; hoverDay.emit(day)\"\n (mouseleave)=\"range ? onClearHover(this) : null; this.clearHover.emit()\"\n [ngClass]=\"[appearance.isMobile ? 'md-regular' : 'sm-regular',\n appearance.state === 'disabled' ? 'disabled' : getDaySelectionClass(day)]\"\n (click)=\"day.inCurrentMonth ? onSelectDay(day): null\"> {{ day.day }} </span>\n </div>\n </div>\n\n <div *ngIf=\"notification\" class=\"notification\" [class.error]=\"notification.error\">\n <gravity-icon [style.--icon-color]=\"'var(--notification-icon-color)'\" [iconSize]=\"'sm-12'\" [iconName]=\"'information-circle'\"/>\n <span class=\"hr-label sm-regular\">{{notification.text}}</span>\n </div>\n\n <div *ngIf=\"appearance.actions\" class=\"action-section\" >\n <gravity-link [linkText]=\"i18n.clear\" [state]=\"!isDateSelected() ? 'disabled' : 'active'\"\n (click)=\" isDateSelected() ? clearSelectedDate('all') : null\"> </gravity-link>\n\n <gravity-button [size]=\"'sm'\" [type]=\"'tertiary'\" [disabled]=\"!isDateSelected()\"\n (click)=\"isDateSelected() ? applySelectedDate() : null\"> {{i18n.apply}} </gravity-button>\n </div>\n </section>\n </section>\n</div>\n", styles: [":root{--gravity-spacing-none: 0;--gravity-spacing-xxxs: .125rem;--gravity-spacing-xxs: .25rem;--gravity-spacing-xs: .5rem;--gravity-spacing-sm: 1rem;--gravity-spacing-md: 1.5rem;--gravity-spacing-lg: 2rem;--gravity-spacing-xl: 2.5rem;--gravity-spacing-xxl: 3rem;--gravity-spacing-xxxl: 4rem;--gravity-spacing-xxxxl: 6rem;--gravity-spacing-xxxxxl: 12rem}.gravity-padding-none{padding:0!important}.gravity-padding-top-none{padding-top:0!important}.gravity-padding-bottom-none{padding-bottom:0!important}.gravity-padding-left-none{padding-left:0!important}.gravity-padding-right-none{padding-right:0!important}.gravity-padding-block-none{padding-block:0!important}.gravity-padding-inline-none{padding-inline:0!important}.gravity-padding-xxs{padding:.25rem!important}.gravity-padding-top-xxs{padding-top:.25rem!important}.gravity-padding-bottom-xxs{padding-bottom:.25rem!important}.gravity-padding-left-xxs{padding-left:.25rem!important}.gravity-padding-right-xxs{padding-right:.25rem!important}.gravity-padding-block-xxs{padding-block:.25rem!important}.gravity-padding-inline-xxs{padding-inline:.25rem!important}.gravity-padding-xs{padding:.5rem!important}.gravity-padding-top-xs{padding-top:.5rem!important}.gravity-padding-bottom-xs{padding-bottom:.5rem!important}.gravity-padding-left-xs{padding-left:.5rem!important}.gravity-padding-right-xs{padding-right:.5rem!important}.gravity-padding-block-xs{padding-block:.5rem!important}.gravity-padding-inline-xs{padding-inline:.5rem!important}.gravity-padding-sm{padding:1rem!important}.gravity-padding-top-sm{padding-top:1rem!important}.gravity-padding-bottom-sm{padding-bottom:1rem!important}.gravity-padding-left-sm{padding-left:1rem!important}.gravity-padding-right-sm{padding-right:1rem!important}.gravity-padding-block-sm{padding-block:1rem!important}.gravity-padding-inline-sm{padding-inline:1rem!important}.gravity-padding-md{padding:1.5rem!important}.gravity-padding-top-md{padding-top:1.5rem!important}.gravity-padding-bottom-md{padding-bottom:1.5rem!important}.gravity-padding-left-md{padding-left:1.5rem!important}.gravity-padding-right-md{padding-right:1.5rem!important}.gravity-padding-block-md{padding-block:1.5rem!important}.gravity-padding-inline-md{padding-inline:1.5rem!important}.gravity-padding-lg{padding:2rem!important}.gravity-padding-top-lg{padding-top:2rem!important}.gravity-padding-bottom-lg{padding-bottom:2rem!important}.gravity-padding-left-lg{padding-left:2rem!important}.gravity-padding-right-lg{padding-right:2rem!important}.gravity-padding-block-lg{padding-block:2rem!important}.gravity-padding-inline-lg{padding-inline:2rem!important}.gravity-padding-xl{padding:2.5rem!important}.gravity-padding-top-xl{padding-top:2.5rem!important}.gravity-padding-bottom-xl{padding-bottom:2.5rem!important}.gravity-padding-left-xl{padding-left:2.5rem!important}.gravity-padding-right-xl{padding-right:2.5rem!important}.gravity-padding-block-xl{padding-block:2.5rem!important}.gravity-padding-inline-xl{padding-inline:2.5rem!important}.gravity-padding-xxl{padding:3rem!important}.gravity-padding-top-xxl{padding-top:3rem!important}.gravity-padding-bottom-xxl{padding-bottom:3rem!important}.gravity-padding-left-xxl{padding-left:3rem!important}.gravity-padding-right-xxl{padding-right:3rem!important}.gravity-padding-block-xxl{padding-block:3rem!important}.gravity-padding-inline-xxl{padding-inline:3rem!important}.gravity-padding-xxxl{padding:4rem!important}.gravity-padding-top-xxxl{padding-top:4rem!important}.gravity-padding-bottom-xxxl{padding-bottom:4rem!important}.gravity-padding-left-xxxl{padding-left:4rem!important}.gravity-padding-right-xxxl{padding-right:4rem!important}.gravity-padding-block-xxxl{padding-block:4rem!important}.gravity-padding-inline-xxxl{padding-inline:4rem!important}.gravity-padding-xxxxl{padding:6rem!important}.gravity-padding-top-xxxxl{padding-top:6rem!important}.gravity-padding-bottom-xxxxl{padding-bottom:6rem!important}.gravity-padding-left-xxxxl{padding-left:6rem!important}.gravity-padding-right-xxxxl{padding-right:6rem!important}.gravity-padding-block-xxxxl{padding-block:6rem!important}.gravity-padding-inline-xxxxl{padding-inline:6rem!important}.gravity-padding-xxxxxl{padding:12rem!important}.gravity-padding-top-xxxxxl{padding-top:12rem!important}.gravity-padding-bottom-xxxxxl{padding-bottom:12rem!important}.gravity-padding-left-xxxxxl{padding-left:12rem!important}.gravity-padding-right-xxxxxl{padding-right:12rem!important}.gravity-padding-block-xxxxxl{padding-block:12rem!important}.gravity-padding-inline-xxxxxl{padding-inline:12rem!important}.gravity-margin-none{margin:0!important}.gravity-margin-top-none{margin-top:0!important}.gravity-margin-bottom-none{margin-bottom:0!important}.gravity-margin-left-none{margin-left:0!important}.gravity-margin-right-none{margin-right:0!important}.gravity-margin-block-none{margin-block:0!important}.gravity-margin-inline-none{margin-inline:0!important}.gravity-margin-xxs{margin:.25rem!important}.gravity-margin-top-xxs{margin-top:.25rem!important}.gravity-margin-bottom-xxs{margin-bottom:.25rem!important}.gravity-margin-left-xxs{margin-left:.25rem!important}.gravity-margin-right-xxs{margin-right:.25rem!important}.gravity-margin-block-xxs{margin-block:.25rem!important}.gravity-margin-inline-xxs{margin-inline:.25rem!important}.gravity-margin-xs{margin:.5rem!important}.gravity-margin-top-xs{margin-top:.5rem!important}.gravity-margin-bottom-xs{margin-bottom:.5rem!important}.gravity-margin-left-xs{margin-left:.5rem!important}.gravity-margin-right-xs{margin-right:.5rem!important}.gravity-margin-block-xs{margin-block:.5rem!important}.gravity-margin-inline-xs{margin-inline:.5rem!important}.gravity-margin-sm{margin:1rem!important}.gravity-margin-top-sm{margin-top:1rem!important}.gravity-margin-bottom-sm{margin-bottom:1rem!important}.gravity-margin-left-sm{margin-left:1rem!important}.gravity-margin-right-sm{margin-right:1rem!important}.gravity-margin-block-sm{margin-block:1rem!important}.gravity-margin-inline-sm{margin-inline:1rem!important}.gravity-margin-md{margin:1.5rem!important}.gravity-margin-top-md{margin-top:1.5rem!important}.gravity-margin-bottom-md{margin-bottom:1.5rem!important}.gravity-margin-left-md{margin-left:1.5rem!important}.gravity-margin-right-md{margin-right:1.5rem!important}.gravity-margin-block-md{margin-block:1.5rem!important}.gravity-margin-inline-md{margin-inline:1.5rem!important}.gravity-margin-lg{margin:2rem!important}.gravity-margin-top-lg{margin-top:2rem!important}.gravity-margin-bottom-lg{margin-bottom:2rem!important}.gravity-margin-left-lg{margin-left:2rem!important}.gravity-margin-right-lg{margin-right:2rem!important}.gravity-margin-block-lg{margin-block:2rem!important}.gravity-margin-inline-lg{margin-inline:2rem!important}.gravity-margin-xl{margin:2.5rem!important}.gravity-margin-top-xl{margin-top:2.5rem!important}.gravity-margin-bottom-xl{margin-bottom:2.5rem!important}.gravity-margin-left-xl{margin-left:2.5rem!important}.gravity-margin-right-xl{margin-right:2.5rem!important}.gravity-margin-block-xl{margin-block:2.5rem!important}.gravity-margin-inline-xl{margin-inline:2.5rem!important}.gravity-margin-xxl{margin:3rem!important}.gravity-margin-top-xxl{margin-top:3rem!important}.gravity-margin-bottom-xxl{margin-bottom:3rem!important}.gravity-margin-left-xxl{margin-left:3rem!important}.gravity-margin-right-xxl{margin-right:3rem!important}.gravity-margin-block-xxl{margin-block:3rem!important}.gravity-margin-inline-xxl{margin-inline:3rem!important}.gravity-margin-xxxl{margin:4rem!important}.gravity-margin-top-xxxl{margin-top:4rem!important}.gravity-margin-bottom-xxxl{margin-bottom:4rem!important}.gravity-margin-left-xxxl{margin-left:4rem!important}.gravity-margin-right-xxxl{margin-right:4rem!important}.gravity-margin-block-xxxl{margin-block:4rem!important}.gravity-margin-inline-xxxl{margin-inline:4rem!important}.gravity-margin-xxxxl{margin:6rem!important}.gravity-margin-top-xxxxl{margin-top:6rem!important}.gravity-margin-bottom-xxxxl{margin-bottom:6rem!important}.gravity-margin-left-xxxxl{margin-left:6rem!important}.gravity-margin-right-xxxxl{margin-right:6rem!important}.gravity-margin-block-xxxxl{margin-block:6rem!important}.gravity-margin-inline-xxxxl{margin-inline:6rem!important}.gravity-margin-xxxxxl{margin:12rem!important}.gravity-margin-top-xxxxxl{margin-top:12rem!important}.gravity-margin-bottom-xxxxxl{margin-bottom:12rem!important}.gravity-margin-left-xxxxxl{margin-left:12rem!important}.gravity-margin-right-xxxxxl{margin-right:12rem!important}.gravity-margin-block-xxxxxl{margin-block:12rem!important}.gravity-margin-inline-xxxxxl{margin-inline:12rem!important}.border-radius-none{border-radius:0}.border-radius-xs{border-radius:.0625rem}.border-radius-sm{border-radius:.3125rem}.border-radius-md{border-radius:.625rem}.border-radius-lg{border-radius:.9375rem}.border-radius-xl{border-radius:1.25rem}.border-radius-xxl{border-radius:2rem}.border-radius-rounded{border-radius:6.25rem}.next-button,.previous-button{cursor:pointer;padding:var(--gravity-spacing-xs);border-radius:var(--gravity-spacing-xs)}.next-button:not(.disabled):hover,.previous-button:not(.disabled):hover{background:var(--bg-button-active-tertiary)}.next-button.disabled,.previous-button.disabled{cursor:default;pointer-events:none;--icon-color: var(--on-bg-disabled)}.separator-line{border-bottom:2px solid var(--divider-menu-active-primary)}.action-section{height:25px;display:flex;align-self:stretch;align-items:center;justify-content:space-between}.gravity-calendar-content{display:flex;align-items:center;justify-items:center;flex-direction:column;gap:var(--gravity-spacing-md)}.gravity-calendar-content .title{color:var(--label-text-empty-enabled-primary)}.gravity-calendar-content .selected-dates{width:100%;display:flex;align-items:flex-start;gap:var(--gravity-spacing-xs)}.gravity-calendar-content .selected-dates ::ng-deep gravity-text-field .gravity-input-field{width:130px}.gravity-calendar-content .gravity-calendar-header{gap:0;width:268px;height:auto;display:flex;padding-top:0;align-items:center;justify-content:space-between}.gravity-calendar-content .gravity-calendar-header .month-year-label{display:flex;gap:var(--gravity-spacing-sm)}.gravity-calendar-content .gravity-calendar-header.mobile,.gravity-calendar-content .gravity-calendar-body{width:100%}.gravity-calendar-content .gravity-calendar-body .days-name-line{display:flex;flex-direction:column;gap:var(--gravity-spacing-xs);padding-bottom:var(--gravity-spacing-xs)}.gravity-calendar-content .gravity-calendar-body .days-name-line .days-name{display:flex;align-self:stretch;justify-content:space-between}.gravity-calendar-content .gravity-calendar-body .days-name-line .days-name span{display:flex;cursor:default;align-items:center;justify-content:center;padding:var(--gravity-spacing-xs);color:var(--text-highlight-primary)}.gravity-calendar-content .gravity-calendar-body .days-name-line .separator-line{width:100%}.gravity-calendar-content .gravity-calendar-body .days-number-selector{display:flex;align-self:stretch;flex-direction:column;gap:var(--gravity-spacing-sm)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table{display:flex;flex-direction:column}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row{height:25px;display:flex;align-self:stretch}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span{gap:10px;flex:1 0 0;width:31px;height:25px;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--gravity-spacing-xs);color:var(--on-bg-button-pressed-tertiary);border:2px solid var(--bg-calender-primary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span:not(.sl).today{border-color:var(--bg-number-calendar-hover-primary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span:not(.disabled):not(.sl):hover{color:var(--on-bg-button-pressed-tertiary);background:var(--bg-button-active-tertiary);border-color:var(--bg-button-active-tertiary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.single,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.start,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.end{color:var(--on-bg-button-pressed-primary);background:var(--bg-button-pressed-primary);border-color:var(--bg-button-pressed-primary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.range,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span:not(.disabled).preview{border-radius:0;background:var(--bg-button-active-tertiary);border-color:var(--bg-button-active-tertiary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.start,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.nsl-start:hover{border-radius:var(--gravity-spacing-xs) 0 0 var(--gravity-spacing-xs)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.end,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.nsl-end:hover{border-radius:0 var(--gravity-spacing-xs) var(--gravity-spacing-xs) 0}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.in-slt:hover{border-color:var(--bg-button-pressed-primary)!important}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.default{border-radius:0!important;border-color:transparent!important}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.same-sln{border-radius:var(--gravity-spacing-xs)!important}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.disabled{cursor:default;pointer-events:none;color:var(--on-bg-disabled)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .notification{display:flex;align-items:center;align-self:stretch;gap:var(--gravity-spacing-xxs);border-radius:.3125rem;padding:var(--gravity-spacing-xs);color:var(--on-bg-button-active-tertiary);background:var(--bg-button-active-tertiary);--notification-icon-color: var(--on-bg-button-active-tertiary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .notification.error{color:var(--on-bg-button-active-negative);background:var(--bg-button-active-negative);--notification-icon-color: var(--on-bg-button-active-negative)}.gravity-calendar-content.mobile{width:100%;height:auto}.gravity-calendar-content.mobile .selected-dates ::ng-deep gravity-text-field{width:100%}.gravity-calendar-content.mobile .selected-dates ::ng-deep gravity-text-field .gravity-input-field{min-width:100%}.gravity-calendar-content.mobile .days-name-line .separator-line{width:100%}.gravity-calendar-content.mobile .days-number-selector .days-number-table .week-row,.gravity-calendar-content.mobile .days-number-selector .days-number-table span{height:43px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.GravityButtonComponent, selector: "gravity-button", inputs: ["cypressTag", "disabled", "iconName", "isLoading", "showContent", "size", "iconPosition", "customState", "type"] }, { kind: "component", type: i3.GravityIconButtonComponent, selector: "gravity-icon-button", inputs: ["cypressTag", "icon", "supportText", "variant", "size", "type", "state", "badge"], outputs: ["clickOnIcon"] }, { kind: "component", type: i4.GravityIconComponent, selector: "gravity-icon", inputs: ["customIconColorVariable", "iconName", "iconSize", "hoverIcon", "size", "isCoin"] }, { kind: "component", type: i5.GravityTextFieldComponent, selector: "gravity-text-field", inputs: ["currentLang", "customInputValue", "customState", "cypressTag", "label", "prefix", "required", "supportText", "textFieldType", "clickOnLeftIcon", "clickOnRightIcon", "iconColor", "iconLeft", "iconRight", "autocomplete", "inputContentType", "placeholder", "validations", "size", "width"], outputs: ["clickIconLeft", "clickIconRight", "response"] }, { kind: "component", type: i6.GravityLinkComponent, selector: "gravity-link", inputs: ["linkText", "fontClass", "link", "cypressTag", "iconName", "target", "iconPosition", "iconSize", "state"] }, { kind: "component", type: i7.GravityDropdownLabelComponent, selector: "gravity-dropdown-label", inputs: ["label", "fontClass", "isOpen", "stopPropagation", "size", "state"], outputs: ["onClickLabel"] }, { kind: "component", type: i8.MonthCalendarComponent, selector: "month-calendar", inputs: ["config", "initDate", "restart", "appearance", "integratedMode"], outputs: ["clearSelection", "response"] }, { kind: "component", type: i9.YearCalendarComponent, selector: "year-calendar", inputs: ["config", "initDate", "restart", "appearance", "integratedMode"], outputs: ["clearSelection", "response"] }] }); }
|
|
226
|
+
}
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DayCalendarComponent, decorators: [{
|
|
228
|
+
type: Component,
|
|
229
|
+
args: [{ selector: 'day-calendar', template: "<section *ngIf=\"showMonthCalendar\">\n <month-calendar\n [config]=\"config\"\n [integratedMode]=\"true\"\n [restart]=\"showMonthCalendar\"\n (response)=\"handleCalendarResponse($event, true)\" [initDate]=\"initMonth\"\n [appearance]=\"{language: appearance.language, isMobile: appearance.isMobile, actions: false, }\">\n </month-calendar>\n</section>\n\n<section *ngIf=\"showYearCalendar\">\n <year-calendar\n [config]=\"config\"\n [integratedMode]=\"true\"\n [restart]=\"showYearCalendar\"\n (response)=\"handleCalendarResponse($event, false)\" [initDate]=\"initYear\"\n [appearance]=\"{language: appearance.language, isMobile: appearance.isMobile, actions: false}\">\n </year-calendar>\n</section>\n\n<div *ngIf=\"!showYearCalendar && !showMonthCalendar\" class=\"gravity-calendar-content\" [class.mobile]=\"appearance.isMobile\">\n <span *ngIf=\"!appearance.isMobile\" class=\"hr-label sm-bold title\">{{range ? i18n.select_range : i18n.select_date}}</span>\n\n <div *ngIf=\"range\" class=\"selected-dates\">\n <gravity-text-field #startDate\n [size]=\"'sm'\"\n [width]=\"'short'\"\n [label]=\"i18n.start_date\"\n [inputContentType]=\"'date'\"\n [supportText]=\"startDateError\"\n [placeholder]=\"i18n.date_placeholder\"\n [clickOnRightIcon]=\"!startFieldDisabled\"\n (keyup)=\"onDateKeyup(this, $event, 'start')\"\n (clickIconRight)=\"clearSelectedDate('start')\"\n (focusout)=\"searchDate(this, startDate.inputValue, 'start')\"\n [iconRight]=\"(selectedRangeStart || startDate.inputValue.length > 9) ? 'unsuccess' : ''\"\n (click)=\"focused = 'start'; selectedRangeStart ? currentDate = calendarDateToDate(selectedRangeStart) : null\"\n [customState]=\"startFieldDisabled ? 'disabled' : startDateError ? 'typed-error' : (startDate.inputValue.length < 1 ? 'default' : 'typing')\"/>\n\n <gravity-text-field #endDate\n [size]=\"'sm'\"\n [width]=\"'short'\"\n [label]=\"i18n.end_date\"\n [inputContentType]=\"'date'\"\n [supportText]=\"endDateError\"\n [placeholder]=\"i18n.date_placeholder\"\n [clickOnRightIcon]=\"!endFieldDisabled\"\n (keyup)=\"onDateKeyup(this, $event, 'end')\"\n (clickIconRight)=\"clearSelectedDate('end')\"\n (focusout)=\"searchDate(this, endDate.inputValue, 'end')\"\n [iconRight]=\"(selectedRangeEnd || endDate.inputValue.length > 9) ? 'unsuccess' : ''\"\n (click)=\" focused = 'end'; selectedRangeEnd ? currentDate = calendarDateToDate(selectedRangeEnd) : null\"\n [customState]=\"endFieldDisabled ? 'disabled' : endDateError ? 'typed-error' : (endDate.inputValue.length < 1 ? 'default' : 'typing')\"/>\n </div>\n\n <section class=\"gravity-calendar-header\" [class.mobile]=\"appearance.isMobile\">\n <gravity-icon-button [type]=\"'primary'\" [size]=\"'sm'\" [icon]=\"'arrow-left'\" [supportText]=\"i18n.preview_month\"\n (clickOnIcon)=\"currentDate = changeDate(-1, currentDate, true); changeMonth.emit(-1)\"\n [state]=\"(navType === 'prev' || navType === 'both') && (appearance.state !== 'disabled') &&\n isPeriodAvailable(currentDate, config.minDate, 'month', 'prev') ? 'active' : 'disabled'\"/>\n\n <div class=\"month-year-label\">\n <gravity-dropdown-label [fontClass]=\"'hr-title sm-bold'\" [size]=\"'sm'\" [label]=\"monthsList[currentDate.getMonth()]\"\n [state]=\"appearance.state === 'disabled' ? 'inactive' : 'active'\" (onClickLabel)=\"handleOnClickDropdownLabel(true)\"> </gravity-dropdown-label>\n\n <gravity-dropdown-label [fontClass]=\"'hr-title sm-bold'\" [size]=\"'sm'\" [label]=\"currentDate.getFullYear().toString()\"\n [state]=\"appearance.state === 'disabled' ? 'inactive' : 'active'\" (onClickLabel)=\"handleOnClickDropdownLabel(false)\"> </gravity-dropdown-label>\n </div>\n\n <gravity-icon-button [type]=\"'primary'\" [size]=\"'sm'\" [icon]=\"'arrow-right'\" [supportText]=\"i18n.next_month\"\n (clickOnIcon)=\"currentDate = changeDate(1, currentDate, true); changeMonth.emit(1)\"\n [state]=\"(navType === 'next' || navType === 'both') && (appearance.state !== 'disabled') &&\n isPeriodAvailable(currentDate, config.maxDate, 'month', 'next') ? 'active' : 'disabled'\"/>\n </section>\n\n <section class=\"gravity-calendar-body\" [class.mobile]=\"appearance.isMobile\">\n <section class=\"days-name-line\">\n <div class=\"days-name\">\n <span class=\"hr-body\" [ngClass]=\"appearance.isMobile ? 'md-regular' : 'sm-regular'\"\n *ngFor=\"let day of daysList\"> {{ day }} </span>\n </div>\n\n <div class=\"separator-line\"></div>\n </section>\n\n <section class=\"days-number-selector\">\n <div class=\"days-number-table\">\n <div class=\"week-row\" *ngFor=\"let week of getMonthGrid(); trackBy: trackByWeek\">\n <span class=\"hr-body\" *ngFor=\"let day of week; trackBy: trackByDay\"\n [class.preview]=\"range ? isPreview(this, day) : null\"\n [class.disabled]=\"!day.inCurrentMonth\" [class.today]=\"day.isToday\"\n (mouseenter)=\"range ? onHoverDay(this, day) : null; hoverDay.emit(day)\"\n (mouseleave)=\"range ? onClearHover(this) : null; this.clearHover.emit()\"\n [ngClass]=\"[appearance.isMobile ? 'md-regular' : 'sm-regular',\n appearance.state === 'disabled' ? 'disabled' : getDaySelectionClass(day)]\"\n (click)=\"day.inCurrentMonth ? onSelectDay(day): null\"> {{ day.day }} </span>\n </div>\n </div>\n\n <div *ngIf=\"notification\" class=\"notification\" [class.error]=\"notification.error\">\n <gravity-icon [style.--icon-color]=\"'var(--notification-icon-color)'\" [iconSize]=\"'sm-12'\" [iconName]=\"'information-circle'\"/>\n <span class=\"hr-label sm-regular\">{{notification.text}}</span>\n </div>\n\n <div *ngIf=\"appearance.actions\" class=\"action-section\" >\n <gravity-link [linkText]=\"i18n.clear\" [state]=\"!isDateSelected() ? 'disabled' : 'active'\"\n (click)=\" isDateSelected() ? clearSelectedDate('all') : null\"> </gravity-link>\n\n <gravity-button [size]=\"'sm'\" [type]=\"'tertiary'\" [disabled]=\"!isDateSelected()\"\n (click)=\"isDateSelected() ? applySelectedDate() : null\"> {{i18n.apply}} </gravity-button>\n </div>\n </section>\n </section>\n</div>\n", styles: [":root{--gravity-spacing-none: 0;--gravity-spacing-xxxs: .125rem;--gravity-spacing-xxs: .25rem;--gravity-spacing-xs: .5rem;--gravity-spacing-sm: 1rem;--gravity-spacing-md: 1.5rem;--gravity-spacing-lg: 2rem;--gravity-spacing-xl: 2.5rem;--gravity-spacing-xxl: 3rem;--gravity-spacing-xxxl: 4rem;--gravity-spacing-xxxxl: 6rem;--gravity-spacing-xxxxxl: 12rem}.gravity-padding-none{padding:0!important}.gravity-padding-top-none{padding-top:0!important}.gravity-padding-bottom-none{padding-bottom:0!important}.gravity-padding-left-none{padding-left:0!important}.gravity-padding-right-none{padding-right:0!important}.gravity-padding-block-none{padding-block:0!important}.gravity-padding-inline-none{padding-inline:0!important}.gravity-padding-xxs{padding:.25rem!important}.gravity-padding-top-xxs{padding-top:.25rem!important}.gravity-padding-bottom-xxs{padding-bottom:.25rem!important}.gravity-padding-left-xxs{padding-left:.25rem!important}.gravity-padding-right-xxs{padding-right:.25rem!important}.gravity-padding-block-xxs{padding-block:.25rem!important}.gravity-padding-inline-xxs{padding-inline:.25rem!important}.gravity-padding-xs{padding:.5rem!important}.gravity-padding-top-xs{padding-top:.5rem!important}.gravity-padding-bottom-xs{padding-bottom:.5rem!important}.gravity-padding-left-xs{padding-left:.5rem!important}.gravity-padding-right-xs{padding-right:.5rem!important}.gravity-padding-block-xs{padding-block:.5rem!important}.gravity-padding-inline-xs{padding-inline:.5rem!important}.gravity-padding-sm{padding:1rem!important}.gravity-padding-top-sm{padding-top:1rem!important}.gravity-padding-bottom-sm{padding-bottom:1rem!important}.gravity-padding-left-sm{padding-left:1rem!important}.gravity-padding-right-sm{padding-right:1rem!important}.gravity-padding-block-sm{padding-block:1rem!important}.gravity-padding-inline-sm{padding-inline:1rem!important}.gravity-padding-md{padding:1.5rem!important}.gravity-padding-top-md{padding-top:1.5rem!important}.gravity-padding-bottom-md{padding-bottom:1.5rem!important}.gravity-padding-left-md{padding-left:1.5rem!important}.gravity-padding-right-md{padding-right:1.5rem!important}.gravity-padding-block-md{padding-block:1.5rem!important}.gravity-padding-inline-md{padding-inline:1.5rem!important}.gravity-padding-lg{padding:2rem!important}.gravity-padding-top-lg{padding-top:2rem!important}.gravity-padding-bottom-lg{padding-bottom:2rem!important}.gravity-padding-left-lg{padding-left:2rem!important}.gravity-padding-right-lg{padding-right:2rem!important}.gravity-padding-block-lg{padding-block:2rem!important}.gravity-padding-inline-lg{padding-inline:2rem!important}.gravity-padding-xl{padding:2.5rem!important}.gravity-padding-top-xl{padding-top:2.5rem!important}.gravity-padding-bottom-xl{padding-bottom:2.5rem!important}.gravity-padding-left-xl{padding-left:2.5rem!important}.gravity-padding-right-xl{padding-right:2.5rem!important}.gravity-padding-block-xl{padding-block:2.5rem!important}.gravity-padding-inline-xl{padding-inline:2.5rem!important}.gravity-padding-xxl{padding:3rem!important}.gravity-padding-top-xxl{padding-top:3rem!important}.gravity-padding-bottom-xxl{padding-bottom:3rem!important}.gravity-padding-left-xxl{padding-left:3rem!important}.gravity-padding-right-xxl{padding-right:3rem!important}.gravity-padding-block-xxl{padding-block:3rem!important}.gravity-padding-inline-xxl{padding-inline:3rem!important}.gravity-padding-xxxl{padding:4rem!important}.gravity-padding-top-xxxl{padding-top:4rem!important}.gravity-padding-bottom-xxxl{padding-bottom:4rem!important}.gravity-padding-left-xxxl{padding-left:4rem!important}.gravity-padding-right-xxxl{padding-right:4rem!important}.gravity-padding-block-xxxl{padding-block:4rem!important}.gravity-padding-inline-xxxl{padding-inline:4rem!important}.gravity-padding-xxxxl{padding:6rem!important}.gravity-padding-top-xxxxl{padding-top:6rem!important}.gravity-padding-bottom-xxxxl{padding-bottom:6rem!important}.gravity-padding-left-xxxxl{padding-left:6rem!important}.gravity-padding-right-xxxxl{padding-right:6rem!important}.gravity-padding-block-xxxxl{padding-block:6rem!important}.gravity-padding-inline-xxxxl{padding-inline:6rem!important}.gravity-padding-xxxxxl{padding:12rem!important}.gravity-padding-top-xxxxxl{padding-top:12rem!important}.gravity-padding-bottom-xxxxxl{padding-bottom:12rem!important}.gravity-padding-left-xxxxxl{padding-left:12rem!important}.gravity-padding-right-xxxxxl{padding-right:12rem!important}.gravity-padding-block-xxxxxl{padding-block:12rem!important}.gravity-padding-inline-xxxxxl{padding-inline:12rem!important}.gravity-margin-none{margin:0!important}.gravity-margin-top-none{margin-top:0!important}.gravity-margin-bottom-none{margin-bottom:0!important}.gravity-margin-left-none{margin-left:0!important}.gravity-margin-right-none{margin-right:0!important}.gravity-margin-block-none{margin-block:0!important}.gravity-margin-inline-none{margin-inline:0!important}.gravity-margin-xxs{margin:.25rem!important}.gravity-margin-top-xxs{margin-top:.25rem!important}.gravity-margin-bottom-xxs{margin-bottom:.25rem!important}.gravity-margin-left-xxs{margin-left:.25rem!important}.gravity-margin-right-xxs{margin-right:.25rem!important}.gravity-margin-block-xxs{margin-block:.25rem!important}.gravity-margin-inline-xxs{margin-inline:.25rem!important}.gravity-margin-xs{margin:.5rem!important}.gravity-margin-top-xs{margin-top:.5rem!important}.gravity-margin-bottom-xs{margin-bottom:.5rem!important}.gravity-margin-left-xs{margin-left:.5rem!important}.gravity-margin-right-xs{margin-right:.5rem!important}.gravity-margin-block-xs{margin-block:.5rem!important}.gravity-margin-inline-xs{margin-inline:.5rem!important}.gravity-margin-sm{margin:1rem!important}.gravity-margin-top-sm{margin-top:1rem!important}.gravity-margin-bottom-sm{margin-bottom:1rem!important}.gravity-margin-left-sm{margin-left:1rem!important}.gravity-margin-right-sm{margin-right:1rem!important}.gravity-margin-block-sm{margin-block:1rem!important}.gravity-margin-inline-sm{margin-inline:1rem!important}.gravity-margin-md{margin:1.5rem!important}.gravity-margin-top-md{margin-top:1.5rem!important}.gravity-margin-bottom-md{margin-bottom:1.5rem!important}.gravity-margin-left-md{margin-left:1.5rem!important}.gravity-margin-right-md{margin-right:1.5rem!important}.gravity-margin-block-md{margin-block:1.5rem!important}.gravity-margin-inline-md{margin-inline:1.5rem!important}.gravity-margin-lg{margin:2rem!important}.gravity-margin-top-lg{margin-top:2rem!important}.gravity-margin-bottom-lg{margin-bottom:2rem!important}.gravity-margin-left-lg{margin-left:2rem!important}.gravity-margin-right-lg{margin-right:2rem!important}.gravity-margin-block-lg{margin-block:2rem!important}.gravity-margin-inline-lg{margin-inline:2rem!important}.gravity-margin-xl{margin:2.5rem!important}.gravity-margin-top-xl{margin-top:2.5rem!important}.gravity-margin-bottom-xl{margin-bottom:2.5rem!important}.gravity-margin-left-xl{margin-left:2.5rem!important}.gravity-margin-right-xl{margin-right:2.5rem!important}.gravity-margin-block-xl{margin-block:2.5rem!important}.gravity-margin-inline-xl{margin-inline:2.5rem!important}.gravity-margin-xxl{margin:3rem!important}.gravity-margin-top-xxl{margin-top:3rem!important}.gravity-margin-bottom-xxl{margin-bottom:3rem!important}.gravity-margin-left-xxl{margin-left:3rem!important}.gravity-margin-right-xxl{margin-right:3rem!important}.gravity-margin-block-xxl{margin-block:3rem!important}.gravity-margin-inline-xxl{margin-inline:3rem!important}.gravity-margin-xxxl{margin:4rem!important}.gravity-margin-top-xxxl{margin-top:4rem!important}.gravity-margin-bottom-xxxl{margin-bottom:4rem!important}.gravity-margin-left-xxxl{margin-left:4rem!important}.gravity-margin-right-xxxl{margin-right:4rem!important}.gravity-margin-block-xxxl{margin-block:4rem!important}.gravity-margin-inline-xxxl{margin-inline:4rem!important}.gravity-margin-xxxxl{margin:6rem!important}.gravity-margin-top-xxxxl{margin-top:6rem!important}.gravity-margin-bottom-xxxxl{margin-bottom:6rem!important}.gravity-margin-left-xxxxl{margin-left:6rem!important}.gravity-margin-right-xxxxl{margin-right:6rem!important}.gravity-margin-block-xxxxl{margin-block:6rem!important}.gravity-margin-inline-xxxxl{margin-inline:6rem!important}.gravity-margin-xxxxxl{margin:12rem!important}.gravity-margin-top-xxxxxl{margin-top:12rem!important}.gravity-margin-bottom-xxxxxl{margin-bottom:12rem!important}.gravity-margin-left-xxxxxl{margin-left:12rem!important}.gravity-margin-right-xxxxxl{margin-right:12rem!important}.gravity-margin-block-xxxxxl{margin-block:12rem!important}.gravity-margin-inline-xxxxxl{margin-inline:12rem!important}.border-radius-none{border-radius:0}.border-radius-xs{border-radius:.0625rem}.border-radius-sm{border-radius:.3125rem}.border-radius-md{border-radius:.625rem}.border-radius-lg{border-radius:.9375rem}.border-radius-xl{border-radius:1.25rem}.border-radius-xxl{border-radius:2rem}.border-radius-rounded{border-radius:6.25rem}.next-button,.previous-button{cursor:pointer;padding:var(--gravity-spacing-xs);border-radius:var(--gravity-spacing-xs)}.next-button:not(.disabled):hover,.previous-button:not(.disabled):hover{background:var(--bg-button-active-tertiary)}.next-button.disabled,.previous-button.disabled{cursor:default;pointer-events:none;--icon-color: var(--on-bg-disabled)}.separator-line{border-bottom:2px solid var(--divider-menu-active-primary)}.action-section{height:25px;display:flex;align-self:stretch;align-items:center;justify-content:space-between}.gravity-calendar-content{display:flex;align-items:center;justify-items:center;flex-direction:column;gap:var(--gravity-spacing-md)}.gravity-calendar-content .title{color:var(--label-text-empty-enabled-primary)}.gravity-calendar-content .selected-dates{width:100%;display:flex;align-items:flex-start;gap:var(--gravity-spacing-xs)}.gravity-calendar-content .selected-dates ::ng-deep gravity-text-field .gravity-input-field{width:130px}.gravity-calendar-content .gravity-calendar-header{gap:0;width:268px;height:auto;display:flex;padding-top:0;align-items:center;justify-content:space-between}.gravity-calendar-content .gravity-calendar-header .month-year-label{display:flex;gap:var(--gravity-spacing-sm)}.gravity-calendar-content .gravity-calendar-header.mobile,.gravity-calendar-content .gravity-calendar-body{width:100%}.gravity-calendar-content .gravity-calendar-body .days-name-line{display:flex;flex-direction:column;gap:var(--gravity-spacing-xs);padding-bottom:var(--gravity-spacing-xs)}.gravity-calendar-content .gravity-calendar-body .days-name-line .days-name{display:flex;align-self:stretch;justify-content:space-between}.gravity-calendar-content .gravity-calendar-body .days-name-line .days-name span{display:flex;cursor:default;align-items:center;justify-content:center;padding:var(--gravity-spacing-xs);color:var(--text-highlight-primary)}.gravity-calendar-content .gravity-calendar-body .days-name-line .separator-line{width:100%}.gravity-calendar-content .gravity-calendar-body .days-number-selector{display:flex;align-self:stretch;flex-direction:column;gap:var(--gravity-spacing-sm)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table{display:flex;flex-direction:column}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row{height:25px;display:flex;align-self:stretch}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span{gap:10px;flex:1 0 0;width:31px;height:25px;display:flex;cursor:pointer;align-items:center;justify-content:center;border-radius:var(--gravity-spacing-xs);color:var(--on-bg-button-pressed-tertiary);border:2px solid var(--bg-calender-primary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span:not(.sl).today{border-color:var(--bg-number-calendar-hover-primary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span:not(.disabled):not(.sl):hover{color:var(--on-bg-button-pressed-tertiary);background:var(--bg-button-active-tertiary);border-color:var(--bg-button-active-tertiary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.single,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.start,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.end{color:var(--on-bg-button-pressed-primary);background:var(--bg-button-pressed-primary);border-color:var(--bg-button-pressed-primary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.range,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span:not(.disabled).preview{border-radius:0;background:var(--bg-button-active-tertiary);border-color:var(--bg-button-active-tertiary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.start,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.nsl-start:hover{border-radius:var(--gravity-spacing-xs) 0 0 var(--gravity-spacing-xs)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.end,.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.nsl-end:hover{border-radius:0 var(--gravity-spacing-xs) var(--gravity-spacing-xs) 0}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.in-slt:hover{border-color:var(--bg-button-pressed-primary)!important}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.default{border-radius:0!important;border-color:transparent!important}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.same-sln{border-radius:var(--gravity-spacing-xs)!important}.gravity-calendar-content .gravity-calendar-body .days-number-selector .days-number-table .week-row span.disabled{cursor:default;pointer-events:none;color:var(--on-bg-disabled)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .notification{display:flex;align-items:center;align-self:stretch;gap:var(--gravity-spacing-xxs);border-radius:.3125rem;padding:var(--gravity-spacing-xs);color:var(--on-bg-button-active-tertiary);background:var(--bg-button-active-tertiary);--notification-icon-color: var(--on-bg-button-active-tertiary)}.gravity-calendar-content .gravity-calendar-body .days-number-selector .notification.error{color:var(--on-bg-button-active-negative);background:var(--bg-button-active-negative);--notification-icon-color: var(--on-bg-button-active-negative)}.gravity-calendar-content.mobile{width:100%;height:auto}.gravity-calendar-content.mobile .selected-dates ::ng-deep gravity-text-field{width:100%}.gravity-calendar-content.mobile .selected-dates ::ng-deep gravity-text-field .gravity-input-field{min-width:100%}.gravity-calendar-content.mobile .days-name-line .separator-line{width:100%}.gravity-calendar-content.mobile .days-number-selector .days-number-table .week-row,.gravity-calendar-content.mobile .days-number-selector .days-number-table span{height:43px!important}\n"] }]
|
|
230
|
+
}], propDecorators: { initYear: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], initMonth: [{
|
|
233
|
+
type: Input
|
|
234
|
+
}], config: [{
|
|
235
|
+
type: Input
|
|
236
|
+
}], range: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], restart: [{
|
|
239
|
+
type: Input
|
|
240
|
+
}], appyOnClose: [{
|
|
241
|
+
type: Input
|
|
242
|
+
}], currentDate: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], appearance: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], navType: [{
|
|
247
|
+
type: Input
|
|
248
|
+
}], clearHover: [{
|
|
249
|
+
type: Output
|
|
250
|
+
}], clearSelection: [{
|
|
251
|
+
type: Output
|
|
252
|
+
}], changeMonth: [{
|
|
253
|
+
type: Output
|
|
254
|
+
}], hoverDay: [{
|
|
255
|
+
type: Output
|
|
256
|
+
}], openIntegratedCalendar: [{
|
|
257
|
+
type: Output
|
|
258
|
+
}], selectedRage: [{
|
|
259
|
+
type: Output
|
|
260
|
+
}], calendarResponse: [{
|
|
261
|
+
type: Output
|
|
262
|
+
}], changeMonthYearResponse: [{
|
|
263
|
+
type: Output
|
|
264
|
+
}], endDateField: [{
|
|
265
|
+
type: ViewChild,
|
|
266
|
+
args: ['endDate']
|
|
267
|
+
}], startDateField: [{
|
|
268
|
+
type: ViewChild,
|
|
269
|
+
args: ['startDate']
|
|
270
|
+
}] } });
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LWNhbGVuZGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyYXZpdHktZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZ3Jhdml0eS1kYXRlLXBpY2tlci9jb21wb25lbnRzL2RheS1jYWxlbmRhci9kYXktY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3Jhdml0eS1kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9ncmF2aXR5LWRhdGUtcGlja2VyL2NvbXBvbmVudHMvZGF5LWNhbGVuZGFyL2RheS1jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNySCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xJLE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLDJCQUEyQixFQUFFLFVBQVUsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7OztBQU9sTSxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBU2tCLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDdkIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUMxQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM1Qixn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LElBQUksa0JBQWtCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0F6TlUsb0JBQW9CO21HQUFwQixvQkFBb0IsMndCQ1pqQyxzOE1Ba0hBOzs0RkR0R2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLGNBQWM7OEJBS1YsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNTLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1csV0FBVztzQkFBMUIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBRVcsVUFBVTtzQkFBMUIsTUFBTTtnQkFDVSxjQUFjO3NCQUE5QixNQUFNO2dCQUNVLFdBQVc7c0JBQTNCLE1BQU07Z0JBQ1UsUUFBUTtzQkFBeEIsTUFBTTtnQkFDVSxzQkFBc0I7c0JBQXRDLE1BQU07Z0JBQ1UsWUFBWTtzQkFBNUIsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsdUJBQXVCO3NCQUF2QyxNQUFNO2dCQUVlLFlBQVk7c0JBQWpDLFNBQVM7dUJBQUMsU0FBUztnQkFDSSxjQUFjO3NCQUFyQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaWNrZXJBcHBlYXJhbmNlLCBEYXRlUGlja2VyQ29uZmlnLCBDYWxlbmRhckRhdGV9IGZyb20gXCIuLi8uLi9zaGFyZWQvZGF0ZS1waWNrZXIubW9kYWxcIjtcbmltcG9ydCB7R3Jhdml0eVRleHRGaWVsZENvbXBvbmVudH0gZnJvbSBcIi4uLy4uLy4uL2dyYXZpdHktdGV4dC1maWVsZC9ncmF2aXR5LXRleHQtZmllbGQuY29tcG9uZW50XCI7XG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NBTEVOREFSX0kxOE4sIERBWVNfU0hPUlRfRU4sIERBWVNfU0hPUlRfRVMsIE1PTlRIU19FTiwgTU9OVEhTX0VTfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2RhdGUtcGlja2VyLmNvbnN0YW50c1wiO1xuaW1wb3J0IHtkYXRlVG9DYWxlbmRhckRheSwgZ2V0U3RhcnREYXRlLCBjaGFuZ2VEYXRlLCBjYWxlbmRhckRhdGVUb0RhdGUsIGlzUGVyaW9kQXZhaWxhYmxlfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZS1waWNrZXIudXRpbHMnO1xuaW1wb3J0IHtnZXRSYW5nZVNlbGVjdGlvbkNsYXNzLCBpc1ByZXZpZXcsIG9uQXBwbHlSYWdlRGF0ZSwgb25DbGVhckhvdmVyLCBvbkRhdGVLZXl1cCwgb25Ib3ZlckRheSwgb25TZWxlY3REYXlzUmFuZ2UsIHByb2Nlc3NQcmVzZWxlY3RlZFJhbmdlRGF0ZSwgc2VhcmNoRGF0ZX0gZnJvbSBcIi4vcmFuZ2UtZGF5cy1jYWxlbmRhci51dGlsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2RheS1jYWxlbmRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RheS1jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF5LWNhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGF5Q2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwdWJsaWMgaW5pdFllYXI6IERhdGU7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbml0TW9udGg6IERhdGU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IERhdGVQaWNrZXJDb25maWc7XG4gIEBJbnB1dCgpIHB1YmxpYyByYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgcmVzdGFydDogYm9vbGVhbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBwdWJsaWMgYXBweU9uQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgQElucHV0KCkgcHVibGljIGFwcGVhcmFuY2U6IERhdGVQaWNrZXJBcHBlYXJhbmNlO1xuICBASW5wdXQoKSBwdWJsaWMgbmF2VHlwZTogJ3ByZXYnIHwgJ25leHQnIHwgJ2JvdGgnIHwgJ25vbmUnPSAnYm90aCdcblxuICBAT3V0cHV0KCkgcHVibGljIGNsZWFySG92ZXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBjbGVhclNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZU1vbnRoOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGhvdmVyRGF5OiBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJEYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJEYXRlPigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9wZW5JbnRlZ3JhdGVkQ2FsZW5kYXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBzZWxlY3RlZFJhZ2U6IEV2ZW50RW1pdHRlcjxDYWxlbmRhckRhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYWxlbmRhckRhdGU+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2FsZW5kYXJSZXNwb25zZTogRXZlbnRFbWl0dGVyPERhdGVbXSB8IERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlW10gfCBEYXRlPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZU1vbnRoWWVhclJlc3BvbnNlOiBFdmVudEVtaXR0ZXI8RGF0ZSB8IERhdGVbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBEYXRlW10+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZScpIGVuZERhdGVGaWVsZCE6IEdyYXZpdHlUZXh0RmllbGRDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZScpIHN0YXJ0RGF0ZUZpZWxkITogR3Jhdml0eVRleHRGaWVsZENvbXBvbmVudDtcblxuICBwdWJsaWMgZW5kRGF0ZUVycm9yOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIHN0YXJ0RGF0ZUVycm9yOiBzdHJpbmcgPSAnJztcblx0cHVibGljIGVuZEZpZWxkRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0cHVibGljIHN0YXJ0RmllbGREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgc2VsZWN0ZWRSYW5nZUVuZDogQ2FsZW5kYXJEYXRlIHwgbnVsbCA9IG51bGw7XG5cdHB1YmxpYyBzZWxlY3RlZFJhbmdlU3RhcnQ6IENhbGVuZGFyRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBzaG93WWVhckNhbGVuZGFyOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93TW9udGhDYWxlbmRhcjogYm9vbGVhbiA9IGZhbHNlO1xuXHRwdWJsaWMgZm9jdXNlZDogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0Jztcblx0cHVibGljIGhvdmVyZWREYXk6IENhbGVuZGFyRGF0ZSB8IG51bGwgPSBudWxsO1xuXHRwdWJsaWMgc2VsZWN0ZWREYXk6IENhbGVuZGFyRGF0ZSB8IG51bGwgPSBudWxsO1xuXHRwdWJsaWMgbm90aWZpY2F0aW9uOiB7dGV4dDogc3RyaW5nLCBlcnJvcjogYm9vbGVhbn07XG5cbiAgcHVibGljIGdldCBpMThuKCkgeyByZXR1cm4gQ0FMRU5EQVJfSTE4Tlt0aGlzLmFwcGVhcmFuY2UubGFuZ3VhZ2VdOyB9XG4gIHB1YmxpYyBnZXQgbW9udGhzTGlzdCgpIHsgcmV0dXJuIHRoaXMuYXBwZWFyYW5jZS5sYW5ndWFnZSA9PT0gJ2VuJyA/IE1PTlRIU19FTiA6IE1PTlRIU19FUzsgfVxuICBwdWJsaWMgZ2V0IGRheXNMaXN0KCkgeyByZXR1cm4gdGhpcy5hcHBlYXJhbmNlLmxhbmd1YWdlID09PSAnZW4nID8gREFZU19TSE9SVF9FTiA6IERBWVNfU0hPUlRfRVM7IH1cblxuICBwdWJsaWMgdHJhY2tCeVdlZWsoaW5kZXg6IG51bWJlciwgXzogYW55KTogbnVtYmVyIHsgcmV0dXJuIGluZGV4OyB9XG4gIHB1YmxpYyB0cmFja0J5RGF5KF86IG51bWJlciwgZGF5OiBDYWxlbmRhckRhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtkYXkubW9udGhZZWFyLnllYXJ9LSR7ZGF5Lm1vbnRoWWVhci5tb250aH0tJHtkYXkuZGF5fWA7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3Qgc2hvdWxkUmVzdGFydCA9IGNoYW5nZXNbJ3Jlc3RhcnQnXSAmJiB0aGlzLnJlc3RhcnQ7XG5cdFx0Y29uc3Qgc2hvdWxkQXBweSA9IGNoYW5nZXNbJ2FwcHlPbkNsb3NlJ10gJiYgdGhpcy5hcHB5T25DbG9zZTtcbiAgICBjb25zdCBzaG91bGRQcm9jZXNzUHJlU2VsZWN0ZWQgPSBjaGFuZ2VzWydwcmVTZWxlY3RlZERhdGUnXSAmJiB0aGlzLmNvbmZpZy5pbml0RGF0ZTtcblxuXHRcdGlmIChzaG91bGRBcHB5KSB7IHRoaXMuYXBwbHlTZWxlY3RlZERhdGUoKTsgfVxuICAgIGlmIChzaG91bGRSZXN0YXJ0IHx8IHNob3VsZFByb2Nlc3NQcmVTZWxlY3RlZCkgeyB0aGlzLnByb2Nlc3NJbml0RGF0ZSgpOyB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NJbml0RGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7cHJvY2Vzc1ByZXNlbGVjdGVkUmFuZ2VEYXRlKHRoaXMpfSwgMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5pbml0RGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHRoaXMuY3VycmVudERhdGUgPSBnZXRTdGFydERhdGUodGhpcy5jb25maWcuaW5pdERhdGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZERheSA9IGRhdGVUb0NhbGVuZGFyRGF5KHRoaXMuY29uZmlnLmluaXREYXRlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNEYXRlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXRoaXMucmFuZ2UgPyAhIXRoaXMuc2VsZWN0ZWREYXkgOiAhIXRoaXMuc2VsZWN0ZWRSYW5nZVN0YXJ0ICYmICEhdGhpcy5zZWxlY3RlZFJhbmdlRW5kO1xuICB9XG5cbiAgcHVibGljIGdldERheVNlbGVjdGlvbkNsYXNzKGRheTogQ2FsZW5kYXJEYXRlKTogc3RyaW5nIHtcbiAgICBpZiAoIWRheS5pbkN1cnJlbnRNb250aCkgcmV0dXJuICdkaXNhYmxlZCc7XG5cbiAgICBjb25zdCBkYXlEYXRlID0gbmV3IERhdGUoZGF5Lm1vbnRoWWVhci55ZWFyLCBkYXkubW9udGhZZWFyLm1vbnRoLCBkYXkuZGF5KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZz8ubWluRGF0ZSkgeyBpZiAoZGF5RGF0ZSA8IHRoaXMuY29uZmlnLm1pbkRhdGUpIHJldHVybiAnZGlzYWJsZWQnOyB9XG4gICAgaWYgKHRoaXMuY29uZmlnPy5tYXhEYXRlKSB7IGlmIChkYXlEYXRlID4gdGhpcy5jb25maWcubWF4RGF0ZSkgcmV0dXJuICdkaXNhYmxlZCc7IH1cblxuICAgIHJldHVybiB0aGlzLnJhbmdlID8gZ2V0UmFuZ2VTZWxlY3Rpb25DbGFzcyh0aGlzLCBkYXkpIDogdGhpcy5nZXRTaW5nbGVEYXlTZWxlY3Rpb25DbGFzcyhkYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaW5nbGVEYXlTZWxlY3Rpb25DbGFzcyhkYXk6IENhbGVuZGFyRGF0ZSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXkgJiYgZGF5LmRheSA9PT0gdGhpcy5zZWxlY3RlZERheS5kYXkgJiZcbiAgICAgIGRheS5tb250aFllYXIubW9udGggPT09IHRoaXMuc2VsZWN0ZWREYXkubW9udGhZZWFyLm1vbnRoICYmXG4gICAgICBkYXkubW9udGhZZWFyLnllYXIgPT09IHRoaXMuc2VsZWN0ZWREYXkubW9udGhZZWFyLnllYXIpIHtcbiAgICAgIHJldHVybiAnc2wgc2luZ2xlJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0RGF5KGRheTogQ2FsZW5kYXJEYXRlKTogdm9pZCB7XG4gICAgaWYgKCFkYXkuaW5DdXJyZW50TW9udGgpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5yYW5nZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERheSA9IGRheTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gY2FsZW5kYXJEYXRlVG9EYXRlKGRheSk7XG4gICAgICB0aGlzLmNhbGVuZGFyUmVzcG9uc2UuZW1pdChjdXJyZW50RGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uU2VsZWN0RGF5c1JhbmdlKHRoaXMsIGRheSk7XG4gICAgICB0aGlzLnNlbGVjdGVkUmFnZS5lbWl0KGRheSk7XG4gICAgfVxuICB9XG5cblx0cHVibGljIGFwcGx5U2VsZWN0ZWREYXRlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnJhbmdlKSB7XG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZFJhbmdlU3RhcnQgJiYgdGhpcy5zZWxlY3RlZFJhbmdlRW5kKSB7XG5cdFx0XHRcdG9uQXBwbHlSYWdlRGF0ZSh0aGlzKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5lbmREYXRlRmllbGQgJiYgdGhpcy5zdGFydERhdGVGaWVsZCkge1xuXHRcdFx0XHR0aGlzLmNsZWFyU2VsZWN0ZWREYXRlKCdhbGwnKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXkpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBjYWxlbmRhckRhdGVUb0RhdGUodGhpcy5zZWxlY3RlZERheSk7XG5cdFx0XHR0aGlzLmNhbGVuZGFyUmVzcG9uc2UuZW1pdChkYXRlKTtcblx0XHR9XG5cdH1cblxuICBwdWJsaWMgY2xlYXJTZWxlY3RlZERhdGUoY2xlYXJUYXJnZXQ6ICdhbGwnIHwgJ3N0YXJ0JyB8ICdlbmQnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmFuZ2UgJiYgKGNsZWFyVGFyZ2V0ID09PSAnYWxsJyB8fCBjbGVhclRhcmdldCA9PT0gJ2VuZCcpKSB7XG5cdFx0XHR0aGlzLmVuZERhdGVFcnJvciA9ICcnO1xuXHQgICAgdGhpcy5lbmREYXRlRmllbGQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZUVuZCA9IG51bGw7XG5cdFx0XHR0aGlzLnN0YXJ0RmllbGREaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5lbmREYXRlRmllbGQuaW5wdXRWYWx1ZSA9ICcnO1xuXHRcdFx0aWYodGhpcy5zZWxlY3RlZFJhbmdlU3RhcnQpIHsgdGhpcy5jdXJyZW50RGF0ZSA9IGNhbGVuZGFyRGF0ZVRvRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VTdGFydCkgfVxuICAgIH1cblxuXHQgIGlmICh0aGlzLnJhbmdlICYmIChjbGVhclRhcmdldCA9PT0gJ2FsbCcgfHwgY2xlYXJUYXJnZXQgPT09ICdzdGFydCcpKSB7XG5cdFx0ICB0aGlzLnN0YXJ0RGF0ZUVycm9yID0gJyc7XG5cdFx0XHR0aGlzLnN0YXJ0RGF0ZUZpZWxkLmZvY3VzKCk7XG5cdFx0XHR0aGlzLmVuZEZpZWxkRGlzYWJsZWQgPSBmYWxzZTtcblx0XHQgIHRoaXMuc2VsZWN0ZWRSYW5nZVN0YXJ0ID0gbnVsbDtcblx0XHQgIHRoaXMuc3RhcnREYXRlRmllbGQuaW5wdXRWYWx1ZSA9ICcnO1xuXHRcdCAgaWYodGhpcy5zZWxlY3RlZFJhbmdlRW5kKSB7IHRoaXMuY3VycmVudERhdGUgPSBjYWxlbmRhckRhdGVUb0RhdGUodGhpcy5zZWxlY3RlZFJhbmdlRW5kKSB9XG5cdCAgfVxuXG5cdFx0aWYgKHRoaXMucmFuZ2UgJiYgdGhpcy5zZWxlY3RlZFJhbmdlU3RhcnQgPT09IG51bGwgJiYgdGhpcy5zZWxlY3RlZFJhbmdlRW5kID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmZvY3VzZWQgPSAnc3RhcnQnO1xuXHRcdFx0dGhpcy5zdGFydERhdGVGaWVsZC5mb2N1cygpO1xuXHRcdFx0dGhpcy5jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0fVxuXG4gICAgdGhpcy5zZWxlY3RlZERheSA9IG51bGw7XG5cdFx0dGhpcy5ub3RpZmljYXRpb24gPSBudWxsO1xuXHRcdGlmICghdGhpcy5yYW5nZSkgeyB0aGlzLmN1cnJlbnREYXRlID0gbmV3IERhdGUoKTsgfVxuXG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbi5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2FsZW5kYXJSZXNwb25zZShkYXRlOiBEYXRlIHwgRGF0ZVtdLCBpc01vbnRoOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSByZXR1cm47XG5cbiAgICBjb25zdCB5ZWFyID0gaXNNb250aCA/IHRoaXMuY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSA6IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IGlzTW9udGggPyBkYXRlLmdldE1vbnRoKCkgOiB0aGlzLmN1cnJlbnREYXRlLmdldE1vbnRoKCk7XG5cbiAgICB0aGlzLmN1cnJlbnREYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIHRoaXMuY3VycmVudERhdGUuZ2V0RGF0ZSgpKTtcblxuICAgIGlmIChpc01vbnRoKSB7IHRoaXMuaW5pdE1vbnRoID0gdGhpcy5jdXJyZW50RGF0ZTsgdGhpcy5zaG93TW9udGhDYWxlbmRhciA9IGZhbHNlOyB9XG4gICAgZWxzZSB7IHRoaXMuaW5pdFllYXIgPSB0aGlzLmN1cnJlbnREYXRlOyB0aGlzLnNob3dZZWFyQ2FsZW5kYXIgPSBmYWxzZTsgfVxuXG4gICAgdGhpcy5jaGFuZ2VNb250aFllYXJSZXNwb25zZS5lbWl0KHRoaXMuY3VycmVudERhdGUpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU9uQ2xpY2tEcm9wZG93bkxhYmVsKGlzTW9udGg6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMuaW5pdE1vbnRoID0gaXNNb250aCA/IHRoaXMuY3VycmVudERhdGUgOiB0aGlzLmluaXRNb250aDtcbiAgICAgIHRoaXMuaW5pdFllYXIgPSAhaXNNb250aCA/IHRoaXMuY3VycmVudERhdGUgOiB0aGlzLmluaXRZZWFyO1xuXG4gICAgICB0aGlzLnNob3dNb250aENhbGVuZGFyID0gaXNNb250aDtcbiAgICAgIHRoaXMuc2hvd1llYXJDYWxlbmRhciA9ICFpc01vbnRoO1xuXG4gICAgICB0aGlzLm9wZW5JbnRlZ3JhdGVkQ2FsZW5kYXIuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIGdldE1vbnRoR3JpZCgpOiBDYWxlbmRhckRhdGVbXVtdIHtcbiAgICBsZXQgd2VlazogQ2FsZW5kYXJEYXRlW10gPSBbXTtcblxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBncmlkOiBDYWxlbmRhckRhdGVbXVtdID0gW107XG4gICAgY29uc3QgYmFzZURhdGUgPSB0aGlzLmN1cnJlbnREYXRlO1xuICAgIGNvbnN0IG1vbnRoID0gYmFzZURhdGUuZ2V0TW9udGgoKTtcbiAgICBjb25zdCB5ZWFyID0gYmFzZURhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuICAgIGNvbnN0IHN0YXJ0V2Vla2RheSA9IChmaXJzdERheS5nZXREYXkoKSArIDYpICUgNztcblxuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKCk7XG4gICAgY29uc3QgZGF5c0luUHJldk1vbnRoID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDApLmdldERhdGUoKTtcblxuICAgIC8vIGZpbGwgZGF5cyBmcm9tIHByZXZpb3VzIG1vbnRoXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0V2Vla2RheSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGRheSA9IGRheXNJblByZXZNb250aCAtIGk7XG4gICAgICAgIGNvbnN0IHdlZWtEYXkgPSAoc3RhcnRXZWVrZGF5IC0gMSAtIGkgKyA3KSAlIDc7XG4gICAgICAgIHdlZWsucHVzaCh7IGRheSwgbW9udGhZZWFyOiB7bW9udGg6IG1vbnRoIC0gMSwgeWVhcjogeWVhcn0sIGlzVG9kYXk6IGZhbHNlLCBpbkN1cnJlbnRNb250aDogZmFsc2UsIHdlZWtEYXkgfSk7XG4gICAgfVxuXG4gICAgLy8gZmlsbCBkYXlzIGZyb20gY3VycmVudCBtb250aFxuICAgIGZvciAobGV0IGQgPSAxOyBkIDw9IGRheXNJbk1vbnRoOyBkKyspIHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGQgPT09IHRvZGF5LmdldERhdGUoKSAmJiBtb250aCA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJiB5ZWFyID09PSB0b2RheS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCB3ZWVrRGF5ID0gd2Vlay5sZW5ndGggJSA3O1xuICAgICAgICB3ZWVrLnB1c2goeyBkYXk6IGQsIG1vbnRoWWVhcjoge21vbnRoOiBtb250aCwgeWVhcjogeWVhcn0sIGlzVG9kYXksIGluQ3VycmVudE1vbnRoOiB0cnVlLCB3ZWVrRGF5IH0pO1xuXG4gICAgICAgIGlmICh3ZWVrLmxlbmd0aCA9PT0gNykge1xuICAgICAgICAgICAgZ3JpZC5wdXNoKHdlZWspO1xuICAgICAgICAgICAgd2VlayA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZmlsbCByZW1haW5pbmcgZGF5cyBmcm9tIG5leHQgbW9udGhcbiAgICBsZXQgbmV4dERheSA9IDE7XG4gICAgd2hpbGUgKHdlZWsubGVuZ3RoIDwgNykge1xuICAgICAgICBjb25zdCB3ZWVrRGF5ID0gd2Vlay5sZW5ndGg7XG4gICAgICAgIHdlZWsucHVzaCh7IGRheTogbmV4dERheSsrLCBtb250aFllYXI6IHttb250aDogbW9udGggKyAxLCB5ZWFyOiB5ZWFyfSwgaXNUb2RheTogZmFsc2UsIGluQ3VycmVudE1vbnRoOiBmYWxzZSwgd2Vla0RheSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNDdXJyZW50TW9udGhEYXkgPSB3ZWVrLnNvbWUoZGF5ID0+IGRheS5pbkN1cnJlbnRNb250aCk7XG4gICAgaWYgKGhhc0N1cnJlbnRNb250aERheSkge1xuICAgICAgICBncmlkLnB1c2god2Vlayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyaWQ7XG4gIH1cblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgY2hhbmdlRGF0ZSA9IGNoYW5nZURhdGU7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc1ByZXZpZXcgPSBpc1ByZXZpZXc7XG5cdHByb3RlY3RlZCByZWFkb25seSBzZWFyY2hEYXRlID0gc2VhcmNoRGF0ZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uSG92ZXJEYXkgPSBvbkhvdmVyRGF5O1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgb25EYXRlS2V5dXAgPSBvbkRhdGVLZXl1cDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uQ2xlYXJIb3ZlciA9IG9uQ2xlYXJIb3Zlcjtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IGNhbGVuZGFyRGF0ZVRvRGF0ZSA9IGNhbGVuZGFyRGF0ZVRvRGF0ZTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IGlzUGVyaW9kQXZhaWxhYmxlID0gaXNQZXJpb2RBdmFpbGFibGU7XG59IiwiPHNlY3Rpb24gKm5nSWY9XCJzaG93TW9udGhDYWxlbmRhclwiPlxuICA8bW9udGgtY2FsZW5kYXJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgW2ludGVncmF0ZWRNb2RlXT1cInRydWVcIlxuICAgIFtyZXN0YXJ0XT1cInNob3dNb250aENhbGVuZGFyXCJcbiAgICAocmVzcG9uc2UpPVwiaGFuZGxlQ2FsZW5kYXJSZXNwb25zZSgkZXZlbnQsIHRydWUpXCIgW2luaXREYXRlXT1cImluaXRNb250aFwiXG4gICAgW2FwcGVhcmFuY2VdPVwie2xhbmd1YWdlOiBhcHBlYXJhbmNlLmxhbmd1YWdlLCBpc01vYmlsZTogYXBwZWFyYW5jZS5pc01vYmlsZSwgYWN0aW9uczogZmFsc2UsIH1cIj5cbiAgPC9tb250aC1jYWxlbmRhcj5cbjwvc2VjdGlvbj5cblxuPHNlY3Rpb24gKm5nSWY9XCJzaG93WWVhckNhbGVuZGFyXCI+XG4gIDx5ZWFyLWNhbGVuZGFyXG4gICAgW2NvbmZpZ109XCJjb25maWdcIlxuICAgIFtpbnRlZ3JhdGVkTW9kZV09XCJ0cnVlXCJcbiAgICBbcmVzdGFydF09XCJzaG93WWVhckNhbGVuZGFyXCJcbiAgICAocmVzcG9uc2UpPVwiaGFuZGxlQ2FsZW5kYXJSZXNwb25zZSgkZXZlbnQsIGZhbHNlKVwiIFtpbml0RGF0ZV09XCJpbml0WWVhclwiXG4gICAgW2FwcGVhcmFuY2VdPVwie2xhbmd1YWdlOiBhcHBlYXJhbmNlLmxhbmd1YWdlLCBpc01vYmlsZTogYXBwZWFyYW5jZS5pc01vYmlsZSwgYWN0aW9uczogZmFsc2V9XCI+XG4gIDwveWVhci1jYWxlbmRhcj5cbjwvc2VjdGlvbj5cblxuPGRpdiAqbmdJZj1cIiFzaG93WWVhckNhbGVuZGFyICYmICFzaG93TW9udGhDYWxlbmRhclwiIGNsYXNzPVwiZ3Jhdml0eS1jYWxlbmRhci1jb250ZW50XCIgW2NsYXNzLm1vYmlsZV09XCJhcHBlYXJhbmNlLmlzTW9iaWxlXCI+XG4gIDxzcGFuICpuZ0lmPVwiIWFwcGVhcmFuY2UuaXNNb2JpbGVcIiBjbGFzcz1cImhyLWxhYmVsIHNtLWJvbGQgdGl0bGVcIj57e3JhbmdlID8gaTE4bi5zZWxlY3RfcmFuZ2UgOiBpMThuLnNlbGVjdF9kYXRlfX08L3NwYW4+XG5cbiAgPGRpdiAqbmdJZj1cInJhbmdlXCIgY2xhc3M9XCJzZWxlY3RlZC1kYXRlc1wiPlxuICAgIDxncmF2aXR5LXRleHQtZmllbGQgI3N0YXJ0RGF0ZVxuICAgICAgW3NpemVdPVwiJ3NtJ1wiXG4gICAgICBbd2lkdGhdPVwiJ3Nob3J0J1wiXG4gICAgICBbbGFiZWxdPVwiaTE4bi5zdGFydF9kYXRlXCJcbiAgICAgIFtpbnB1dENvbnRlbnRUeXBlXT1cIidkYXRlJ1wiXG4gICAgICBbc3VwcG9ydFRleHRdPVwic3RhcnREYXRlRXJyb3JcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImkxOG4uZGF0ZV9wbGFjZWhvbGRlclwiXG4gICAgICBbY2xpY2tPblJpZ2h0SWNvbl09XCIhc3RhcnRGaWVsZERpc2FibGVkXCJcbiAgICAgIChrZXl1cCk9XCJvbkRhdGVLZXl1cCh0aGlzLCAkZXZlbnQsICdzdGFydCcpXCJcbiAgICAgIChjbGlja0ljb25SaWdodCk9XCJjbGVhclNlbGVjdGVkRGF0ZSgnc3RhcnQnKVwiXG4gICAgICAoZm9jdXNvdXQpPVwic2VhcmNoRGF0ZSh0aGlzLCBzdGFydERhdGUuaW5wdXRWYWx1ZSwgJ3N0YXJ0JylcIlxuICAgICAgW2ljb25SaWdodF09XCIoc2VsZWN0ZWRSYW5nZVN0YXJ0IHx8IHN0YXJ0RGF0ZS5pbnB1dFZhbHVlLmxlbmd0aCA+IDkpID8gJ3Vuc3VjY2VzcycgOiAgJydcIlxuICAgICAgKGNsaWNrKT1cImZvY3VzZWQgPSAnc3RhcnQnOyBzZWxlY3RlZFJhbmdlU3RhcnQgPyBjdXJyZW50RGF0ZSA9IGNhbGVuZGFyRGF0ZVRvRGF0ZShzZWxlY3RlZFJhbmdlU3RhcnQpIDogbnVsbFwiXG4gICAgICBbY3VzdG9tU3RhdGVdPVwic3RhcnRGaWVsZERpc2FibGVkID8gJ2Rpc2FibGVkJyA6IHN0YXJ0RGF0ZUVycm9yID8gJ3R5cGVkLWVycm9yJyA6IChzdGFydERhdGUuaW5wdXRWYWx1ZS5sZW5ndGggPCAxID8gJ2RlZmF1bHQnIDogJ3R5cGluZycpXCIvPlxuXG4gICAgPGdyYXZpdHktdGV4dC1maWVsZCAjZW5kRGF0ZVxuICAgICAgW3NpemVdPVwiJ3NtJ1wiXG4gICAgICBbd2lkdGhdPVwiJ3Nob3J0J1wiXG4gICAgICBbbGFiZWxdPVwiaTE4bi5lbmRfZGF0ZVwiXG4gICAgICBbaW5wdXRDb250ZW50VHlwZV09XCInZGF0ZSdcIlxuICAgICAgW3N1cHBvcnRUZXh0XT1cImVuZERhdGVFcnJvclwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi5kYXRlX3BsYWNlaG9sZGVyXCJcbiAgICAgIFtjbGlja09uUmlnaHRJY29uXT1cIiFlbmRGaWVsZERpc2FibGVkXCJcbiAgICAgIChrZXl1cCk9XCJvbkRhdGVLZXl1cCh0aGlzLCAkZXZlbnQsICdlbmQnKVwiXG4gICAgICAoY2xpY2tJY29uUmlnaHQpPVwiY2xlYXJTZWxlY3RlZERhdGUoJ2VuZCcpXCJcbiAgICAgIChmb2N1c291dCk9XCJzZWFyY2hEYXRlKHRoaXMsIGVuZERhdGUuaW5wdXRWYWx1ZSwgJ2VuZCcpXCJcbiAgICAgIFtpY29uUmlnaHRdPVwiKHNlbGVjdGVkUmFuZ2VFbmQgfHwgZW5kRGF0ZS5pbnB1dFZhbHVlLmxlbmd0aCA+IDkpID8gJ3Vuc3VjY2VzcycgOiAnJ1wiXG4gICAgICAoY2xpY2spPVwiIGZvY3VzZWQgPSAnZW5kJzsgc2VsZWN0ZWRSYW5nZUVuZCA/IGN1cnJlbnREYXRlID0gY2FsZW5kYXJEYXRlVG9EYXRlKHNlbGVjdGVkUmFuZ2VFbmQpIDogbnVsbFwiXG4gICAgICBbY3VzdG9tU3RhdGVdPVwiZW5kRmllbGREaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBlbmREYXRlRXJyb3IgPyAndHlwZWQtZXJyb3InIDogKGVuZERhdGUuaW5wdXRWYWx1ZS5sZW5ndGggPCAxID8gJ2RlZmF1bHQnIDogJ3R5cGluZycpXCIvPlxuICA8L2Rpdj5cblxuICA8c2VjdGlvbiAgY2xhc3M9XCJncmF2aXR5LWNhbGVuZGFyLWhlYWRlclwiIFtjbGFzcy5tb2JpbGVdPVwiYXBwZWFyYW5jZS5pc01vYmlsZVwiPlxuICAgIDxncmF2aXR5LWljb24tYnV0dG9uIFt0eXBlXT1cIidwcmltYXJ5J1wiIFtzaXplXT1cIidzbSdcIiBbaWNvbl09XCInYXJyb3ctbGVmdCdcIiBbc3VwcG9ydFRleHRdPVwiaTE4bi5wcmV2aWV3X21vbnRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tPbkljb24pPVwiY3VycmVudERhdGUgPSBjaGFuZ2VEYXRlKC0xLCBjdXJyZW50RGF0ZSwgdHJ1ZSk7IGNoYW5nZU1vbnRoLmVtaXQoLTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiKG5hdlR5cGUgPT09ICdwcmV2JyB8fCBuYXZUeXBlID09PSAnYm90aCcpICYmIChhcHBlYXJhbmNlLnN0YXRlICE9PSAnZGlzYWJsZWQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlcmlvZEF2YWlsYWJsZShjdXJyZW50RGF0ZSwgY29uZmlnLm1pbkRhdGUsICdtb250aCcsICdwcmV2JykgPyAnYWN0aXZlJyA6ICdkaXNhYmxlZCdcIi8+XG5cbiAgICA8ZGl2IGNsYXNzPVwibW9udGgteWVhci1sYWJlbFwiPlxuICAgICAgPGdyYXZpdHktZHJvcGRvd24tbGFiZWwgW2ZvbnRDbGFzc109XCInaHItdGl0bGUgc20tYm9sZCdcIiBbc2l6ZV09XCInc20nXCIgW2xhYmVsXT1cIm1vbnRoc0xpc3RbY3VycmVudERhdGUuZ2V0TW9udGgoKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cImFwcGVhcmFuY2Uuc3RhdGUgPT09ICdkaXNhYmxlZCcgPyAnaW5hY3RpdmUnIDogJ2FjdGl2ZSdcIiAob25DbGlja0xhYmVsKT1cImhhbmRsZU9uQ2xpY2tEcm9wZG93bkxhYmVsKHRydWUpXCI+IDwvZ3Jhdml0eS1kcm9wZG93bi1sYWJlbD5cblxuICAgICAgPGdyYXZpdHktZHJvcGRvd24tbGFiZWwgW2ZvbnRDbGFzc109XCInaHItdGl0bGUgc20tYm9sZCdcIiBbc2l6ZV09XCInc20nXCIgW2xhYmVsXT1cImN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwiYXBwZWFyYW5jZS5zdGF0ZSA9PT0gJ2Rpc2FibGVkJyA/ICdpbmFjdGl2ZScgOiAnYWN0aXZlJ1wiIChvbkNsaWNrTGFiZWwpPVwiaGFuZGxlT25DbGlja0Ryb3Bkb3duTGFiZWwoZmFsc2UpXCI+IDwvZ3Jhdml0eS1kcm9wZG93bi1sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgICAgPGdyYXZpdHktaWNvbi1idXR0b24gW3R5cGVdPVwiJ3ByaW1hcnknXCIgW3NpemVdPVwiJ3NtJ1wiIFtpY29uXT1cIidhcnJvdy1yaWdodCdcIiBbc3VwcG9ydFRleHRdPVwiaTE4bi5uZXh0X21vbnRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGlja09uSWNvbik9XCJjdXJyZW50RGF0ZSA9IGNoYW5nZURhdGUoMSwgY3VycmVudERhdGUsIHRydWUpOyBjaGFuZ2VNb250aC5lbWl0KDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCIobmF2VHlwZSA9PT0gJ25leHQnIHx8IG5hdlR5cGUgPT09ICdib3RoJykgJiYgKGFwcGVhcmFuY2Uuc3RhdGUgIT09ICdkaXNhYmxlZCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZXJpb2RBdmFpbGFibGUoY3VycmVudERhdGUsIGNvbmZpZy5tYXhEYXRlLCAnbW9udGgnLCAnbmV4dCcpID8gJ2FjdGl2ZScgOiAnZGlzYWJsZWQnXCIvPlxuICA8L3NlY3Rpb24+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJncmF2aXR5LWNhbGVuZGFyLWJvZHlcIiBbY2xhc3MubW9iaWxlXT1cImFwcGVhcmFuY2UuaXNNb2JpbGVcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImRheXMtbmFtZS1saW5lXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF5cy1uYW1lXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaHItYm9keVwiIFtuZ0NsYXNzXT1cImFwcGVhcmFuY2UuaXNNb2JpbGUgPyAnbWQtcmVndWxhcicgOiAnc20tcmVndWxhcidcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNMaXN0XCI+IHt7IGRheSB9fSA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvci1saW5lXCI+PC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJkYXlzLW51bWJlci1zZWxlY3RvclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRheXMtbnVtYmVyLXRhYmxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrLXJvd1wiICpuZ0Zvcj1cImxldCB3ZWVrIG9mIGdldE1vbnRoR3JpZCgpOyB0cmFja0J5OiB0cmFja0J5V2Vla1wiPlxuICAgICAgICAgPHNwYW4gY2xhc3M9XCJoci1ib2R5XCIgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrOyB0cmFja0J5OiB0cmFja0J5RGF5XCJcbiAgICAgICAgICBbY2xhc3MucHJldmlld109XCJyYW5nZSA/IGlzUHJldmlldyh0aGlzLCBkYXkpIDogbnVsbFwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFkYXkuaW5DdXJyZW50TW9udGhcIiBbY2xhc3MudG9kYXldPVwiZGF5LmlzVG9kYXlcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cInJhbmdlID8gb25Ib3ZlckRheSh0aGlzLCBkYXkpIDogbnVsbDsgaG92ZXJEYXkuZW1pdChkYXkpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJyYW5nZSA/IG9uQ2xlYXJIb3Zlcih0aGlzKSA6IG51bGw7IHRoaXMuY2xlYXJIb3Zlci5lbWl0KClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlthcHBlYXJhbmNlLmlzTW9iaWxlID8gJ21kLXJlZ3VsYXInIDogJ3NtLXJlZ3VsYXInLFxuICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2Uuc3RhdGUgPT09ICdkaXNhYmxlZCcgPyAnZGlzYWJsZWQnIDogZ2V0RGF5U2VsZWN0aW9uQ2xhc3MoZGF5KV1cIlxuICAgICAgICAgIChjbGljayk9XCJkYXkuaW5DdXJyZW50TW9udGggPyBvblNlbGVjdERheShkYXkpOiBudWxsXCI+IHt7IGRheS5kYXkgfX0gPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwibm90aWZpY2F0aW9uXCIgY2xhc3M9XCJub3RpZmljYXRpb25cIiBbY2xhc3MuZXJyb3JdPVwibm90aWZpY2F0aW9uLmVycm9yXCI+XG4gICAgICAgIDxncmF2aXR5LWljb24gW3N0eWxlLi0taWNvbi1jb2xvcl09XCIndmFyKC0tbm90aWZpY2F0aW9uLWljb24tY29sb3IpJ1wiIFtpY29uU2l6ZV09XCInc20tMTInXCIgW2ljb25OYW1lXT1cIidpbmZvcm1hdGlvbi1jaXJjbGUnXCIvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhyLWxhYmVsIHNtLXJlZ3VsYXJcIj57e25vdGlmaWNhdGlvbi50ZXh0fX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImFwcGVhcmFuY2UuYWN0aW9uc1wiIGNsYXNzPVwiYWN0aW9uLXNlY3Rpb25cIiA+XG4gICAgICAgIDxncmF2aXR5LWxpbmsgW2xpbmtUZXh0XT1cImkxOG4uY2xlYXJcIiBbc3RhdGVdPVwiIWlzRGF0ZVNlbGVjdGVkKCkgPyAnZGlzYWJsZWQnIDogJ2FjdGl2ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIgaXNEYXRlU2VsZWN0ZWQoKSA/IGNsZWFyU2VsZWN0ZWREYXRlKCdhbGwnKSA6IG51bGxcIj4gPC9ncmF2aXR5LWxpbms+XG5cbiAgICAgICAgPGdyYXZpdHktYnV0dG9uIFtzaXplXT1cIidzbSdcIiBbdHlwZV09XCIndGVydGlhcnknXCIgW2Rpc2FibGVkXT1cIiFpc0RhdGVTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0RhdGVTZWxlY3RlZCgpID8gYXBwbHlTZWxlY3RlZERhdGUoKSA6IG51bGxcIj4ge3tpMThuLmFwcGx5fX0gPC9ncmF2aXR5LWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
|