@energycap/components 0.39.35-rxjs-7-upgrade.20241108-1527 → 0.39.36-ECAP-26840-date-input.20241118-1037

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/esm2020/lib/components.module.mjs +33 -16
  2. package/esm2020/lib/controls/calendar/calendar-item.component.mjs +61 -0
  3. package/esm2020/lib/controls/calendar/calendar.component.mjs +202 -0
  4. package/esm2020/lib/controls/calendar/calendar.types.mjs +4 -0
  5. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +3 -3
  6. package/esm2020/lib/controls/combobox/combobox.component.mjs +1 -1
  7. package/esm2020/lib/controls/date-input/date-input.component.mjs +251 -0
  8. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +1 -1
  9. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +3 -4
  10. package/esm2020/lib/controls/form-control/form-control.component.mjs +29 -11
  11. package/esm2020/lib/controls/form-control-base.mjs +2 -2
  12. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +1 -1
  13. package/esm2020/lib/controls/form-group/form-group.component.mjs +3 -3
  14. package/esm2020/lib/controls/menu/menu.component.mjs +5 -4
  15. package/esm2020/lib/controls/popover/popover.component.mjs +1 -1
  16. package/esm2020/lib/controls/select/select.component.mjs +2 -2
  17. package/esm2020/lib/core/date-time-helper.mjs +62 -1
  18. package/esm2020/lib/core/validation-message.service.mjs +3 -3
  19. package/esm2020/lib/display/dialog/dialog.component.mjs +4 -4
  20. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +1 -1
  21. package/esm2020/lib/display/table/searchable-table.component.mjs +1 -1
  22. package/esm2020/lib/display/table/table-detail-row.component.mjs +5 -4
  23. package/esm2020/lib/display/table/table.component.mjs +5 -4
  24. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +1 -1
  25. package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +2 -2
  26. package/esm2020/lib/display/tour/tour.component.mjs +3 -3
  27. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +3 -3
  28. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +9 -8
  29. package/esm2020/public-api.mjs +4 -1
  30. package/fesm2015/energycap-components.mjs +5831 -5243
  31. package/fesm2015/energycap-components.mjs.map +1 -1
  32. package/fesm2020/energycap-components.mjs +5753 -5172
  33. package/fesm2020/energycap-components.mjs.map +1 -1
  34. package/lib/components.module.d.ts +11 -7
  35. package/lib/controls/calendar/calendar-item.component.d.ts +17 -0
  36. package/lib/controls/calendar/calendar.component.d.ts +54 -0
  37. package/lib/controls/calendar/calendar.types.d.ts +7 -0
  38. package/lib/controls/checkbox/checkbox.component.d.ts +2 -2
  39. package/lib/controls/date-input/date-input.component.d.ts +79 -0
  40. package/lib/controls/form-control/form-control.component.d.ts +10 -5
  41. package/lib/controls/form-control-base.d.ts +1 -1
  42. package/lib/controls/form-group/form-group.component.d.ts +1 -1
  43. package/lib/controls/menu/menu.component.d.ts +7 -0
  44. package/lib/core/date-time-helper.d.ts +26 -0
  45. package/lib/display/hierarchy/hierarchy-base.d.ts +1 -1
  46. package/lib/display/table/searchable-table.component.d.ts +1 -1
  47. package/lib/shared/page/page-base/page-base.component.d.ts +1 -1
  48. package/package.json +2 -3
  49. package/public-api.d.ts +3 -0
  50. package/schematics/collection.json +0 -10
  51. package/schematics/rxjs-7-upgrade/index.d.ts +0 -3
  52. package/schematics/rxjs-7-upgrade/index.js +0 -68
  53. package/schematics/rxjs-7-upgrade/index.js.map +0 -1
  54. package/schematics/rxjs-7-upgrade/schema.d.ts +0 -4
  55. package/schematics/rxjs-7-upgrade/schema.js +0 -3
  56. package/schematics/rxjs-7-upgrade/schema.js.map +0 -1
  57. package/schematics/rxjs-7-upgrade/schema.json +0 -14
  58. package/schematics/utilities/typescript.d.ts +0 -7
  59. package/schematics/utilities/typescript.js +0 -42
  60. package/schematics/utilities/typescript.js.map +0 -1
  61. package/schematics/utilities/workspace.d.ts +0 -8
  62. package/schematics/utilities/workspace.js +0 -72
  63. package/schematics/utilities/workspace.js.map +0 -1
@@ -0,0 +1,251 @@
1
+ import { Component, HostBinding, Input, ViewChild } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import moment from 'moment';
4
+ import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
5
+ import { DateTimeHelper } from '../../core/date-time-helper';
6
+ import { isCalendarSelectionSingleDate } from '../calendar/calendar.types';
7
+ import { FormControlBase } from '../form-control-base';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../../core/validation-message.service";
10
+ import * as i2 from "../../shared/form-group.helper";
11
+ import * as i3 from "../../shared/user-preference.service";
12
+ import * as i4 from "../../shared/display/pipes/date-display.pipe";
13
+ import * as i5 from "@angular/cdk/overlay";
14
+ import * as i6 from "@angular/common";
15
+ import * as i7 from "@angular/forms";
16
+ import * as i8 from "../form-control/form-control.component";
17
+ import * as i9 from "../help-popover/help-popover.component";
18
+ import * as i10 from "../calendar/calendar.component";
19
+ import * as i11 from "@ngx-translate/core";
20
+ export class DateInputComponent extends FormControlBase {
21
+ constructor(validationMessageService, formGroupHelper, userPreferenceService, dateDisplayPipe, el, overlayService) {
22
+ super(validationMessageService, formGroupHelper);
23
+ this.validationMessageService = validationMessageService;
24
+ this.formGroupHelper = formGroupHelper;
25
+ this.userPreferenceService = userPreferenceService;
26
+ this.dateDisplayPipe = dateDisplayPipe;
27
+ this.el = el;
28
+ this.overlayService = overlayService;
29
+ this.id = '';
30
+ /** The form control provided by the hosting form. */
31
+ this.formModel = new FormControl(null);
32
+ this.minDate = DateTimeHelper.minDatePickerDate;
33
+ this.maxDate = DateTimeHelper.maxDatePickerDate;
34
+ /** The internal textbox's form control. */
35
+ this.textboxControl = new FormControl(null);
36
+ /**
37
+ * The current calendar selection.
38
+ * Updated when the user clicks on a calendar item or when the date entered into the textbox is parsed.
39
+ */
40
+ this.calendarSelection = null;
41
+ /** Controls whether the calendar overlay is open or not. */
42
+ this.isCalendarOpen = false;
43
+ /** Placeholder for the textbox. Updated to reflect the user's date display preference. */
44
+ this.placeholder = 'MM/DD/YYYY';
45
+ /** Overlay scroll strategy for the calendar overlay. Closes the calendar on scroll. */
46
+ this.overlayScrollStrategy = this.overlayService.scrollStrategies.close();
47
+ /**
48
+ * Date parsing formats for user-entered dates. Defaults to month-first formats, but is updated in onInit
49
+ * to use the user's preferred date format.
50
+ */
51
+ this.parseFormats = DateTimeHelper.getParseFormats();
52
+ /**
53
+ * Validator that checks if the date is within the min and max date range.
54
+ * If the date is outside of the range, the validator returns an error that
55
+ * triggers the validation message service to show the error in the label.
56
+ */
57
+ this.dateValidator = (control) => {
58
+ if (control.value) {
59
+ if (control.value < this.minDate) {
60
+ return { minDate: { minValue: this.minDate } };
61
+ }
62
+ else if (control.value > this.maxDate) {
63
+ return { maxDate: { maxValue: this.maxDate } };
64
+ }
65
+ }
66
+ return null;
67
+ };
68
+ }
69
+ openCalendar() {
70
+ this.isCalendarOpen = true;
71
+ }
72
+ closeCalendar() {
73
+ this.isCalendarOpen = false;
74
+ }
75
+ onCalendarClose() {
76
+ // If the calendar closes by a scroll event, the isCalendarOpen flag will not be updated.
77
+ // Make sure the flag is updated here to let the calendar re-open on the next click.
78
+ this.isCalendarOpen = false;
79
+ this.focusInput();
80
+ }
81
+ /** Close the calendar if the user clicks outside of the calendar and date input. */
82
+ onOverlayOutsideClick(event) {
83
+ // Do not close the calendar if the click was within the date input or action button
84
+ const rect = this.el.nativeElement.getBoundingClientRect();
85
+ const clickedOutsideControl = event.clientY < rect.top ||
86
+ event.clientY > rect.bottom ||
87
+ event.clientX < rect.left ||
88
+ event.clientX > rect.right;
89
+ // It's possible that the user hit enter on the action button instead of clicking with the mouse.
90
+ // In this case the "click" event will be outside of the component because the clientx and y are 0,
91
+ // but we don't want to close in this case because button clicks trigger calendar open/close separately.
92
+ const isActionClick = event.target.id === `${this.id}_action`;
93
+ if (!isActionClick && clickedOutsideControl) {
94
+ this.isCalendarOpen = false;
95
+ }
96
+ }
97
+ /** Focuses the date input. */
98
+ focusInput() {
99
+ this.el.nativeElement.querySelector('input')?.focus();
100
+ }
101
+ /** If the user tabs out of the form control's action button and the calendar is open, focus the first item in the calendar overlay */
102
+ onActionKeydown(event) {
103
+ if (event.key === 'Tab' && !event.shiftKey && this.isCalendarOpen) {
104
+ event.preventDefault();
105
+ // Focus the first button in the calendar overlay
106
+ this.overlay?.overlayRef.hostElement.querySelector('button')?.focus();
107
+ }
108
+ }
109
+ onTextboxKeydown(event) {
110
+ if (event.key === 'Tab' && event.shiftKey) {
111
+ // If the user is tabbing backwards from the textbox, close the calendar.
112
+ this.closeCalendar();
113
+ }
114
+ }
115
+ /** Whenever the user selects a date from the calendar, update the formModel with the selection */
116
+ onSelectionChange(selection) {
117
+ this.calendarSelection = selection;
118
+ if (isCalendarSelectionSingleDate(selection)) {
119
+ this.formModel.setValue(selection);
120
+ }
121
+ }
122
+ onTextboxBlur() {
123
+ // Parse the textbox value into a date and update the form model
124
+ const value = this.textboxControl.value;
125
+ if (value) {
126
+ const parsedDate = moment(value, this.parseFormats);
127
+ if (parsedDate.isValid()) {
128
+ this.formModel.setValue(parsedDate.toDate());
129
+ }
130
+ else {
131
+ this.formModel.setValue(null);
132
+ }
133
+ }
134
+ else {
135
+ this.formModel.setValue(null);
136
+ }
137
+ // Update the form model's touched and dirty status based on the textbox's status.
138
+ // Since the user interacts with a control that is internal to this component, the
139
+ // form model's status won't be updated automatically.
140
+ if (this.textboxControl.touched && !this.formModel.touched) {
141
+ this.formModel.markAsTouched();
142
+ }
143
+ if (this.textboxControl.dirty && !this.formModel.dirty) {
144
+ this.formModel.markAsDirty();
145
+ }
146
+ }
147
+ ngOnInit() {
148
+ // Setup
149
+ super.ngOnInit();
150
+ this.setDateFormats();
151
+ this.formModel.addValidators(this.dateValidator);
152
+ // Subscriptions
153
+ this.onFormModelStatusChanges();
154
+ this.onFormModelValueChanges();
155
+ this.onTextboxValueChanges();
156
+ // Sync the initial disabled status and value of the textbox
157
+ this.syncTextboxControlDisabledStatus(this.formModel.status);
158
+ this.textboxControl.setValue(this.dateDisplayPipe.transform(this.formModel.value), { emitEvent: false });
159
+ }
160
+ onFormModelStatusChanges() {
161
+ // Keep the textboxControl disabled status in sync with the formModel
162
+ this.formModel.statusChanges.pipe(distinctUntilChanged(), takeUntil(this.componentDestroyed)).subscribe(status => {
163
+ this.syncTextboxControlDisabledStatus(status);
164
+ if (this.isCalendarOpen) {
165
+ // As validation messages appear/disappear, the date input may have shifted up or down on the page.
166
+ // Update the overlay position to ensure it's still aligned with the textbox and not blocking it.
167
+ // Settimeout is needed to ensure the overlay is being updated after the message is rendered.
168
+ setTimeout(() => {
169
+ this.overlay?.overlayRef?.updatePosition();
170
+ });
171
+ }
172
+ });
173
+ }
174
+ onFormModelValueChanges() {
175
+ // Update the calendar selection textbox value with a formatted date when the form model changes.
176
+ // This is usually triggered by programmatic changes to the form model by a parent component.
177
+ this.formModel.valueChanges.pipe(distinctUntilChanged((a, b) => moment(a).isSame(b, 'day')), takeUntil(this.componentDestroyed)).subscribe(value => {
178
+ const displayValue = this.dateDisplayPipe.transform(value);
179
+ // Don't emit an event when setting the textbox value to avoid circular updates between the textbox and form model.
180
+ this.textboxControl.setValue(displayValue, { emitEvent: false });
181
+ this.calendarSelection = value;
182
+ });
183
+ }
184
+ onTextboxValueChanges() {
185
+ // Update the calendar selection when the textbox value changes to update the calendar.
186
+ // We don't patch the formModel here because we don't want to trigger the
187
+ // date formatting logic and overwrite the user's input.
188
+ // We'll do that when the user blurs out of the textbox. See onTextboxBlur()
189
+ this.textboxControl.valueChanges.pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.componentDestroyed)).subscribe(value => {
190
+ if (value) {
191
+ const parsedDate = moment(value, this.parseFormats);
192
+ if (parsedDate.isValid()) {
193
+ // If the parsed date is before the minDate, set the year to the current year.
194
+ // This prevents the calendar from showing unhelpful dates in the distant past as the user types
195
+ if (parsedDate.year() < this.minDate.getFullYear()) {
196
+ parsedDate.set('year', moment().year());
197
+ }
198
+ this.calendarSelection = parsedDate.toDate();
199
+ }
200
+ }
201
+ else {
202
+ this.calendarSelection = null;
203
+ }
204
+ });
205
+ }
206
+ syncTextboxControlDisabledStatus(status) {
207
+ // The textbox should only be disabled if the form model is disabled.
208
+ // All other statuses are considered enabled.
209
+ if (status === 'DISABLED' && this.textboxControl.enabled) {
210
+ this.textboxControl.disable();
211
+ }
212
+ else if (status !== 'DISABLED' && this.textboxControl.disabled) {
213
+ this.textboxControl.enable();
214
+ }
215
+ }
216
+ ;
217
+ /**
218
+ * Updates the date parsing formats and placeholder based on the user's display preference.
219
+ * NOTE: This is async because we're retrieving the user's preferences. We're not awaiting the result
220
+ * because the only logic that depends on this is the text box date parsing logic and placeholder.
221
+ * Our forms should always be behind a pending overlay, so the user won't be able to interact with the
222
+ * form until the user is loaded anyway.
223
+ */
224
+ async setDateFormats() {
225
+ const { preference } = await this.userPreferenceService.getPreferences().toPromise();
226
+ const dateFormat = preference?.dateFormat;
227
+ this.placeholder = dateFormat ?? this.placeholder;
228
+ this.parseFormats = DateTimeHelper.getMomentParseFormats(dateFormat);
229
+ }
230
+ }
231
+ DateInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DateInputComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.FormGroupHelper }, { token: i3.UserPreferenceService }, { token: i4.DateDisplayPipe }, { token: i0.ElementRef }, { token: i5.Overlay }], target: i0.ɵɵFactoryTarget.Component });
232
+ DateInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DateInputComponent, selector: "ec-date-input", inputs: { id: "id", formModel: "formModel", minDate: "minDate", maxDate: "maxDate" }, host: { properties: { "attr.id": "this.id" } }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["overlay"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<label *ngIf=\"label\">\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">&nbsp;{{validationErrors}}</span>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n *ngIf=\"helpPopover\"\r\n class=\"d-inline-block my-n3 mx-n1\"\r\n text=\"{{helpPopover | translate}}\"\r\n contentPosition=\"{{helpPopoverPosition}}\">\r\n </ec-help-popover>\r\n</label>\r\n\r\n<ec-form-control id=\"{{id}}\"\r\n [required]=\"required\"\r\n [autofocus]=\"autofocus\"\r\n [pending]=\"pending\"\r\n [readonly]=\"readonly\"\r\n [formModel]=\"formModel\"\r\n (actionClicked)=\"isCalendarOpen ? closeCalendar() : openCalendar()\"\r\n (actionKeydown)=\"onActionKeydown($event)\"\r\n [showClear]=\"false\"\r\n actionIcon=\"icon-date\"\r\n cdkOverlayOrigin\r\n #overlayOrigin=\"cdkOverlayOrigin\">\r\n <input id=\"{{id}}_input\"\r\n type=\"text\"\r\n placeholder=\"{{placeholder}}\"\r\n [formControl]=\"textboxControl\"\r\n (blur)=\"onTextboxBlur()\"\r\n (keydown)=\"onTextboxKeydown($event)\">\r\n</ec-form-control>\r\n\r\n<ng-template cdkConnectedOverlay\r\n #overlay=\"cdkConnectedOverlay\"\r\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\r\n [cdkConnectedOverlayOpen]=\"isCalendarOpen\"\r\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\r\n cdkConnectedOverlayPanelClass=\"my-1\"\r\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\r\n (detach)=\"onCalendarClose()\">\r\n <ec-calendar [id]=\"id + '_calendar'\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [selection]=\"calendarSelection\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n class=\"card px-1 pt-1 pb-2\"\r\n (focusOutEnd)=\"closeCalendar()\"\r\n (focusOutStart)=\"focusInput()\">\r\n </ec-calendar>\r\n</ng-template>\r\n", styles: [":host{display:block}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i5.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i8.FormControlComponent, selector: "ec-form-control", inputs: ["id", "icon", "actionIcon", "showClear", "formModel", "autofocus", "pending", "required", "readonly"], outputs: ["actionClicked", "actionKeydown"] }, { kind: "component", type: i9.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "component", type: i10.CalendarComponent, selector: "ec-calendar", inputs: ["id", "selection", "minDate", "maxDate"], outputs: ["selectionChange", "focusOutStart", "focusOutEnd"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] });
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DateInputComponent, decorators: [{
234
+ type: Component,
235
+ args: [{ selector: 'ec-date-input', template: "<label *ngIf=\"label\">\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">&nbsp;{{validationErrors}}</span>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n *ngIf=\"helpPopover\"\r\n class=\"d-inline-block my-n3 mx-n1\"\r\n text=\"{{helpPopover | translate}}\"\r\n contentPosition=\"{{helpPopoverPosition}}\">\r\n </ec-help-popover>\r\n</label>\r\n\r\n<ec-form-control id=\"{{id}}\"\r\n [required]=\"required\"\r\n [autofocus]=\"autofocus\"\r\n [pending]=\"pending\"\r\n [readonly]=\"readonly\"\r\n [formModel]=\"formModel\"\r\n (actionClicked)=\"isCalendarOpen ? closeCalendar() : openCalendar()\"\r\n (actionKeydown)=\"onActionKeydown($event)\"\r\n [showClear]=\"false\"\r\n actionIcon=\"icon-date\"\r\n cdkOverlayOrigin\r\n #overlayOrigin=\"cdkOverlayOrigin\">\r\n <input id=\"{{id}}_input\"\r\n type=\"text\"\r\n placeholder=\"{{placeholder}}\"\r\n [formControl]=\"textboxControl\"\r\n (blur)=\"onTextboxBlur()\"\r\n (keydown)=\"onTextboxKeydown($event)\">\r\n</ec-form-control>\r\n\r\n<ng-template cdkConnectedOverlay\r\n #overlay=\"cdkConnectedOverlay\"\r\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\r\n [cdkConnectedOverlayOpen]=\"isCalendarOpen\"\r\n [cdkConnectedOverlayScrollStrategy]=\"overlayScrollStrategy\"\r\n cdkConnectedOverlayPanelClass=\"my-1\"\r\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\r\n (detach)=\"onCalendarClose()\">\r\n <ec-calendar [id]=\"id + '_calendar'\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [selection]=\"calendarSelection\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n class=\"card px-1 pt-1 pb-2\"\r\n (focusOutEnd)=\"closeCalendar()\"\r\n (focusOutStart)=\"focusInput()\">\r\n </ec-calendar>\r\n</ng-template>\r\n", styles: [":host{display:block}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}\n"] }]
236
+ }], ctorParameters: function () { return [{ type: i1.ValidationMessageService }, { type: i2.FormGroupHelper }, { type: i3.UserPreferenceService }, { type: i4.DateDisplayPipe }, { type: i0.ElementRef }, { type: i5.Overlay }]; }, propDecorators: { id: [{
237
+ type: HostBinding,
238
+ args: ['attr.id']
239
+ }, {
240
+ type: Input
241
+ }], formModel: [{
242
+ type: Input
243
+ }], minDate: [{
244
+ type: Input
245
+ }], maxDate: [{
246
+ type: Input
247
+ }], overlay: [{
248
+ type: ViewChild,
249
+ args: ['overlay']
250
+ }] } });
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQW1CLFdBQVcsRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLN0QsT0FBTyxFQUFxQiw2QkFBNkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVN2RCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFBZTtJQXNDckQsWUFDWSx3QkFBa0QsRUFDbEQsZUFBZ0MsRUFDbEMscUJBQTRDLEVBQzVDLGVBQWdDLEVBQ2hDLEVBQWMsRUFDZCxjQUF1QjtRQUUvQixLQUFLLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFQdkMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDbEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFTO1FBekNqQixPQUFFLEdBQVcsRUFBRSxDQUFDO1FBRWhDLHFEQUFxRDtRQUNyQyxjQUFTLEdBQXlCLElBQUksV0FBVyxDQUFjLElBQUksQ0FBQyxDQUFDO1FBRXJFLFlBQU8sR0FBUyxjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDakQsWUFBTyxHQUFTLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVqRSwyQ0FBMkM7UUFDcEMsbUJBQWMsR0FBRyxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFN0Q7OztXQUdHO1FBQ0ksc0JBQWlCLEdBQTZCLElBQUksQ0FBQztRQUUxRCw0REFBNEQ7UUFDckQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFOUIsMEZBQTBGO1FBQ25GLGdCQUFXLEdBQVcsWUFBWSxDQUFDO1FBRTFDLHVGQUF1RjtRQUNoRiwwQkFBcUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTVFOzs7V0FHRztRQUNLLGlCQUFZLEdBQWEsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBMk1sRTs7OztXQUlHO1FBQ0ssa0JBQWEsR0FBZ0IsQ0FBQyxPQUF3QixFQUFFLEVBQUU7WUFDaEUsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNqQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztpQkFDaEQ7cUJBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7aUJBQ2hEO2FBQ0Y7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQTVNRixDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRU0sZUFBZTtRQUNwQix5RkFBeUY7UUFDekYsb0ZBQW9GO1FBQ3BGLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsb0ZBQW9GO0lBQzdFLHFCQUFxQixDQUFDLEtBQWlCO1FBQzVDLG9GQUFvRjtRQUNwRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRztZQUNwRCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQzNCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7WUFDekIsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzdCLGlHQUFpRztRQUNqRyxtR0FBbUc7UUFDbkcsd0dBQXdHO1FBQ3hHLE1BQU0sYUFBYSxHQUFpQixLQUFLLENBQUMsTUFBTyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQztRQUU3RSxJQUFJLENBQUMsYUFBYSxJQUFJLHFCQUFxQixFQUFFO1lBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtJQUN2QixVQUFVO1FBQ2YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRCxzSUFBc0k7SUFDL0gsZUFBZSxDQUFDLEtBQW9CO1FBQ3pDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLGlEQUFpRDtZQUNqRCxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQW9CO1FBQzFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN6Qyx5RUFBeUU7WUFDekUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELGtHQUFrRztJQUMzRixpQkFBaUIsQ0FBQyxTQUFtQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ25DLElBQUksNkJBQTZCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixnRUFBZ0U7UUFDaEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDeEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0I7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7UUFFRCxrRkFBa0Y7UUFDbEYsa0ZBQWtGO1FBQ2xGLHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUNoQztRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixRQUFRO1FBQ1IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFakQsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdCLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUMvQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQ25DLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLG1HQUFtRztnQkFDbkcsaUdBQWlHO2dCQUNqRyw2RkFBNkY7Z0JBQzdGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsaUdBQWlHO1FBQ2pHLDZGQUE2RjtRQUM3RixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzlCLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDMUQsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxtSEFBbUg7WUFDbkgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsdUZBQXVGO1FBQ3ZGLHlFQUF5RTtRQUN6RSx3REFBd0Q7UUFDeEQsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDbkMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQ25DLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xCLElBQUksS0FBSyxFQUFFO2dCQUNULE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDeEIsOEVBQThFO29CQUM5RSxnR0FBZ0c7b0JBQ2hHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUU7d0JBQ2xELFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQ3pDO29CQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzlDO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQzthQUMvQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLE1BQXlCO1FBQ2hFLHFFQUFxRTtRQUNyRSw2Q0FBNkM7UUFDN0MsSUFBSSxNQUFNLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1lBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDL0I7YUFBTSxJQUFJLE1BQU0sS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFBQSxDQUFDO0lBRUY7Ozs7OztPQU1HO0lBQ0ssS0FBSyxDQUFDLGNBQWM7UUFDMUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JGLE1BQU0sVUFBVSxHQUFHLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RSxDQUFDOzsrR0ExT1Usa0JBQWtCO21HQUFsQixrQkFBa0Isc1RDcEIvQixtdEVBaURBOzJGRDdCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZTs4UEFPVCxFQUFFO3NCQURqQixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQUdVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBRVUsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQTJCZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Db250cm9sU3RhdHVzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERhdGVUaW1lSGVscGVyIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRlLXRpbWUtaGVscGVyJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGVEaXNwbGF5UGlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwSGVscGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0tZ3JvdXAuaGVscGVyJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3VzZXItcHJlZmVyZW5jZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb24sIGlzQ2FsZW5kYXJTZWxlY3Rpb25TaW5nbGVEYXRlIH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbEJhc2UgfSBmcm9tICcuLi9mb3JtLWNvbnRyb2wtYmFzZSc7XHJcblxyXG5leHBvcnQgdHlwZSBEYXRlSW5wdXRGb3JtQ29udHJvbCA9IEZvcm1Db250cm9sPERhdGUgfCBudWxsPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZGF0ZS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGhlIGZvcm0gY29udHJvbCBwcm92aWRlZCBieSB0aGUgaG9zdGluZyBmb3JtLiAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWw6IERhdGVJbnB1dEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPERhdGUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIG1pbkRhdGU6IERhdGUgPSBEYXRlVGltZUhlbHBlci5taW5EYXRlUGlja2VyRGF0ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgbWF4RGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1heERhdGVQaWNrZXJEYXRlO1xyXG5cclxuICAvKiogVGhlIGludGVybmFsIHRleHRib3gncyBmb3JtIGNvbnRyb2wuICovXHJcbiAgcHVibGljIHRleHRib3hDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgY3VycmVudCBjYWxlbmRhciBzZWxlY3Rpb24uXHJcbiAgICogVXBkYXRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhIGNhbGVuZGFyIGl0ZW0gb3Igd2hlbiB0aGUgZGF0ZSBlbnRlcmVkIGludG8gdGhlIHRleHRib3ggaXMgcGFyc2VkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjYWxlbmRhclNlbGVjdGlvbjogQ2FsZW5kYXJTZWxlY3Rpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIG92ZXJsYXkgaXMgb3BlbiBvciBub3QuICovXHJcbiAgcHVibGljIGlzQ2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIHRleHRib3guIFVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgdXNlcidzIGRhdGUgZGlzcGxheSBwcmVmZXJlbmNlLiAqL1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ01NL0REL1lZWVknO1xyXG5cclxuICAvKiogT3ZlcmxheSBzY3JvbGwgc3RyYXRlZ3kgZm9yIHRoZSBjYWxlbmRhciBvdmVybGF5LiBDbG9zZXMgdGhlIGNhbGVuZGFyIG9uIHNjcm9sbC4gKi9cclxuICBwdWJsaWMgb3ZlcmxheVNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XHJcblxyXG4gIC8qKiBcclxuICAgKiBEYXRlIHBhcnNpbmcgZm9ybWF0cyBmb3IgdXNlci1lbnRlcmVkIGRhdGVzLiBEZWZhdWx0cyB0byBtb250aC1maXJzdCBmb3JtYXRzLCBidXQgaXMgdXBkYXRlZCBpbiBvbkluaXRcclxuICAgKiB0byB1c2UgdGhlIHVzZXIncyBwcmVmZXJyZWQgZGF0ZSBmb3JtYXQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gRGF0ZVRpbWVIZWxwZXIuZ2V0UGFyc2VGb3JtYXRzKCk7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgZGlyZWN0aXZlIChzZWUgdGVtcGxhdGUpLiBVc2VkIHRvIGFjY2VzcyB0aGUgb3ZlcmxheSdzIGhvc3QgZWxlbWVudCB0byBjb250cm9sIGZvY3VzLiAqL1xyXG4gIEBWaWV3Q2hpbGQoJ292ZXJsYXknKSBvdmVybGF5PzogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUdyb3VwSGVscGVyOiBGb3JtR3JvdXBIZWxwZXIsXHJcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlU2VydmljZTogVXNlclByZWZlcmVuY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlRGlzcGxheVBpcGU6IERhdGVEaXNwbGF5UGlwZSxcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5XHJcbiAgKSB7XHJcbiAgICBzdXBlcih2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsIGZvcm1Hcm91cEhlbHBlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkNhbGVuZGFyKCkge1xyXG4gICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VDYWxlbmRhcigpIHtcclxuICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNhbGVuZGFyQ2xvc2UoKSB7XHJcbiAgICAvLyBJZiB0aGUgY2FsZW5kYXIgY2xvc2VzIGJ5IGEgc2Nyb2xsIGV2ZW50LCB0aGUgaXNDYWxlbmRhck9wZW4gZmxhZyB3aWxsIG5vdCBiZSB1cGRhdGVkLlxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmbGFnIGlzIHVwZGF0ZWQgaGVyZSB0byBsZXQgdGhlIGNhbGVuZGFyIHJlLW9wZW4gb24gdGhlIG5leHQgY2xpY2suXHJcbiAgICB0aGlzLmlzQ2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvY3VzSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8qKiBDbG9zZSB0aGUgY2FsZW5kYXIgaWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGNhbGVuZGFyIGFuZCBkYXRlIGlucHV0LiAqL1xyXG4gIHB1YmxpYyBvbk92ZXJsYXlPdXRzaWRlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIC8vIERvIG5vdCBjbG9zZSB0aGUgY2FsZW5kYXIgaWYgdGhlIGNsaWNrIHdhcyB3aXRoaW4gdGhlIGRhdGUgaW5wdXQgb3IgYWN0aW9uIGJ1dHRvblxyXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGNsaWNrZWRPdXRzaWRlQ29udHJvbCA9IGV2ZW50LmNsaWVudFkgPCByZWN0LnRvcCB8fFxyXG4gICAgICBldmVudC5jbGllbnRZID4gcmVjdC5ib3R0b20gfHxcclxuICAgICAgZXZlbnQuY2xpZW50WCA8IHJlY3QubGVmdCB8fFxyXG4gICAgICBldmVudC5jbGllbnRYID4gcmVjdC5yaWdodDtcclxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdXNlciBoaXQgZW50ZXIgb24gdGhlIGFjdGlvbiBidXR0b24gaW5zdGVhZCBvZiBjbGlja2luZyB3aXRoIHRoZSBtb3VzZS5cclxuICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgXCJjbGlja1wiIGV2ZW50IHdpbGwgYmUgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50IGJlY2F1c2UgdGhlIGNsaWVudHggYW5kIHkgYXJlIDAsXHJcbiAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0byBjbG9zZSBpbiB0aGlzIGNhc2UgYmVjYXVzZSBidXR0b24gY2xpY2tzIHRyaWdnZXIgY2FsZW5kYXIgb3Blbi9jbG9zZSBzZXBhcmF0ZWx5LlxyXG4gICAgY29uc3QgaXNBY3Rpb25DbGljayA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5pZCA9PT0gYCR7dGhpcy5pZH1fYWN0aW9uYDtcclxuXHJcbiAgICBpZiAoIWlzQWN0aW9uQ2xpY2sgJiYgY2xpY2tlZE91dHNpZGVDb250cm9sKSB7XHJcbiAgICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBGb2N1c2VzIHRoZSBkYXRlIGlucHV0LiAqL1xyXG4gIHB1YmxpYyBmb2N1c0lucHV0KCkge1xyXG4gICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICAvKiogSWYgdGhlIHVzZXIgdGFicyBvdXQgb2YgdGhlIGZvcm0gY29udHJvbCdzIGFjdGlvbiBidXR0b24gYW5kIHRoZSBjYWxlbmRhciBpcyBvcGVuLCBmb2N1cyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY2FsZW5kYXIgb3ZlcmxheSAqL1xyXG4gIHB1YmxpYyBvbkFjdGlvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmICFldmVudC5zaGlmdEtleSAmJiB0aGlzLmlzQ2FsZW5kYXJPcGVuKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIC8vIEZvY3VzIHRoZSBmaXJzdCBidXR0b24gaW4gdGhlIGNhbGVuZGFyIG92ZXJsYXlcclxuICAgICAgdGhpcy5vdmVybGF5Py5vdmVybGF5UmVmLmhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpPy5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uVGV4dGJveEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmIGV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgIC8vIElmIHRoZSB1c2VyIGlzIHRhYmJpbmcgYmFja3dhcmRzIGZyb20gdGhlIHRleHRib3gsIGNsb3NlIHRoZSBjYWxlbmRhci5cclxuICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogV2hlbmV2ZXIgdGhlIHVzZXIgc2VsZWN0cyBhIGRhdGUgZnJvbSB0aGUgY2FsZW5kYXIsIHVwZGF0ZSB0aGUgZm9ybU1vZGVsIHdpdGggdGhlIHNlbGVjdGlvbiAqL1xyXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb246IENhbGVuZGFyU2VsZWN0aW9uIHwgbnVsbCkge1xyXG4gICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcclxuICAgIGlmIChpc0NhbGVuZGFyU2VsZWN0aW9uU2luZ2xlRGF0ZShzZWxlY3Rpb24pKSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnNldFZhbHVlKHNlbGVjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25UZXh0Ym94Qmx1cigpIHtcclxuICAgIC8vIFBhcnNlIHRoZSB0ZXh0Ym94IHZhbHVlIGludG8gYSBkYXRlIGFuZCB1cGRhdGUgdGhlIGZvcm0gbW9kZWxcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy50ZXh0Ym94Q29udHJvbC52YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLnBhcnNlRm9ybWF0cyk7XHJcbiAgICAgIGlmIChwYXJzZWREYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLnNldFZhbHVlKHBhcnNlZERhdGUudG9EYXRlKCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGZvcm0gbW9kZWwncyB0b3VjaGVkIGFuZCBkaXJ0eSBzdGF0dXMgYmFzZWQgb24gdGhlIHRleHRib3gncyBzdGF0dXMuXHJcbiAgICAvLyBTaW5jZSB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhIGNvbnRyb2wgdGhhdCBpcyBpbnRlcm5hbCB0byB0aGlzIGNvbXBvbmVudCwgdGhlXHJcbiAgICAvLyBmb3JtIG1vZGVsJ3Mgc3RhdHVzIHdvbid0IGJlIHVwZGF0ZWQgYXV0b21hdGljYWxseS5cclxuICAgIGlmICh0aGlzLnRleHRib3hDb250cm9sLnRvdWNoZWQgJiYgIXRoaXMuZm9ybU1vZGVsLnRvdWNoZWQpIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGV4dGJveENvbnRyb2wuZGlydHkgJiYgIXRoaXMuZm9ybU1vZGVsLmRpcnR5KSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIFNldHVwXHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5zZXREYXRlRm9ybWF0cygpO1xyXG5cclxuICAgIHRoaXMuZm9ybU1vZGVsLmFkZFZhbGlkYXRvcnModGhpcy5kYXRlVmFsaWRhdG9yKTtcclxuXHJcbiAgICAvLyBTdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLm9uRm9ybU1vZGVsU3RhdHVzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5vbkZvcm1Nb2RlbFZhbHVlQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5vblRleHRib3hWYWx1ZUNoYW5nZXMoKTtcclxuXHJcbiAgICAvLyBTeW5jIHRoZSBpbml0aWFsIGRpc2FibGVkIHN0YXR1cyBhbmQgdmFsdWUgb2YgdGhlIHRleHRib3hcclxuICAgIHRoaXMuc3luY1RleHRib3hDb250cm9sRGlzYWJsZWRTdGF0dXModGhpcy5mb3JtTW9kZWwuc3RhdHVzKTtcclxuICAgIHRoaXMudGV4dGJveENvbnRyb2wuc2V0VmFsdWUodGhpcy5kYXRlRGlzcGxheVBpcGUudHJhbnNmb3JtKHRoaXMuZm9ybU1vZGVsLnZhbHVlKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZvcm1Nb2RlbFN0YXR1c0NoYW5nZXMoKSB7XHJcbiAgICAvLyBLZWVwIHRoZSB0ZXh0Ym94Q29udHJvbCBkaXNhYmxlZCBzdGF0dXMgaW4gc3luYyB3aXRoIHRoZSBmb3JtTW9kZWxcclxuICAgIHRoaXMuZm9ybU1vZGVsLnN0YXR1c0NoYW5nZXMucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoc3RhdHVzID0+IHtcclxuICAgICAgdGhpcy5zeW5jVGV4dGJveENvbnRyb2xEaXNhYmxlZFN0YXR1cyhzdGF0dXMpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNDYWxlbmRhck9wZW4pIHtcclxuICAgICAgICAvLyBBcyB2YWxpZGF0aW9uIG1lc3NhZ2VzIGFwcGVhci9kaXNhcHBlYXIsIHRoZSBkYXRlIGlucHV0IG1heSBoYXZlIHNoaWZ0ZWQgdXAgb3IgZG93biBvbiB0aGUgcGFnZS5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gdG8gZW5zdXJlIGl0J3Mgc3RpbGwgYWxpZ25lZCB3aXRoIHRoZSB0ZXh0Ym94IGFuZCBub3QgYmxvY2tpbmcgaXQuXHJcbiAgICAgICAgLy8gU2V0dGltZW91dCBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoZSBvdmVybGF5IGlzIGJlaW5nIHVwZGF0ZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcmVuZGVyZWQuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm92ZXJsYXk/Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZvcm1Nb2RlbFZhbHVlQ2hhbmdlcygpIHtcclxuICAgIC8vIFVwZGF0ZSB0aGUgY2FsZW5kYXIgc2VsZWN0aW9uIHRleHRib3ggdmFsdWUgd2l0aCBhIGZvcm1hdHRlZCBkYXRlIHdoZW4gdGhlIGZvcm0gbW9kZWwgY2hhbmdlcy5cclxuICAgIC8vIFRoaXMgaXMgdXN1YWxseSB0cmlnZ2VyZWQgYnkgcHJvZ3JhbW1hdGljIGNoYW5nZXMgdG8gdGhlIGZvcm0gbW9kZWwgYnkgYSBwYXJlbnQgY29tcG9uZW50LlxyXG4gICAgdGhpcy5mb3JtTW9kZWwudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBtb21lbnQoYSkuaXNTYW1lKGIsICdkYXknKSksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5kYXRlRGlzcGxheVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgLy8gRG9uJ3QgZW1pdCBhbiBldmVudCB3aGVuIHNldHRpbmcgdGhlIHRleHRib3ggdmFsdWUgdG8gYXZvaWQgY2lyY3VsYXIgdXBkYXRlcyBiZXR3ZWVuIHRoZSB0ZXh0Ym94IGFuZCBmb3JtIG1vZGVsLlxyXG4gICAgICB0aGlzLnRleHRib3hDb250cm9sLnNldFZhbHVlKGRpc3BsYXlWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gdmFsdWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UZXh0Ym94VmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBjYWxlbmRhciBzZWxlY3Rpb24gd2hlbiB0aGUgdGV4dGJveCB2YWx1ZSBjaGFuZ2VzIHRvIHVwZGF0ZSB0aGUgY2FsZW5kYXIuXHJcbiAgICAvLyBXZSBkb24ndCBwYXRjaCB0aGUgZm9ybU1vZGVsIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgdGhlXHJcbiAgICAvLyBkYXRlIGZvcm1hdHRpbmcgbG9naWMgYW5kIG92ZXJ3cml0ZSB0aGUgdXNlcidzIGlucHV0LlxyXG4gICAgLy8gV2UnbGwgZG8gdGhhdCB3aGVuIHRoZSB1c2VyIGJsdXJzIG91dCBvZiB0aGUgdGV4dGJveC4gU2VlIG9uVGV4dGJveEJsdXIoKVxyXG4gICAgdGhpcy50ZXh0Ym94Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IG1vbWVudCh2YWx1ZSwgdGhpcy5wYXJzZUZvcm1hdHMpO1xyXG4gICAgICAgIGlmIChwYXJzZWREYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgLy8gSWYgdGhlIHBhcnNlZCBkYXRlIGlzIGJlZm9yZSB0aGUgbWluRGF0ZSwgc2V0IHRoZSB5ZWFyIHRvIHRoZSBjdXJyZW50IHllYXIuXHJcbiAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBjYWxlbmRhciBmcm9tIHNob3dpbmcgdW5oZWxwZnVsIGRhdGVzIGluIHRoZSBkaXN0YW50IHBhc3QgYXMgdGhlIHVzZXIgdHlwZXNcclxuICAgICAgICAgIGlmIChwYXJzZWREYXRlLnllYXIoKSA8IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB7XHJcbiAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0KCd5ZWFyJywgbW9tZW50KCkueWVhcigpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSBwYXJzZWREYXRlLnRvRGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN5bmNUZXh0Ym94Q29udHJvbERpc2FibGVkU3RhdHVzKHN0YXR1czogRm9ybUNvbnRyb2xTdGF0dXMpIHtcclxuICAgIC8vIFRoZSB0ZXh0Ym94IHNob3VsZCBvbmx5IGJlIGRpc2FibGVkIGlmIHRoZSBmb3JtIG1vZGVsIGlzIGRpc2FibGVkLlxyXG4gICAgLy8gQWxsIG90aGVyIHN0YXR1c2VzIGFyZSBjb25zaWRlcmVkIGVuYWJsZWQuXHJcbiAgICBpZiAoc3RhdHVzID09PSAnRElTQUJMRUQnICYmIHRoaXMudGV4dGJveENvbnRyb2wuZW5hYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRib3hDb250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAnRElTQUJMRUQnICYmIHRoaXMudGV4dGJveENvbnRyb2wuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy50ZXh0Ym94Q29udHJvbC5lbmFibGUoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKiogXHJcbiAgICogVXBkYXRlcyB0aGUgZGF0ZSBwYXJzaW5nIGZvcm1hdHMgYW5kIHBsYWNlaG9sZGVyIGJhc2VkIG9uIHRoZSB1c2VyJ3MgZGlzcGxheSBwcmVmZXJlbmNlLlxyXG4gICAqIE5PVEU6IFRoaXMgaXMgYXN5bmMgYmVjYXVzZSB3ZSdyZSByZXRyaWV2aW5nIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMuIFdlJ3JlIG5vdCBhd2FpdGluZyB0aGUgcmVzdWx0XHJcbiAgICogYmVjYXVzZSB0aGUgb25seSBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdGhpcyBpcyB0aGUgdGV4dCBib3ggZGF0ZSBwYXJzaW5nIGxvZ2ljIGFuZCBwbGFjZWhvbGRlci5cclxuICAgKiBPdXIgZm9ybXMgc2hvdWxkIGFsd2F5cyBiZSBiZWhpbmQgYSBwZW5kaW5nIG92ZXJsYXksIHNvIHRoZSB1c2VyIHdvbid0IGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGVcclxuICAgKiBmb3JtIHVudGlsIHRoZSB1c2VyIGlzIGxvYWRlZCBhbnl3YXkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXREYXRlRm9ybWF0cygpIHtcclxuICAgIGNvbnN0IHsgcHJlZmVyZW5jZSB9ID0gYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UuZ2V0UHJlZmVyZW5jZXMoKS50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBwcmVmZXJlbmNlPy5kYXRlRm9ybWF0O1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IGRhdGVGb3JtYXQgPz8gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgIHRoaXMucGFyc2VGb3JtYXRzID0gRGF0ZVRpbWVIZWxwZXIuZ2V0TW9tZW50UGFyc2VGb3JtYXRzKGRhdGVGb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdG9yIHRoYXQgY2hlY2tzIGlmIHRoZSBkYXRlIGlzIHdpdGhpbiB0aGUgbWluIGFuZCBtYXggZGF0ZSByYW5nZS5cclxuICAgKiBJZiB0aGUgZGF0ZSBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZSwgdGhlIHZhbGlkYXRvciByZXR1cm5zIGFuIGVycm9yIHRoYXRcclxuICAgKiB0cmlnZ2VycyB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIHNlcnZpY2UgdG8gc2hvdyB0aGUgZXJyb3IgaW4gdGhlIGxhYmVsLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGF0ZVZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICBpZiAoY29udHJvbC52YWx1ZSkge1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSA8IHRoaXMubWluRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB7IG1pbkRhdGU6IHsgbWluVmFsdWU6IHRoaXMubWluRGF0ZSB9IH07XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSA+IHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB7IG1heERhdGU6IHsgbWF4VmFsdWU6IHRoaXMubWF4RGF0ZSB9IH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG59XHJcbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCI+XHJcbiAgPHNwYW4+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwidmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwICYmIGZvcm1Nb2RlbC50b3VjaGVkICYmIGZvcm1Nb2RlbC5pbnZhbGlkXCI+Jm5ic3A7e3t2YWxpZGF0aW9uRXJyb3JzfX08L3NwYW4+XHJcbiAgPGVjLWhlbHAtcG9wb3ZlciBpZD1cInt7aWR9fV9oZWxwUG9wb3ZlclwiXHJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2sgbXktbjMgbXgtbjFcIlxyXG4gICAgICAgICAgICAgICAgICAgdGV4dD1cInt7aGVscFBvcG92ZXIgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICBjb250ZW50UG9zaXRpb249XCJ7e2hlbHBQb3BvdmVyUG9zaXRpb259fVwiPlxyXG4gIDwvZWMtaGVscC1wb3BvdmVyPlxyXG48L2xhYmVsPlxyXG5cclxuPGVjLWZvcm0tY29udHJvbCBpZD1cInt7aWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXHJcbiAgICAgICAgICAgICAgICAgW3BlbmRpbmddPVwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICBbZm9ybU1vZGVsXT1cImZvcm1Nb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrZWQpPVwiaXNDYWxlbmRhck9wZW4gPyBjbG9zZUNhbGVuZGFyKCkgOiBvcGVuQ2FsZW5kYXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgKGFjdGlvbktleWRvd24pPVwib25BY3Rpb25LZXlkb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgIGFjdGlvbkljb249XCJpY29uLWRhdGVcIlxyXG4gICAgICAgICAgICAgICAgIGNka092ZXJsYXlPcmlnaW5cclxuICAgICAgICAgICAgICAgICAjb3ZlcmxheU9yaWdpbj1cImNka092ZXJsYXlPcmlnaW5cIj5cclxuICA8aW5wdXQgaWQ9XCJ7e2lkfX1faW5wdXRcIlxyXG4gICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRib3hDb250cm9sXCJcclxuICAgICAgICAgKGJsdXIpPVwib25UZXh0Ym94Qmx1cigpXCJcclxuICAgICAgICAgKGtleWRvd24pPVwib25UZXh0Ym94S2V5ZG93bigkZXZlbnQpXCI+XHJcbjwvZWMtZm9ybS1jb250cm9sPlxyXG5cclxuPG5nLXRlbXBsYXRlIGNka0Nvbm5lY3RlZE92ZXJsYXlcclxuICAgICAgICAgICAgICNvdmVybGF5PVwiY2RrQ29ubmVjdGVkT3ZlcmxheVwiXHJcbiAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJvdmVybGF5T3JpZ2luXCJcclxuICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJpc0NhbGVuZGFyT3BlblwiXHJcbiAgICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5XT1cIm92ZXJsYXlTY3JvbGxTdHJhdGVneVwiXHJcbiAgICAgICAgICAgICBjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgICAgKG92ZXJsYXlPdXRzaWRlQ2xpY2spPVwib25PdmVybGF5T3V0c2lkZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgKGRldGFjaCk9XCJvbkNhbGVuZGFyQ2xvc2UoKVwiPlxyXG4gIDxlYy1jYWxlbmRhciBbaWRdPVwiaWQgKyAnX2NhbGVuZGFyJ1wiXHJcbiAgICAgICAgICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICAgICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJjYWxlbmRhclNlbGVjdGlvblwiXHJcbiAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZCBweC0xIHB0LTEgcGItMlwiXHJcbiAgICAgICAgICAgICAgIChmb2N1c091dEVuZCk9XCJjbG9zZUNhbGVuZGFyKClcIlxyXG4gICAgICAgICAgICAgICAoZm9jdXNPdXRTdGFydCk9XCJmb2N1c0lucHV0KClcIj5cclxuICA8L2VjLWNhbGVuZGFyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -240,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
240
240
  type: ViewChild,
241
241
  args: ['dropdownToggle']
242
242
  }] } });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUosT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFlLE1BQU0seURBQXlELENBQUM7QUFHL0csT0FBTyxFQUFFLGFBQWEsRUFBOEIsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQU9uRixNQUFNLE9BQU8saUJBQWlCO0lBZ0s1QjtRQXpKQTs7V0FFRztRQUNhLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDYSxXQUFNLEdBQWtCLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFFekU7O1dBRUc7UUFDYSxhQUFRLEdBQVcsS0FBSyxDQUFDO1FBWXpDOztXQUVHO1FBQ2EsZUFBVSxHQUFnQixNQUFNLENBQUM7UUFRakQ7OztXQUdHO1FBQ2EsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFPekM7O1dBRUc7UUFDYSxjQUFTLEdBQVksSUFBSSxDQUFDO1FBRTFDOztXQUVHO1FBQ2EsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUV2Qzs7V0FFRztR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VSxTQUFTO3NCQUF4QixLQUFLO2dCQUtVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBS1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQUtVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBS1UsWUFBWTtzQkFBM0IsS0FBSztnQkFLVSxVQUFVO3NCQUF6QixLQUFLO2dCQU1VLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQU1VLE9BQU87c0JBRHRCLFdBQVc7dUJBQUMsa0JBQWtCOztzQkFDOUIsS0FBSztnQkFLVyxZQUFZO3NCQUE1QixNQUFNO2dCQUtVLFdBQVc7c0JBQTNCLE1BQU07Z0JBa0JpRCxNQUFNO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS2dCLEtBQUs7c0JBQWxFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtoQixvQkFBb0I7c0JBQXZELFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUG9wcGVyIGZyb20gJ3BvcHBlci5qcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUG9wdXBDb250YWluZXJEaXJlY3RpdmUsIFBvcHVwU3RhdHVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RpcmVjdGl2ZXMvcG9wdXAvcG9wdXAtY29udGFpbmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERpc3BsYXlTdGF0dXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlzcGxheSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCwgQnV0dG9uVHlwZSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVudUNvbXBvbmVudCwgTWVudUl0ZW0sIE1lbnVUZW1wbGF0ZVR5cGUgfSBmcm9tICcuLi9tZW51L21lbnUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgaWQgZm9yIHRoZSBjb21wb25lbnQncyBzdWItZWxlbWVudHNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF1dG9tYXRpY2FsbHkgZm9jdXMgdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYXV0b2ZvY3VzID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHRoZSBkaXNwbGF5IHN0YXR1cyBvdmVybGF5IGZvciB0aGUgbWVudVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0dXM/OkRpc3BsYXlTdGF0dXMgPSB7c3RhdHVzOiAnaGFzRGF0YScsIG1lc3NhZ2U6ICcnfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzYWJsZSB0aGUgYnV0dG9uIHRvIHByZXZlbnQgdGhlIG1lbnUgZnJvbSBiZWluZyBvcGVuZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBsYWJlbCBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgaWNvbiBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgYnV0dG9uIHR5cGUsIGRlZmF1bHRzIHRvIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVHlwZT86IEJ1dHRvblR5cGUgPSAnaWNvbic7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsbHkgYWxpZ24gdGhlIGxhYmVsIG9mIHRoZSBidXR0b24gdG8gdGhlIGxlZnQgb3IgcmlnaHQuIElmIG5vdCBzZXQsXHJcbiAgICogd2lsbCBiZSBjZW50ZXJlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQWxpZ25tZW50PzogJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIHRvb2x0aXAgdG8gdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b24uIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlblxyXG4gICAqIHRoZSB0b2dnbGUgYnV0dG9uVHlwZSBpcyAnaWNvbidcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGFiaW5kZXggb2YgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJpbmRleD86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGNhcmV0IHdpdGggdGhlIGJ1dHRvbiBsYWJlbCBvciBpY29uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNob3dBcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIG1lbnVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1lbnUgaXRlbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGhlYWRlciBvbiB0aGUgbWVudVxyXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmaXJzdCBtZW51IGl0ZW0gd2l0aCBkaXNwbGF5IHNldCB0byAnaGVhZGluZycgaW5zdGVhZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGZpeGVkIGhlaWdodCBmb3IgdGhlIG1lbnUsIGF1dG8gYnkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51SGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBmaXhlZCB3aWR0aCBpbiBwaXhlbHMgZm9yIHRoZSBtZW51LCBhdXRvIGJ5IGRlZmF1bHRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVdpZHRoPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBtaW4td2lkdGggaW4gcGl4ZWxzIG9uIHRoZSBtZW51LiBJdCB3aWxsIGV4cGFuZCBpZiB0aGUgY29udGVudCBpcyBncmVhdGVyIHRoYW4gdGhlIG1pbi13aWR0aFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51TWluV2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBpbiB0aGUgbWVudSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGUgYnV0dG9uLiBSaWdodCBieSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0aWNreSBmb290ZXIgdG8gZGlzcGxheSBhdCB0aGUgYm90dG9tIG9mIHRoZSBwb3B1cCBtZW51XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVGb290ZXI/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpeCBwb3NpdGlvbiB0aGUgbWVudSBpbnN0ZWFkIG9mIGFic29sdXRlLiBVc2VmdWwgd2hlbiB0aGUgZHJvcGRvd24gaXMgaW4gYVxyXG4gICAqIGRpYWxvZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwb3B1cEZpeGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhc3MgYSBjdXN0b20gdGVtcGxhdGUgdG8gdGhlIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQ3VzdG9tVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKipcclxuICAqIFVzZWQgdG8gc2V0IHRoZSBtZW51IGJ1dHRvbnMgc3RhdGUgdG8gcGVuZGluZ1xyXG4gICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1wZW5kaW5nJylcclxuICBASW5wdXQoKSBwdWJsaWMgcGVuZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBwb3B1cCBtZW51IG9wZW5zXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBwb3B1cE9wZW5lZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW51XHJcbiAgICovXHJcbiAgcHVibGljIG1lbnVTdGF0dXM6IFBvcHVwU3RhdHVzID0gJ2hpZGRlbic7XHJcblxyXG4gIC8qKiBJdGVtIHRvIGhpZ2hsaWdodCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZCwgdXNlZCB3aGVuIHRoZSB1c2VyXHJcbiAgICogIG9wZW5zIHRoZSBtZW51IHZpYSB0aGUga2V5Ym9hcmRcclxuICAgKi9cclxuICBwdWJsaWMgaGlnaGxpZ2h0ZWRJdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogVXNlZCB0byBrbm93IGlmIHRoZSBtZW51IHdhcyB0b2dnbGVkIHZpYSB0aGUga2V5Ym9hcmQgKi9cclxuICBwcml2YXRlIGlzS2V5Ym9hcmRFdmVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIG1lbnUgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoTWVudUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgbWVudUVsITpFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHBvcHVwIGRpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoUG9wdXBDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgcG9wdXAhOiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSB0b2dnbGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25Ub2dnbGUnKSBwdWJsaWMgZHJvcGRvd25Ub2dnbGVCdXR0b24hOiBCdXR0b25Db21wb25lbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21wb25lbnREZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmliZSB0byBjaGFuZ2VzIHRvIHRoZSBtZW51IHN0YXR1c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucG9wdXAucG9wcGVyU3RhdHVzQ2hhbmdlXHJcbiAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKVxyXG4gICAgLnN1YnNjcmliZSgoZXZlbnQ6ICd2aXNpYmxlJyB8ICdoaWRkZW4nKSA9PiB7XHJcbiAgICAgIHRoaXMubWVudVN0YXR1cyA9IGV2ZW50O1xyXG4gICAgICBpZih0aGlzLm1lbnVTdGF0dXMgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgIHRoaXMucG9wdXBPcGVuZWQuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB1cCB0aGUgcG9wdXBcclxuICAgKi9cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgbGV0IHBvcHBlck9wdGlvbnM6IFBvcHBlci5Qb3BwZXJPcHRpb25zID0ge1xyXG5cdFx0XHRtb2RpZmllcnM6IHtcclxuXHRcdFx0XHRwcmV2ZW50T3ZlcmZsb3c6IHtcclxuXHRcdFx0XHRcdGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnXHJcblx0XHRcdFx0fVxyXG4gICAgICB9LFxyXG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20tZW5kJ1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5tZW51UG9zaXRpb24gPT09ICdsZWZ0Jykge1xyXG4gICAgICBwb3BwZXJPcHRpb25zLnBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5wb3B1cEZpeGVkKSB7XHJcbiAgICAgIHBvcHBlck9wdGlvbnMub25DcmVhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3B1cC5maXhQb3NpdGlvbigpO1xyXG4gICAgICB9XHJcblxyXG5cdFx0XHRwb3BwZXJPcHRpb25zLm9uVXBkYXRlID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIEhpZGUgdGhlIHBvcHVwIHdoZW4gdGhlIGRyb3Bkb3duIGNoYW5nZXMgcG9zaXRpb24gZHVlIHRvIHdpbmRvdyByZXNpemVcclxuICAgICAgICAvLyBvciBjb250YWluZXIgc2Nyb2xsaW5nXHJcbiAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XHJcblx0XHRcdH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcHVwLnBvcHBlck9wdGlvbnMgPSBwb3BwZXJPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5zdWJzY3JpYmUgdG8gYW55IGFjdGl2ZSBzdWJzY3JpcHRpb25zXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYW5kIGNsb3NlIHRoZSBtZW51XHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZU1lbnUoZXZlbnQ/OkV2ZW50KTp2b2lkIHtcclxuICAgIGlmIChldmVudCkge1xyXG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ2hpZGRlbicpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0tleWJvYXJkRXZlbnQgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vIFNldHVwIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IHRvIGhpZ2hsaWdodCB3aGVuIG9wZW5pbmcgdGhlXHJcbiAgICAgICAgICAvLyBtZW51IHZpYSB0aGUga2V5Ym9hcmQsIGlnbm9yaW5nIGhlYWRpbmdzXHJcblxyXG4gICAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmRpc3BsYXkgIT09ICdoZWFkaW5nJykgfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb3B1cC5zaG93KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHRoZSBoaWdobGlnaHRlZCBpdGVtIGFuZCBvdXIga2V5Ym9hcmQgZmxhZ1xyXG4gICAgICAgIC8vIHdoZW4gd2UgY2xvc2UgdGhlIHBvcHVwXHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZEl0ZW0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNLZXlib2FyZEV2ZW50ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgdGhlIHNlbGVjdGVkIGl0ZW0gd2hlbiBpdCBjaGFuZ2VzIGFuZCBjbG9zZSB0aGUgbWVudVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZENoYW5nZWQoaXRlbTpNZW51SXRlbSk6dm9pZCB7XHJcbiAgICB0aGlzLml0ZW1TZWxlY3RlZC5lbWl0KGl0ZW0pO1xyXG4gICAgdGhpcy50b2dnbGVNZW51KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZXMgdGhlIG1lbnUgaWYgdGhlIHRhYiBrZXkgaXMgcHJlc3NlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBrZXlOYXZpZ2F0ZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcclxuICAgICAgY2FzZSAnRW50ZXInOlxyXG4gICAgICAgIHRoaXMuaXNLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnRXNjYXBlJzpcclxuICAgICAgY2FzZSAnVGFiJzpcclxuICAgICAgICBpZiAodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICAgIHRoaXMudG9nZ2xlTWVudShldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb250cm9sXCI+XHJcbiAgPGVjLWJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgaWQ9XCJ7e2lkfX1fdG9nZ2xlXCJcclxuICAgICAgICAgICAgICNkcm9wZG93blRvZ2dsZVxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwieydoYXMtYXJyb3cnOnNob3dBcnJvdywgJ2FjdGl2ZSc6IG1lbnVTdGF0dXMgPT09ICd2aXNpYmxlJywgJ3RleHQtbGVmdCc6IGJ1dHRvbkFsaWdubWVudCA9PT0gJ2xlZnQnLCAndGV4dC1yaWdodCc6IGJ1dHRvbkFsaWdubWVudCA9PT0gJ3JpZ2h0J31cIlxyXG4gICAgICAgICAgICAgKmVjUG9wdXA9XCJkcm9wZG93bk1lbnVcIlxyXG4gICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgIFtpY29uXT1cImljb25cIlxyXG4gICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcclxuICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvblR5cGVcIlxyXG4gICAgICAgICAgICAgW2N1c3RvbVRlbXBsYXRlXT1cImJ1dHRvbkN1c3RvbVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgdGl0bGU9XCJ7e2J1dHRvblRpdGxlfX1cIlxyXG4gICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAoa2V5ZG93bik9XCJrZXlOYXZpZ2F0ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCI+XHJcbiAgPC9lYy1idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJhcnJvdyBpcy17e2J1dHRvblR5cGV9fVwiXHJcbiAgICAgICAgKm5nSWY9XCJzaG93QXJyb3dcIlxyXG4gICAgICAgIFtjbGFzcy5pcy1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gICAgPGkgY2xhc3M9XCJlYy1pY29uIGljb24tY2FyZXQtZG93blwiIFtjbGFzcy5mbGlwLXldPVwibWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnXCI+PC9pPlxyXG4gIDwvc3Bhbj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duTWVudT5cclxuICA8ZGl2IGlkPVwie3tpZH19X3BvcHVwXCJcclxuICAgICAgIGNsYXNzPVwicG9wdXBcIlxyXG4gICAgICAgZWNPdmVybGF5XHJcbiAgICAgICBbc3RhdHVzXT1cInN0YXR1cz8uc3RhdHVzXCJcclxuICAgICAgIFttZXNzYWdlXT1cInN0YXR1cz8ubWVzc2FnZVwiXHJcbiAgICAgICBbZGlzcGxheUFzTWFza109XCJ0cnVlXCI+XHJcbiAgICA8IS0tIERyb3Bkb3duIE1lbnUgVGl0bGUgLS0+XHJcbiAgICA8aGVhZGVyIGlkPVwie3tpZH19X3RpdGxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWhlYWRpbmctMiBweC0yIG15LTJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnVUaXRsZVwiPnt7bWVudVRpdGxlfX1cclxuICAgIDwvaGVhZGVyPlxyXG4gICAgPCEtLSBEcm9wZG93biBNZW51IC0tPlxyXG4gICAgPGVjLW1lbnUgaWQ9XCJ7e2lkfX1fbWVudVwiXHJcbiAgICAgICAgICAgICBbY2xhc3Mud3JhcC1pdGVtc109XCJtZW51V2lkdGhcIlxyXG4gICAgICAgICAgICAgW3RlbXBsYXRlVHlwZV09XCJtZW51VGVtcGxhdGVUeXBlXCJcclxuICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJtZW51V2lkdGggPyBtZW51V2lkdGggKyAncHgnIDogJ2F1dG8nXCJcclxuICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwibWVudU1pbldpZHRoID8gbWVudU1pbldpZHRoICsgJ3B4JyA6ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIm1lbnVIZWlnaHQgPyBtZW51SGVpZ2h0ICsgJ3B4JyA6ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXNcIlxyXG4gICAgICAgICAgICAgW3Nob3dOb0l0ZW1zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgW2VuYWJsZUtleU5hdl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgIFtoaWdobGlnaHRlZEl0ZW1dPVwiaGlnaGxpZ2h0ZWRJdGVtXCJcclxuICAgICAgICAgICAgIFtkcm9wZG93blRvZ2dsZUJ1dHRvbl09XCJkcm9wZG93blRvZ2dsZUJ1dHRvbi5idXR0b25FbGVtZW50XCJcclxuICAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZWQpPVwic2VsZWN0ZWRDaGFuZ2VkKCRldmVudClcIj5cclxuICAgIDwvZWMtbWVudT5cclxuICAgIDxmb290ZXIgKm5nSWY9XCJtZW51Rm9vdGVyXCI+e3ttZW51Rm9vdGVyfX08L2Zvb3Rlcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUosT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFlLE1BQU0seURBQXlELENBQUM7QUFHL0csT0FBTyxFQUFFLGFBQWEsRUFBOEIsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQU9uRixNQUFNLE9BQU8saUJBQWlCO0lBZ0s1QjtRQXpKQTs7V0FFRztRQUNhLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEM7O1dBRUc7UUFDYSxXQUFNLEdBQWtCLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFFekU7O1dBRUc7UUFDYSxhQUFRLEdBQVcsS0FBSyxDQUFDO1FBWXpDOztXQUVHO1FBQ2EsZUFBVSxHQUFnQixNQUFNLENBQUM7UUFRakQ7OztXQUdHO1FBQ2EsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFPekM7O1dBRUc7UUFDYSxjQUFTLEdBQVksSUFBSSxDQUFDO1FBRTFDOztXQUVHO1FBQ2EsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUV2Qzs7V0FFRztR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VSxTQUFTO3NCQUF4QixLQUFLO2dCQUtVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBS1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQUtVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBS1UsWUFBWTtzQkFBM0IsS0FBSztnQkFLVSxVQUFVO3NCQUF6QixLQUFLO2dCQU1VLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQU1VLE9BQU87c0JBRHRCLFdBQVc7dUJBQUMsa0JBQWtCOztzQkFDOUIsS0FBSztnQkFLVyxZQUFZO3NCQUE1QixNQUFNO2dCQUtVLFdBQVc7c0JBQTNCLE1BQU07Z0JBa0JpRCxNQUFNO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS2dCLEtBQUs7c0JBQWxFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtoQixvQkFBb0I7c0JBQXZELFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUG9wcGVyIGZyb20gJ3BvcHBlci5qcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUG9wdXBDb250YWluZXJEaXJlY3RpdmUsIFBvcHVwU3RhdHVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RpcmVjdGl2ZXMvcG9wdXAvcG9wdXAtY29udGFpbmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERpc3BsYXlTdGF0dXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlzcGxheSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCwgQnV0dG9uVHlwZSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVudUNvbXBvbmVudCwgTWVudUl0ZW0sIE1lbnVUZW1wbGF0ZVR5cGUgfSBmcm9tICcuLi9tZW51L21lbnUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgaWQgZm9yIHRoZSBjb21wb25lbnQncyBzdWItZWxlbWVudHNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF1dG9tYXRpY2FsbHkgZm9jdXMgdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYXV0b2ZvY3VzID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHRoZSBkaXNwbGF5IHN0YXR1cyBvdmVybGF5IGZvciB0aGUgbWVudVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0dXM/OkRpc3BsYXlTdGF0dXMgPSB7c3RhdHVzOiAnaGFzRGF0YScsIG1lc3NhZ2U6ICcnfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzYWJsZSB0aGUgYnV0dG9uIHRvIHByZXZlbnQgdGhlIG1lbnUgZnJvbSBiZWluZyBvcGVuZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBsYWJlbCBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgaWNvbiBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgYnV0dG9uIHR5cGUsIGRlZmF1bHRzIHRvIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVHlwZT86IEJ1dHRvblR5cGUgPSAnaWNvbic7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsbHkgYWxpZ24gdGhlIGxhYmVsIG9mIHRoZSBidXR0b24gdG8gdGhlIGxlZnQgb3IgcmlnaHQuIElmIG5vdCBzZXQsXHJcbiAgICogd2lsbCBiZSBjZW50ZXJlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQWxpZ25tZW50PzogJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIHRvb2x0aXAgdG8gdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b24uIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlblxyXG4gICAqIHRoZSB0b2dnbGUgYnV0dG9uVHlwZSBpcyAnaWNvbidcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGFiaW5kZXggb2YgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJpbmRleD86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGNhcmV0IHdpdGggdGhlIGJ1dHRvbiBsYWJlbCBvciBpY29uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNob3dBcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIG1lbnVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1lbnUgaXRlbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGhlYWRlciBvbiB0aGUgbWVudVxyXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmaXJzdCBtZW51IGl0ZW0gd2l0aCBkaXNwbGF5IHNldCB0byAnaGVhZGluZycgaW5zdGVhZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGZpeGVkIGhlaWdodCBmb3IgdGhlIG1lbnUsIGF1dG8gYnkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51SGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBmaXhlZCB3aWR0aCBpbiBwaXhlbHMgZm9yIHRoZSBtZW51LCBhdXRvIGJ5IGRlZmF1bHRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVdpZHRoPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBtaW4td2lkdGggaW4gcGl4ZWxzIG9uIHRoZSBtZW51LiBJdCB3aWxsIGV4cGFuZCBpZiB0aGUgY29udGVudCBpcyBncmVhdGVyIHRoYW4gdGhlIG1pbi13aWR0aFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51TWluV2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBpbiB0aGUgbWVudSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGUgYnV0dG9uLiBSaWdodCBieSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0aWNreSBmb290ZXIgdG8gZGlzcGxheSBhdCB0aGUgYm90dG9tIG9mIHRoZSBwb3B1cCBtZW51XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVGb290ZXI/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpeCBwb3NpdGlvbiB0aGUgbWVudSBpbnN0ZWFkIG9mIGFic29sdXRlLiBVc2VmdWwgd2hlbiB0aGUgZHJvcGRvd24gaXMgaW4gYVxyXG4gICAqIGRpYWxvZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwb3B1cEZpeGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhc3MgYSBjdXN0b20gdGVtcGxhdGUgdG8gdGhlIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQ3VzdG9tVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKipcclxuICAqIFVzZWQgdG8gc2V0IHRoZSBtZW51IGJ1dHRvbnMgc3RhdGUgdG8gcGVuZGluZ1xyXG4gICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1wZW5kaW5nJylcclxuICBASW5wdXQoKSBwdWJsaWMgcGVuZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVJdGVtPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBwb3B1cCBtZW51IG9wZW5zXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBwb3B1cE9wZW5lZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBtZW51XHJcbiAgICovXHJcbiAgcHVibGljIG1lbnVTdGF0dXM6IFBvcHVwU3RhdHVzID0gJ2hpZGRlbic7XHJcblxyXG4gIC8qKiBJdGVtIHRvIGhpZ2hsaWdodCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZCwgdXNlZCB3aGVuIHRoZSB1c2VyXHJcbiAgICogIG9wZW5zIHRoZSBtZW51IHZpYSB0aGUga2V5Ym9hcmRcclxuICAgKi9cclxuICBwdWJsaWMgaGlnaGxpZ2h0ZWRJdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogVXNlZCB0byBrbm93IGlmIHRoZSBtZW51IHdhcyB0b2dnbGVkIHZpYSB0aGUga2V5Ym9hcmQgKi9cclxuICBwcml2YXRlIGlzS2V5Ym9hcmRFdmVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIG1lbnUgZWxlbWVudFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoTWVudUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgbWVudUVsITpFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCByZWZlcmVuY2UgdG8gdGhlIHBvcHVwIGRpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoUG9wdXBDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgcG9wdXAhOiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSB0b2dnbGUgYnV0dG9uXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25Ub2dnbGUnKSBwdWJsaWMgZHJvcGRvd25Ub2dnbGVCdXR0b24hOiBCdXR0b25Db21wb25lbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21wb25lbnREZXN0cm95ZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gY2hhbmdlcyB0byB0aGUgbWVudSBzdGF0dXNcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBvcHVwLnBvcHBlclN0YXR1c0NoYW5nZVxyXG4gICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSlcclxuICAgIC5zdWJzY3JpYmUoKGV2ZW50OiAndmlzaWJsZScgfCAnaGlkZGVuJykgPT4ge1xyXG4gICAgICB0aGlzLm1lbnVTdGF0dXMgPSBldmVudDtcclxuICAgICAgaWYodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICB0aGlzLnBvcHVwT3BlbmVkLmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdXAgdGhlIHBvcHVwXHJcbiAgICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBwb3BwZXJPcHRpb25zOiBQb3BwZXIuUG9wcGVyT3B0aW9ucyA9IHtcclxuXHRcdFx0bW9kaWZpZXJzOiB7XHJcblx0XHRcdFx0cHJldmVudE92ZXJmbG93OiB7XHJcblx0XHRcdFx0XHRib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xyXG5cdFx0XHRcdH1cclxuICAgICAgfSxcclxuICAgICAgcGxhY2VtZW50OiAnYm90dG9tLWVuZCdcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMubWVudVBvc2l0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgcG9wcGVyT3B0aW9ucy5wbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0JztcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMucG9wdXBGaXhlZCkge1xyXG4gICAgICBwb3BwZXJPcHRpb25zLm9uQ3JlYXRlID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucG9wdXAuZml4UG9zaXRpb24oKTtcclxuICAgICAgfVxyXG5cclxuXHRcdFx0cG9wcGVyT3B0aW9ucy5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAvLyBIaWRlIHRoZSBwb3B1cCB3aGVuIHRoZSBkcm9wZG93biBjaGFuZ2VzIHBvc2l0aW9uIGR1ZSB0byB3aW5kb3cgcmVzaXplXHJcbiAgICAgICAgLy8gb3IgY29udGFpbmVyIHNjcm9sbGluZ1xyXG4gICAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xyXG5cdFx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wb3B1cC5wb3BwZXJPcHRpb25zID0gcG9wcGVyT3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIHRvIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGFuZCBjbG9zZSB0aGUgbWVudVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVNZW51KGV2ZW50PzpFdmVudCk6dm9pZCB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICdoaWRkZW4nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNLZXlib2FyZEV2ZW50ICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBTZXR1cCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCB0byBoaWdobGlnaHQgd2hlbiBvcGVuaW5nIHRoZVxyXG4gICAgICAgICAgLy8gbWVudSB2aWEgdGhlIGtleWJvYXJkLCBpZ25vcmluZyBoZWFkaW5nc1xyXG5cclxuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5kaXNwbGF5ICE9PSAnaGVhZGluZycpIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9wdXAuc2hvdygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xyXG5cclxuICAgICAgICAvLyBSZXNldCB0aGUgaGlnaGxpZ2h0ZWQgaXRlbSBhbmQgb3VyIGtleWJvYXJkIGZsYWdcclxuICAgICAgICAvLyB3aGVuIHdlIGNsb3NlIHRoZSBwb3B1cFxyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IHRoZSBzZWxlY3RlZCBpdGVtIHdoZW4gaXQgY2hhbmdlcyBhbmQgY2xvc2UgdGhlIG1lbnVcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkKGl0ZW06TWVudUl0ZW0pOnZvaWQge1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChpdGVtKTtcclxuICAgIHRoaXMudG9nZ2xlTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIHRoZSBtZW51IGlmIHRoZSB0YWIga2V5IGlzIHByZXNzZWRcclxuICAgKi9cclxuICBwdWJsaWMga2V5TmF2aWdhdGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcbiAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICB0aGlzLmlzS2V5Ym9hcmRFdmVudCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgIGNhc2UgJ1RhYic6XHJcbiAgICAgICAgaWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZU1lbnUoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxyXG4gIDxlYy1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgIGlkPVwie3tpZH19X3RvZ2dsZVwiXHJcbiAgICAgICAgICAgICAjZHJvcGRvd25Ub2dnbGVcclxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaGFzLWFycm93JzpzaG93QXJyb3csICdhY3RpdmUnOiBtZW51U3RhdHVzID09PSAndmlzaWJsZScsICd0ZXh0LWxlZnQnOiBidXR0b25BbGlnbm1lbnQgPT09ICdsZWZ0JywgJ3RleHQtcmlnaHQnOiBidXR0b25BbGlnbm1lbnQgPT09ICdyaWdodCd9XCJcclxuICAgICAgICAgICAgICplY1BvcHVwPVwiZHJvcGRvd25NZW51XCJcclxuICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgICAgICBbaWNvbl09XCJpY29uXCJcclxuICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXHJcbiAgICAgICAgICAgICBbdHlwZV09XCJidXR0b25UeXBlXCJcclxuICAgICAgICAgICAgIFtjdXN0b21UZW1wbGF0ZV09XCJidXR0b25DdXN0b21UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICBbcGVuZGluZ109XCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgIHRpdGxlPVwie3tidXR0b25UaXRsZX19XCJcclxuICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KCRldmVudClcIlxyXG4gICAgICAgICAgICAgKGtleWRvd24pPVwia2V5TmF2aWdhdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiPlxyXG4gIDwvZWMtYnV0dG9uPlxyXG4gIDxzcGFuIGNsYXNzPVwiYXJyb3cgaXMte3tidXR0b25UeXBlfX1cIlxyXG4gICAgICAgICpuZ0lmPVwic2hvd0Fycm93XCJcclxuICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgIDxpIGNsYXNzPVwiZWMtaWNvbiBpY29uLWNhcmV0LWRvd25cIiBbY2xhc3MuZmxpcC15XT1cIm1lbnVTdGF0dXMgPT09ICd2aXNpYmxlJ1wiPjwvaT5cclxuICA8L3NwYW4+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNkcm9wZG93bk1lbnU+XHJcbiAgPGRpdiBpZD1cInt7aWR9fV9wb3B1cFwiXHJcbiAgICAgICBjbGFzcz1cInBvcHVwXCJcclxuICAgICAgIGVjT3ZlcmxheVxyXG4gICAgICAgW3N0YXR1c109XCJzdGF0dXM/LnN0YXR1c1wiXHJcbiAgICAgICBbbWVzc2FnZV09XCJzdGF0dXM/Lm1lc3NhZ2VcIlxyXG4gICAgICAgW2Rpc3BsYXlBc01hc2tdPVwidHJ1ZVwiPlxyXG4gICAgPCEtLSBEcm9wZG93biBNZW51IFRpdGxlIC0tPlxyXG4gICAgPGhlYWRlciBpZD1cInt7aWR9fV90aXRsZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1oZWFkaW5nLTIgcHgtMiBteS0yXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJtZW51VGl0bGVcIj57e21lbnVUaXRsZX19XHJcbiAgICA8L2hlYWRlcj5cclxuICAgIDwhLS0gRHJvcGRvd24gTWVudSAtLT5cclxuICAgIDxlYy1tZW51IGlkPVwie3tpZH19X21lbnVcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLndyYXAtaXRlbXNdPVwibWVudVdpZHRoXCJcclxuICAgICAgICAgICAgIFt0ZW1wbGF0ZVR5cGVdPVwibWVudVRlbXBsYXRlVHlwZVwiXHJcbiAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwibWVudVdpZHRoID8gbWVudVdpZHRoICsgJ3B4JyA6ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cIm1lbnVNaW5XaWR0aCA/IG1lbnVNaW5XaWR0aCArICdweCcgOiAnYXV0bydcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJtZW51SGVpZ2h0ID8gbWVudUhlaWdodCArICdweCcgOiAnYXV0bydcIlxyXG4gICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW1zXCJcclxuICAgICAgICAgICAgIFtzaG93Tm9JdGVtc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgIFtlbmFibGVLZXlOYXZdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICBbaGlnaGxpZ2h0ZWRJdGVtXT1cImhpZ2hsaWdodGVkSXRlbVwiXHJcbiAgICAgICAgICAgICBbZHJvcGRvd25Ub2dnbGVCdXR0b25dPVwiZHJvcGRvd25Ub2dnbGVCdXR0b24uYnV0dG9uRWxlbWVudFwiXHJcbiAgICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2VkKT1cInNlbGVjdGVkQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICA8L2VjLW1lbnU+XHJcbiAgICA8Zm9vdGVyICpuZ0lmPVwibWVudUZvb3RlclwiPnt7bWVudUZvb3Rlcn19PC9mb290ZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19