@ptsecurity/mosaic 15.9.3 → 15.9.5

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.
@@ -1,22 +1,19 @@
1
1
  import { AfterContentInit, EventEmitter } from '@angular/core';
2
2
  import { DateAdapter } from '@ptsecurity/mosaic/core';
3
3
  import * as i0 from "@angular/core";
4
+ export declare type MonthName = {
5
+ name: string;
6
+ nameShort: string;
7
+ value: number;
8
+ disabled: boolean;
9
+ };
4
10
  /** Default header for McCalendar */
5
11
  export declare class McCalendarHeader<D> implements AfterContentInit {
6
12
  private readonly adapter;
7
- monthNames: {
8
- name: string;
9
- value: number;
10
- }[];
13
+ monthNames: MonthName[];
11
14
  selectedMonth: number;
12
- years: {
13
- name: number;
14
- value: string;
15
- }[];
16
- selectedYear: {
17
- name: number;
18
- value: string;
19
- };
15
+ years: number[];
16
+ selectedYear: number;
20
17
  get activeDate(): D;
21
18
  set activeDate(value: D);
22
19
  private _activeDate;
@@ -27,6 +24,7 @@ export declare class McCalendarHeader<D> implements AfterContentInit {
27
24
  set minDate(value: D | null);
28
25
  private _minDate;
29
26
  get previousDisabled(): boolean;
27
+ get currentDisabled(): boolean;
30
28
  get nextDisabled(): boolean;
31
29
  /** Emits when any date is activated. */
32
30
  readonly activeDateChange: EventEmitter<D>;
@@ -45,7 +43,9 @@ export declare class McCalendarHeader<D> implements AfterContentInit {
45
43
  selectNextMonth(): void;
46
44
  private compareDate;
47
45
  private updateSelectedValues;
48
- private updateYearsArray;
46
+ private updateSelectionOptions;
47
+ private updateYearsOptions;
48
+ private updateMonthOptions;
49
49
  static ɵfac: i0.ɵɵFactoryDeclaration<McCalendarHeader<any>, never>;
50
50
  static ɵcmp: i0.ɵɵComponentDeclaration<McCalendarHeader<any>, "mc-calendar-header", ["mcCalendarHeader"], { "activeDate": "activeDate"; "maxDate": "maxDate"; "minDate": "minDate"; }, { "activeDateChange": "activeDateChange"; "monthSelected": "monthSelected"; "yearSelected": "yearSelected"; }, never, never, false, never>;
51
51
  }
@@ -143,6 +143,16 @@ export declare class McDatepickerInput<D> implements McFormFieldControl<D>, Cont
143
143
  private getDefaultValue;
144
144
  private getTimeStringFromDate;
145
145
  private getDateEditMetrics;
146
+ private isMaxMonth;
147
+ private isMinMonth;
148
+ private isMaxYear;
149
+ private isMinYear;
150
+ private getMaxDate;
151
+ private getMinDate;
152
+ private getMaxMonth;
153
+ private getMinMonth;
154
+ private getMaxYear;
155
+ private getMinYear;
146
156
  private incrementDate;
147
157
  private getLastDayFor;
148
158
  private decrementDate;
@@ -1,3 +1,3 @@
1
1
  import { Version } from '@angular/core';
2
- export const VERSION = new Version('15.9.3+sha-5e8e536');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9jb3JlL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlcnNpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNS45LjMrc2hhLTVlOGU1MzYnKTtcbiJdfQ==
2
+ export const VERSION = new Version('15.9.5+sha-0253850');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9jb3JlL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlcnNpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNS45LjUrc2hhLTAyNTM4NTAnKTtcbiJdfQ==
@@ -21,8 +21,9 @@ export class McCalendarHeader {
21
21
  this.activeDateChange = new EventEmitter();
22
22
  this.monthSelected = new EventEmitter();
23
23
  this.yearSelected = new EventEmitter();
24
- this.monthNames = this.adapter.getMonthNames('long')
25
- .map((name, i) => ({ name, value: i }));
24
+ this.monthNames = this.adapter.getMonthNames('long').map((name, i) => {
25
+ return { name, nameShort: this.adapter.getMonthNames('short')[i], value: i, disabled: false };
26
+ });
26
27
  }
27
28
  get activeDate() {
28
29
  return this._activeDate;
@@ -30,6 +31,7 @@ export class McCalendarHeader {
30
31
  set activeDate(value) {
31
32
  this._activeDate = value;
32
33
  this.updateSelectedValues();
34
+ this.updateSelectionOptions();
33
35
  }
34
36
  get maxDate() {
35
37
  return this._maxDate;
@@ -39,7 +41,7 @@ export class McCalendarHeader {
39
41
  return;
40
42
  }
41
43
  this._maxDate = value;
42
- this.updateYearsArray();
44
+ this.updateYearsOptions();
43
45
  }
44
46
  get minDate() {
45
47
  return this._minDate;
@@ -49,16 +51,20 @@ export class McCalendarHeader {
49
51
  return;
50
52
  }
51
53
  this._minDate = value;
52
- this.updateYearsArray();
54
+ this.updateYearsOptions();
53
55
  }
54
56
  get previousDisabled() {
55
- return this.compareDate(this.activeDate, this.minDate) < 0;
57
+ return this.compareDate(this.activeDate, this.minDate) <= 0;
58
+ }
59
+ get currentDisabled() {
60
+ const today = this.adapter.today();
61
+ return this.compareDate(today, this.minDate) < 0 || this.compareDate(today, this.maxDate) > 0;
56
62
  }
57
63
  get nextDisabled() {
58
64
  return this.compareDate(this.activeDate, this.maxDate) >= 0;
59
65
  }
60
66
  ngAfterContentInit() {
61
- this.updateYearsArray();
67
+ this.updateSelectionOptions();
62
68
  this.updateSelectedValues();
63
69
  }
64
70
  /** Handles when a new month is selected. */
@@ -77,6 +83,7 @@ export class McCalendarHeader {
77
83
  this.activeDate = this.adapter.createDate(year, month, Math.min(this.adapter.getDate(this.activeDate), daysInMonth));
78
84
  this.yearSelected.emit(this.activeDate);
79
85
  this.activeDateChange.emit(this.activeDate);
86
+ this.updateMonthOptions();
80
87
  }
81
88
  selectCurrentDate() {
82
89
  this.activeDate = this.adapter.today();
@@ -100,25 +107,47 @@ export class McCalendarHeader {
100
107
  updateSelectedValues() {
101
108
  this.selectedMonth = this.monthNames[this.adapter.getMonth(this.activeDate)].value;
102
109
  const year = this.adapter.getYear(this.activeDate);
103
- this.selectedYear = this.years.find(({ name }) => name === year)
104
- || { name: year, value: this.adapter.getYearName(this.activeDate) };
110
+ this.selectedYear = this.years.find((item) => item === year) || this.years[0];
111
+ }
112
+ updateSelectionOptions() {
113
+ this.updateYearsOptions();
114
+ this.updateMonthOptions();
105
115
  }
106
- updateYearsArray() {
116
+ updateYearsOptions() {
107
117
  const minYear = this.adapter.getYear(this.minDate);
108
118
  const maxYear = this.adapter.getYear(this.maxDate);
109
119
  this.years = [];
110
120
  for (let key = minYear; key <= maxYear; key++) {
111
- this.years.push({ name: key, value: this.adapter.getYearName(this.adapter.createDate(key)) });
121
+ this.years.push(key);
122
+ }
123
+ }
124
+ updateMonthOptions() {
125
+ if (!this._activeDate) {
126
+ return;
127
+ }
128
+ const minYear = this.adapter.getYear(this.minDate);
129
+ const minMonth = this.adapter.getMonth(this.minDate);
130
+ const maxYear = this.adapter.getYear(this.maxDate);
131
+ const maxMonth = this.adapter.getMonth(this.maxDate);
132
+ const currentYear = this.adapter.getYear(this._activeDate);
133
+ if (currentYear === minYear && currentYear === maxYear) {
134
+ this.monthNames.forEach((month) => (month.disabled = month.value < minMonth || month.value > maxMonth));
135
+ }
136
+ else if (currentYear === minYear) {
137
+ this.monthNames.forEach((month) => (month.disabled = month.value < minMonth));
138
+ }
139
+ else if (currentYear === maxYear) {
140
+ this.monthNames.forEach((month) => (month.disabled = month.value > maxMonth));
112
141
  }
113
142
  }
114
143
  }
115
144
  /** @nocollapse */ McCalendarHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: McCalendarHeader, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Component });
116
- /** @nocollapse */ McCalendarHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: McCalendarHeader, selector: "mc-calendar-header", inputs: { activeDate: "activeDate", maxDate: "maxDate", minDate: "minDate" }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "mc-calendar-header" }, exportAs: ["mcCalendarHeader"], ngImport: i0, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i3.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i4.McValidateDirective, selector: " input[mcInput], input[mcInputPassword], input[mcTimepicker], input[mcDatepicker], textarea[mcTextarea], mc-select, mc-tree-select, mc-tag-list ", exportAs: ["McValidate"] }, { kind: "component", type: i5.McSelect, selector: "mc-select", inputs: ["disabled", "tabIndex", "hiddenItemsText", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "value", "id", "hiddenItemsTextFormatter"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["mcSelect"] }, { kind: "directive", type: i5.McSelectMatcher, selector: "mc-select-matcher, [mc-select-matcher]" }, { kind: "directive", type: i5.McOptionTooltip, selector: "mc-option" }, { kind: "component", type: i1.McOption, selector: "mc-option", inputs: ["value", "showCheckbox", "disabled"], outputs: ["onSelectionChange"], exportAs: ["mcOption"] }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
145
+ /** @nocollapse */ McCalendarHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: McCalendarHeader, selector: "mc-calendar-header", inputs: { activeDate: "activeDate", maxDate: "maxDate", minDate: "minDate" }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "mc-calendar-header" }, exportAs: ["mcCalendarHeader"], ngImport: i0, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [disabled]=\"month.disabled\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value)\">\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ selectedYear }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [disabled]=\"currentDisabled\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i3.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i4.McValidateDirective, selector: " input[mcInput], input[mcInputPassword], input[mcTimepicker], input[mcDatepicker], textarea[mcTextarea], mc-select, mc-tree-select, mc-tag-list ", exportAs: ["McValidate"] }, { kind: "component", type: i5.McSelect, selector: "mc-select", inputs: ["disabled", "tabIndex", "hiddenItemsText", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "value", "id", "hiddenItemsTextFormatter"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["mcSelect"] }, { kind: "directive", type: i5.McSelectMatcher, selector: "mc-select-matcher, [mc-select-matcher]" }, { kind: "directive", type: i5.McOptionTooltip, selector: "mc-option" }, { kind: "component", type: i1.McOption, selector: "mc-option", inputs: ["value", "showCheckbox", "disabled"], outputs: ["onSelectionChange"], exportAs: ["mcOption"] }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
117
146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: McCalendarHeader, decorators: [{
118
147
  type: Component,
119
148
  args: [{ selector: 'mc-calendar-header', exportAs: 'mcCalendarHeader', host: {
120
149
  class: 'mc-calendar-header'
121
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"] }]
150
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [disabled]=\"month.disabled\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value)\">\n <button class=\"mc-button_transparent layout-padding-right-xs\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ selectedYear }}\n\n <i class=\"layout-padding-left-3xs\" mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [disabled]=\"currentDisabled\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"] }]
122
151
  }], ctorParameters: function () { return [{ type: i1.DateAdapter }]; }, propDecorators: { activeDate: [{
123
152
  type: Input
124
153
  }], maxDate: [{
@@ -132,4 +161,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
132
161
  }], yearSelected: [{
133
162
  type: Output
134
163
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9kYXRlcGlja2VyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvZGF0ZXBpY2tlci9jYWxlbmRhci1oZWFkZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7OztBQUd0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBRTVCLG9DQUFvQztBQVlwQyxNQUFNLE9BQU8sZ0JBQWdCO0lBZ0V6QixZQUE2QixPQUF1QjtRQUF2QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQTVEcEQsVUFBSyxHQUFzQyxFQUFFLENBQUM7UUE2QjlDLDRDQUE0QztRQUNwQyxhQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBZXZELGFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFVOUQsd0NBQXdDO1FBQ3JCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDekMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztRQUdwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQzth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QVEsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWhCLEtBQUssSUFBSSxHQUFHLEdBQVcsT0FBTyxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRztJQUNMLENBQUM7O2dJQTVKUSxnQkFBZ0I7b0hBQWhCLGdCQUFnQix5VUMzQjdCLHcvRUEyRUE7MkZEaERhLGdCQUFnQjtrQkFYNUIsU0FBUzsrQkFDSSxvQkFBb0IsWUFDcEIsa0JBQWtCLFFBR3RCO3dCQUNGLEtBQUssRUFBRSxvQkFBb0I7cUJBQzlCLGlCQUNjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07a0dBVTNDLFVBQVU7c0JBRGIsS0FBSztnQkFjRixPQUFPO3NCQURWLEtBQUs7Z0JBaUJGLE9BQU87c0JBRFYsS0FBSztnQkF3QmEsZ0JBQWdCO3NCQUFsQyxNQUFNO2dCQUNZLGFBQWE7c0JBQS9CLE1BQU07Z0JBQ1ksWUFBWTtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQHB0c2VjdXJpdHkvbW9zYWljL2NvcmUnO1xuXG5cbmNvbnN0IGRlZmF1bHRNaW5ZZWFyID0gMTkwMDtcbmNvbnN0IGRlZmF1bHRNYXhZZWFyID0gMjA5OTtcblxuLyoqIERlZmF1bHQgaGVhZGVyIGZvciBNY0NhbGVuZGFyICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21jLWNhbGVuZGFyLWhlYWRlcicsXG4gICAgZXhwb3J0QXM6ICdtY0NhbGVuZGFySGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2NhbGVuZGFyLWhlYWRlci5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnY2FsZW5kYXItaGVhZGVyLnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnbWMtY2FsZW5kYXItaGVhZGVyJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNY0NhbGVuZGFySGVhZGVyPEQ+IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgbW9udGhOYW1lczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdO1xuICAgIHNlbGVjdGVkTW9udGg6IG51bWJlcjtcblxuICAgIHllYXJzOiB7IG5hbWU6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgICBzZWxlY3RlZFllYXI6IHsgbmFtZTogbnVtYmVyOyB2YWx1ZTogc3RyaW5nIH07XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBhY3RpdmVEYXRlKCk6IEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRCkge1xuICAgICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IEQ7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuXG4gICAgc2V0IG1heERhdGUodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcnNBcnJheSgpO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgcHJpdmF0ZSBfbWF4RGF0ZSA9IHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKGRlZmF1bHRNYXhZZWFyLCAxMSk7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtaW5EYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgfVxuXG4gICAgc2V0IG1pbkRhdGUodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy5fbWluRGF0ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcnNBcnJheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21pbkRhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShkZWZhdWx0TWluWWVhciwgMSk7XG5cbiAgICBnZXQgcHJldmlvdXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUodGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUhKSA8IDA7XG4gICAgfVxuXG4gICAgZ2V0IG5leHREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUodGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1heERhdGUhKSA+PSAwO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGlzIGFjdGl2YXRlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhZGFwdGVyOiBEYXRlQWRhcHRlcjxEPikge1xuICAgICAgICB0aGlzLm1vbnRoTmFtZXMgPSB0aGlzLmFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpXG4gICAgICAgICAgICAubWFwKChuYW1lLCBpKSA9PiAoeyBuYW1lLCB2YWx1ZTogaSB9KSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVllYXJzQXJyYXkoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlcygpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWQuICovXG4gICAgb25Nb250aFNlbGVjdGVkKG1vbnRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgeWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgpO1xuICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRoaXMuYWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChub3JtYWxpemVkRGF0ZSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICBNYXRoLm1pbih0aGlzLmFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpLCBkYXlzSW5Nb250aClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm1vbnRoU2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIHdoZW4gYSBuZXcgeWVhciBpcyBzZWxlY3RlZC4gKi9cbiAgICBvblllYXJTZWxlY3RlZCh5ZWFyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgpKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgICAgIE1hdGgubWluKHRoaXMuYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSksIGRheXNJbk1vbnRoKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgc2VsZWN0Q3VycmVudERhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci50b2RheSgpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMgdXNlciBjbGlja3Mgb24gdGhlIHByZXZpb3VzIGJ1dHRvbi4gKi9cbiAgICBzZWxlY3RQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLCAtMSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyB1c2VyIGNsaWNrcyBvbiB0aGUgbmV4dCBidXR0b24uICovXG4gICAgc2VsZWN0TmV4dE1vbnRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5hY3RpdmVEYXRlLCAxKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZURhdGUoZmlyc3Q6IEQsIHNlY29uZDogRCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaXJzdCA9IHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldFllYXIoZmlyc3QpLFxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldE1vbnRoKGZpcnN0KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWNvbmQgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRZZWFyKHNlY29uZCksXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgoc2Vjb25kKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuY29tcGFyZURhdGUobm9ybWFsaXplZEZpcnN0LCBub3JtYWxpemVkU2Vjb25kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkVmFsdWVzKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLm1vbnRoTmFtZXNbdGhpcy5hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSldLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmFkYXB0ZXIuZ2V0WWVhcih0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMueWVhcnMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHllYXIpXG4gICAgICAgICAgICB8fCB7IG5hbWU6IHllYXIsIHZhbHVlOiB0aGlzLmFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5hY3RpdmVEYXRlKSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlWWVhcnNBcnJheSgpIHtcbiAgICAgICAgY29uc3QgbWluWWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMubWluRGF0ZSEpO1xuICAgICAgICBjb25zdCBtYXhZZWFyID0gdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5tYXhEYXRlISk7XG5cbiAgICAgICAgdGhpcy55ZWFycyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGtleTogbnVtYmVyID0gbWluWWVhcjsga2V5IDw9IG1heFllYXI7IGtleSsrKSB7XG4gICAgICAgICAgICB0aGlzLnllYXJzLnB1c2goeyBuYW1lOiBrZXksIHZhbHVlOiB0aGlzLmFkYXB0ZXIuZ2V0WWVhck5hbWUodGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoa2V5KSkgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWMtY2FsZW5kYXItaGVhZGVyX19zZWxlY3QtZ3JvdXBcIj5cbiAgICA8bWMtc2VsZWN0XG4gICAgICAgIGNsYXNzPVwibWMtY2FsZW5kYXItaGVhZGVyX19zZWxlY3RcIlxuICAgICAgICAjbW9udGhTZWxlY3Q9XCJtY1NlbGVjdFwiXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZE1vbnRoXCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ21jLWNhbGVuZGFyLXNlbGVjdC1wYW5lbCdcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTW9udGhTZWxlY3RlZCgkZXZlbnQudmFsdWUpXCI+XG5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudCBsYXlvdXQtcGFkZGluZy1yaWdodC14c1wiXG4gICAgICAgICAgICAgICAgbWMtYnV0dG9uXG4gICAgICAgICAgICAgICAgbWMtc2VsZWN0LW1hdGNoZXJcbiAgICAgICAgICAgICAgICBbY2xhc3MubWMtYWN0aXZlXT1cIm1vbnRoU2VsZWN0LnBhbmVsT3BlblwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCI+XG4gICAgICAgICAgICB7eyBtb250aFNlbGVjdC50cmlnZ2VyVmFsdWUgfX1cblxuICAgICAgICAgICAgPGkgY2xhc3M9XCJsYXlvdXQtcGFkZGluZy1sZWZ0LTN4c1wiIG1jLWljb249XCJtYy1hbmdsZS1kb3duLVNfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYy1vcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgIFttY1Rvb2x0aXBEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibW9udGgudmFsdWVcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoLm5hbWUgfX1cbiAgICAgICAgPC9tYy1vcHRpb24+XG4gICAgPC9tYy1zZWxlY3Q+XG5cbiAgICA8bWMtc2VsZWN0XG4gICAgICAgICN5ZWFyU2VsZWN0PVwibWNTZWxlY3RcIlxuICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRZZWFyXCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ21jLWNhbGVuZGFyLXNlbGVjdC1wYW5lbCdcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uWWVhclNlbGVjdGVkKCRldmVudC52YWx1ZS5uYW1lKVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWMtYnV0dG9uX3RyYW5zcGFyZW50IGxheW91dC1wYWRkaW5nLXJpZ2h0LXhzXCJcbiAgICAgICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICAgICBtYy1zZWxlY3QtbWF0Y2hlclxuICAgICAgICAgICAgICAgIFtjbGFzcy5tYy1hY3RpdmVdPVwieWVhclNlbGVjdC5wYW5lbE9wZW5cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiPlxuICAgICAgICAgICAge3sgdGhpcy5zZWxlY3RlZFllYXIudmFsdWUgfX1cblxuICAgICAgICAgICAgPGkgY2xhc3M9XCJsYXlvdXQtcGFkZGluZy1sZWZ0LTN4c1wiIG1jLWljb249XCJtYy1hbmdsZS1kb3duLVNfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYy1vcHRpb24gKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIlxuICAgICAgICAgICAgICAgICAgIFttY1Rvb2x0aXBEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwieWVhclwiPlxuICAgICAgICAgICAge3sgeWVhci52YWx1ZSB9fVxuICAgICAgICA8L21jLW9wdGlvbj5cbiAgICA8L21jLXNlbGVjdD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibWMtY2FsZW5kYXItaGVhZGVyX19idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uIG1jLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYy1idXR0b25fdHJhbnNwYXJlbnQgbWMtY2FsZW5kYXItaGVhZGVyX19wcmV2aW91cy1idXR0b25cIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmV2aW91c0Rpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcmV2aW91c01vbnRoKClcIj5cblxuICAgICAgICA8aSBtYy1pY29uPVwibWMtYW5nbGUtbGVmdC1MXzE2XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYy1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwibWMtYnV0dG9uX3RyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Q3VycmVudERhdGUoKVwiPlxuXG4gICAgICAgIDxpIG1jLWljb249XCJtYy1jaXJjbGUtOF8xNlwiPjwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudCBtYy1jYWxlbmRhci1oZWFkZXJfX25leHQtYnV0dG9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibmV4dERpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3ROZXh0TW9udGgoKVwiPlxuXG4gICAgICAgIDxpIG1jLWljb249XCJtYy1hbmdsZS1yaWdodC1MXzE2XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9kYXRlcGlja2VyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvZGF0ZXBpY2tlci9jYWxlbmRhci1oZWFkZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7OztBQUd0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBUzVCLG9DQUFvQztBQVlwQyxNQUFNLE9BQU8sZ0JBQWdCO0lBdUV6QixZQUE2QixPQUF1QjtRQUF2QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQW5FcEQsVUFBSyxHQUFhLEVBQUUsQ0FBQztRQThCckIsNENBQTRDO1FBQ3BDLGFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFldkQsYUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQWdCOUQsd0NBQXdDO1FBQ3JCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDekMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztRQUdwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxD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RFYsS0FBSztnQkFpQkYsT0FBTztzQkFEVixLQUFLO2dCQThCYSxnQkFBZ0I7c0JBQWxDLE1BQU07Z0JBQ1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFDWSxZQUFZO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICdAcHRzZWN1cml0eS9tb3NhaWMvY29yZSc7XG5cblxuY29uc3QgZGVmYXVsdE1pblllYXIgPSAxOTAwO1xuY29uc3QgZGVmYXVsdE1heFllYXIgPSAyMDk5O1xuXG5leHBvcnQgdHlwZSBNb250aE5hbWUgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG5hbWVTaG9ydDogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG59O1xuXG4vKiogRGVmYXVsdCBoZWFkZXIgZm9yIE1jQ2FsZW5kYXIgKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbWMtY2FsZW5kYXItaGVhZGVyJyxcbiAgICBleHBvcnRBczogJ21jQ2FsZW5kYXJIZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnY2FsZW5kYXItaGVhZGVyLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydjYWxlbmRhci1oZWFkZXIuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdtYy1jYWxlbmRhci1oZWFkZXInXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1jQ2FsZW5kYXJIZWFkZXI8RD4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBtb250aE5hbWVzOiBNb250aE5hbWVbXTtcbiAgICBzZWxlY3RlZE1vbnRoOiBudW1iZXI7XG5cbiAgICB5ZWFyczogbnVtYmVyW10gPSBbXTtcbiAgICBzZWxlY3RlZFllYXI6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGFjdGl2ZURhdGUoKTogRCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEYXRlO1xuICAgIH1cblxuICAgIHNldCBhY3RpdmVEYXRlKHZhbHVlOiBEKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FjdGl2ZURhdGU6IEQ7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtYXhEYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuXG4gICAgc2V0IG1heERhdGUodmFsdWU6IEQgfCBudWxsKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcnNPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW1hZ2ljLW51bWJlcnNcbiAgICBwcml2YXRlIF9tYXhEYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoZGVmYXVsdE1heFllYXIsIDExKTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1pbkRhdGUoKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgbWluRGF0ZSh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLl9taW5EYXRlID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVZZWFyc09wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9taW5EYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoZGVmYXVsdE1pblllYXIsIDEpO1xuXG4gICAgZ2V0IHByZXZpb3VzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKHRoaXMuYWN0aXZlRGF0ZSwgdGhpcy5taW5EYXRlISkgPD0gMDtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0b2RheSA9IHRoaXMuYWRhcHRlci50b2RheSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKHRvZGF5LCB0aGlzLm1pbkRhdGUhKSA8IDAgfHwgdGhpcy5jb21wYXJlRGF0ZSh0b2RheSwgdGhpcy5tYXhEYXRlISkgPiAwO1xuICAgIH1cblxuICAgIGdldCBuZXh0RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKHRoaXMuYWN0aXZlRGF0ZSwgdGhpcy5tYXhEYXRlISkgPj0gMDtcbiAgICB9XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBhY3RpdmF0ZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2ZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IG1vbnRoU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHllYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlcjogRGF0ZUFkYXB0ZXI8RD4pIHtcbiAgICAgICAgdGhpcy5tb250aE5hbWVzID0gdGhpcy5hZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKS5tYXAoKG5hbWUsIGkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IG5hbWUsIG5hbWVTaG9ydDogdGhpcy5hZGFwdGVyLmdldE1vbnRoTmFtZXMoJ3Nob3J0JylbaV0sIHZhbHVlOiBpLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlcygpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIHdoZW4gYSBuZXcgbW9udGggaXMgc2VsZWN0ZWQuICovXG4gICAgb25Nb250aFNlbGVjdGVkKG1vbnRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgeWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgpO1xuICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRoaXMuYWRhcHRlci5nZXROdW1EYXlzSW5Nb250aChub3JtYWxpemVkRGF0ZSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICBNYXRoLm1pbih0aGlzLmFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpLCBkYXlzSW5Nb250aClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm1vbnRoU2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIHdoZW4gYSBuZXcgeWVhciBpcyBzZWxlY3RlZC4gKi9cbiAgICBvblllYXJTZWxlY3RlZCh5ZWFyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGgpKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgICAgIE1hdGgubWluKHRoaXMuYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSksIGRheXNJbk1vbnRoKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnllYXJTZWxlY3RlZC5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVNb250aE9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RDdXJyZW50RGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLnRvZGF5KCk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyB1c2VyIGNsaWNrcyBvbiB0aGUgcHJldmlvdXMgYnV0dG9uLiAqL1xuICAgIHNlbGVjdFByZXZpb3VzTW9udGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLmFjdGl2ZURhdGUsIC0xKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBuZXh0IGJ1dHRvbi4gKi9cbiAgICBzZWxlY3ROZXh0TW9udGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlRGF0ZShmaXJzdDogRCwgc2Vjb25kOiBEKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEZpcnN0ID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0WWVhcihmaXJzdCksXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgoZmlyc3QpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNlY29uZCA9IHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldFllYXIoc2Vjb25kKSxcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRNb250aChzZWNvbmQpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5jb21wYXJlRGF0ZShub3JtYWxpemVkRmlyc3QsIG5vcm1hbGl6ZWRTZWNvbmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMubW9udGhOYW1lc1t0aGlzLmFkYXB0ZXIuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlKV0udmFsdWU7XG5cbiAgICAgICAgY29uc3QgeWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy55ZWFycy5maW5kKChpdGVtKSA9PiBpdGVtID09PSB5ZWFyKSB8fCB0aGlzLnllYXJzWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uT3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyc09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVNb250aE9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVllYXJzT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgbWluWWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMubWluRGF0ZSEpO1xuICAgICAgICBjb25zdCBtYXhZZWFyID0gdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5tYXhEYXRlISk7XG5cbiAgICAgICAgdGhpcy55ZWFycyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGtleTogbnVtYmVyID0gbWluWWVhcjsga2V5IDw9IG1heFllYXI7IGtleSsrKSB7XG4gICAgICAgICAgICB0aGlzLnllYXJzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTW9udGhPcHRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZURhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pblllYXIgPSB0aGlzLmFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbkRhdGUhKTtcbiAgICAgICAgY29uc3QgbWluTW9udGggPSB0aGlzLmFkYXB0ZXIuZ2V0TW9udGgodGhpcy5taW5EYXRlISk7XG5cbiAgICAgICAgY29uc3QgbWF4WWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMubWF4RGF0ZSEpO1xuICAgICAgICBjb25zdCBtYXhNb250aCA9IHRoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLm1heERhdGUhKTtcblxuICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpO1xuXG4gICAgICAgIGlmIChjdXJyZW50WWVhciA9PT0gbWluWWVhciAmJiBjdXJyZW50WWVhciA9PT0gbWF4WWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aE5hbWVzLmZvckVhY2goKG1vbnRoKSA9PiAobW9udGguZGlzYWJsZWQgPSBtb250aC52YWx1ZSA8IG1pbk1vbnRoIHx8IG1vbnRoLnZhbHVlID4gbWF4TW9udGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50WWVhciA9PT0gbWluWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aE5hbWVzLmZvckVhY2goKG1vbnRoKSA9PiAobW9udGguZGlzYWJsZWQgPSBtb250aC52YWx1ZSA8IG1pbk1vbnRoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFllYXIgPT09IG1heFllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhOYW1lcy5mb3JFYWNoKChtb250aCkgPT4gKG1vbnRoLmRpc2FibGVkID0gbW9udGgudmFsdWUgPiBtYXhNb250aCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1jLWNhbGVuZGFyLWhlYWRlcl9fc2VsZWN0LWdyb3VwXCI+XG4gICAgPG1jLXNlbGVjdFxuICAgICAgICBjbGFzcz1cIm1jLWNhbGVuZGFyLWhlYWRlcl9fc2VsZWN0XCJcbiAgICAgICAgI21vbnRoU2VsZWN0PVwibWNTZWxlY3RcIlxuICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRNb250aFwiXG4gICAgICAgIFtwYW5lbENsYXNzXT1cIidtYy1jYWxlbmRhci1zZWxlY3QtcGFuZWwnXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1vbnRoU2VsZWN0ZWQoJGV2ZW50LnZhbHVlKVwiPlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtYy1idXR0b25fdHJhbnNwYXJlbnQgbGF5b3V0LXBhZGRpbmctcmlnaHQteHNcIlxuICAgICAgICAgICAgICAgIG1jLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1jLXNlbGVjdC1tYXRjaGVyXG4gICAgICAgICAgICAgICAgW2NsYXNzLm1jLWFjdGl2ZV09XCJtb250aFNlbGVjdC5wYW5lbE9wZW5cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiPlxuICAgICAgICAgICAge3sgbW9udGhTZWxlY3QudHJpZ2dlclZhbHVlIH19XG5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibGF5b3V0LXBhZGRpbmctbGVmdC0zeHNcIiBtYy1pY29uPVwibWMtYW5nbGUtZG93bi1TXzE2XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bWMtb3B0aW9uICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICAgICBbbWNUb29sdGlwRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1vbnRoLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibW9udGgudmFsdWVcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoLm5hbWUgfX1cbiAgICAgICAgPC9tYy1vcHRpb24+XG4gICAgPC9tYy1zZWxlY3Q+XG5cbiAgICA8bWMtc2VsZWN0XG4gICAgICAgICN5ZWFyU2VsZWN0PVwibWNTZWxlY3RcIlxuICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRZZWFyXCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ21jLWNhbGVuZGFyLXNlbGVjdC1wYW5lbCdcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uWWVhclNlbGVjdGVkKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudCBsYXlvdXQtcGFkZGluZy1yaWdodC14c1wiXG4gICAgICAgICAgICAgICAgbWMtYnV0dG9uXG4gICAgICAgICAgICAgICAgbWMtc2VsZWN0LW1hdGNoZXJcbiAgICAgICAgICAgICAgICBbY2xhc3MubWMtYWN0aXZlXT1cInllYXJTZWxlY3QucGFuZWxPcGVuXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIj5cbiAgICAgICAgICAgIHt7IHNlbGVjdGVkWWVhciB9fVxuXG4gICAgICAgICAgICA8aSBjbGFzcz1cImxheW91dC1wYWRkaW5nLWxlZnQtM3hzXCIgbWMtaWNvbj1cIm1jLWFuZ2xlLWRvd24tU18xNlwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG1jLW9wdGlvbiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyc1wiXG4gICAgICAgICAgICAgICAgICAgW21jVG9vbHRpcERpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ5ZWFyXCI+XG4gICAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgIDwvbWMtb3B0aW9uPlxuICAgIDwvbWMtc2VsZWN0PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJtYy1jYWxlbmRhci1oZWFkZXJfX2J1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b24gbWMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudCBtYy1jYWxlbmRhci1oZWFkZXJfX3ByZXZpb3VzLWJ1dHRvblwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByZXZpb3VzRGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByZXZpb3VzTW9udGgoKVwiPlxuXG4gICAgICAgIDxpIG1jLWljb249XCJtYy1hbmdsZS1sZWZ0LUxfMTZcIj48L2k+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIG1jLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYy1idXR0b25fdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnREaXNhYmxlZFwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEN1cnJlbnREYXRlKClcIj5cblxuICAgICAgICA8aSBtYy1pY29uPVwibWMtY2lyY2xlLThfMTZcIj48L2k+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uIG1jLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYy1idXR0b25fdHJhbnNwYXJlbnQgbWMtY2FsZW5kYXItaGVhZGVyX19uZXh0LWJ1dHRvblwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5leHREaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TmV4dE1vbnRoKClcIj5cblxuICAgICAgICA8aSBtYy1pY29uPVwibWMtYW5nbGUtcmlnaHQtTF8xNlwiPjwvaT5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19