@biit-solutions/wizardry-theme 1.22.15 → 1.22.16
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/esm2020/button/biit-action-button/biit-action-button.component.mjs +2 -2
- package/esm2020/button/biit-icon-button/biit-icon-button.component.mjs +3 -3
- package/esm2020/charts/bar-chart/bar-chart.component.mjs +2 -2
- package/esm2020/charts/heatmap-chart/heatmap-chart.component.mjs +2 -2
- package/esm2020/charts/line-chart/line-chart.component.mjs +4 -4
- package/esm2020/charts/meta-view-chart/components/meta-board/meta-board.component.mjs +3 -3
- package/esm2020/charts/meta-view-chart/components/meta-sorter/meta-filter.component.mjs +2 -2
- package/esm2020/charts/pie-chart/pie-chart.component.mjs +2 -2
- package/esm2020/charts/radial-chart/radial-chart.component.mjs +4 -4
- package/esm2020/charts/timeline-viewer-chart/timeline-viewer-chart.component.mjs +2 -2
- package/esm2020/inputs/biit-datepicker/biit-datepicker.component.mjs +3 -3
- package/esm2020/inputs/biit-dropdown/biit-dropdown.component.mjs +3 -3
- package/esm2020/inputs/biit-input-text/biit-input-text.component.mjs +3 -3
- package/esm2020/inputs/biit-multiselect/biit-multiselect.component.mjs +3 -3
- package/esm2020/inputs/biit-radio-button/biit-radio-button.component.mjs +3 -3
- package/esm2020/inputs/biit-slider/biit-slider.component.mjs +4 -4
- package/esm2020/inputs/biit-slider-option/biit-slider-option.component.mjs +5 -5
- package/esm2020/inputs/biit-slider-option-vertical/biit-slider-option-vertical.component.mjs +3 -3
- package/esm2020/inputs/biit-slider-range/biit-slider-range.component.mjs +4 -4
- package/esm2020/inputs/biit-textarea/biit-textarea.component.mjs +2 -2
- package/esm2020/inputs/biit-toggle-group/biit-toggle-group.component.mjs +3 -3
- package/esm2020/login/biit-login/biit-login.component.mjs +2 -2
- package/esm2020/table/biit-datatable/biit-datatable.component.mjs +2 -2
- package/esm2020/table/biit-paginator/biit-paginator.component.mjs +3 -3
- package/fesm2015/biit-solutions-wizardry-theme-button.mjs +4 -4
- package/fesm2015/biit-solutions-wizardry-theme-button.mjs.map +1 -1
- package/fesm2015/biit-solutions-wizardry-theme-charts.mjs +14 -14
- package/fesm2015/biit-solutions-wizardry-theme-charts.mjs.map +1 -1
- package/fesm2015/biit-solutions-wizardry-theme-inputs.mjs +26 -26
- package/fesm2015/biit-solutions-wizardry-theme-inputs.mjs.map +1 -1
- package/fesm2015/biit-solutions-wizardry-theme-login.mjs +2 -2
- package/fesm2015/biit-solutions-wizardry-theme-login.mjs.map +1 -1
- package/fesm2015/biit-solutions-wizardry-theme-table.mjs +4 -4
- package/fesm2015/biit-solutions-wizardry-theme-table.mjs.map +1 -1
- package/fesm2020/biit-solutions-wizardry-theme-button.mjs +4 -4
- package/fesm2020/biit-solutions-wizardry-theme-button.mjs.map +1 -1
- package/fesm2020/biit-solutions-wizardry-theme-charts.mjs +14 -14
- package/fesm2020/biit-solutions-wizardry-theme-charts.mjs.map +1 -1
- package/fesm2020/biit-solutions-wizardry-theme-inputs.mjs +26 -26
- package/fesm2020/biit-solutions-wizardry-theme-inputs.mjs.map +1 -1
- package/fesm2020/biit-solutions-wizardry-theme-login.mjs +2 -2
- package/fesm2020/biit-solutions-wizardry-theme-login.mjs.map +1 -1
- package/fesm2020/biit-solutions-wizardry-theme-table.mjs +4 -4
- package/fesm2020/biit-solutions-wizardry-theme-table.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -201,7 +201,7 @@ BiitDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
|
|
|
201
201
|
provide: TRANSLOCO_SCOPE,
|
|
202
202
|
useValue: { scope: 'wizardry-theme/inputs', alias: "inputs" }
|
|
203
203
|
}
|
|
204
|
-
], ngImport: i0, template: "<ng-container *ngIf=\"calendarMode; then calendarModeTemplate else datePickerTemplate\"></ng-container>\n\n<ng-template #datePickerTemplate>\n <div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" >\n <div class=\"input-container\">\n <input class=\"input-object\"\n [ngModel]=\"value && !timePicker ? (value | date: 'yyyy-MM-dd') :\n value && timePicker ? (value | date: 'yyyy-MM-dd\\THH:mm') :\n undefined\"\n (ngModelChange)=\"onModelChange(parseISO($event))\"\n [type]=\"timePicker ? 'datetime-local' : 'date'\" required\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n [min]=\"min ? (min | date: 'yyyy-MM-dd') : undefined\"\n [max]=\"max ? (max | date: 'yyyy-MM-dd') : undefined\"\n [disabled]=\"disabled\"\n >\n <div class=\"input-show-icon-container\"\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n (click)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n (keydown.enter)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n tabindex=\"0\">\n <biit-icon [name]=\"'calendar'\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: dropdownOpen ? '#F20D5E' : '#262626'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder input-filled\">\n {{_placeholder}}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || (value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max)\"\n name=\"exclamation\"\n class=\"input-error-icon\"\n [pathStyle]=\"{fill:'#A1093F'}\"\n ></biit-icon>\n <div *ngIf=\"description\" class=\"input-description\">\n <a>\n {{description}}\n </a>\n </div>\n\n <div style=\"position: relative; height: 0;\">\n <div class=\"popup\"\n [class.dropdown-open]=\"dropdownOpen\"\n [style.height]=\"!monthSelector && timePicker ? '29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n <button biit-button tertiary\n (click)=\"closeDropdown()\">\n {{'inputs.done' | transloco}}\n </button>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"bottom-line\"></div>\n <div *ngIf=\"error\" class=\"input-error-msg\">\n <a>\n {{error}}\n </a>\n </div>\n <div *ngIf=\"value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max\" class=\"input-error-msg\">\n <a>\n {{'inputs.date-error' | transloco}}\n </a>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #calendarModeTemplate>\n <div class=\"popup calendar-mode\"\n [style.height]=\"!monthSelector && timePicker ? 'calc(29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n </div>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box}.popup{display:block;width:17.5em;border:3px solid var(--component-color);background:white;padding:.45em;-webkit-user-select:none;user-select:none;opacity:0;pointer-events:none;transform-origin:top;margin-top:-3px;transform:translateY(var(--origin));transition:opacity .5s ease,transform .5s ease}.popup:not(.calendar-mode){position:absolute;z-index:2}.popup.calendar-mode{position:relative;opacity:1;pointer-events:all;margin-top:0}.popup.dropdown-open{opacity:1;pointer-events:auto;transform:translate(0)}.popup.disabled{visibility:hidden}.popup .month-view{display:flex;flex-direction:column;justify-content:space-between}.popup .month-view .month-selector{display:flex;justify-content:space-between;align-items:center}.popup .month-view .month-selector .month-label{width:12em}.popup .month-view .month-selector .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .month-selector .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .month-view .month-selector ::ng-deep button .icon-button-svg{width:.8em;height:.8em}.popup .month-view .grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}.popup .month-view .grid .grid-element{display:flex;align-items:center;justify-content:center;height:2.1em;width:2.1em}.popup .month-view .grid .grid-element.header{font-weight:800;cursor:default;text-transform:capitalize}.popup .month-view .grid .grid-element.day{cursor:pointer;background:none;color:inherit;border:none;padding:0;font:inherit;outline:inherit}.popup .month-view .grid .grid-element.day.outer-day{color:var(--main-background-color)}.popup .month-view .grid .grid-element.day.outer-day:hover,.popup .month-view .grid .grid-element.day.outer-day:focus-visible{color:var(--component-color)}.popup .month-view .grid .grid-element.day.is-today{border:3px solid var(--component-color)}.popup .month-view .grid .grid-element.day:hover,.popup .month-view .grid .grid-element.day:focus-visible{background:var(--main-background-color)}.popup .month-view .grid .grid-element.day:active{color:var(--main-color)}.popup .month-view .grid .grid-element.day.selected{background:var(--main-color)}.popup .month-view .grid .grid-element.day.selected:hover,.popup .month-view .grid .grid-element.day.selected:focus-visible{background:var(--main-color);color:#fff}.popup .month-view .grid .grid-element.day.disabled{color:var(--error-color);pointer-events:none}.popup .month-view .grid .grid-element.day.disabled.outer-day{color:var(--selected-color)}.popup .month-view .buttons{display:flex;justify-content:space-between;padding:.3em .85em}.popup .month-view .buttons .today-btn ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .buttons .today-btn ::ng-deep .button-base .bar{background:var(--component-color)}.popup .time-picker{width:17.5em;margin-left:calc(-.45em - 3px);box-sizing:border-box;border-top:3px solid var(--component-color);margin-top:.45em;margin-bottom:-.45em}.popup .year-view{height:100%;display:flex;flex-direction:column;justify-content:space-between}.popup .year-view .month-label{width:100%;height:2.1em;align-items:center}.popup .year-view .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .year-view .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .year-view .buttons{display:flex;justify-content:flex-end;padding:.3em .85em}.popup .selector{display:flex;justify-content:center}.popup .selector .column{display:block}.popup .selector .column .item{width:100%;height:1.5em;display:flex;justify-content:center;align-items:center;cursor:pointer}.popup .selector .column .item.primary{height:1.8em;color:var(--component-color);font-weight:500}.popup .selector .column .item.secondary{color:var(--secondary-color)}.popup .selector .column .item.tertiary{color:var(--main-background-color)}.popup .selector .column .item.arrow{display:inline-flex;width:100%;height:1.8em}.popup .selector .column .item.arrow .up{height:.7em;rotate:-90deg}.popup .selector .column .item.arrow .down{height:.7em;rotate:90deg}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object,.biit-input.disabled .input-show-icon-container{background:var(--main-background-color)}.biit-input.readonly{pointer-events:none}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400}.input-object:focus,.input-object:hover{outline:none;background:var(--main-background-color)}.input-object:focus~.input-show-icon-container,.input-object:hover~.input-show-icon-container{background:var(--main-background-color)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}@-moz-document url-prefix(){.input-object{padding-top:.55em!important}}input[type=date]::-webkit-inner-spin-button,input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.7em;color:var(--error-color);padding-top:.2em;padding-bottom:.15em;min-height:1.05em}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:white}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:var(--main-background-color);border:none;outline:none}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:#262626}.onwards{--origin: 1em}.downwards{--origin: -1em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.BiitIconButtonComponent, selector: "button[biit-icon]", inputs: ["icon", "checked"] }, { kind: "component", type: i4.BiitButtonComponent, selector: "button[biit-button]" }, { kind: "directive", type: i4.BiitButtonTertiaryDirective, selector: "[tertiary]" }, { kind: "component", type: i5.BiitIconComponent, selector: "biit-icon", inputs: ["name", "svgStyle", "pathStyle"] }, { kind: "pipe", type: i2.SlicePipe, name: "slice" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "pipe", type: i1.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i6.TranslocoDatePipe, name: "translocoDate" }, { kind: "pipe", type: i7.CalendarDatePipe, name: "calendarDate" }, { kind: "pipe", type: i8.OutOfMonthPipe, name: "outOfMonth" }, { kind: "pipe", type: i9.IsTodayPipe, name: "isToday" }, { kind: "pipe", type: i10.IsSameDayPipe, name: "isSameDay" }, { kind: "pipe", type: i11.IsDisabledPipe, name: "isDisabled" }] });
|
|
204
|
+
], ngImport: i0, template: "<ng-container *ngIf=\"calendarMode; then calendarModeTemplate else datePickerTemplate\"></ng-container>\n\n<ng-template #datePickerTemplate>\n <div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" >\n <div class=\"input-container\">\n <input class=\"input-object\"\n [ngModel]=\"value && !timePicker ? (value | date: 'yyyy-MM-dd') :\n value && timePicker ? (value | date: 'yyyy-MM-dd\\THH:mm') :\n undefined\"\n (ngModelChange)=\"onModelChange(parseISO($event))\"\n [type]=\"timePicker ? 'datetime-local' : 'date'\" required\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n [min]=\"min ? (min | date: 'yyyy-MM-dd') : undefined\"\n [max]=\"max ? (max | date: 'yyyy-MM-dd') : undefined\"\n [disabled]=\"disabled\"\n >\n <div class=\"input-show-icon-container\"\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n (click)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n (keydown.enter)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n tabindex=\"0\">\n <biit-icon [name]=\"'calendar'\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: dropdownOpen ? 'var(--main-color)' : 'var(--chart-component-color)'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder input-filled\">\n {{_placeholder}}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || (value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max)\"\n name=\"exclamation\"\n class=\"input-error-icon\"\n [pathStyle]=\"{fill:'#A1093F'}\"\n ></biit-icon>\n <div *ngIf=\"description\" class=\"input-description\">\n <a>\n {{description}}\n </a>\n </div>\n\n <div style=\"position: relative; height: 0;\">\n <div class=\"popup\"\n [class.dropdown-open]=\"dropdownOpen\"\n [style.height]=\"!monthSelector && timePicker ? '29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n <button biit-button tertiary\n (click)=\"closeDropdown()\">\n {{'inputs.done' | transloco}}\n </button>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"bottom-line\"></div>\n <div *ngIf=\"error\" class=\"input-error-msg\">\n <a>\n {{error}}\n </a>\n </div>\n <div *ngIf=\"value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max\" class=\"input-error-msg\">\n <a>\n {{'inputs.date-error' | transloco}}\n </a>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #calendarModeTemplate>\n <div class=\"popup calendar-mode\"\n [style.height]=\"!monthSelector && timePicker ? 'calc(29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n </div>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box}.popup{display:block;width:17.5em;border:3px solid var(--component-color);background:white;padding:.45em;-webkit-user-select:none;user-select:none;opacity:0;pointer-events:none;transform-origin:top;margin-top:-3px;transform:translateY(var(--origin));transition:opacity .5s ease,transform .5s ease}.popup:not(.calendar-mode){position:absolute;z-index:2}.popup.calendar-mode{position:relative;opacity:1;pointer-events:all;margin-top:0}.popup.dropdown-open{opacity:1;pointer-events:auto;transform:translate(0)}.popup.disabled{visibility:hidden}.popup .month-view{display:flex;flex-direction:column;justify-content:space-between}.popup .month-view .month-selector{display:flex;justify-content:space-between;align-items:center}.popup .month-view .month-selector .month-label{width:12em}.popup .month-view .month-selector .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .month-selector .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .month-view .month-selector ::ng-deep button .icon-button-svg{width:.8em;height:.8em}.popup .month-view .grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}.popup .month-view .grid .grid-element{display:flex;align-items:center;justify-content:center;height:2.1em;width:2.1em}.popup .month-view .grid .grid-element.header{font-weight:800;cursor:default;text-transform:capitalize}.popup .month-view .grid .grid-element.day{cursor:pointer;background:none;color:inherit;border:none;padding:0;font:inherit;outline:inherit}.popup .month-view .grid .grid-element.day.outer-day{color:var(--main-background-color)}.popup .month-view .grid .grid-element.day.outer-day:hover,.popup .month-view .grid .grid-element.day.outer-day:focus-visible{color:var(--component-color)}.popup .month-view .grid .grid-element.day.is-today{border:3px solid var(--component-color)}.popup .month-view .grid .grid-element.day:hover,.popup .month-view .grid .grid-element.day:focus-visible{background:var(--main-background-color)}.popup .month-view .grid .grid-element.day:active{color:var(--main-color)}.popup .month-view .grid .grid-element.day.selected{background:var(--main-color)}.popup .month-view .grid .grid-element.day.selected:hover,.popup .month-view .grid .grid-element.day.selected:focus-visible{background:var(--main-color);color:#fff}.popup .month-view .grid .grid-element.day.disabled{color:var(--error-color);pointer-events:none}.popup .month-view .grid .grid-element.day.disabled.outer-day{color:var(--selected-color)}.popup .month-view .buttons{display:flex;justify-content:space-between;padding:.3em .85em}.popup .month-view .buttons .today-btn ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .buttons .today-btn ::ng-deep .button-base .bar{background:var(--component-color)}.popup .time-picker{width:17.5em;margin-left:calc(-.45em - 3px);box-sizing:border-box;border-top:3px solid var(--component-color);margin-top:.45em;margin-bottom:-.45em}.popup .year-view{height:100%;display:flex;flex-direction:column;justify-content:space-between}.popup .year-view .month-label{width:100%;height:2.1em;align-items:center}.popup .year-view .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .year-view .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .year-view .buttons{display:flex;justify-content:flex-end;padding:.3em .85em}.popup .selector{display:flex;justify-content:center}.popup .selector .column{display:block}.popup .selector .column .item{width:100%;height:1.5em;display:flex;justify-content:center;align-items:center;cursor:pointer}.popup .selector .column .item.primary{height:1.8em;color:var(--component-color);font-weight:500}.popup .selector .column .item.secondary{color:var(--secondary-color)}.popup .selector .column .item.tertiary{color:var(--main-background-color)}.popup .selector .column .item.arrow{display:inline-flex;width:100%;height:1.8em}.popup .selector .column .item.arrow .up{height:.7em;rotate:-90deg}.popup .selector .column .item.arrow .down{height:.7em;rotate:90deg}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object,.biit-input.disabled .input-show-icon-container{background:var(--main-background-color)}.biit-input.readonly{pointer-events:none}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400}.input-object:focus,.input-object:hover{outline:none;background:var(--main-background-color)}.input-object:focus~.input-show-icon-container,.input-object:hover~.input-show-icon-container{background:var(--main-background-color)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}@-moz-document url-prefix(){.input-object{padding-top:.55em!important}}input[type=date]::-webkit-inner-spin-button,input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.7em;color:var(--error-color);padding-top:.2em;padding-bottom:.15em;min-height:1.05em}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:white}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:var(--main-background-color);border:none;outline:none}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:var(--chart-component-color)}.onwards{--origin: 1em}.downwards{--origin: -1em}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.BiitIconButtonComponent, selector: "button[biit-icon]", inputs: ["icon", "checked"] }, { kind: "component", type: i4.BiitButtonComponent, selector: "button[biit-button]" }, { kind: "directive", type: i4.BiitButtonTertiaryDirective, selector: "[tertiary]" }, { kind: "component", type: i5.BiitIconComponent, selector: "biit-icon", inputs: ["name", "svgStyle", "pathStyle"] }, { kind: "pipe", type: i2.SlicePipe, name: "slice" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "pipe", type: i1.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i6.TranslocoDatePipe, name: "translocoDate" }, { kind: "pipe", type: i7.CalendarDatePipe, name: "calendarDate" }, { kind: "pipe", type: i8.OutOfMonthPipe, name: "outOfMonth" }, { kind: "pipe", type: i9.IsTodayPipe, name: "isToday" }, { kind: "pipe", type: i10.IsSameDayPipe, name: "isSameDay" }, { kind: "pipe", type: i11.IsDisabledPipe, name: "isDisabled" }] });
|
|
205
205
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BiitDatePickerComponent, decorators: [{
|
|
206
206
|
type: Component,
|
|
207
207
|
args: [{ selector: 'biit-datepicker', providers: [
|
|
@@ -216,7 +216,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
216
216
|
}
|
|
217
217
|
], host: {
|
|
218
218
|
'(document:pointerdown)': 'handleMouseEvents($event)'
|
|
219
|
-
}, template: "<ng-container *ngIf=\"calendarMode; then calendarModeTemplate else datePickerTemplate\"></ng-container>\n\n<ng-template #datePickerTemplate>\n <div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" >\n <div class=\"input-container\">\n <input class=\"input-object\"\n [ngModel]=\"value && !timePicker ? (value | date: 'yyyy-MM-dd') :\n value && timePicker ? (value | date: 'yyyy-MM-dd\\THH:mm') :\n undefined\"\n (ngModelChange)=\"onModelChange(parseISO($event))\"\n [type]=\"timePicker ? 'datetime-local' : 'date'\" required\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n [min]=\"min ? (min | date: 'yyyy-MM-dd') : undefined\"\n [max]=\"max ? (max | date: 'yyyy-MM-dd') : undefined\"\n [disabled]=\"disabled\"\n >\n <div class=\"input-show-icon-container\"\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n (click)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n (keydown.enter)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n tabindex=\"0\">\n <biit-icon [name]=\"'calendar'\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: dropdownOpen ? '#F20D5E' : '#262626'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder input-filled\">\n {{_placeholder}}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || (value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max)\"\n name=\"exclamation\"\n class=\"input-error-icon\"\n [pathStyle]=\"{fill:'#A1093F'}\"\n ></biit-icon>\n <div *ngIf=\"description\" class=\"input-description\">\n <a>\n {{description}}\n </a>\n </div>\n\n <div style=\"position: relative; height: 0;\">\n <div class=\"popup\"\n [class.dropdown-open]=\"dropdownOpen\"\n [style.height]=\"!monthSelector && timePicker ? '29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n <button biit-button tertiary\n (click)=\"closeDropdown()\">\n {{'inputs.done' | transloco}}\n </button>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"bottom-line\"></div>\n <div *ngIf=\"error\" class=\"input-error-msg\">\n <a>\n {{error}}\n </a>\n </div>\n <div *ngIf=\"value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max\" class=\"input-error-msg\">\n <a>\n {{'inputs.date-error' | transloco}}\n </a>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #calendarModeTemplate>\n <div class=\"popup calendar-mode\"\n [style.height]=\"!monthSelector && timePicker ? 'calc(29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n </div>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: '#262626'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box}.popup{display:block;width:17.5em;border:3px solid var(--component-color);background:white;padding:.45em;-webkit-user-select:none;user-select:none;opacity:0;pointer-events:none;transform-origin:top;margin-top:-3px;transform:translateY(var(--origin));transition:opacity .5s ease,transform .5s ease}.popup:not(.calendar-mode){position:absolute;z-index:2}.popup.calendar-mode{position:relative;opacity:1;pointer-events:all;margin-top:0}.popup.dropdown-open{opacity:1;pointer-events:auto;transform:translate(0)}.popup.disabled{visibility:hidden}.popup .month-view{display:flex;flex-direction:column;justify-content:space-between}.popup .month-view .month-selector{display:flex;justify-content:space-between;align-items:center}.popup .month-view .month-selector .month-label{width:12em}.popup .month-view .month-selector .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .month-selector .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .month-view .month-selector ::ng-deep button .icon-button-svg{width:.8em;height:.8em}.popup .month-view .grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}.popup .month-view .grid .grid-element{display:flex;align-items:center;justify-content:center;height:2.1em;width:2.1em}.popup .month-view .grid .grid-element.header{font-weight:800;cursor:default;text-transform:capitalize}.popup .month-view .grid .grid-element.day{cursor:pointer;background:none;color:inherit;border:none;padding:0;font:inherit;outline:inherit}.popup .month-view .grid .grid-element.day.outer-day{color:var(--main-background-color)}.popup .month-view .grid .grid-element.day.outer-day:hover,.popup .month-view .grid .grid-element.day.outer-day:focus-visible{color:var(--component-color)}.popup .month-view .grid .grid-element.day.is-today{border:3px solid var(--component-color)}.popup .month-view .grid .grid-element.day:hover,.popup .month-view .grid .grid-element.day:focus-visible{background:var(--main-background-color)}.popup .month-view .grid .grid-element.day:active{color:var(--main-color)}.popup .month-view .grid .grid-element.day.selected{background:var(--main-color)}.popup .month-view .grid .grid-element.day.selected:hover,.popup .month-view .grid .grid-element.day.selected:focus-visible{background:var(--main-color);color:#fff}.popup .month-view .grid .grid-element.day.disabled{color:var(--error-color);pointer-events:none}.popup .month-view .grid .grid-element.day.disabled.outer-day{color:var(--selected-color)}.popup .month-view .buttons{display:flex;justify-content:space-between;padding:.3em .85em}.popup .month-view .buttons .today-btn ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .buttons .today-btn ::ng-deep .button-base .bar{background:var(--component-color)}.popup .time-picker{width:17.5em;margin-left:calc(-.45em - 3px);box-sizing:border-box;border-top:3px solid var(--component-color);margin-top:.45em;margin-bottom:-.45em}.popup .year-view{height:100%;display:flex;flex-direction:column;justify-content:space-between}.popup .year-view .month-label{width:100%;height:2.1em;align-items:center}.popup .year-view .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .year-view .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .year-view .buttons{display:flex;justify-content:flex-end;padding:.3em .85em}.popup .selector{display:flex;justify-content:center}.popup .selector .column{display:block}.popup .selector .column .item{width:100%;height:1.5em;display:flex;justify-content:center;align-items:center;cursor:pointer}.popup .selector .column .item.primary{height:1.8em;color:var(--component-color);font-weight:500}.popup .selector .column .item.secondary{color:var(--secondary-color)}.popup .selector .column .item.tertiary{color:var(--main-background-color)}.popup .selector .column .item.arrow{display:inline-flex;width:100%;height:1.8em}.popup .selector .column .item.arrow .up{height:.7em;rotate:-90deg}.popup .selector .column .item.arrow .down{height:.7em;rotate:90deg}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object,.biit-input.disabled .input-show-icon-container{background:var(--main-background-color)}.biit-input.readonly{pointer-events:none}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400}.input-object:focus,.input-object:hover{outline:none;background:var(--main-background-color)}.input-object:focus~.input-show-icon-container,.input-object:hover~.input-show-icon-container{background:var(--main-background-color)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}@-moz-document url-prefix(){.input-object{padding-top:.55em!important}}input[type=date]::-webkit-inner-spin-button,input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.7em;color:var(--error-color);padding-top:.2em;padding-bottom:.15em;min-height:1.05em}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:white}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:var(--main-background-color);border:none;outline:none}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:#262626}.onwards{--origin: 1em}.downwards{--origin: -1em}\n"] }]
|
|
219
|
+
}, template: "<ng-container *ngIf=\"calendarMode; then calendarModeTemplate else datePickerTemplate\"></ng-container>\n\n<ng-template #datePickerTemplate>\n <div class=\"biit-input\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\" >\n <div class=\"input-container\">\n <input class=\"input-object\"\n [ngModel]=\"value && !timePicker ? (value | date: 'yyyy-MM-dd') :\n value && timePicker ? (value | date: 'yyyy-MM-dd\\THH:mm') :\n undefined\"\n (ngModelChange)=\"onModelChange(parseISO($event))\"\n [type]=\"timePicker ? 'datetime-local' : 'date'\" required\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n [min]=\"min ? (min | date: 'yyyy-MM-dd') : undefined\"\n [max]=\"max ? (max | date: 'yyyy-MM-dd') : undefined\"\n [disabled]=\"disabled\"\n >\n <div class=\"input-show-icon-container\"\n [style.background]=\"dropdownOpen ? '#D9D9D9' : null\"\n (click)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n (keydown.enter)=\"dropdownOpen ? closeDropdown(): openDropdown()\"\n tabindex=\"0\">\n <biit-icon [name]=\"'calendar'\"\n class=\"input-show-icon\"\n [pathStyle]=\"{fill: dropdownOpen ? 'var(--main-color)' : 'var(--chart-component-color)'}\"\n ></biit-icon>\n </div>\n <div class=\"input-placeholder input-filled\">\n {{_placeholder}}\n <a *ngIf=\"required\"\n [style.color]=\"value ? null : 'red'\">*</a>\n </div>\n <biit-icon *ngIf=\"error || (value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max)\"\n name=\"exclamation\"\n class=\"input-error-icon\"\n [pathStyle]=\"{fill:'#A1093F'}\"\n ></biit-icon>\n <div *ngIf=\"description\" class=\"input-description\">\n <a>\n {{description}}\n </a>\n </div>\n\n <div style=\"position: relative; height: 0;\">\n <div class=\"popup\"\n [class.dropdown-open]=\"dropdownOpen\"\n [style.height]=\"!monthSelector && timePicker ? '29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n <button biit-button tertiary\n (click)=\"closeDropdown()\">\n {{'inputs.done' | transloco}}\n </button>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"bottom-line\"></div>\n <div *ngIf=\"error\" class=\"input-error-msg\">\n <a>\n {{error}}\n </a>\n </div>\n <div *ngIf=\"value | isDisabled: disabledDays: disableWeekdays: disableWeekends: min: max\" class=\"input-error-msg\">\n <a>\n {{'inputs.date-error' | transloco}}\n </a>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #calendarModeTemplate>\n <div class=\"popup calendar-mode\"\n [style.height]=\"!monthSelector && timePicker ? 'calc(29.1em + 3px)' : null\">\n <div *ngIf=\"!monthSelector\"\n class=\"month-view\">\n <div class=\"month-selector\">\n <button biit-icon\n [icon]=\"'right_arrow'\"\n style=\"rotate: 180deg\"\n (click)=\"prevMonth()\"\n ></button>\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n <button biit-icon\n [icon]=\"'right_arrow'\"\n (click)=\"nextMonth()\"\n ></button>\n </div>\n\n <div class=\"grid\">\n <div *ngFor=\"let day of days | slice:0:7\"\n class=\"grid-element header\">\n {{(day | translocoDate: {weekday: 'short'}).substring(0,2) }}\n </div>\n <button *ngFor=\"let day of days\"\n class=\"grid-element day\"\n [class.outer-day]=\"day | outOfMonth: viewerDate\"\n [class.is-today]=\"day | isToday\"\n [class.selected]=\"day | isSameDay: value\"\n [class.disabled]=\"day | isDisabled: disabledDays: disableWeekdays: disableWeekends: sub(min, {days: 1}): add(max, {days: 1})\"\n (click)=\"onModelChange(day)\"\n tabindex=\"0\"\n >\n {{day | calendarDate}}\n </button>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n class=\"today-btn\"\n (click)=\"setToday()\">\n {{'inputs.today' | transloco}}\n </button>\n </div>\n </div>\n\n <div class=\"time-picker\" *ngIf=\"!monthSelector && timePicker\">\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'H') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {hours: 1}) | date: 'H') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n <div class=\"column\"\n style=\"min-width: 2em;\">\n <div class=\"item arrow\"\n (click)=\"onModelChange(sub(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(sub(value, {hours: 1}))\">\n {{ value ? (sub(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item primary\">\n {{ value ? (value | date: 'mm') : '' }}\n </div>\n <div class=\"item secondary\"\n (click)=\"onModelChange(add(value, {hours: 1}))\">\n {{ value ? (add(value, {minutes: 1}) | date: 'mm') : '' }}\n </div>\n <div class=\"item arrow\"\n (click)=\"onModelChange(add(value, {minutes: 1}))\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"year-view\" *ngIf=\"monthSelector\">\n <div class=\"month-selector\">\n <button biit-button tertiary\n class=\"month-label\"\n (click)=\"changeView()\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </button>\n </div>\n\n <div class=\"selector\">\n <div class=\"column\"\n style=\"min-width: 8em;\">\n <div class=\"item arrow\"\n (click)=\"prevMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {months: 2})\">\n {{sub(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"prevMonth()\">\n {{sub(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"nextMonth()\">\n {{add(viewerDate, {months: 1}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {months: 2})\">\n {{add(viewerDate, {months: 2}) | translocoDate: {month: 'long'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"nextMonth()\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n\n <div class=\"column\"\n style=\"min-width: 5em;\">\n <div class=\"item arrow\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"up\"\n ></biit-icon>\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 2})\">\n {{sub(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = sub(viewerDate, {years: 1})\">\n {{sub(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item primary\">\n {{viewerDate | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item secondary\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n {{add(viewerDate, {years: 1}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item tertiary\"\n (click)=\"viewerDate = add(viewerDate, {years: 2})\">\n {{add(viewerDate, {years: 2}) | translocoDate: {year: 'numeric'} }}\n </div>\n <div class=\"item arrow\"\n (click)=\"viewerDate = add(viewerDate, {years: 1})\">\n <biit-icon [name]=\"'right_arrow'\"\n [pathStyle]=\"{fill: 'var(--chart-component-color)'}\"\n class=\"down\"\n ></biit-icon>\n </div>\n </div>\n </div>\n\n <div class=\"buttons\">\n <button biit-button tertiary\n (click)=\"drawCalendar(); changeView()\">\n {{'inputs.back' | transloco}}\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box}.popup{display:block;width:17.5em;border:3px solid var(--component-color);background:white;padding:.45em;-webkit-user-select:none;user-select:none;opacity:0;pointer-events:none;transform-origin:top;margin-top:-3px;transform:translateY(var(--origin));transition:opacity .5s ease,transform .5s ease}.popup:not(.calendar-mode){position:absolute;z-index:2}.popup.calendar-mode{position:relative;opacity:1;pointer-events:all;margin-top:0}.popup.dropdown-open{opacity:1;pointer-events:auto;transform:translate(0)}.popup.disabled{visibility:hidden}.popup .month-view{display:flex;flex-direction:column;justify-content:space-between}.popup .month-view .month-selector{display:flex;justify-content:space-between;align-items:center}.popup .month-view .month-selector .month-label{width:12em}.popup .month-view .month-selector .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .month-selector .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .month-view .month-selector ::ng-deep button .icon-button-svg{width:.8em;height:.8em}.popup .month-view .grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}.popup .month-view .grid .grid-element{display:flex;align-items:center;justify-content:center;height:2.1em;width:2.1em}.popup .month-view .grid .grid-element.header{font-weight:800;cursor:default;text-transform:capitalize}.popup .month-view .grid .grid-element.day{cursor:pointer;background:none;color:inherit;border:none;padding:0;font:inherit;outline:inherit}.popup .month-view .grid .grid-element.day.outer-day{color:var(--main-background-color)}.popup .month-view .grid .grid-element.day.outer-day:hover,.popup .month-view .grid .grid-element.day.outer-day:focus-visible{color:var(--component-color)}.popup .month-view .grid .grid-element.day.is-today{border:3px solid var(--component-color)}.popup .month-view .grid .grid-element.day:hover,.popup .month-view .grid .grid-element.day:focus-visible{background:var(--main-background-color)}.popup .month-view .grid .grid-element.day:active{color:var(--main-color)}.popup .month-view .grid .grid-element.day.selected{background:var(--main-color)}.popup .month-view .grid .grid-element.day.selected:hover,.popup .month-view .grid .grid-element.day.selected:focus-visible{background:var(--main-color);color:#fff}.popup .month-view .grid .grid-element.day.disabled{color:var(--error-color);pointer-events:none}.popup .month-view .grid .grid-element.day.disabled.outer-day{color:var(--selected-color)}.popup .month-view .buttons{display:flex;justify-content:space-between;padding:.3em .85em}.popup .month-view .buttons .today-btn ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .month-view .buttons .today-btn ::ng-deep .button-base .bar{background:var(--component-color)}.popup .time-picker{width:17.5em;margin-left:calc(-.45em - 3px);box-sizing:border-box;border-top:3px solid var(--component-color);margin-top:.45em;margin-bottom:-.45em}.popup .year-view{height:100%;display:flex;flex-direction:column;justify-content:space-between}.popup .year-view .month-label{width:100%;height:2.1em;align-items:center}.popup .year-view .month-label ::ng-deep .button-base{width:100%;display:flex;justify-content:center;color:var(--component-color)}.popup .year-view .month-label ::ng-deep .button-base .bar{background:var(--component-color)}.popup .year-view .buttons{display:flex;justify-content:flex-end;padding:.3em .85em}.popup .selector{display:flex;justify-content:center}.popup .selector .column{display:block}.popup .selector .column .item{width:100%;height:1.5em;display:flex;justify-content:center;align-items:center;cursor:pointer}.popup .selector .column .item.primary{height:1.8em;color:var(--component-color);font-weight:500}.popup .selector .column .item.secondary{color:var(--secondary-color)}.popup .selector .column .item.tertiary{color:var(--main-background-color)}.popup .selector .column .item.arrow{display:inline-flex;width:100%;height:1.8em}.popup .selector .column .item.arrow .up{height:.7em;rotate:-90deg}.popup .selector .column .item.arrow .down{height:.7em;rotate:90deg}.biit-input{display:flex;min-width:12.8em}.biit-input.disabled{pointer-events:none}.biit-input.disabled .input-object,.biit-input.disabled .input-show-icon-container{background:var(--main-background-color)}.biit-input.readonly{pointer-events:none}.input-container{position:relative;width:100%}.input-object{font-size:1em;display:block;border:none;color:var(--component-color);padding:.7em;height:2.1em;width:100%;min-width:2.1em;font-weight:400}.input-object:focus,.input-object:hover{outline:none;background:var(--main-background-color)}.input-object:focus~.input-show-icon-container,.input-object:hover~.input-show-icon-container{background:var(--main-background-color)}.input-object.error{color:var(--error-color);border-color:var(--error-color)}.input-object.password{padding:.7em 2.1em .55em .7em}.input-object.password.reveal{-webkit-text-security:none;input-security:none}.input-description{position:absolute;display:flex;align-items:center;font-size:.75em;color:gray;padding-top:1.4em;min-height:1.05em;line-height:120%;font-style:italic}.input-description a{display:block;line-height:1.1em}@-moz-document url-prefix(){.input-object{padding-top:.55em!important}}input[type=date]::-webkit-inner-spin-button,input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.input-placeholder{color:var(--component-color);font-size:1em;font-weight:bolder;text-transform:uppercase;position:absolute;pointer-events:none;left:.7em;top:.42em;height:.7em;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}.input-object:focus~.input-placeholder,.input-filled{top:-.95em;font-size:.7em;line-height:.7em;font-weight:400;color:var(--secondary-color)}.input-error-icon{display:flex;top:.7em;position:absolute;width:.7em;height:.7em}.input-error-msg{position:absolute;display:flex;align-items:center;font-size:.7em;color:var(--error-color);padding-top:.2em;padding-bottom:.15em;min-height:1.05em}.input-error-msg a{display:block;line-height:1.1em}.input-show-icon{width:1.05em;height:1.05em}.input-show-icon-container{top:0;right:0;position:absolute;width:2.1em;height:2.1em;align-content:center;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:white}.input-show-icon-container:hover,.input-show-icon-container:focus,.input-show-icon-container:focus-visible{background-color:var(--main-background-color);border:none;outline:none}.bottom-line{position:relative;top:-3px;margin-bottom:-3px;width:auto;height:3px;background:var(--chart-component-color)}.onwards{--origin: 1em}.downwards{--origin: -1em}\n"] }]
|
|
220
220
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.TranslocoService }]; }, propDecorators: { disabled: [{
|
|
221
221
|
type: Input
|
|
222
222
|
}], readonly: [{
|
|
@@ -248,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
248
248
|
type: HostListener,
|
|
249
249
|
args: ['keydown.esc', ['$event']]
|
|
250
250
|
}] } });
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlpdC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpemFyZHJ5LXRoZW1lL2lucHV0cy9zcmMvYmlpdC1kYXRlcGlja2VyL2JpaXQtZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93aXphcmRyeS10aGVtZS9pbnB1dHMvc3JjL2JpaXQtZGF0ZXBpY2tlci9iaWl0LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFzQixZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQVUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFBO0FBQy9HLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0sbUJBQW1CLENBQUM7QUFDcEUsT0FBTyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFxQjVELE1BQU0sT0FBTyx1QkFBdUI7SUFJbEMsSUFBNEIsY0FBYyxDQUFDLEtBQVU7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBUUQsSUFBYSxXQUFXLENBQUMsV0FBbUI7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQWFELElBQWMsWUFBWSxLQUFpQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQSxDQUFBLENBQUM7SUFDekcsSUFBYyxlQUFlLEtBQWlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBLENBQUEsQ0FBQztJQU9yRyxTQUFTLENBQUMsQ0FBQztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFDVSxJQUFnQixFQUNoQixTQUEyQjtRQUQzQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBcEMzQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQVN6QixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNuQixVQUFLLEdBQXVCLEVBQUUsQ0FBQztRQUk5QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELGVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBTWYsUUFBRyxHQUFHLEdBQUcsQ0FBQztRQUNWLFFBQUcsR0FBRyxHQUFHLENBQUM7UUFDVixhQUFRLEdBQUcsUUFBUSxDQUFDO1FBdUJ2QyxhQUFRLEdBQUcsQ0FBQyxLQUFXLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMvQixjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBZGpCLENBQUM7SUFFTCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ3JCLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxTQUFTO2dCQUNaLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxLQUFLO2dCQUNSLE9BQU8sS0FBSyxDQUFDO1lBQ2Y7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7SUFLRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVztRQUNwQixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVztRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUNqSCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUU5RyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3RDLEtBQUssSUFBSTtnQkFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUNSO2dCQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO1FBRUQsaUJBQWlCLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQW9CO1FBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQWlDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFaEQsNEZBQTRGO1FBQzVGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDcEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRWpDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFOUIsa0NBQWtDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sUUFBUSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxFQUFFO1lBQzFCLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDN0U7YUFBTTtZQUNMLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUNsQztRQUVELFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ2pGO2FBQU07WUFDTCxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDakM7UUFFRCwwQkFBMEI7UUFDMUIsU0FBUyxXQUFXO1lBQ2xCLE9BQU8sS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFdBQVc7Z0JBQ3ZGLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsU0FBUyxVQUFVO1lBQ2pCLE9BQU8sS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN6RixDQUFDO1FBRUQsU0FBUyxTQUFTO1lBQ2hCLE9BQU8sS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQUs7UUFDUCxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7O3FIQXhOVSx1QkFBdUI7eUdBQXZCLHVCQUF1QiwrZkFmdkI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztZQUN0RCxLQUFLLEVBQUUsSUFBSTtTQUNaO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsRUFBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQztTQUM1RDtLQUNGLDBCQ3JCSCxvMW5CQTJkQTs0RkRqY2EsdUJBQXVCO2tCQW5CbkMsU0FBUzsrQkFDRSxpQkFBaUIsYUFHaEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixRQUFRLEVBQUUsRUFBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBQzt5QkFDNUQ7cUJBQ0YsUUFDSzt3QkFDSix3QkFBd0IsRUFBRSwyQkFBMkI7cUJBQ3REO2dJQUdRLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNzQixjQUFjO3NCQUF6QyxLQUFLO3VCQUFDLGVBQWU7Z0JBSWIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBa0JOLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYsIE9uSW5pdCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2VhY2hEYXlPZkludGVydmFsLCBhZGQsIHNldERhdGUsIHN0YXJ0T2ZXZWVrLCBzdWIsIHNldERlZmF1bHRPcHRpb25zLCBMb2NhbGUsIHBhcnNlSVNPfSBmcm9tICdkYXRlLWZucydcbmltcG9ydCB7VFJBTlNMT0NPX1NDT1BFLCBUcmFuc2xvY29TZXJ2aWNlfSBmcm9tIFwiQG5nbmVhdC90cmFuc2xvY29cIjtcbmltcG9ydCB7ZW5HQiwgZXMsIG5sfSBmcm9tIFwiZGF0ZS1mbnMvbG9jYWxlXCI7XG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiaWl0LWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJ2JpaXQtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydiaWl0LWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCaWl0RGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogVFJBTlNMT0NPX1NDT1BFLFxuICAgICAgdXNlVmFsdWU6IHtzY29wZTogJ3dpemFyZHJ5LXRoZW1lL2lucHV0cycsIGFsaWFzOiBcImlucHV0c1wifVxuICAgIH1cbiAgXSxcbiAgaG9zdDoge1xuICAgICcoZG9jdW1lbnQ6cG9pbnRlcmRvd24pJzogJ2hhbmRsZU1vdXNlRXZlbnRzKCRldmVudCknXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmlpdERhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcbiAgQElucHV0KCdjYWxlbmRhci1tb2RlJykgc2V0IGlzQ2FsZW5kYXJNb2RlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmNhbGVuZGFyTW9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGVuZGFyTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZERheXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBkaXNhYmxlV2Vla2RheXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc2FibGVXZWVrZW5kczogYm9vbGVhbjtcbiAgQElucHV0KCkgdGltZVBpY2tlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgbWluOiBEYXRlO1xuICBASW5wdXQoKSBtYXg6IERhdGU7XG4gIEBJbnB1dCgpIHNldCBwbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgfVxuICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCB2YWx1ZTogRGF0ZTtcbiAgcHJvdGVjdGVkIGRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbW9udGhTZWxlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgZGF5czogRGF0ZVtdID0gW107XG4gIHByb3RlY3RlZCBoZWFkZXJzID0gW1wiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCIsIFwiU3VcIl07XG4gIHByb3RlY3RlZCB2aWV3ZXJEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJvdGVjdGVkIGxvY2FsZTogTG9jYWxlO1xuXG4gIHByb3RlY3RlZCBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtyZXR1cm4gdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmlucHV0LW9iamVjdCcpfVxuICBwcm90ZWN0ZWQgZ2V0IGRyb3Bkb3duRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7cmV0dXJuIHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wb3B1cCcpfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBhZGQgPSBhZGQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdWIgPSBzdWI7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYXJzZUlTTyA9IHBhcnNlSVNPO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGUpIHtcbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbTogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHRyYW5zbG9jbzogVHJhbnNsb2NvU2VydmljZVxuICApIHsgfVxuXG4gIGNoZWNrQm9vbGVhbklucHV0KHZhbHVlKSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgZmFsc2U6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBEYXRlKSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJNb2RlICYmICF2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5taW4gJiYgbmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSA8PSAobmV3IERhdGUodGhpcy5taW4pLmdldFRpbWUoKSkpIHZhbHVlID0gYWRkKHRoaXMubWluLCB7bWludXRlczogMX0pO1xuICAgICAgaWYgKHRoaXMubWF4ICYmIG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkgPiBuZXcgRGF0ZSh0aGlzLm1heCkuZ2V0VGltZSgpKSB2YWx1ZSA9IHN1Yih0aGlzLm1heCwge21pbnV0ZXM6IDF9KTtcblxuICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMudmlld2VyRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdExvY2FsaXphdGlvbigpO1xuXG4gICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5kaXNhYmxlZCk7XG4gICAgdGhpcy5yZWFkb25seSA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5yZWFkb25seSk7XG4gICAgdGhpcy5yZXF1aXJlZCA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5yZXF1aXJlZCk7XG4gICAgdGhpcy5kaXNhYmxlV2Vla2RheXMgPSB0aGlzLmNoZWNrQm9vbGVhbklucHV0KHRoaXMuZGlzYWJsZVdlZWtkYXlzKTtcbiAgICB0aGlzLmRpc2FibGVXZWVrZW5kcyA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5kaXNhYmxlV2Vla2VuZHMpO1xuICAgIHRoaXMudGltZVBpY2tlciA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy50aW1lUGlja2VyKTtcblxuICAgIHRoaXMuZHJhd0NhbGVuZGFyKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRMb2NhbGl6YXRpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLnRyYW5zbG9jby5nZXRBY3RpdmVMYW5nKCkpIHtcbiAgICAgIGNhc2UgJ2VzJzpcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdubCc6XG4gICAgICAgIHRoaXMubG9jYWxlID0gbmw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBlbkdCO1xuICAgIH1cblxuICAgIHNldERlZmF1bHRPcHRpb25zKHtsb2NhbGU6IHRoaXMubG9jYWxlfSk7XG4gIH1cblxuICBoYW5kbGVNb3VzZUV2ZW50cygkZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbiAmJiAhdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVZpZXcoKSB7XG4gICAgdGhpcy5tb250aFNlbGVjdG9yID0gIXRoaXMubW9udGhTZWxlY3RvcjtcbiAgICB0aGlzLnNldFBvcHVwQ29tcG9uZW50UHJvcGVydGllcygpO1xuICB9XG5cbiAgb3BlbkRyb3Bkb3duKCkge1xuICAgIGlmICghdGhpcy52YWx1ZSkgdGhpcy5vbk1vZGVsQ2hhbmdlKG5ldyBEYXRlKCkpO1xuXG4gICAgdGhpcy52aWV3ZXJEYXRlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLm1vbnRoU2VsZWN0b3IgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdDYWxlbmRhcigpO1xuICAgIHRoaXMuc2V0UG9wdXBDb21wb25lbnRQcm9wZXJ0aWVzKCk7XG4gICAgKHRoaXMuaW5wdXRFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZvY3VzKCk7XG5cbiAgICAvLyBTZXR0aW5nIGEgdGltZW91dCBiZWNhdXNlIGl0IGRvZXNuJ3QgbG9hZCB1cHdhcmRzL2Rvd253YXJkcyBjc3MgY2xhc3NlcyBvbiBleGVjdXRpb24gdGltZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5kcm9wZG93bkVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgXCJ0cnVlXCIpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCkge1xuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgdGhpcy5kcm9wZG93bkVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgXCJmYWxzZVwiKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3B1cENvbXBvbmVudFByb3BlcnRpZXMoKSB7XG4gICAgbGV0IGRyb3Bkb3duID0gdGhpcy5kcm9wZG93bkVsZW1lbnQ7XG4gICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICBsZXQgaW5wdXQgPSB0aGlzLmlucHV0RWxlbWVudDtcblxuICAgIC8vIENoZWNraW5nIGF2YWlsYWJsZSBzY3JlZW4gc3BhY2VcbiAgICBjb25zdCBmaXRzQm90dG9tID0gYm90dG9tQ2hlY2soKTtcbiAgICBjb25zdCBmaXRzUmlnaHQgPSByaWdodENoZWNrKCk7XG4gICAgY29uc3QgZml0c0xlZnQgPSBsZWZ0Q2hlY2soKTtcblxuICAgIGlmICghZml0c1JpZ2h0ICYmIGZpdHNMZWZ0KSB7XG4gICAgICBkcm9wZG93bi5zdHlsZS5tYXJnaW5MZWZ0ID0gaW5wdXQub2Zmc2V0V2lkdGggLSBkcm9wZG93bi5vZmZzZXRXaWR0aCArICdweCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3Bkb3duLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsO1xuICAgIH1cblxuICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ29ud2FyZHMnKTtcbiAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdkb3dud2FyZHMnKTtcblxuICAgIGlmICghZml0c0JvdHRvbSkge1xuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnb253YXJkcycpO1xuICAgICAgZHJvcGRvd24uc3R5bGUubWFyZ2luVG9wID0gLShkcm9wZG93bi5vZmZzZXRIZWlnaHQgKyBpbnB1dC5vZmZzZXRIZWlnaHQpICsgJ3B4JztcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnZG93bndhcmRzJyk7XG4gICAgICBkcm9wZG93bi5zdHlsZS5tYXJnaW5Ub3AgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgaW5uZXIgZnVuY3Rpb25zXG4gICAgZnVuY3Rpb24gYm90dG9tQ2hlY2soKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tICsgZHJvcGRvd24ub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodCB8fFxuICAgICAgICBpbnB1dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBkcm9wZG93bi5vZmZzZXRIZWlnaHQgPD0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaWdodENoZWNrKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ICsgZHJvcGRvd24ub2Zmc2V0V2lkdGggPD0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGVmdENoZWNrKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0IC0gZHJvcGRvd24ub2Zmc2V0V2lkdGggPj0gMDtcbiAgICB9XG4gIH1cblxuICBkcmF3Q2FsZW5kYXIoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3REYXkgPSBzdGFydE9mV2VlayhzZXREYXRlKHRoaXMudmlld2VyRGF0ZSwgMSkpO1xuICAgIGNvbnN0IGxhc3REYXkgPSBhZGQoZmlyc3REYXksIHtkYXlzOjQxfSk7XG5cbiAgICB0aGlzLmRheXMgPSBlYWNoRGF5T2ZJbnRlcnZhbCh7c3RhcnQ6Zmlyc3REYXksIGVuZDpsYXN0RGF5fSk7XG4gIH1cblxuICBwcmV2TW9udGgoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3ZXJEYXRlID0gc3ViKHRoaXMudmlld2VyRGF0ZSwge21vbnRoczoxfSlcbiAgICB0aGlzLmRyYXdDYWxlbmRhcigpO1xuICB9XG5cbiAgbmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIHRoaXMudmlld2VyRGF0ZSA9IGFkZCh0aGlzLnZpZXdlckRhdGUsIHttb250aHM6MX0pO1xuICAgIHRoaXMuZHJhd0NhbGVuZGFyKCk7XG4gIH1cblxuICBzZXRUb2RheSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdlckRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZHJhd0NhbGVuZGFyKCk7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgbG9nKHZhbHVlKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnREVWRUxPUE1FTlQgTE9HOiAnLCB2YWx1ZSk7XG4gIH1cbn1cblxuXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY2FsZW5kYXJNb2RlOyB0aGVuIGNhbGVuZGFyTW9kZVRlbXBsYXRlIGVsc2UgZGF0ZVBpY2tlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiYmlpdC1pbnB1dFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5yZWFkb25seV09XCJyZWFkb25seVwiID5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dC1vYmplY3RcIlxuICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlICYmICF0aW1lUGlja2VyID8gKHZhbHVlIHwgZGF0ZTogJ3l5eXktTU0tZGQnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmJiB0aW1lUGlja2VyID8gKHZhbHVlIHwgZGF0ZTogJ3l5eXktTU0tZGRcXFRISDptbScpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZShwYXJzZUlTTygkZXZlbnQpKVwiXG4gICAgICAgICAgICAgW3R5cGVdPVwidGltZVBpY2tlciA/ICdkYXRldGltZS1sb2NhbCcgOiAnZGF0ZSdcIiByZXF1aXJlZFxuICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRyb3Bkb3duT3BlbiA/ICcjRDlEOUQ5JyA6IG51bGxcIlxuICAgICAgICAgICAgIFttaW5dPVwibWluID8gKG1pbiB8IGRhdGU6ICd5eXl5LU1NLWRkJykgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgIFttYXhdPVwibWF4ID8gKG1heCB8IGRhdGU6ICd5eXl5LU1NLWRkJykgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2hvdy1pY29uLWNvbnRhaW5lclwiXG4gICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRyb3Bkb3duT3BlbiA/ICcjRDlEOUQ5JyA6IG51bGxcIlxuICAgICAgICAgICAoY2xpY2spPVwiZHJvcGRvd25PcGVuID8gY2xvc2VEcm9wZG93bigpOiBvcGVuRHJvcGRvd24oKVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImRyb3Bkb3duT3BlbiA/IGNsb3NlRHJvcGRvd24oKTogb3BlbkRyb3Bkb3duKClcIlxuICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCInY2FsZW5kYXInXCJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LXNob3ctaWNvblwiXG4gICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogZHJvcGRvd25PcGVuID8gJyNGMjBENUUnIDogJyMyNjI2MjYnfVwiXG4gICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXBsYWNlaG9sZGVyIGlucHV0LWZpbGxlZFwiPlxuICAgICAgICB7e19wbGFjZWhvbGRlcn19XG4gICAgICAgIDxhICpuZ0lmPVwicmVxdWlyZWRcIlxuICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidmFsdWUgPyBudWxsIDogJ3JlZCdcIj4qPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8YmlpdC1pY29uICpuZ0lmPVwiZXJyb3IgfHwgKHZhbHVlIHwgaXNEaXNhYmxlZDogZGlzYWJsZWREYXlzOiBkaXNhYmxlV2Vla2RheXM6IGRpc2FibGVXZWVrZW5kczogbWluOiBtYXgpXCJcbiAgICAgICAgICAgICAgICAgbmFtZT1cImV4Y2xhbWF0aW9uXCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1lcnJvci1pY29uXCJcbiAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDonI0ExMDkzRid9XCJcbiAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgIDxkaXYgKm5nSWY9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiaW5wdXQtZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPGE+XG4gICAgICAgICAge3tkZXNjcmlwdGlvbn19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDA7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cFwiXG4gICAgICAgICAgICAgW2NsYXNzLmRyb3Bkb3duLW9wZW5dPVwiZHJvcGRvd25PcGVuXCJcbiAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIiFtb250aFNlbGVjdG9yICYmIHRpbWVQaWNrZXIgPyAnMjkuMWVtICsgM3B4KScgOiBudWxsXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFtb250aFNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGgtdmlld1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gYmlpdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJyb3RhdGU6IDE4MGRlZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZNb250aCgpXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGJpaXQtYnV0dG9uIHRlcnRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVZpZXcoKVwiPlxuICAgICAgICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGJpaXQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5cyB8IHNsaWNlOjA6N1wiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWVsZW1lbnQgaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAge3soZGF5IHwgdHJhbnNsb2NvRGF0ZToge3dlZWtkYXk6ICdzaG9ydCd9KS5zdWJzdHJpbmcoMCwyKSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1lbGVtZW50IGRheVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm91dGVyLWRheV09XCJkYXkgfCBvdXRPZk1vbnRoOiB2aWV3ZXJEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtdG9kYXldPVwiZGF5IHwgaXNUb2RheVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheSB8IGlzU2FtZURheTogdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkYXkgfCBpc0Rpc2FibGVkOiBkaXNhYmxlZERheXM6IGRpc2FibGVXZWVrZGF5czogZGlzYWJsZVdlZWtlbmRzOiBzdWIobWluLCB7ZGF5czogMX0pOiBhZGQobWF4LCB7ZGF5czogMX0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShkYXkpXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3tkYXkgfCBjYWxlbmRhckRhdGV9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGJpaXQtYnV0dG9uIHRlcnRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0b2RheS1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUb2RheSgpXCI+XG4gICAgICAgICAgICAgICAge3snaW5wdXRzLnRvZGF5JyB8IHRyYW5zbG9jb319XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGJpaXQtYnV0dG9uIHRlcnRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlRHJvcGRvd24oKVwiPlxuICAgICAgICAgICAgICAgIHt7J2lucHV0cy5kb25lJyB8IHRyYW5zbG9jb319XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlclwiICpuZ0lmPVwiIW1vbnRoU2VsZWN0b3IgJiYgdGltZVBpY2tlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAyZW07XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKHN1Yih2YWx1ZSwge2hvdXJzOiAxfSkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJyMyNjI2MjYnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1cFwiXG4gICAgICAgICAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2Uoc3ViKHZhbHVlLCB7aG91cnM6IDF9KSlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdmFsdWUgPyAoc3ViKHZhbHVlLCB7aG91cnM6IDF9KSB8IGRhdGU6ICdIJykgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gKHZhbHVlIHwgZGF0ZTogJ0gnKSA6ICcnIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKGFkZCh2YWx1ZSwge2hvdXJzOiAxfSkpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gKGFkZCh2YWx1ZSwge2hvdXJzOiAxfSkgfCBkYXRlOiAnSCcpIDogJycgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHtob3VyczogMX0pKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICcjMjYyNjI2J31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG93blwiXG4gICAgICAgICAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDJlbTtcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2Uoc3ViKHZhbHVlLCB7bWludXRlczogMX0pKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICcjMjYyNjI2J31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKHN1Yih2YWx1ZSwge21pbnV0ZXM6IDF9KSlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdmFsdWUgPyAoc3ViKHZhbHVlLCB7bWludXRlczogMX0pIHwgZGF0ZTogJ21tJykgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gKHZhbHVlIHwgZGF0ZTogJ21tJykgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHttaW51dGVzOiAxfSkpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gKGFkZCh2YWx1ZSwge21pbnV0ZXM6IDF9KSB8IGRhdGU6ICdtbScpIDogJycgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHttaW51dGVzOiAxfSkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJyMyNjI2MjYnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwieWVhci12aWV3XCIgKm5nSWY9XCJtb250aFNlbGVjdG9yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9udGgtc2VsZWN0b3JcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBiaWl0LWJ1dHRvbiB0ZXJ0aWFyeVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGgtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VWaWV3KClcIj5cbiAgICAgICAgICAgICAgICB7e3ZpZXdlckRhdGUgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICAgICAgICB7e3ZpZXdlckRhdGUgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0b3JcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDhlbTtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldk1vbnRoKClcIj5cbiAgICAgICAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICcjMjYyNjI2J31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwXCJcbiAgICAgICAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSB0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IHN1Yih2aWV3ZXJEYXRlLCB7bW9udGhzOiAyfSlcIj5cbiAgICAgICAgICAgICAgICAgIHt7c3ViKHZpZXdlckRhdGUsIHttb250aHM6IDJ9KSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldk1vbnRoKClcIj5cbiAgICAgICAgICAgICAgICAgIHt7c3ViKHZpZXdlckRhdGUsIHttb250aHM6IDF9KSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKClcIj5cbiAgICAgICAgICAgICAgICAgIHt7YWRkKHZpZXdlckRhdGUsIHttb250aHM6IDF9KSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gYWRkKHZpZXdlckRhdGUsIHttb250aHM6IDJ9KVwiPlxuICAgICAgICAgICAgICAgICAge3thZGQodmlld2VyRGF0ZSwge21vbnRoczogMn0pIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRNb250aCgpXCI+XG4gICAgICAgICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAnIzI2MjYyNid9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3duXCJcbiAgICAgICAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDVlbTtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IHN1Yih2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KVwiPlxuICAgICAgICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJyMyNjI2MjYnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXBcIlxuICAgICAgICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gc3ViKHZpZXdlckRhdGUsIHt5ZWFyczogMn0pXCI+XG4gICAgICAgICAgICAgICAgICB7e3N1Yih2aWV3ZXJEYXRlLCB7eWVhcnM6IDJ9KSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gc3ViKHZpZXdlckRhdGUsIHt5ZWFyczogMX0pXCI+XG4gICAgICAgICAgICAgICAgICB7e3N1Yih2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBhZGQodmlld2VyRGF0ZSwge3llYXJzOiAxfSlcIj5cbiAgICAgICAgICAgICAgICAgIHt7YWRkKHZpZXdlckRhdGUsIHt5ZWFyczogMX0pIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSB0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IGFkZCh2aWV3ZXJEYXRlLCB7eWVhcnM6IDJ9KVwiPlxuICAgICAgICAgICAgICAgICAge3thZGQodmlld2VyRGF0ZSwge3llYXJzOiAyfSkgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gYWRkKHZpZXdlckRhdGUsIHt5ZWFyczogMX0pXCI+XG4gICAgICAgICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAnIzI2MjYyNid9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3duXCJcbiAgICAgICAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBiaWl0LWJ1dHRvbiB0ZXJ0aWFyeVxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkcmF3Q2FsZW5kYXIoKTsgY2hhbmdlVmlldygpXCI+XG4gICAgICAgICAgICAgICAge3snaW5wdXRzLmJhY2snIHwgdHJhbnNsb2NvfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1saW5lXCI+PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImlucHV0LWVycm9yLW1zZ1wiPlxuICAgICAgICA8YT5cbiAgICAgICAgICB7e2Vycm9yfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwidmFsdWUgfCBpc0Rpc2FibGVkOiBkaXNhYmxlZERheXM6IGRpc2FibGVXZWVrZGF5czogZGlzYWJsZVdlZWtlbmRzOiBtaW46IG1heFwiIGNsYXNzPVwiaW5wdXQtZXJyb3ItbXNnXCI+XG4gICAgICAgIDxhPlxuICAgICAgICAgIHt7J2lucHV0cy5kYXRlLWVycm9yJyB8IHRyYW5zbG9jb319XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJNb2RlVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwb3B1cCBjYWxlbmRhci1tb2RlXCJcbiAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIiFtb250aFNlbGVjdG9yICYmIHRpbWVQaWNrZXIgPyAnY2FsYygyOS4xZW0gKyAzcHgpJyA6IG51bGxcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIW1vbnRoU2VsZWN0b3JcIlxuICAgICAgICAgY2xhc3M9XCJtb250aC12aWV3XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9udGgtc2VsZWN0b3JcIj5cbiAgICAgICAgPGJ1dHRvbiBiaWl0LWljb25cbiAgICAgICAgICAgICAgICBbaWNvbl09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInJvdGF0ZTogMTgwZGVnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldk1vbnRoKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gYmlpdC1idXR0b24gdGVydGlhcnlcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vbnRoLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVmlldygpXCI+XG4gICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gYmlpdC1pY29uXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRNb250aCgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzIHwgc2xpY2U6MDo3XCJcbiAgICAgICAgICAgICBjbGFzcz1cImdyaWQtZWxlbWVudCBoZWFkZXJcIj5cbiAgICAgICAgICB7eyhkYXkgfCB0cmFuc2xvY29EYXRlOiB7d2Vla2RheTogJ3Nob3J0J30pLnN1YnN0cmluZygwLDIpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWVsZW1lbnQgZGF5XCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub3V0ZXItZGF5XT1cImRheSB8IG91dE9mTW9udGg6IHZpZXdlckRhdGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy10b2RheV09XCJkYXkgfCBpc1RvZGF5XCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZGF5IHwgaXNTYW1lRGF5OiB2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRheSB8IGlzRGlzYWJsZWQ6IGRpc2FibGVkRGF5czogZGlzYWJsZVdlZWtkYXlzOiBkaXNhYmxlV2Vla2VuZHM6IHN1YihtaW4sIHtkYXlzOiAxfSk6IGFkZChtYXgsIHtkYXlzOiAxfSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKGRheSlcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgID5cbiAgICAgICAgICB7e2RheSB8IGNhbGVuZGFyRGF0ZX19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgIDxidXR0b24gYmlpdC1idXR0b24gdGVydGlhcnlcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRvZGF5LWJ0blwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRvZGF5KClcIj5cbiAgICAgICAgICB7eydpbnB1dHMudG9kYXknIHwgdHJhbnNsb2NvfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlclwiICpuZ0lmPVwiIW1vbnRoU2VsZWN0b3IgJiYgdGltZVBpY2tlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIlxuICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAyZW07XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2Uoc3ViKHZhbHVlLCB7aG91cnM6IDF9KSlcIj5cbiAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICcjMjYyNjI2J31cIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwXCJcbiAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2Uoc3ViKHZhbHVlLCB7aG91cnM6IDF9KSlcIj5cbiAgICAgICAgICAgIHt7IHZhbHVlID8gKHN1Yih2YWx1ZSwge2hvdXJzOiAxfSkgfCBkYXRlOiAnSCcpIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBwcmltYXJ5XCI+XG4gICAgICAgICAgICB7eyB2YWx1ZSA/ICh2YWx1ZSB8IGRhdGU6ICdIJykgOiAnJyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHtob3VyczogMX0pKVwiPlxuICAgICAgICAgICAge3sgdmFsdWUgPyAoYWRkKHZhbHVlLCB7aG91cnM6IDF9KSB8IGRhdGU6ICdIJykgOiAnJyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKGFkZCh2YWx1ZSwge2hvdXJzOiAxfSkpXCI+XG4gICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAnIzI2MjYyNid9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3duXCJcbiAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIlxuICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAyZW07XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2Uoc3ViKHZhbHVlLCB7bWludXRlczogMX0pKVwiPlxuICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJyMyNjI2MjYnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXBcIlxuICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShzdWIodmFsdWUsIHtob3VyczogMX0pKVwiPlxuICAgICAgICAgICAge3sgdmFsdWUgPyAoc3ViKHZhbHVlLCB7bWludXRlczogMX0pIHwgZGF0ZTogJ21tJykgOiAnJyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHByaW1hcnlcIj5cbiAgICAgICAgICAgIHt7IHZhbHVlID8gKHZhbHVlIHwgZGF0ZTogJ21tJykgOiAnJyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHtob3VyczogMX0pKVwiPlxuICAgICAgICAgICAge3sgdmFsdWUgPyAoYWRkKHZhbHVlLCB7bWludXRlczogMX0pIHwgZGF0ZTogJ21tJykgOiAnJyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKGFkZCh2YWx1ZSwge21pbnV0ZXM6IDF9KSlcIj5cbiAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICcjMjYyNjI2J31cIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRvd25cIlxuICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInllYXItdmlld1wiICpuZ0lmPVwibW9udGhTZWxlY3RvclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgICAgIDxidXR0b24gYmlpdC1idXR0b24gdGVydGlhcnlcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1vbnRoLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVmlldygpXCI+XG4gICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIlxuICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiA4ZW07XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZNb250aCgpXCI+XG4gICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAnIzI2MjYyNid9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1cFwiXG4gICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gdGVydGlhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBzdWIodmlld2VyRGF0ZSwge21vbnRoczogMn0pXCI+XG4gICAgICAgICAgICB7e3N1Yih2aWV3ZXJEYXRlLCB7bW9udGhzOiAyfSkgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZNb250aCgpXCI+XG4gICAgICAgICAgICB7e3N1Yih2aWV3ZXJEYXRlLCB7bW9udGhzOiAxfSkgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBwcmltYXJ5XCI+XG4gICAgICAgICAgICB7e3ZpZXdlckRhdGUgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRNb250aCgpXCI+XG4gICAgICAgICAgICB7e2FkZCh2aWV3ZXJEYXRlLCB7bW9udGhzOiAxfSkgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSB0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IGFkZCh2aWV3ZXJEYXRlLCB7bW9udGhzOiAyfSlcIj5cbiAgICAgICAgICAgIHt7YWRkKHZpZXdlckRhdGUsIHttb250aHM6IDJ9KSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiPlxuICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJyMyNjI2MjYnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG93blwiXG4gICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIlxuICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiA1ZW07XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBzdWIodmlld2VyRGF0ZSwge3llYXJzOiAxfSlcIj5cbiAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICcjMjYyNjI2J31cIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwXCJcbiAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSB0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IHN1Yih2aWV3ZXJEYXRlLCB7eWVhcnM6IDJ9KVwiPlxuICAgICAgICAgICAge3tzdWIodmlld2VyRGF0ZSwge3llYXJzOiAyfSkgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IHN1Yih2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KVwiPlxuICAgICAgICAgICAge3tzdWIodmlld2VyRGF0ZSwge3llYXJzOiAxfSkgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHByaW1hcnlcIj5cbiAgICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gYWRkKHZpZXdlckRhdGUsIHt5ZWFyczogMX0pXCI+XG4gICAgICAgICAgICB7e2FkZCh2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gdGVydGlhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBhZGQodmlld2VyRGF0ZSwge3llYXJzOiAyfSlcIj5cbiAgICAgICAgICAgIHt7YWRkKHZpZXdlckRhdGUsIHt5ZWFyczogMn0pIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IGFkZCh2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KVwiPlxuICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJyMyNjI2MjYnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG93blwiXG4gICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgIDxidXR0b24gYmlpdC1idXR0b24gdGVydGlhcnlcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZHJhd0NhbGVuZGFyKCk7IGNoYW5nZVZpZXcoKVwiPlxuICAgICAgICAgIHt7J2lucHV0cy5iYWNrJyB8IHRyYW5zbG9jb319XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlpdC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dpemFyZHJ5LXRoZW1lL2lucHV0cy9zcmMvYmlpdC1kYXRlcGlja2VyL2JpaXQtZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93aXphcmRyeS10aGVtZS9pbnB1dHMvc3JjL2JpaXQtZGF0ZXBpY2tlci9iaWl0LWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFzQixZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQVUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFBO0FBQy9HLE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0sbUJBQW1CLENBQUM7QUFDcEUsT0FBTyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFxQjVELE1BQU0sT0FBTyx1QkFBdUI7SUFJbEMsSUFBNEIsY0FBYyxDQUFDLEtBQVU7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBUUQsSUFBYSxXQUFXLENBQUMsV0FBbUI7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQWFELElBQWMsWUFBWSxLQUFpQixPQUFPLElB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O3VCQUFDLGVBQWU7Z0JBSWIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBa0JOLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYsIE9uSW5pdCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge2VhY2hEYXlPZkludGVydmFsLCBhZGQsIHNldERhdGUsIHN0YXJ0T2ZXZWVrLCBzdWIsIHNldERlZmF1bHRPcHRpb25zLCBMb2NhbGUsIHBhcnNlSVNPfSBmcm9tICdkYXRlLWZucydcbmltcG9ydCB7VFJBTlNMT0NPX1NDT1BFLCBUcmFuc2xvY29TZXJ2aWNlfSBmcm9tIFwiQG5nbmVhdC90cmFuc2xvY29cIjtcbmltcG9ydCB7ZW5HQiwgZXMsIG5sfSBmcm9tIFwiZGF0ZS1mbnMvbG9jYWxlXCI7XG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiaWl0LWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJ2JpaXQtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydiaWl0LWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCaWl0RGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogVFJBTlNMT0NPX1NDT1BFLFxuICAgICAgdXNlVmFsdWU6IHtzY29wZTogJ3dpemFyZHJ5LXRoZW1lL2lucHV0cycsIGFsaWFzOiBcImlucHV0c1wifVxuICAgIH1cbiAgXSxcbiAgaG9zdDoge1xuICAgICcoZG9jdW1lbnQ6cG9pbnRlcmRvd24pJzogJ2hhbmRsZU1vdXNlRXZlbnRzKCRldmVudCknXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmlpdERhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcbiAgQElucHV0KCdjYWxlbmRhci1tb2RlJykgc2V0IGlzQ2FsZW5kYXJNb2RlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmNhbGVuZGFyTW9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGVuZGFyTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZERheXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBkaXNhYmxlV2Vla2RheXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc2FibGVXZWVrZW5kczogYm9vbGVhbjtcbiAgQElucHV0KCkgdGltZVBpY2tlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgbWluOiBEYXRlO1xuICBASW5wdXQoKSBtYXg6IERhdGU7XG4gIEBJbnB1dCgpIHNldCBwbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgfVxuICBwcm90ZWN0ZWQgX3BsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCB2YWx1ZTogRGF0ZTtcbiAgcHJvdGVjdGVkIGRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbW9udGhTZWxlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgZGF5czogRGF0ZVtdID0gW107XG4gIHByb3RlY3RlZCBoZWFkZXJzID0gW1wiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCIsIFwiU3VcIl07XG4gIHByb3RlY3RlZCB2aWV3ZXJEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJvdGVjdGVkIGxvY2FsZTogTG9jYWxlO1xuXG4gIHByb3RlY3RlZCBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtyZXR1cm4gdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmlucHV0LW9iamVjdCcpfVxuICBwcm90ZWN0ZWQgZ2V0IGRyb3Bkb3duRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7cmV0dXJuIHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wb3B1cCcpfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBhZGQgPSBhZGQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdWIgPSBzdWI7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYXJzZUlTTyA9IHBhcnNlSVNPO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGUpIHtcbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbTogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHRyYW5zbG9jbzogVHJhbnNsb2NvU2VydmljZVxuICApIHsgfVxuXG4gIGNoZWNrQm9vbGVhbklucHV0KHZhbHVlKSB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgZmFsc2U6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBEYXRlKSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJNb2RlICYmICF2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5taW4gJiYgbmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSA8PSAobmV3IERhdGUodGhpcy5taW4pLmdldFRpbWUoKSkpIHZhbHVlID0gYWRkKHRoaXMubWluLCB7bWludXRlczogMX0pO1xuICAgICAgaWYgKHRoaXMubWF4ICYmIG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkgPiBuZXcgRGF0ZSh0aGlzLm1heCkuZ2V0VGltZSgpKSB2YWx1ZSA9IHN1Yih0aGlzLm1heCwge21pbnV0ZXM6IDF9KTtcblxuICAgICAgdGhpcy52YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMudmlld2VyRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdExvY2FsaXphdGlvbigpO1xuXG4gICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5kaXNhYmxlZCk7XG4gICAgdGhpcy5yZWFkb25seSA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5yZWFkb25seSk7XG4gICAgdGhpcy5yZXF1aXJlZCA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5yZXF1aXJlZCk7XG4gICAgdGhpcy5kaXNhYmxlV2Vla2RheXMgPSB0aGlzLmNoZWNrQm9vbGVhbklucHV0KHRoaXMuZGlzYWJsZVdlZWtkYXlzKTtcbiAgICB0aGlzLmRpc2FibGVXZWVrZW5kcyA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy5kaXNhYmxlV2Vla2VuZHMpO1xuICAgIHRoaXMudGltZVBpY2tlciA9IHRoaXMuY2hlY2tCb29sZWFuSW5wdXQodGhpcy50aW1lUGlja2VyKTtcblxuICAgIHRoaXMuZHJhd0NhbGVuZGFyKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRMb2NhbGl6YXRpb24oKSB7XG4gICAgc3dpdGNoICh0aGlzLnRyYW5zbG9jby5nZXRBY3RpdmVMYW5nKCkpIHtcbiAgICAgIGNhc2UgJ2VzJzpcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdubCc6XG4gICAgICAgIHRoaXMubG9jYWxlID0gbmw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBlbkdCO1xuICAgIH1cblxuICAgIHNldERlZmF1bHRPcHRpb25zKHtsb2NhbGU6IHRoaXMubG9jYWxlfSk7XG4gIH1cblxuICBoYW5kbGVNb3VzZUV2ZW50cygkZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbiAmJiAhdGhpcy5lbGVtLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVZpZXcoKSB7XG4gICAgdGhpcy5tb250aFNlbGVjdG9yID0gIXRoaXMubW9udGhTZWxlY3RvcjtcbiAgICB0aGlzLnNldFBvcHVwQ29tcG9uZW50UHJvcGVydGllcygpO1xuICB9XG5cbiAgb3BlbkRyb3Bkb3duKCkge1xuICAgIGlmICghdGhpcy52YWx1ZSkgdGhpcy5vbk1vZGVsQ2hhbmdlKG5ldyBEYXRlKCkpO1xuXG4gICAgdGhpcy52aWV3ZXJEYXRlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLm1vbnRoU2VsZWN0b3IgPSBmYWxzZTtcbiAgICB0aGlzLmRyYXdDYWxlbmRhcigpO1xuICAgIHRoaXMuc2V0UG9wdXBDb21wb25lbnRQcm9wZXJ0aWVzKCk7XG4gICAgKHRoaXMuaW5wdXRFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZvY3VzKCk7XG5cbiAgICAvLyBTZXR0aW5nIGEgdGltZW91dCBiZWNhdXNlIGl0IGRvZXNuJ3QgbG9hZCB1cHdhcmRzL2Rvd253YXJkcyBjc3MgY2xhc3NlcyBvbiBleGVjdXRpb24gdGltZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5kcm9wZG93bkVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgXCJ0cnVlXCIpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCkge1xuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgdGhpcy5kcm9wZG93bkVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgXCJmYWxzZVwiKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3B1cENvbXBvbmVudFByb3BlcnRpZXMoKSB7XG4gICAgbGV0IGRyb3Bkb3duID0gdGhpcy5kcm9wZG93bkVsZW1lbnQ7XG4gICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cbiAgICBsZXQgaW5wdXQgPSB0aGlzLmlucHV0RWxlbWVudDtcblxuICAgIC8vIENoZWNraW5nIGF2YWlsYWJsZSBzY3JlZW4gc3BhY2VcbiAgICBjb25zdCBmaXRzQm90dG9tID0gYm90dG9tQ2hlY2soKTtcbiAgICBjb25zdCBmaXRzUmlnaHQgPSByaWdodENoZWNrKCk7XG4gICAgY29uc3QgZml0c0xlZnQgPSBsZWZ0Q2hlY2soKTtcblxuICAgIGlmICghZml0c1JpZ2h0ICYmIGZpdHNMZWZ0KSB7XG4gICAgICBkcm9wZG93bi5zdHlsZS5tYXJnaW5MZWZ0ID0gaW5wdXQub2Zmc2V0V2lkdGggLSBkcm9wZG93bi5vZmZzZXRXaWR0aCArICdweCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3Bkb3duLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsO1xuICAgIH1cblxuICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ29ud2FyZHMnKTtcbiAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdkb3dud2FyZHMnKTtcblxuICAgIGlmICghZml0c0JvdHRvbSkge1xuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnb253YXJkcycpO1xuICAgICAgZHJvcGRvd24uc3R5bGUubWFyZ2luVG9wID0gLShkcm9wZG93bi5vZmZzZXRIZWlnaHQgKyBpbnB1dC5vZmZzZXRIZWlnaHQpICsgJ3B4JztcbiAgICB9IGVsc2Uge1xuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnZG93bndhcmRzJyk7XG4gICAgICBkcm9wZG93bi5zdHlsZS5tYXJnaW5Ub3AgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgaW5uZXIgZnVuY3Rpb25zXG4gICAgZnVuY3Rpb24gYm90dG9tQ2hlY2soKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tICsgZHJvcGRvd24ub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodCB8fFxuICAgICAgICBpbnB1dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBkcm9wZG93bi5vZmZzZXRIZWlnaHQgPD0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaWdodENoZWNrKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ICsgZHJvcGRvd24ub2Zmc2V0V2lkdGggPD0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGVmdENoZWNrKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0IC0gZHJvcGRvd24ub2Zmc2V0V2lkdGggPj0gMDtcbiAgICB9XG4gIH1cblxuICBkcmF3Q2FsZW5kYXIoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3REYXkgPSBzdGFydE9mV2VlayhzZXREYXRlKHRoaXMudmlld2VyRGF0ZSwgMSkpO1xuICAgIGNvbnN0IGxhc3REYXkgPSBhZGQoZmlyc3REYXksIHtkYXlzOjQxfSk7XG5cbiAgICB0aGlzLmRheXMgPSBlYWNoRGF5T2ZJbnRlcnZhbCh7c3RhcnQ6Zmlyc3REYXksIGVuZDpsYXN0RGF5fSk7XG4gIH1cblxuICBwcmV2TW9udGgoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3ZXJEYXRlID0gc3ViKHRoaXMudmlld2VyRGF0ZSwge21vbnRoczoxfSlcbiAgICB0aGlzLmRyYXdDYWxlbmRhcigpO1xuICB9XG5cbiAgbmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIHRoaXMudmlld2VyRGF0ZSA9IGFkZCh0aGlzLnZpZXdlckRhdGUsIHttb250aHM6MX0pO1xuICAgIHRoaXMuZHJhd0NhbGVuZGFyKCk7XG4gIH1cblxuICBzZXRUb2RheSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdlckRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZHJhd0NhbGVuZGFyKCk7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgbG9nKHZhbHVlKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnREVWRUxPUE1FTlQgTE9HOiAnLCB2YWx1ZSk7XG4gIH1cbn1cblxuXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY2FsZW5kYXJNb2RlOyB0aGVuIGNhbGVuZGFyTW9kZVRlbXBsYXRlIGVsc2UgZGF0ZVBpY2tlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiYmlpdC1pbnB1dFwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5yZWFkb25seV09XCJyZWFkb25seVwiID5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dC1vYmplY3RcIlxuICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlICYmICF0aW1lUGlja2VyID8gKHZhbHVlIHwgZGF0ZTogJ3l5eXktTU0tZGQnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmJiB0aW1lUGlja2VyID8gKHZhbHVlIHwgZGF0ZTogJ3l5eXktTU0tZGRcXFRISDptbScpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZShwYXJzZUlTTygkZXZlbnQpKVwiXG4gICAgICAgICAgICAgW3R5cGVdPVwidGltZVBpY2tlciA/ICdkYXRldGltZS1sb2NhbCcgOiAnZGF0ZSdcIiByZXF1aXJlZFxuICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRyb3Bkb3duT3BlbiA/ICcjRDlEOUQ5JyA6IG51bGxcIlxuICAgICAgICAgICAgIFttaW5dPVwibWluID8gKG1pbiB8IGRhdGU6ICd5eXl5LU1NLWRkJykgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgIFttYXhdPVwibWF4ID8gKG1heCB8IGRhdGU6ICd5eXl5LU1NLWRkJykgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2hvdy1pY29uLWNvbnRhaW5lclwiXG4gICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImRyb3Bkb3duT3BlbiA/ICcjRDlEOUQ5JyA6IG51bGxcIlxuICAgICAgICAgICAoY2xpY2spPVwiZHJvcGRvd25PcGVuID8gY2xvc2VEcm9wZG93bigpOiBvcGVuRHJvcGRvd24oKVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImRyb3Bkb3duT3BlbiA/IGNsb3NlRHJvcGRvd24oKTogb3BlbkRyb3Bkb3duKClcIlxuICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCInY2FsZW5kYXInXCJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LXNob3ctaWNvblwiXG4gICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogZHJvcGRvd25PcGVuID8gJ3ZhcigtLW1haW4tY29sb3IpJyA6ICd2YXIoLS1jaGFydC1jb21wb25lbnQtY29sb3IpJ31cIlxuICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1wbGFjZWhvbGRlciBpbnB1dC1maWxsZWRcIj5cbiAgICAgICAge3tfcGxhY2Vob2xkZXJ9fVxuICAgICAgICA8YSAqbmdJZj1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInZhbHVlID8gbnVsbCA6ICdyZWQnXCI+KjwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJpaXQtaWNvbiAqbmdJZj1cImVycm9yIHx8ICh2YWx1ZSB8IGlzRGlzYWJsZWQ6IGRpc2FibGVkRGF5czogZGlzYWJsZVdlZWtkYXlzOiBkaXNhYmxlV2Vla2VuZHM6IG1pbjogbWF4KVwiXG4gICAgICAgICAgICAgICAgIG5hbWU9XCJleGNsYW1hdGlvblwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZXJyb3ItaWNvblwiXG4gICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6JyNBMTA5M0YnfVwiXG4gICAgICA+PC9iaWl0LWljb24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZGVzY3JpcHRpb25cIiBjbGFzcz1cImlucHV0LWRlc2NyaXB0aW9uXCI+XG4gICAgICAgIDxhPlxuICAgICAgICAgIHt7ZGVzY3JpcHRpb259fVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAwO1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXBcIlxuICAgICAgICAgICAgIFtjbGFzcy5kcm9wZG93bi1vcGVuXT1cImRyb3Bkb3duT3BlblwiXG4gICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCIhbW9udGhTZWxlY3RvciAmJiB0aW1lUGlja2VyID8gJzI5LjFlbSArIDNweCknIDogbnVsbFwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhbW9udGhTZWxlY3RvclwiXG4gICAgICAgICAgICAgICBjbGFzcz1cIm1vbnRoLXZpZXdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGJpaXQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicm90YXRlOiAxODBkZWdcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2TW9udGgoKVwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBiaWl0LWJ1dHRvbiB0ZXJ0aWFyeVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGgtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VWaWV3KClcIj5cbiAgICAgICAgICAgICAgICB7e3ZpZXdlckRhdGUgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICAgICAgICB7e3ZpZXdlckRhdGUgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBiaWl0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKClcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXMgfCBzbGljZTowOjdcIlxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1lbGVtZW50IGhlYWRlclwiPlxuICAgICAgICAgICAgICAgIHt7KGRheSB8IHRyYW5zbG9jb0RhdGU6IHt3ZWVrZGF5OiAnc2hvcnQnfSkuc3Vic3RyaW5nKDAsMikgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtZWxlbWVudCBkYXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vdXRlci1kYXldPVwiZGF5IHwgb3V0T2ZNb250aDogdmlld2VyRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXRvZGF5XT1cImRheSB8IGlzVG9kYXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkYXkgfCBpc1NhbWVEYXk6IHZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGF5IHwgaXNEaXNhYmxlZDogZGlzYWJsZWREYXlzOiBkaXNhYmxlV2Vla2RheXM6IGRpc2FibGVXZWVrZW5kczogc3ViKG1pbiwge2RheXM6IDF9KTogYWRkKG1heCwge2RheXM6IDF9KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2UoZGF5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ZGF5IHwgY2FsZW5kYXJEYXRlfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBiaWl0LWJ1dHRvbiB0ZXJ0aWFyeVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidG9kYXktYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VG9kYXkoKVwiPlxuICAgICAgICAgICAgICAgIHt7J2lucHV0cy50b2RheScgfCB0cmFuc2xvY299fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBiaWl0LWJ1dHRvbiB0ZXJ0aWFyeVxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZURyb3Bkb3duKClcIj5cbiAgICAgICAgICAgICAgICB7eydpbnB1dHMuZG9uZScgfCB0cmFuc2xvY299fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXJcIiAqbmdJZj1cIiFtb250aFNlbGVjdG9yICYmIHRpbWVQaWNrZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMmVtO1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShzdWIodmFsdWUsIHtob3VyczogMX0pKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICd2YXIoLS1jaGFydC1jb21wb25lbnQtY29sb3IpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKHN1Yih2YWx1ZSwge2hvdXJzOiAxfSkpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gKHN1Yih2YWx1ZSwge2hvdXJzOiAxfSkgfCBkYXRlOiAnSCcpIDogJycgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZSA/ICh2YWx1ZSB8IGRhdGU6ICdIJykgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHtob3VyczogMX0pKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZSA/IChhZGQodmFsdWUsIHtob3VyczogMX0pIHwgZGF0ZTogJ0gnKSA6ICcnIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2UoYWRkKHZhbHVlLCB7aG91cnM6IDF9KSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAndmFyKC0tY2hhcnQtY29tcG9uZW50LWNvbG9yKSd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRvd25cIlxuICAgICAgICAgICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAyZW07XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKHN1Yih2YWx1ZSwge21pbnV0ZXM6IDF9KSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAndmFyKC0tY2hhcnQtY29tcG9uZW50LWNvbG9yKSd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShzdWIodmFsdWUsIHttaW51dGVzOiAxfSkpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlID8gKHN1Yih2YWx1ZSwge21pbnV0ZXM6IDF9KSB8IGRhdGU6ICdtbScpIDogJycgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZSA/ICh2YWx1ZSB8IGRhdGU6ICdtbScpIDogJycgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2UoYWRkKHZhbHVlLCB7bWludXRlczogMX0pKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZSA/IChhZGQodmFsdWUsIHttaW51dGVzOiAxfSkgfCBkYXRlOiAnbW0nKSA6ICcnIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2UoYWRkKHZhbHVlLCB7bWludXRlczogMX0pKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICd2YXIoLS1jaGFydC1jb21wb25lbnQtY29sb3IpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG93blwiXG4gICAgICAgICAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInllYXItdmlld1wiICpuZ0lmPVwibW9udGhTZWxlY3RvclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gYmlpdC1idXR0b24gdGVydGlhcnlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1vbnRoLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVmlldygpXCI+XG4gICAgICAgICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiA4ZW07XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZNb250aCgpXCI+XG4gICAgICAgICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAndmFyKC0tY2hhcnQtY29tcG9uZW50LWNvbG9yKSd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1cFwiXG4gICAgICAgICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gdGVydGlhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBzdWIodmlld2VyRGF0ZSwge21vbnRoczogMn0pXCI+XG4gICAgICAgICAgICAgICAgICB7e3N1Yih2aWV3ZXJEYXRlLCB7bW9udGhzOiAyfSkgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZNb250aCgpXCI+XG4gICAgICAgICAgICAgICAgICB7e3N1Yih2aWV3ZXJEYXRlLCB7bW9udGhzOiAxfSkgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICB7e3ZpZXdlckRhdGUgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRNb250aCgpXCI+XG4gICAgICAgICAgICAgICAgICB7e2FkZCh2aWV3ZXJEYXRlLCB7bW9udGhzOiAxfSkgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSB0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IGFkZCh2aWV3ZXJEYXRlLCB7bW9udGhzOiAyfSlcIj5cbiAgICAgICAgICAgICAgICAgIHt7YWRkKHZpZXdlckRhdGUsIHttb250aHM6IDJ9KSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiPlxuICAgICAgICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJ3ZhcigtLWNoYXJ0LWNvbXBvbmVudC1jb2xvciknfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG93blwiXG4gICAgICAgICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiA1ZW07XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBzdWIodmlld2VyRGF0ZSwge3llYXJzOiAxfSlcIj5cbiAgICAgICAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICd2YXIoLS1jaGFydC1jb21wb25lbnQtY29sb3IpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwXCJcbiAgICAgICAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSB0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IHN1Yih2aWV3ZXJEYXRlLCB7eWVhcnM6IDJ9KVwiPlxuICAgICAgICAgICAgICAgICAge3tzdWIodmlld2VyRGF0ZSwge3llYXJzOiAyfSkgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IHN1Yih2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KVwiPlxuICAgICAgICAgICAgICAgICAge3tzdWIodmlld2VyRGF0ZSwge3llYXJzOiAxfSkgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gYWRkKHZpZXdlckRhdGUsIHt5ZWFyczogMX0pXCI+XG4gICAgICAgICAgICAgICAgICB7e2FkZCh2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gdGVydGlhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBhZGQodmlld2VyRGF0ZSwge3llYXJzOiAyfSlcIj5cbiAgICAgICAgICAgICAgICAgIHt7YWRkKHZpZXdlckRhdGUsIHt5ZWFyczogMn0pIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IGFkZCh2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KVwiPlxuICAgICAgICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJ3ZhcigtLWNoYXJ0LWNvbXBvbmVudC1jb2xvciknfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG93blwiXG4gICAgICAgICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gYmlpdC1idXR0b24gdGVydGlhcnlcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZHJhd0NhbGVuZGFyKCk7IGNoYW5nZVZpZXcoKVwiPlxuICAgICAgICAgICAgICAgIHt7J2lucHV0cy5iYWNrJyB8IHRyYW5zbG9jb319XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tbGluZVwiPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImVycm9yXCIgY2xhc3M9XCJpbnB1dC1lcnJvci1tc2dcIj5cbiAgICAgICAgPGE+XG4gICAgICAgICAge3tlcnJvcn19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInZhbHVlIHwgaXNEaXNhYmxlZDogZGlzYWJsZWREYXlzOiBkaXNhYmxlV2Vla2RheXM6IGRpc2FibGVXZWVrZW5kczogbWluOiBtYXhcIiBjbGFzcz1cImlucHV0LWVycm9yLW1zZ1wiPlxuICAgICAgICA8YT5cbiAgICAgICAgICB7eydpbnB1dHMuZGF0ZS1lcnJvcicgfCB0cmFuc2xvY299fVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NhbGVuZGFyTW9kZVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicG9wdXAgY2FsZW5kYXItbW9kZVwiXG4gICAgICAgW3N0eWxlLmhlaWdodF09XCIhbW9udGhTZWxlY3RvciAmJiB0aW1lUGlja2VyID8gJ2NhbGMoMjkuMWVtICsgM3B4KScgOiBudWxsXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFtb250aFNlbGVjdG9yXCJcbiAgICAgICAgIGNsYXNzPVwibW9udGgtdmlld1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vbnRoLXNlbGVjdG9yXCI+XG4gICAgICAgIDxidXR0b24gYmlpdC1pY29uXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJyb3RhdGU6IDE4MGRlZ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZNb250aCgpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGJpaXQtYnV0dG9uIHRlcnRpYXJ5XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVZpZXcoKVwiPlxuICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGJpaXQtaWNvblxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5cyB8IHNsaWNlOjA6N1wiXG4gICAgICAgICAgICAgY2xhc3M9XCJncmlkLWVsZW1lbnQgaGVhZGVyXCI+XG4gICAgICAgICAge3soZGF5IHwgdHJhbnNsb2NvRGF0ZToge3dlZWtkYXk6ICdzaG9ydCd9KS5zdWJzdHJpbmcoMCwyKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1lbGVtZW50IGRheVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm91dGVyLWRheV09XCJkYXkgfCBvdXRPZk1vbnRoOiB2aWV3ZXJEYXRlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtdG9kYXldPVwiZGF5IHwgaXNUb2RheVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheSB8IGlzU2FtZURheTogdmFsdWVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJkYXkgfCBpc0Rpc2FibGVkOiBkaXNhYmxlZERheXM6IGRpc2FibGVXZWVrZGF5czogZGlzYWJsZVdlZWtlbmRzOiBzdWIobWluLCB7ZGF5czogMX0pOiBhZGQobWF4LCB7ZGF5czogMX0pXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShkYXkpXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICA+XG4gICAgICAgICAge3tkYXkgfCBjYWxlbmRhckRhdGV9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICA8YnV0dG9uIGJpaXQtYnV0dG9uIHRlcnRpYXJ5XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0b2RheS1idG5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRUb2RheSgpXCI+XG4gICAgICAgICAge3snaW5wdXRzLnRvZGF5JyB8IHRyYW5zbG9jb319XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGltZS1waWNrZXJcIiAqbmdJZj1cIiFtb250aFNlbGVjdG9yICYmIHRpbWVQaWNrZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMmVtO1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKHN1Yih2YWx1ZSwge2hvdXJzOiAxfSkpXCI+XG4gICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAndmFyKC0tY2hhcnQtY29tcG9uZW50LWNvbG9yKSd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1cFwiXG4gICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKHN1Yih2YWx1ZSwge2hvdXJzOiAxfSkpXCI+XG4gICAgICAgICAgICB7eyB2YWx1ZSA/IChzdWIodmFsdWUsIHtob3VyczogMX0pIHwgZGF0ZTogJ0gnKSA6ICcnIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gcHJpbWFyeVwiPlxuICAgICAgICAgICAge3sgdmFsdWUgPyAodmFsdWUgfCBkYXRlOiAnSCcpIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2UoYWRkKHZhbHVlLCB7aG91cnM6IDF9KSlcIj5cbiAgICAgICAgICAgIHt7IHZhbHVlID8gKGFkZCh2YWx1ZSwge2hvdXJzOiAxfSkgfCBkYXRlOiAnSCcpIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHtob3VyczogMX0pKVwiPlxuICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJ3ZhcigtLWNoYXJ0LWNvbXBvbmVudC1jb2xvciknfVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG93blwiXG4gICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMmVtO1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1vZGVsQ2hhbmdlKHN1Yih2YWx1ZSwge21pbnV0ZXM6IDF9KSlcIj5cbiAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICd2YXIoLS1jaGFydC1jb21wb25lbnQtY29sb3IpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwXCJcbiAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2Uoc3ViKHZhbHVlLCB7aG91cnM6IDF9KSlcIj5cbiAgICAgICAgICAgIHt7IHZhbHVlID8gKHN1Yih2YWx1ZSwge21pbnV0ZXM6IDF9KSB8IGRhdGU6ICdtbScpIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBwcmltYXJ5XCI+XG4gICAgICAgICAgICB7eyB2YWx1ZSA/ICh2YWx1ZSB8IGRhdGU6ICdtbScpIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9kZWxDaGFuZ2UoYWRkKHZhbHVlLCB7aG91cnM6IDF9KSlcIj5cbiAgICAgICAgICAgIHt7IHZhbHVlID8gKGFkZCh2YWx1ZSwge21pbnV0ZXM6IDF9KSB8IGRhdGU6ICdtbScpIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwib25Nb2RlbENoYW5nZShhZGQodmFsdWUsIHttaW51dGVzOiAxfSkpXCI+XG4gICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAndmFyKC0tY2hhcnQtY29tcG9uZW50LWNvbG9yKSd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3duXCJcbiAgICAgICAgICAgID48L2JpaXQtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ5ZWFyLXZpZXdcIiAqbmdJZj1cIm1vbnRoU2VsZWN0b3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1zZWxlY3RvclwiPlxuICAgICAgICA8YnV0dG9uIGJpaXQtYnV0dG9uIHRlcnRpYXJ5XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVZpZXcoKVwiPlxuICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHttb250aDogJ2xvbmcnfSB9fVxuICAgICAgICAgIHt7dmlld2VyRGF0ZSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogOGVtO1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2TW9udGgoKVwiPlxuICAgICAgICAgICAgPGJpaXQtaWNvbiBbbmFtZV09XCIncmlnaHRfYXJyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhTdHlsZV09XCJ7ZmlsbDogJ3ZhcigtLWNoYXJ0LWNvbXBvbmVudC1jb2xvciknfVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXBcIlxuICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gc3ViKHZpZXdlckRhdGUsIHttb250aHM6IDJ9KVwiPlxuICAgICAgICAgICAge3tzdWIodmlld2VyRGF0ZSwge21vbnRoczogMn0pIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2TW9udGgoKVwiPlxuICAgICAgICAgICAge3tzdWIodmlld2VyRGF0ZSwge21vbnRoczogMX0pIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gcHJpbWFyeVwiPlxuICAgICAgICAgICAge3t2aWV3ZXJEYXRlIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0TW9udGgoKVwiPlxuICAgICAgICAgICAge3thZGQodmlld2VyRGF0ZSwge21vbnRoczogMX0pIHwgdHJhbnNsb2NvRGF0ZToge21vbnRoOiAnbG9uZyd9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gdGVydGlhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBhZGQodmlld2VyRGF0ZSwge21vbnRoczogMn0pXCI+XG4gICAgICAgICAgICB7e2FkZCh2aWV3ZXJEYXRlLCB7bW9udGhzOiAyfSkgfCB0cmFuc2xvY29EYXRlOiB7bW9udGg6ICdsb25nJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBhcnJvd1wiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dE1vbnRoKClcIj5cbiAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICd2YXIoLS1jaGFydC1jb21wb25lbnQtY29sb3IpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRvd25cIlxuICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogNWVtO1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGFycm93XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gc3ViKHZpZXdlckRhdGUsIHt5ZWFyczogMX0pXCI+XG4gICAgICAgICAgICA8YmlpdC1pY29uIFtuYW1lXT1cIidyaWdodF9hcnJvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICBbcGF0aFN0eWxlXT1cIntmaWxsOiAndmFyKC0tY2hhcnQtY29tcG9uZW50LWNvbG9yKSd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1cFwiXG4gICAgICAgICAgICA+PC9iaWl0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gdGVydGlhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBzdWIodmlld2VyRGF0ZSwge3llYXJzOiAyfSlcIj5cbiAgICAgICAgICAgIHt7c3ViKHZpZXdlckRhdGUsIHt5ZWFyczogMn0pIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBzdWIodmlld2VyRGF0ZSwge3llYXJzOiAxfSlcIj5cbiAgICAgICAgICAgIHt7c3ViKHZpZXdlckRhdGUsIHt5ZWFyczogMX0pIHwgdHJhbnNsb2NvRGF0ZToge3llYXI6ICdudW1lcmljJ30gfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbSBwcmltYXJ5XCI+XG4gICAgICAgICAgICB7e3ZpZXdlckRhdGUgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAoY2xpY2spPVwidmlld2VyRGF0ZSA9IGFkZCh2aWV3ZXJEYXRlLCB7eWVhcnM6IDF9KVwiPlxuICAgICAgICAgICAge3thZGQodmlld2VyRGF0ZSwge3llYXJzOiAxfSkgfCB0cmFuc2xvY29EYXRlOiB7eWVhcjogJ251bWVyaWMnfSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIHRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3ZXJEYXRlID0gYWRkKHZpZXdlckRhdGUsIHt5ZWFyczogMn0pXCI+XG4gICAgICAgICAgICB7e2FkZCh2aWV3ZXJEYXRlLCB7eWVhcnM6IDJ9KSB8IHRyYW5zbG9jb0RhdGU6IHt5ZWFyOiAnbnVtZXJpYyd9IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gYXJyb3dcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdlckRhdGUgPSBhZGQodmlld2VyRGF0ZSwge3llYXJzOiAxfSlcIj5cbiAgICAgICAgICAgIDxiaWl0LWljb24gW25hbWVdPVwiJ3JpZ2h0X2Fycm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtwYXRoU3R5bGVdPVwie2ZpbGw6ICd2YXIoLS1jaGFydC1jb21wb25lbnQtY29sb3IpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRvd25cIlxuICAgICAgICAgICAgPjwvYmlpdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgICA8YnV0dG9uIGJpaXQtYnV0dG9uIHRlcnRpYXJ5XG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRyYXdDYWxlbmRhcigpOyBjaGFuZ2VWaWV3KClcIj5cbiAgICAgICAgICB7eydpbnB1dHMuYmFjaycgfCB0cmFuc2xvY299fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|