barsa-calendar 1.0.456 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/{esm2020 → esm2022}/barsa-calendar.mjs +4 -4
  2. package/esm2022/lib/barsa-calendar.module.mjs +117 -0
  3. package/esm2022/lib/calendar-container/calendar-container.component.mjs +230 -0
  4. package/esm2022/lib/calendar-header/calendar-header.component.mjs +66 -0
  5. package/esm2022/lib/calendar-list/calendar-list.component.mjs +18 -0
  6. package/esm2022/lib/calendar-list-container/calendar-list-container.component.mjs +29 -0
  7. package/{esm2020 → esm2022}/lib/calendar-list-item/calendar-list-item.component.mjs +14 -14
  8. package/esm2022/lib/calendar-month/calendar-month.component.mjs +246 -0
  9. package/esm2022/lib/calendar-selection-days/calendar-selection-days.component.mjs +196 -0
  10. package/esm2022/lib/calendar-week/calendar-week.component.mjs +252 -0
  11. package/{esm2020 → esm2022}/lib/constants.mjs +3 -3
  12. package/esm2022/lib/date-time-picker/date-time-picker.component.mjs +431 -0
  13. package/esm2022/lib/day-event-list/day-event-list.component.mjs +55 -0
  14. package/esm2022/lib/day-number-box/day-number-box.component.mjs +105 -0
  15. package/{esm2020 → esm2022}/lib/days-in-week.pipe.mjs +17 -17
  16. package/esm2022/lib/equal-date.pipe.mjs +23 -0
  17. package/esm2022/lib/event-button/event-button.component.mjs +97 -0
  18. package/esm2022/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +29 -0
  19. package/esm2022/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +29 -0
  20. package/esm2022/lib/event-date.pipe.mjs +24 -0
  21. package/esm2022/lib/event-preview/event-preview.component.mjs +79 -0
  22. package/{esm2020 → esm2022}/lib/event-time.pipe.mjs +22 -22
  23. package/{esm2020 → esm2022}/lib/from-to-time.pipe.mjs +23 -23
  24. package/esm2022/lib/models.mjs +14 -0
  25. package/esm2022/lib/month-days/month-days.component.mjs +222 -0
  26. package/esm2022/lib/services/calendar.service.mjs +645 -0
  27. package/{esm2020 → esm2022}/public-api.mjs +23 -23
  28. package/fesm2022/barsa-calendar.mjs +2816 -0
  29. package/fesm2022/barsa-calendar.mjs.map +1 -0
  30. package/index.d.ts +5 -5
  31. package/lib/barsa-calendar.module.d.ts +53 -53
  32. package/lib/calendar-container/calendar-container.component.d.ts +89 -89
  33. package/lib/calendar-header/calendar-header.component.d.ts +33 -33
  34. package/lib/calendar-list/calendar-list.component.d.ts +8 -8
  35. package/lib/calendar-list-container/calendar-list-container.component.d.ts +14 -14
  36. package/lib/calendar-list-item/calendar-list-item.component.d.ts +7 -7
  37. package/lib/calendar-month/calendar-month.component.d.ts +70 -70
  38. package/lib/calendar-selection-days/calendar-selection-days.component.d.ts +48 -48
  39. package/lib/calendar-week/calendar-week.component.d.ts +70 -70
  40. package/lib/constants.d.ts +1 -1
  41. package/lib/date-time-picker/date-time-picker.component.d.ts +113 -112
  42. package/lib/day-event-list/day-event-list.component.d.ts +20 -20
  43. package/lib/day-number-box/day-number-box.component.d.ts +30 -30
  44. package/lib/days-in-week.pipe.d.ts +9 -9
  45. package/lib/equal-date.pipe.d.ts +8 -8
  46. package/lib/event-button/event-button.component.d.ts +31 -31
  47. package/lib/event-button-end-arrow/event-button-end-arrow.component.d.ts +12 -12
  48. package/lib/event-button-start-arrow/event-button-start-arrow.component.d.ts +12 -12
  49. package/lib/event-date.pipe.d.ts +9 -9
  50. package/lib/event-preview/event-preview.component.d.ts +24 -24
  51. package/lib/event-time.pipe.d.ts +9 -9
  52. package/lib/from-to-time.pipe.d.ts +9 -9
  53. package/lib/models.d.ts +110 -110
  54. package/lib/month-days/month-days.component.d.ts +69 -69
  55. package/lib/services/calendar.service.d.ts +70 -70
  56. package/package.json +7 -13
  57. package/public-api.d.ts +19 -19
  58. package/esm2020/lib/barsa-calendar.module.mjs +0 -117
  59. package/esm2020/lib/calendar-container/calendar-container.component.mjs +0 -230
  60. package/esm2020/lib/calendar-header/calendar-header.component.mjs +0 -67
  61. package/esm2020/lib/calendar-list/calendar-list.component.mjs +0 -19
  62. package/esm2020/lib/calendar-list-container/calendar-list-container.component.mjs +0 -30
  63. package/esm2020/lib/calendar-month/calendar-month.component.mjs +0 -246
  64. package/esm2020/lib/calendar-selection-days/calendar-selection-days.component.mjs +0 -195
  65. package/esm2020/lib/calendar-week/calendar-week.component.mjs +0 -249
  66. package/esm2020/lib/date-time-picker/date-time-picker.component.mjs +0 -433
  67. package/esm2020/lib/day-event-list/day-event-list.component.mjs +0 -56
  68. package/esm2020/lib/day-number-box/day-number-box.component.mjs +0 -105
  69. package/esm2020/lib/equal-date.pipe.mjs +0 -23
  70. package/esm2020/lib/event-button/event-button.component.mjs +0 -97
  71. package/esm2020/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +0 -29
  72. package/esm2020/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +0 -29
  73. package/esm2020/lib/event-date.pipe.mjs +0 -24
  74. package/esm2020/lib/event-preview/event-preview.component.mjs +0 -79
  75. package/esm2020/lib/models.mjs +0 -14
  76. package/esm2020/lib/month-days/month-days.component.mjs +0 -222
  77. package/esm2020/lib/services/calendar.service.mjs +0 -645
  78. package/fesm2015/barsa-calendar.mjs +0 -2813
  79. package/fesm2015/barsa-calendar.mjs.map +0 -1
  80. package/fesm2020/barsa-calendar.mjs +0 -2817
  81. package/fesm2020/barsa-calendar.mjs.map +0 -1
@@ -0,0 +1,252 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { BaseComponent, PreventDefaulEvent } from 'barsa-novin-ray-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../services/calendar.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@fundamental-ngx/core/content-density";
7
+ import * as i4 from "@fundamental-ngx/core/button";
8
+ import * as i5 from "@fundamental-ngx/core/table";
9
+ import * as i6 from "../day-number-box/day-number-box.component";
10
+ import * as i7 from "../event-button/event-button.component";
11
+ import * as i8 from "../from-to-time.pipe";
12
+ export class CalendarWeekComponent extends BaseComponent {
13
+ constructor(_cdr, _calendarService) {
14
+ super();
15
+ this._cdr = _cdr;
16
+ this._calendarService = _calendarService;
17
+ this.canDelete = false;
18
+ this.canAdd = false;
19
+ this.canEdit = false;
20
+ this.editEvent = new EventEmitter();
21
+ this.deleteEvent = new EventEmitter();
22
+ this.showEvent = new EventEmitter();
23
+ this.rangeSelect = new EventEmitter();
24
+ this.daySelect = new EventEmitter();
25
+ this.dayClick = new EventEmitter();
26
+ this.selectedTaskId = '';
27
+ this.taskHeight = 30;
28
+ this.maxTaskCount = 4;
29
+ this.Math = Math;
30
+ this._hasPopoverOpened = [];
31
+ }
32
+ ngOnChanges(changes) {
33
+ super.ngOnChanges(changes);
34
+ if (changes.deviceSize && !changes.deviceSize.firstChange) {
35
+ this.prepareWeekDays(changes.deviceSize.currentValue);
36
+ }
37
+ if (changes.moDataList && !changes.moDataList.firstChange) {
38
+ this._prepareDaysTasks(changes.moDataList.currentValue);
39
+ this._cdr.detectChanges();
40
+ }
41
+ if (changes.days && !changes.days.firstChange) {
42
+ this._prepareDaysTasks(this.moDataList);
43
+ this._cdr.detectChanges();
44
+ }
45
+ }
46
+ ngOnInit() {
47
+ super.ngOnInit();
48
+ this.hours = new Array(24).fill(0).map((x, i) => `${i > 9 ? '' + i : '0' + i}:00`);
49
+ this.prepareWeekDays(this.deviceSize);
50
+ this._prepareDaysTasks(this.moDataList);
51
+ }
52
+ setSelectedId(id) {
53
+ this.selectedTaskId = id;
54
+ this._cdr.detectChanges();
55
+ }
56
+ onDayBoxSelect(day) {
57
+ if (!this.canAdd) {
58
+ return;
59
+ }
60
+ // this._fireDaySelect(day.date);
61
+ }
62
+ onOpenPopoverChange(isOpen) {
63
+ if (isOpen) {
64
+ this._hasPopoverOpened.push(true);
65
+ }
66
+ else {
67
+ setTimeout(() => {
68
+ this._hasPopoverOpened = [];
69
+ }, 0);
70
+ }
71
+ }
72
+ onColumnClick(e, day) {
73
+ const { offsetY } = e;
74
+ const hour = Math.floor(offsetY / 50);
75
+ const minutes = Math.floor((offsetY % 50) / 15) * 15;
76
+ const date = new Date(day.date);
77
+ date.setHours(hour);
78
+ date.setMinutes(minutes);
79
+ // this._fireDaySelect(date);
80
+ }
81
+ onEventButton(e) {
82
+ if (e.currentTarget?.localName === 'bc-event-button') {
83
+ PreventDefaulEvent(e);
84
+ }
85
+ }
86
+ onMoreButton(e, popover) {
87
+ PreventDefaulEvent(e);
88
+ this._openPopover(popover);
89
+ }
90
+ onDayClick(day) {
91
+ this.selected = day;
92
+ this.dayClick.emit(day);
93
+ }
94
+ mousedown(ev, dayIndex) {
95
+ this.days.forEach((d) => {
96
+ d.isAddingNewEvent = false;
97
+ d.addingEventPoint1 = null;
98
+ d.addingEventPoint2 = null;
99
+ });
100
+ this.days[dayIndex].isAddingNewEvent = true;
101
+ this.days[dayIndex].addingEventPoint1 = Math.floor(ev.offsetY / 25);
102
+ this.days[dayIndex].addingEventPoint2 = null;
103
+ }
104
+ mousedownForResize(day, dayIndex, taskIndex) {
105
+ const task = this.days[dayIndex].tasks[taskIndex];
106
+ this.days[dayIndex].tasks[taskIndex].hidden = true;
107
+ this.days[dayIndex].isAddingNewEvent = true;
108
+ this.days[dayIndex].addingEventPoint1 = Math.floor(task.top / 25);
109
+ this.days[dayIndex].addingEventPoint2 = Math.floor((task.top + task.height) / 25);
110
+ this._cdr.detectChanges();
111
+ }
112
+ mousemove(ev, dayIndex) {
113
+ if (!this.days[dayIndex].isAddingNewEvent) {
114
+ return;
115
+ }
116
+ if (ev.target.tagName !== 'DIV') {
117
+ return;
118
+ }
119
+ this.days[dayIndex].addingEventPoint2 = Math.floor(ev.offsetY / 25);
120
+ }
121
+ mouseup(ev, dayIndex, replacingTaskIndex = null) {
122
+ const day = this.days[dayIndex];
123
+ if (replacingTaskIndex) {
124
+ this.days[dayIndex].tasks[replacingTaskIndex].hidden = false;
125
+ }
126
+ this.days[dayIndex].isAddingNewEvent = true;
127
+ day.isAddingNewEvent = false;
128
+ const { addingEventPoint1, addingEventPoint2 } = day;
129
+ if (addingEventPoint1 !== null && addingEventPoint2 !== null) {
130
+ const startDateTotalMinutes = Math.min(addingEventPoint1, addingEventPoint2) * 30;
131
+ const startDateHour = Math.floor(startDateTotalMinutes / 60);
132
+ const startDateMinutes = Math.floor(startDateTotalMinutes % 60);
133
+ const startDate = new Date(day.date);
134
+ startDate.setHours(startDateHour);
135
+ startDate.setMinutes(startDateMinutes);
136
+ const endDateTotalMinutes = (Math.max(addingEventPoint1, addingEventPoint2) + 1) * 30;
137
+ const endDateHour = Math.floor(endDateTotalMinutes / 60);
138
+ const endDateMinutes = Math.floor(endDateTotalMinutes % 60);
139
+ const endDate = new Date(day.date);
140
+ endDate.setHours(endDateHour);
141
+ endDate.setMinutes(endDateMinutes);
142
+ this._rangeSelect({ startDate, endDate });
143
+ day.addingEventPoint1 = null;
144
+ day.addingEventPoint2 = null;
145
+ this._sectionRef?.nativeElement.remove();
146
+ }
147
+ }
148
+ _fireDaySelect(date) {
149
+ if (this._hasPopoverOpened.length === 0) {
150
+ this.daySelect.emit(date);
151
+ }
152
+ }
153
+ _rangeSelect({ startDate, endDate }) {
154
+ if (this._hasPopoverOpened.length === 0) {
155
+ this.rangeSelect.emit({ startDate, endDate });
156
+ }
157
+ }
158
+ _openPopover(popover) {
159
+ if (popover.isOpen) {
160
+ this._hasPopoverOpened.push(popover);
161
+ }
162
+ else {
163
+ this._hasPopoverOpened.pop();
164
+ }
165
+ }
166
+ prepareWeekDays(deviceSize) {
167
+ if (deviceSize !== 's' && deviceSize !== 'm') {
168
+ this.selectedWeekDays = this.weekDays;
169
+ }
170
+ else {
171
+ this.selectedWeekDays = this.weekDaysMin;
172
+ }
173
+ }
174
+ _prepareDaysTasks(calendarTasks) {
175
+ const calendarFields = this.calendarFields;
176
+ // Sort all Tasks
177
+ const moDataList = this._calendarService.sortTasks(calendarTasks, calendarFields);
178
+ const taskHeight = 50;
179
+ this.days.forEach((day) => (day.tasks = []));
180
+ const weekTasksArray = [];
181
+ const days = this.days;
182
+ const week = this._calendarService.createWeekTask(days, moDataList, calendarFields, taskHeight);
183
+ weekTasksArray.push(week);
184
+ // به ازای هر ردیف تسک باید تعداد 7 ستون اضافه گردد و برای ستونی که تسکی ندارد یک جای خالی colspan 1 میگذاریم
185
+ weekTasksArray.forEach((weekTask) => {
186
+ this._calendarService.fillWeek(weekTask, days.length);
187
+ });
188
+ const tasks = [];
189
+ let counter = 0;
190
+ Object.values(weekTasksArray).forEach(() => {
191
+ Object.values(week).forEach((element) => {
192
+ const filtered = element.some((c) => c.colSpan > 1 || (c.colSpan === 1 && !c.inDay && c.event));
193
+ if (filtered) {
194
+ tasks[counter.toString()] = element;
195
+ counter++;
196
+ }
197
+ });
198
+ });
199
+ this.weekTasksArray = tasks;
200
+ }
201
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: CalendarWeekComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CalendarService }], target: i0.ɵɵFactoryTarget.Component }); }
202
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: CalendarWeekComponent, selector: "bc-calendar-week", inputs: { weekDays: "weekDays", weekDaysMin: "weekDaysMin", today: "today", containerHeight: "containerHeight", calendarFields: "calendarFields", rtl: "rtl", inDialog: "inDialog", deviceSize: "deviceSize", moDataList: "moDataList", days: "days", canDelete: "canDelete", canAdd: "canAdd", canEdit: "canEdit" }, outputs: { editEvent: "editEvent", deleteEvent: "deleteEvent", showEvent: "showEvent", rangeSelect: "rangeSelect", daySelect: "daySelect", dayClick: "dayClick" }, viewQueries: [{ propertyName: "tableTopEl", first: true, predicate: ["tableTop"], descendants: true }, { propertyName: "_sectionRef", first: true, predicate: ["sectionRef"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"table-container\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n style=\"overflow-y: hidden; flex-shrink: 0\"\n #tableTop\n>\n <table fd-table class=\"table-top\" fdCompact [attr.daysCount]=\"days.length\">\n <tbody fd-table-body>\n <tr fd-table-row class=\"week-days\">\n <td class=\"td-time\"></td>\n @for (day of days; track day) {\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" fd-table-cell style=\"width: 100%\">\n {{ day.dayName }}\n </td>\n }\n </tr>\n <tr fd-table-row class=\"week-numbers\">\n <td class=\"td-time\"></td>\n @for (day of days; track day) {\n <td fd-table-cell [attr.rtl]=\"rtl\">\n <bc-day-number-box\n [day]=\"day\"\n [isWeekMode]=\"true\"\n [isSingleDay]=\"days.length === 1\"\n (dayClick)=\"onDayClick(day)\"\n ></bc-day-number-box>\n </td>\n }\n </tr>\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray,\n maxRowTasks: maxRowTasks,\n weekIndex: 0\n }\n \"\n ></ng-container>\n </tbody>\n </table>\n</div>\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\n @for (rowTask of weekTasks | keyvalue; track rowTask; let i = $index) {\n <tr fd-table-row class=\"task-row\">\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\n @for (task of weekTasks[i]; track task; let dayIndex = $index) { @if (task.colSpan && dayIndex < days.length) {\n <td\n fd-table-cell\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\n class=\"td-button\"\n [attr.hasevent]=\"!!task.event\"\n >\n @if (task.event && !task.inDay) {\n <bc-event-button\n [task]=\"task\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-button>\n } @else {\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\n }\n </td>\n } }\n </tr>\n }\n</ng-template>\n<div\n class=\"table-container\"\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1; display: inline-table\"\n [style.height.px]=\"inDialog ? containerHeight : null\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody #tbody>\n <tr class=\"tr-time\" style=\"height: 0rem\">\n <td class=\"td-time\" style=\"height: 0rem\"></td>\n <td [colspan]=\"days.length\" style=\"height: 0rem\">\n <div class=\"tasks-wrapper\">\n @for (hour of hours; track hour) {\n <div class=\"row-border\"></div>\n }\n </div>\n </td>\n </tr>\n <tr fd-table-row style=\"height: 100%\">\n <td fd-table-cell class=\"td-time\">\n <div class=\"calc-time\">\n @for (hour of hours; track hour) {\n <div>{{ hour }}</div>\n }\n </div>\n </td>\n @for (day of days; track day; let dayIndex = $index) {\n <td class=\"tw-relative\" fd-table-cell (click)=\"onColumnClick($event, day)\">\n @if (day.addingEventPoint2 !== null && day.addingEventPoint1 !== null) {\n <section\n #sectionRef\n class=\"tw-w-[98%] tw-border tw-border-blue-400 tw-absolute tw-left-1/2 -tw-translate-x-1/2 tw-rounded-md tw-transition-colors\"\n [ngStyle]=\"{\n top: Math.min(day.addingEventPoint2, day.addingEventPoint1) * 25 + 'px',\n height: (Math.abs(day.addingEventPoint1 - day.addingEventPoint2) + 1) * 25 + 'px'\n }\"\n [ngClass]=\"{\n 'tw-bg-blue-400/[.4]': day.isAddingNewEvent,\n 'tw-bg-blue-400': !day.isAddingNewEvent\n }\"\n ></section>\n }\n <div\n style=\"position: absolute; left: 0; right: 0; top: 0; bottom: 0\"\n (mousedown)=\"mousedown($event, dayIndex)\"\n (mouseup)=\"mouseup($event, dayIndex)\"\n (mousemove)=\"mousemove($event, dayIndex)\"\n >\n @for (task of day.tasks; track task; let taskIndex = $index) { @if (task.inDay) {\n <bc-event-button\n (click)=\"setSelectedId(task.event.Id); onEventButton($event)\"\n [style.background]=\"task.event[calendarFields.Color]\"\n [style.top.px]=\"task.top\"\n [style.right]=\"\n rtl\n ? 'calc(' + (task.positionCausedByOverlap / task.countOfOverlaps) * 100 + '%)'\n : null\n \"\n [style.left]=\"\n rtl\n ? null\n : 'calc(100% - ' +\n (task.positionCausedByOverlap / task.countOfOverlaps) * 100 +\n '%)'\n \"\n [style.width]=\"\n 'calc(' + (100 - (task.positionCausedByOverlap / task.countOfOverlaps) * 100) + '%)'\n \"\n [style.height.px]=\"task.height\"\n [style.maxHeight.px]=\"task.height\"\n [style.visibility]=\"task.hidden ? 'hidden' : 'visible'\"\n [style.opacity]=\"task.opacity\"\n [style.zIndex]=\"task.positionCausedByOverlap + (selectedTaskId === task.event.Id ? 0 : 0)\"\n [buttonTemplate]=\"eventButtonTemplate\"\n class=\"task-day\"\n [task]=\"task\"\n [index]=\"taskIndex\"\n [deviceSize]=\"deviceSize\"\n [calendarFields]=\"calendarFields\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n >\n <div\n class=\"tw-absolute tw-bottom-0 tw-h-1 tw-cursor-ns-resize tw-w-full tw-left-0\"\n (mousedown)=\"$event.stopPropagation(); mousedownForResize(day, dayIndex, taskIndex)\"\n (mouseup)=\"mouseup($event, dayIndex, taskIndex)\"\n (mousemove)=\"mousemove($event, dayIndex)\"\n ></div>\n </bc-event-button>\n } }\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n</div>\n<ng-template\n #eventButtonTemplate\n let-task\n let-popover=\"popover\"\n let-calendarFields=\"calendarFields\"\n let-onButtonClick=\"onButtonClick\"\n>\n <button\n [style.background]=\"task.event[calendarFields.Color]\"\n class=\"task-title tw-border !tw-border-gray-300 tw-shadow-lg\"\n fd-button\n [compact]=\"true\"\n [fdType]=\"'emphasized'\"\n (click)=\"onButtonClick(popover)\"\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\n >\n @if (task.height > 49) {\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\n }\n </button>\n</ng-template>\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content td{border-right-style:solid!important}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border-bottom:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border-bottom:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "noOuterBorder", "topBorder", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i5.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i5.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i5.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "component", type: i6.DayNumberBoxComponent, selector: "bc-day-number-box", inputs: ["isWeekMode", "isSingleDay", "day", "isPickerMode", "itemInRange", "isActive"], outputs: ["dayClick", "dayMouseDown", "dayMouseUp", "dayMouseMove"] }, { kind: "component", type: i7.EventButtonComponent, selector: "bc-event-button", inputs: ["buttonTemplate", "calendarFields", "task", "rtl", "canDelete", "canEdit", "index", "deviceSize"], outputs: ["deleteEvent", "editEvent", "openPopoverChange"] }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i8.FromToTimePipe, name: "fromToTime" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
203
+ }
204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: CalendarWeekComponent, decorators: [{
205
+ type: Component,
206
+ args: [{ selector: 'bc-calendar-week', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"table-container\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n style=\"overflow-y: hidden; flex-shrink: 0\"\n #tableTop\n>\n <table fd-table class=\"table-top\" fdCompact [attr.daysCount]=\"days.length\">\n <tbody fd-table-body>\n <tr fd-table-row class=\"week-days\">\n <td class=\"td-time\"></td>\n @for (day of days; track day) {\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" fd-table-cell style=\"width: 100%\">\n {{ day.dayName }}\n </td>\n }\n </tr>\n <tr fd-table-row class=\"week-numbers\">\n <td class=\"td-time\"></td>\n @for (day of days; track day) {\n <td fd-table-cell [attr.rtl]=\"rtl\">\n <bc-day-number-box\n [day]=\"day\"\n [isWeekMode]=\"true\"\n [isSingleDay]=\"days.length === 1\"\n (dayClick)=\"onDayClick(day)\"\n ></bc-day-number-box>\n </td>\n }\n </tr>\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray,\n maxRowTasks: maxRowTasks,\n weekIndex: 0\n }\n \"\n ></ng-container>\n </tbody>\n </table>\n</div>\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\n @for (rowTask of weekTasks | keyvalue; track rowTask; let i = $index) {\n <tr fd-table-row class=\"task-row\">\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\n @for (task of weekTasks[i]; track task; let dayIndex = $index) { @if (task.colSpan && dayIndex < days.length) {\n <td\n fd-table-cell\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\n class=\"td-button\"\n [attr.hasevent]=\"!!task.event\"\n >\n @if (task.event && !task.inDay) {\n <bc-event-button\n [task]=\"task\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-button>\n } @else {\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\n }\n </td>\n } }\n </tr>\n }\n</ng-template>\n<div\n class=\"table-container\"\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1; display: inline-table\"\n [style.height.px]=\"inDialog ? containerHeight : null\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody #tbody>\n <tr class=\"tr-time\" style=\"height: 0rem\">\n <td class=\"td-time\" style=\"height: 0rem\"></td>\n <td [colspan]=\"days.length\" style=\"height: 0rem\">\n <div class=\"tasks-wrapper\">\n @for (hour of hours; track hour) {\n <div class=\"row-border\"></div>\n }\n </div>\n </td>\n </tr>\n <tr fd-table-row style=\"height: 100%\">\n <td fd-table-cell class=\"td-time\">\n <div class=\"calc-time\">\n @for (hour of hours; track hour) {\n <div>{{ hour }}</div>\n }\n </div>\n </td>\n @for (day of days; track day; let dayIndex = $index) {\n <td class=\"tw-relative\" fd-table-cell (click)=\"onColumnClick($event, day)\">\n @if (day.addingEventPoint2 !== null && day.addingEventPoint1 !== null) {\n <section\n #sectionRef\n class=\"tw-w-[98%] tw-border tw-border-blue-400 tw-absolute tw-left-1/2 -tw-translate-x-1/2 tw-rounded-md tw-transition-colors\"\n [ngStyle]=\"{\n top: Math.min(day.addingEventPoint2, day.addingEventPoint1) * 25 + 'px',\n height: (Math.abs(day.addingEventPoint1 - day.addingEventPoint2) + 1) * 25 + 'px'\n }\"\n [ngClass]=\"{\n 'tw-bg-blue-400/[.4]': day.isAddingNewEvent,\n 'tw-bg-blue-400': !day.isAddingNewEvent\n }\"\n ></section>\n }\n <div\n style=\"position: absolute; left: 0; right: 0; top: 0; bottom: 0\"\n (mousedown)=\"mousedown($event, dayIndex)\"\n (mouseup)=\"mouseup($event, dayIndex)\"\n (mousemove)=\"mousemove($event, dayIndex)\"\n >\n @for (task of day.tasks; track task; let taskIndex = $index) { @if (task.inDay) {\n <bc-event-button\n (click)=\"setSelectedId(task.event.Id); onEventButton($event)\"\n [style.background]=\"task.event[calendarFields.Color]\"\n [style.top.px]=\"task.top\"\n [style.right]=\"\n rtl\n ? 'calc(' + (task.positionCausedByOverlap / task.countOfOverlaps) * 100 + '%)'\n : null\n \"\n [style.left]=\"\n rtl\n ? null\n : 'calc(100% - ' +\n (task.positionCausedByOverlap / task.countOfOverlaps) * 100 +\n '%)'\n \"\n [style.width]=\"\n 'calc(' + (100 - (task.positionCausedByOverlap / task.countOfOverlaps) * 100) + '%)'\n \"\n [style.height.px]=\"task.height\"\n [style.maxHeight.px]=\"task.height\"\n [style.visibility]=\"task.hidden ? 'hidden' : 'visible'\"\n [style.opacity]=\"task.opacity\"\n [style.zIndex]=\"task.positionCausedByOverlap + (selectedTaskId === task.event.Id ? 0 : 0)\"\n [buttonTemplate]=\"eventButtonTemplate\"\n class=\"task-day\"\n [task]=\"task\"\n [index]=\"taskIndex\"\n [deviceSize]=\"deviceSize\"\n [calendarFields]=\"calendarFields\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n >\n <div\n class=\"tw-absolute tw-bottom-0 tw-h-1 tw-cursor-ns-resize tw-w-full tw-left-0\"\n (mousedown)=\"$event.stopPropagation(); mousedownForResize(day, dayIndex, taskIndex)\"\n (mouseup)=\"mouseup($event, dayIndex, taskIndex)\"\n (mousemove)=\"mousemove($event, dayIndex)\"\n ></div>\n </bc-event-button>\n } }\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n</div>\n<ng-template\n #eventButtonTemplate\n let-task\n let-popover=\"popover\"\n let-calendarFields=\"calendarFields\"\n let-onButtonClick=\"onButtonClick\"\n>\n <button\n [style.background]=\"task.event[calendarFields.Color]\"\n class=\"task-title tw-border !tw-border-gray-300 tw-shadow-lg\"\n fd-button\n [compact]=\"true\"\n [fdType]=\"'emphasized'\"\n (click)=\"onButtonClick(popover)\"\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\n >\n @if (task.height > 49) {\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\n }\n </button>\n</ng-template>\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content td{border-right-style:solid!important}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border-bottom:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border-bottom:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"] }]
207
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.CalendarService }], propDecorators: { tableTopEl: [{
208
+ type: ViewChild,
209
+ args: ['tableTop']
210
+ }], _sectionRef: [{
211
+ type: ViewChild,
212
+ args: ['sectionRef']
213
+ }], weekDays: [{
214
+ type: Input
215
+ }], weekDaysMin: [{
216
+ type: Input
217
+ }], today: [{
218
+ type: Input
219
+ }], containerHeight: [{
220
+ type: Input
221
+ }], calendarFields: [{
222
+ type: Input
223
+ }], rtl: [{
224
+ type: Input
225
+ }], inDialog: [{
226
+ type: Input
227
+ }], deviceSize: [{
228
+ type: Input
229
+ }], moDataList: [{
230
+ type: Input
231
+ }], days: [{
232
+ type: Input
233
+ }], canDelete: [{
234
+ type: Input
235
+ }], canAdd: [{
236
+ type: Input
237
+ }], canEdit: [{
238
+ type: Input
239
+ }], editEvent: [{
240
+ type: Output
241
+ }], deleteEvent: [{
242
+ type: Output
243
+ }], showEvent: [{
244
+ type: Output
245
+ }], rangeSelect: [{
246
+ type: Output
247
+ }], daySelect: [{
248
+ type: Output
249
+ }], dayClick: [{
250
+ type: Output
251
+ }] } });
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItd2Vlay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLXdlZWsvY2FsZW5kYXItd2Vlay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLXdlZWsvY2FsZW5kYXItd2Vlay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGFBQWEsRUFJYixrQkFBa0IsRUFFckIsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7OztBQVM5QixNQUFNLE9BQU8scUJBQXNCLFNBQVEsYUFBYTtJQW9DcEQsWUFBb0IsSUFBdUIsRUFBVSxnQkFBaUM7UUFDbEYsS0FBSyxFQUFFLENBQUM7UUFEUSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUF2QjdFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDcEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN0RCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFDNUQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBc0MsQ0FBQztRQUNyRSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNyQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM3QyxtQkFBYyxHQUFHLEVB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ZCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIENhbGVuZGFyRmllbGRzLFxuICAgIENhbGVuZGFyTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFByZXZlbnREZWZhdWxFdmVudCxcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemVcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXkgfSBmcm9tICcuLi9tb2RlbHMnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdiYy1jYWxlbmRhci13ZWVrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItd2Vlay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXItd2Vlay5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyV2Vla0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgndGFibGVUb3AnKSB0YWJsZVRvcEVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkKCdzZWN0aW9uUmVmJykgX3NlY3Rpb25SZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIEBJbnB1dCgpIHdlZWtEYXlzOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSB3ZWVrRGF5c01pbjogc3RyaW5nW107XG4gICAgQElucHV0KCkgdG9kYXk6IERhdGU7XG4gICAgQElucHV0KCkgY29udGFpbmVySGVpZ2h0OiBudW1iZXI7XG4gICAgQElucHV0KCkgY2FsZW5kYXJGaWVsZHM6IENhbGVuZGFyRmllbGRzO1xuICAgIEBJbnB1dCgpIHJ0bDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbkRpYWxvZzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkZXZpY2VTaXplOiBBYmJyZXZhdGlvbkRldmljZVNpemU7XG4gICAgQElucHV0KCkgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xuICAgIEBJbnB1dCgpIGRheXM6IERheVtdO1xuICAgIEBJbnB1dCgpIGNhbkRlbGV0ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGNhbkFkZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGNhbkVkaXQgPSBmYWxzZTtcbiAgICBAT3V0cHV0KCkgZWRpdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xuICAgIEBPdXRwdXQoKSBkZWxldGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcbiAgICBAT3V0cHV0KCkgc2hvd0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDYWxlbmRhck1ldGFvYmplY3REYXRhTW9kZWw+KCk7XG4gICAgQE91dHB1dCgpIHJhbmdlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXJ0RGF0ZTogRGF0ZTsgZW5kRGF0ZTogRGF0ZSB9PigpO1xuICAgIEBPdXRwdXQoKSBkYXlTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gICAgQE91dHB1dCgpIGRheUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEYXk+KCk7XG4gICAgc2VsZWN0ZWRUYXNrSWQgPSAnJztcbiAgICBzZWxlY3RlZFdlZWtEYXlzOiBzdHJpbmdbXTtcbiAgICBzZWxlY3RlZDogRGF5O1xuICAgIG51bWJlck9mV2VlazogbnVtYmVyW107XG4gICAgZGF5SGVpZ2h0OiBudW1iZXI7XG4gICAgdGFza0hlaWdodCA9IDMwO1xuICAgIG1heFRhc2tDb3VudCA9IDQ7XG4gICAgbWF4Um93VGFza3M6IG51bWJlcltdO1xuICAgIHdlZWtUYXNrc0FycmF5OiB7IFtrZXk6IHN0cmluZ106IFtdIH1bXTtcbiAgICBleHRyYVJvdzogbnVtYmVyW107XG4gICAgd2lkdGg6IGFueTtcbiAgICBob3Vyczogc3RyaW5nW107XG4gICAgTWF0aCA9IE1hdGg7XG4gICAgcHJpdmF0ZSBfaGFzUG9wb3Zlck9wZW5lZDogYm9vbGVhbltdID0gW107XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBfY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMuZGV2aWNlU2l6ZSAmJiAhY2hhbmdlcy5kZXZpY2VTaXplLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVXZWVrRGF5cyhjaGFuZ2VzLmRldmljZVNpemUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5tb0RhdGFMaXN0ICYmICFjaGFuZ2VzLm1vRGF0YUxpc3QuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVEYXlzVGFza3MoY2hhbmdlcy5tb0RhdGFMaXN0LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmRheXMgJiYgIWNoYW5nZXMuZGF5cy5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJlcGFyZURheXNUYXNrcyh0aGlzLm1vRGF0YUxpc3QpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5ob3VycyA9IG5ldyBBcnJheSgyNCkuZmlsbCgwKS5tYXAoKHgsIGkpID0+IGAke2kgPiA5ID8gJycgKyBpIDogJzAnICsgaX06MDBgKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlV2Vla0RheXModGhpcy5kZXZpY2VTaXplKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZURheXNUYXNrcyh0aGlzLm1vRGF0YUxpc3QpO1xuICAgIH1cbiAgICBzZXRTZWxlY3RlZElkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhc2tJZCA9IGlkO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBvbkRheUJveFNlbGVjdChkYXk6IERheSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2FuQWRkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5fZmlyZURheVNlbGVjdChkYXkuZGF0ZSk7XG4gICAgfVxuICAgIG9uT3BlblBvcG92ZXJDaGFuZ2UoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQucHVzaCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQgPSBbXTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQ29sdW1uQ2xpY2soZSwgZGF5OiBEYXkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBvZmZzZXRZIH0gPSBlO1xuICAgICAgICBjb25zdCBob3VyID0gTWF0aC5mbG9vcihvZmZzZXRZIC8gNTApO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigob2Zmc2V0WSAlIDUwKSAvIDE1KSAqIDE1O1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF5LmRhdGUpO1xuICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXIpO1xuICAgICAgICBkYXRlLnNldE1pbnV0ZXMobWludXRlcyk7XG4gICAgICAgIC8vIHRoaXMuX2ZpcmVEYXlTZWxlY3QoZGF0ZSk7XG4gICAgfVxuICAgIG9uRXZlbnRCdXR0b24oZSk6IHZvaWQge1xuICAgICAgICBpZiAoZS5jdXJyZW50VGFyZ2V0Py5sb2NhbE5hbWUgPT09ICdiYy1ldmVudC1idXR0b24nKSB7XG4gICAgICAgICAgICBQcmV2ZW50RGVmYXVsRXZlbnQoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Nb3JlQnV0dG9uKGUsIHBvcG92ZXIpOiB2b2lkIHtcbiAgICAgICAgUHJldmVudERlZmF1bEV2ZW50KGUpO1xuICAgICAgICB0aGlzLl9vcGVuUG9wb3Zlcihwb3BvdmVyKTtcbiAgICB9XG4gICAgb25EYXlDbGljayhkYXk6IERheSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gZGF5O1xuICAgICAgICB0aGlzLmRheUNsaWNrLmVtaXQoZGF5KTtcbiAgICB9XG4gICAgbW91c2Vkb3duKGV2LCBkYXlJbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRheXMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgZC5pc0FkZGluZ05ld0V2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICBkLmFkZGluZ0V2ZW50UG9pbnQxID0gbnVsbDtcbiAgICAgICAgICAgIGQuYWRkaW5nRXZlbnRQb2ludDIgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXlzW2RheUluZGV4XS5pc0FkZGluZ05ld0V2ZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXlzW2RheUluZGV4XS5hZGRpbmdFdmVudFBvaW50MSA9IE1hdGguZmxvb3IoZXYub2Zmc2V0WSAvIDI1KTtcbiAgICAgICAgdGhpcy5kYXlzW2RheUluZGV4XS5hZGRpbmdFdmVudFBvaW50MiA9IG51bGw7XG4gICAgfVxuICAgIG1vdXNlZG93bkZvclJlc2l6ZShkYXksIGRheUluZGV4LCB0YXNrSW5kZXgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMuZGF5c1tkYXlJbmRleF0udGFza3NbdGFza0luZGV4XTtcbiAgICAgICAgdGhpcy5kYXlzW2RheUluZGV4XS50YXNrc1t0YXNrSW5kZXhdLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF5c1tkYXlJbmRleF0uaXNBZGRpbmdOZXdFdmVudCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF5c1tkYXlJbmRleF0uYWRkaW5nRXZlbnRQb2ludDEgPSBNYXRoLmZsb29yKHRhc2sudG9wIC8gMjUpO1xuICAgICAgICB0aGlzLmRheXNbZGF5SW5kZXhdLmFkZGluZ0V2ZW50UG9pbnQyID0gTWF0aC5mbG9vcigodGFzay50b3AgKyB0YXNrLmhlaWdodCkgLyAyNSk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIG1vdXNlbW92ZShldiwgZGF5SW5kZXgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRheXNbZGF5SW5kZXhdLmlzQWRkaW5nTmV3RXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXYudGFyZ2V0LnRhZ05hbWUgIT09ICdESVYnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXlzW2RheUluZGV4XS5hZGRpbmdFdmVudFBvaW50MiA9IE1hdGguZmxvb3IoZXYub2Zmc2V0WSAvIDI1KTtcbiAgICB9XG4gICAgbW91c2V1cChldiwgZGF5SW5kZXgsIHJlcGxhY2luZ1Rhc2tJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF5ID0gdGhpcy5kYXlzW2RheUluZGV4XTtcbiAgICAgICAgaWYgKHJlcGxhY2luZ1Rhc2tJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5kYXlzW2RheUluZGV4XS50YXNrc1tyZXBsYWNpbmdUYXNrSW5kZXhdLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF5c1tkYXlJbmRleF0uaXNBZGRpbmdOZXdFdmVudCA9IHRydWU7XG4gICAgICAgIGRheS5pc0FkZGluZ05ld0V2ZW50ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHsgYWRkaW5nRXZlbnRQb2ludDEsIGFkZGluZ0V2ZW50UG9pbnQyIH0gPSBkYXk7XG4gICAgICAgIGlmIChhZGRpbmdFdmVudFBvaW50MSAhPT0gbnVsbCAmJiBhZGRpbmdFdmVudFBvaW50MiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVG90YWxNaW51dGVzID0gTWF0aC5taW4oYWRkaW5nRXZlbnRQb2ludDEsIGFkZGluZ0V2ZW50UG9pbnQyKSAqIDMwO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlSG91ciA9IE1hdGguZmxvb3Ioc3RhcnREYXRlVG90YWxNaW51dGVzIC8gNjApO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlTWludXRlcyA9IE1hdGguZmxvb3Ioc3RhcnREYXRlVG90YWxNaW51dGVzICUgNjApO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZGF5LmRhdGUpO1xuICAgICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKHN0YXJ0RGF0ZUhvdXIpO1xuICAgICAgICAgICAgc3RhcnREYXRlLnNldE1pbnV0ZXMoc3RhcnREYXRlTWludXRlcyk7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlVG90YWxNaW51dGVzID0gKE1hdGgubWF4KGFkZGluZ0V2ZW50UG9pbnQxLCBhZGRpbmdFdmVudFBvaW50MikgKyAxKSAqIDMwO1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZUhvdXIgPSBNYXRoLmZsb29yKGVuZERhdGVUb3RhbE1pbnV0ZXMgLyA2MCk7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlTWludXRlcyA9IE1hdGguZmxvb3IoZW5kRGF0ZVRvdGFsTWludXRlcyAlIDYwKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShkYXkuZGF0ZSk7XG4gICAgICAgICAgICBlbmREYXRlLnNldEhvdXJzKGVuZERhdGVIb3VyKTtcbiAgICAgICAgICAgIGVuZERhdGUuc2V0TWludXRlcyhlbmREYXRlTWludXRlcyk7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdCh7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9KTtcbiAgICAgICAgICAgIGRheS5hZGRpbmdFdmVudFBvaW50MSA9IG51bGw7XG4gICAgICAgICAgICBkYXkuYWRkaW5nRXZlbnRQb2ludDIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fc2VjdGlvblJlZj8ubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIF9maXJlRGF5U2VsZWN0KGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRheVNlbGVjdC5lbWl0KGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX3JhbmdlU2VsZWN0KHsgc3RhcnREYXRlLCBlbmREYXRlIH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2hhc1BvcG92ZXJPcGVuZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnJhbmdlU2VsZWN0LmVtaXQoeyBzdGFydERhdGUsIGVuZERhdGUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfb3BlblBvcG92ZXIocG9wb3ZlcjogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChwb3BvdmVyLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5faGFzUG9wb3Zlck9wZW5lZC5wdXNoKHBvcG92ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faGFzUG9wb3Zlck9wZW5lZC5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIHByZXBhcmVXZWVrRGF5cyhkZXZpY2VTaXplOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKGRldmljZVNpemUgIT09ICdzJyAmJiBkZXZpY2VTaXplICE9PSAnbScpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXZWVrRGF5cyA9IHRoaXMud2Vla0RheXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2Vla0RheXMgPSB0aGlzLndlZWtEYXlzTWluO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX3ByZXBhcmVEYXlzVGFza3MoY2FsZW5kYXJUYXNrcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxlbmRhckZpZWxkcyA9IHRoaXMuY2FsZW5kYXJGaWVsZHM7XG4gICAgICAgIC8vIFNvcnQgYWxsIFRhc2tzXG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2Uuc29ydFRhc2tzKGNhbGVuZGFyVGFza3MsIGNhbGVuZGFyRmllbGRzKTtcbiAgICAgICAgY29uc3QgdGFza0hlaWdodCA9IDUwO1xuICAgICAgICB0aGlzLmRheXMuZm9yRWFjaCgoZGF5KSA9PiAoZGF5LnRhc2tzID0gW10pKTtcbiAgICAgICAgY29uc3Qgd2Vla1Rhc2tzQXJyYXk6IHsgW2tleTogc3RyaW5nXTogYW55W10gfVtdID0gW107XG4gICAgICAgIGNvbnN0IGRheXMgPSB0aGlzLmRheXM7XG4gICAgICAgIGNvbnN0IHdlZWsgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2UuY3JlYXRlV2Vla1Rhc2soZGF5cywgbW9EYXRhTGlzdCwgY2FsZW5kYXJGaWVsZHMsIHRhc2tIZWlnaHQpO1xuICAgICAgICB3ZWVrVGFza3NBcnJheS5wdXNoKHdlZWspO1xuICAgICAgICAvLyDYqNmHINin2LLYp9uMINmH2LEg2LHYr9uM2YEg2KrYs9qpINio2KfbjNivINiq2LnYr9in2K8gNyDYs9iq2YjZhiDYp9i22KfZgdmHINqv2LHYr9ivINmIINio2LHYp9uMINiz2KrZiNmG24wg2qnZhyDYqtiz2qnbjCDZhtiv2KfYsdivINuM2qkg2KzYp9uMINiu2KfZhNuMIGNvbHNwYW4gMSDZhduM2q/YsNin2LHbjNmFXG4gICAgICAgIHdlZWtUYXNrc0FycmF5LmZvckVhY2goKHdlZWtUYXNrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UuZmlsbFdlZWsod2Vla1Rhc2ssIGRheXMubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gW107XG4gICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh3ZWVrVGFza3NBcnJheSkuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHdlZWspLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IGVsZW1lbnQuc29tZSgoYykgPT4gYy5jb2xTcGFuID4gMSB8fCAoYy5jb2xTcGFuID09PSAxICYmICFjLmluRGF5ICYmIGMuZXZlbnQpKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFza3NbY291bnRlci50b1N0cmluZygpXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2Vla1Rhc2tzQXJyYXkgPSB0YXNrcztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIlxuICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cImluRGlhbG9nID8gJ3Njcm9sbCcgOiAnaGlkZGVuJ1wiXG4gICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW47IGZsZXgtc2hyaW5rOiAwXCJcbiAgICAjdGFibGVUb3Bcbj5cbiAgICA8dGFibGUgZmQtdGFibGUgY2xhc3M9XCJ0YWJsZS10b3BcIiBmZENvbXBhY3QgW2F0dHIuZGF5c0NvdW50XT1cImRheXMubGVuZ3RoXCI+XG4gICAgICAgIDx0Ym9keSBmZC10YWJsZS1ib2R5PlxuICAgICAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRkLXRpbWVcIj48L3RkPlxuICAgICAgICAgICAgICAgIEBmb3IgKGRheSBvZiBkYXlzOyB0cmFjayBkYXkpIHtcbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIucnRsXT1cInJ0bFwiIGNsYXNzPVwid2Vla2RheS1oZWFkZXJcIiBmZC10YWJsZS1jZWxsIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZGF5LmRheU5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93IGNsYXNzPVwid2Vlay1udW1iZXJzXCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGQtdGltZVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgQGZvciAoZGF5IG9mIGRheXM7IHRyYWNrIGRheSkge1xuICAgICAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIFthdHRyLnJ0bF09XCJydGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJjLWRheS1udW1iZXItYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF5XT1cImRheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNXZWVrTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1NpbmdsZURheV09XCJkYXlzLmxlbmd0aCA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF5Q2xpY2spPVwib25EYXlDbGljayhkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYmMtZGF5LW51bWJlci1ib3g+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckRheVRhc2tzO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHdlZWtUYXNrc0FycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4Um93VGFza3M6IG1heFJvd1Rhc2tzLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2Vla0luZGV4OiAwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyRGF5VGFza3MgbGV0LXdlZWtUYXNrcyBsZXQtbWF4Um93VGFza3M9XCJtYXhSb3dUYXNrc1wiIGxldC13ZWVrSW5kZXg9XCJ3ZWVrSW5kZXhcIj5cbiAgICBAZm9yIChyb3dUYXNrIG9mIHdlZWtUYXNrcyB8IGtleXZhbHVlOyB0cmFjayByb3dUYXNrOyBsZXQgaSA9ICRpbmRleCkge1xuICAgIDx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJ0YXNrLXJvd1wiPlxuICAgICAgICA8dGQgZmQtdGFibGUtY2VsbCBjbGFzcz1cImZkLXRpbWVcIiBzdHlsZT1cImJvcmRlcjogbm9uZVwiPjwvdGQ+XG4gICAgICAgIEBmb3IgKHRhc2sgb2Ygd2Vla1Rhc2tzW2ldOyB0cmFjayB0YXNrOyBsZXQgZGF5SW5kZXggPSAkaW5kZXgpIHsgQGlmICh0YXNrLmNvbFNwYW4gJiYgZGF5SW5kZXggPCBkYXlzLmxlbmd0aCkge1xuICAgICAgICA8dGRcbiAgICAgICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwidGFzay5jb2xTcGFuID4gZGF5cy5sZW5ndGggPyBkYXlzLmxlbmd0aCA6IHRhc2suY29sU3BhblwiXG4gICAgICAgICAgICBjbGFzcz1cInRkLWJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5oYXNldmVudF09XCIhIXRhc2suZXZlbnRcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKHRhc2suZXZlbnQgJiYgIXRhc2suaW5EYXkpIHtcbiAgICAgICAgICAgIDxiYy1ldmVudC1idXR0b25cbiAgICAgICAgICAgICAgICBbdGFza109XCJ0YXNrXCJcbiAgICAgICAgICAgICAgICBbcnRsXT1cInJ0bFwiXG4gICAgICAgICAgICAgICAgW2NhbkRlbGV0ZV09XCJjYW5EZWxldGVcIlxuICAgICAgICAgICAgICAgIFtjYW5FZGl0XT1cImNhbkVkaXRcIlxuICAgICAgICAgICAgICAgIFtjYWxlbmRhckZpZWxkc109XCJjYWxlbmRhckZpZWxkc1wiXG4gICAgICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgICAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZUV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGVkaXRFdmVudCk9XCJlZGl0RXZlbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2JjLWV2ZW50LWJ1dHRvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIiBbYXR0ci5uZXdEYXldPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9IH1cbiAgICA8L3RyPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48ZGl2XG4gICAgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIlxuICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuOyBvdmVyZmxvdy14OiBhdXRvOyBmbGV4LWdyb3c6IDE7IGRpc3BsYXk6IGlubGluZS10YWJsZVwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJpbkRpYWxvZyA/IGNvbnRhaW5lckhlaWdodCA6IG51bGxcIlxuICAgIFtzdHlsZS5vdmVyZmxvdy15XT1cImluRGlhbG9nID8gJ3Njcm9sbCcgOiAnaGlkZGVuJ1wiXG4+XG4gICAgPHRhYmxlIGZkLXRhYmxlLWJvZHkgY2xhc3M9XCJ0YWJsZS1jb250ZW50XCIgW2NvbXBhY3RdPVwidHJ1ZVwiPlxuICAgICAgICA8dGJvZHkgI3Rib2R5PlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidHItdGltZVwiIHN0eWxlPVwiaGVpZ2h0OiAwcmVtXCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGQtdGltZVwiIHN0eWxlPVwiaGVpZ2h0OiAwcmVtXCI+PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgW2NvbHNwYW5dPVwiZGF5cy5sZW5ndGhcIiBzdHlsZT1cImhlaWdodDogMHJlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFza3Mtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoaG91ciBvZiBob3VyczsgdHJhY2sgaG91cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1ib3JkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgZmQtdGFibGUtcm93IHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCI+XG4gICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJ0ZC10aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxjLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGhvdXIgb2YgaG91cnM7IHRyYWNrIGhvdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgaG91ciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIEBmb3IgKGRheSBvZiBkYXlzOyB0cmFjayBkYXk7IGxldCBkYXlJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInR3LXJlbGF0aXZlXCIgZmQtdGFibGUtY2VsbCAoY2xpY2spPVwib25Db2x1bW5DbGljaygkZXZlbnQsIGRheSlcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChkYXkuYWRkaW5nRXZlbnRQb2ludDIgIT09IG51bGwgJiYgZGF5LmFkZGluZ0V2ZW50UG9pbnQxICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAjc2VjdGlvblJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0dy13LVs5OCVdIHR3LWJvcmRlciB0dy1ib3JkZXItYmx1ZS00MDAgdHctYWJzb2x1dGUgdHctbGVmdC0xLzIgLXR3LXRyYW5zbGF0ZS14LTEvMiB0dy1yb3VuZGVkLW1kIHR3LXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IE1hdGgubWluKGRheS5hZGRpbmdFdmVudFBvaW50MiwgZGF5LmFkZGluZ0V2ZW50UG9pbnQxKSAqIDI1ICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IChNYXRoLmFicyhkYXkuYWRkaW5nRXZlbnRQb2ludDEgLSBkYXkuYWRkaW5nRXZlbnRQb2ludDIpICsgMSkgKiAyNSArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0dy1iZy1ibHVlLTQwMC9bLjRdJzogZGF5LmlzQWRkaW5nTmV3RXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R3LWJnLWJsdWUtNDAwJzogIWRheS5pc0FkZGluZ05ld0V2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwibW91c2Vkb3duKCRldmVudCwgZGF5SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cIm1vdXNldXAoJGV2ZW50LCBkYXlJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbW92ZSk9XCJtb3VzZW1vdmUoJGV2ZW50LCBkYXlJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yICh0YXNrIG9mIGRheS50YXNrczsgdHJhY2sgdGFzazsgbGV0IHRhc2tJbmRleCA9ICRpbmRleCkgeyBAaWYgKHRhc2suaW5EYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiYy1ldmVudC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWRJZCh0YXNrLmV2ZW50LklkKTsgb25FdmVudEJ1dHRvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0YXNrLmV2ZW50W2NhbGVuZGFyRmllbGRzLkNvbG9yXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJ0YXNrLnRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJpZ2h0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArICh0YXNrLnBvc2l0aW9uQ2F1c2VkQnlPdmVybGFwIC8gdGFzay5jb3VudE9mT3ZlcmxhcHMpICogMTAwICsgJyUpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2NhbGMoMTAwJSAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFzay5wb3NpdGlvbkNhdXNlZEJ5T3ZlcmxhcCAvIHRhc2suY291bnRPZk92ZXJsYXBzKSAqIDEwMCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbGMoJyArICgxMDAgLSAodGFzay5wb3NpdGlvbkNhdXNlZEJ5T3ZlcmxhcCAvIHRhc2suY291bnRPZk92ZXJsYXBzKSAqIDEwMCkgKyAnJSknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInRhc2suaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInRhc2suaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJ0YXNrLmhpZGRlbiA/ICdoaWRkZW4nIDogJ3Zpc2libGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUub3BhY2l0eV09XCJ0YXNrLm9wYWNpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS56SW5kZXhdPVwidGFzay5wb3NpdGlvbkNhdXNlZEJ5T3ZlcmxhcCArIChzZWxlY3RlZFRhc2tJZCA9PT0gdGFzay5ldmVudC5JZCA/IDAgOiAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblRlbXBsYXRlXT1cImV2ZW50QnV0dG9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFzay1kYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXNrXT1cInRhc2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJ0YXNrSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxlbmRhckZpZWxkc109XCJjYWxlbmRhckZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkRlbGV0ZV09XCJjYW5EZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5FZGl0XT1cImNhbkVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVFdmVudCk9XCJkZWxldGVFdmVudC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0RXZlbnQpPVwiZWRpdEV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5Qb3BvdmVyQ2hhbmdlKT1cIm9uT3BlblBvcG92ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR3LWFic29sdXRlIHR3LWJvdHRvbS0wIHR3LWgtMSB0dy1jdXJzb3ItbnMtcmVzaXplIHR3LXctZnVsbCB0dy1sZWZ0LTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgbW91c2Vkb3duRm9yUmVzaXplKGRheSwgZGF5SW5kZXgsIHRhc2tJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2V1cCk9XCJtb3VzZXVwKCRldmVudCwgZGF5SW5kZXgsIHRhc2tJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm1vdXNlbW92ZSgkZXZlbnQsIGRheUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9iYy1ldmVudC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZVxuICAgICNldmVudEJ1dHRvblRlbXBsYXRlXG4gICAgbGV0LXRhc2tcbiAgICBsZXQtcG9wb3Zlcj1cInBvcG92ZXJcIlxuICAgIGxldC1jYWxlbmRhckZpZWxkcz1cImNhbGVuZGFyRmllbGRzXCJcbiAgICBsZXQtb25CdXR0b25DbGljaz1cIm9uQnV0dG9uQ2xpY2tcIlxuPlxuICAgIDxidXR0b25cbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGFzay5ldmVudFtjYWxlbmRhckZpZWxkcy5Db2xvcl1cIlxuICAgICAgICBjbGFzcz1cInRhc2stdGl0bGUgdHctYm9yZGVyICF0dy1ib3JkZXItZ3JheS0zMDAgdHctc2hhZG93LWxnXCJcbiAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxuICAgICAgICBbZmRUeXBlXT1cIidlbXBoYXNpemVkJ1wiXG4gICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKHBvcG92ZXIpXCJcbiAgICAgICAgW2xhYmVsXT1cInRhc2suaGVpZ2h0ID4gNDkgPyAnJyA6IHRhc2suZXZlbnRbY2FsZW5kYXJGaWVsZHMuVGl0bGVdICsgJyAnICsgKHRhc2sgfCBmcm9tVG9UaW1lKVwiXG4gICAgPlxuICAgICAgICBAaWYgKHRhc2suaGVpZ2h0ID4gNDkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiPnt7IHRhc2suZXZlbnRbY2FsZW5kYXJGaWVsZHMuVGl0bGVdIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCI+e3sgdGFzayB8IGZyb21Ub1RpbWUgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,4 +1,4 @@
1
- export function getPadedTime(value) {
2
- return String(value.toString().padStart(2, '0'));
3
- }
1
+ export function getPadedTime(value) {
2
+ return String(value.toString().padStart(2, '0'));
3
+ }
4
4
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtY2FsZW5kYXIvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFLO0lBQzlCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRQYWRlZFRpbWUodmFsdWUpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykpO1xyXG59XHJcbiJdfQ==