UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

64 lines 19 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Component } from "@angular/core"; import moment from "moment/moment"; import { DatePickerInnerComponent } from "./date-picker-inner.component"; import * as i0 from "@angular/core"; import * as i1 from "./date-picker-inner.component"; import * as i2 from "@angular/common"; import * as i3 from "../button/button.component"; /** @ignore */ export class MonthPickerComponent { constructor(datePicker) { this.datePicker = datePicker; this.rows = []; this.datePicker = datePicker; } ngOnInit() { this.datePicker.stepMonth = { years: 1 }; this.datePicker.setRefreshViewHandler(() => { const picker = this.datePicker; const months = new Array(12); let date = picker.value && picker.value.isValid() ? picker.value.clone() : moment(); date = date.set("date", 1); for (let i = 0; i < 12; i++) { date = date.clone().set("month", i); months[i] = picker.createDateObject(date, picker.formatMonth); months[i].uid = picker.uniqueId + "-" + i; } this.title = picker.formatDate(date, picker.formatMonthTitle); this.rows = picker.split(months, 3); }, "month"); this.datePicker.setCompareHandler((date1, date2) => { const d1 = moment({ year: date1.year(), month: date1.month() }); const d2 = moment({ year: date2.year(), month: date2.month() }); return d1.valueOf() - d2.valueOf(); }, "month"); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MonthPickerComponent, deps: [{ token: i1.DatePickerInnerComponent }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MonthPickerComponent, selector: "nui-month-picker", ngImport: i0, template: "<table *ngIf=\"datePicker.datepickerMode === 'month'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n icon=\"caret-left\"\n (click)=\"datePicker.move(-1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n <th>\n <button\n nui-button\n type=\"button\"\n [id]=\"datePicker.uniqueId + '-title'\"\n displayStyle=\"action\"\n [disabled]=\"datePicker.datepickerMode === maxMode\"\n class=\"change-mode-button\"\n [ngClass]=\"{\n disabled: datePicker.datepickerMode === maxMode\n }\"\n (click)=\"datePicker.toggleMode($event)\"\n tabindex=\"-1\"\n >\n <span>{{ title }}</span>\n </button>\n </th>\n <th>\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n icon=\"caret-right\"\n (click)=\"datePicker.move(1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows\">\n <td\n *ngFor=\"let cell of row\"\n class=\"text-center month\"\n id=\"{{ cell.uid }}\"\n >\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n [ngClass]=\"{\n selected: cell.selected,\n disabled: cell.disabled\n }\"\n [disabled]=\"cell.disabled\"\n (click)=\"datePicker.select(cell.date, $event)\"\n tabindex=\"-1\"\n >\n <span [ngClass]=\"{ 'text-info': cell.current }\">{{\n cell.label\n }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "[nui-button]", inputs: ["displayStyle", "icon", "iconColor", "iconRight", "isBusy", "isEmpty", "ariaLabel", "isRepeat", "size"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MonthPickerComponent, decorators: [{ type: Component, args: [{ selector: "nui-month-picker", template: "<table *ngIf=\"datePicker.datepickerMode === 'month'\" role=\"grid\">\n <thead>\n <tr>\n <th>\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n icon=\"caret-left\"\n (click)=\"datePicker.move(-1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n <th>\n <button\n nui-button\n type=\"button\"\n [id]=\"datePicker.uniqueId + '-title'\"\n displayStyle=\"action\"\n [disabled]=\"datePicker.datepickerMode === maxMode\"\n class=\"change-mode-button\"\n [ngClass]=\"{\n disabled: datePicker.datepickerMode === maxMode\n }\"\n (click)=\"datePicker.toggleMode($event)\"\n tabindex=\"-1\"\n >\n <span>{{ title }}</span>\n </button>\n </th>\n <th>\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n icon=\"caret-right\"\n (click)=\"datePicker.move(1, $event)\"\n tabindex=\"-1\"\n ></button>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of rows\">\n <td\n *ngFor=\"let cell of row\"\n class=\"text-center month\"\n id=\"{{ cell.uid }}\"\n >\n <button\n nui-button\n type=\"button\"\n displayStyle=\"action\"\n [ngClass]=\"{\n selected: cell.selected,\n disabled: cell.disabled\n }\"\n [disabled]=\"cell.disabled\"\n (click)=\"datePicker.select(cell.date, $event)\"\n tabindex=\"-1\"\n >\n <span [ngClass]=\"{ 'text-info': cell.current }\">{{\n cell.label\n }}</span>\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n" }] }], ctorParameters: () => [{ type: i1.DatePickerInnerComponent }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbW9udGgtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXItbW9udGgtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9saWIvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXItbW9udGgtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSw0REFBNEQ7QUFDNUQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSx1REFBdUQ7QUFDdkQsRUFBRTtBQUNGLDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBQy9FLDBFQUEwRTtBQUMxRSxpRkFBaUY7QUFDakYsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUVqQixPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUduQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7QUFDekUsY0FBYztBQUtkLE1BQU0sT0FBTyxvQkFBb0I7SUFLN0IsWUFBbUIsVUFBb0M7UUFBcEMsZUFBVSxHQUFWLFVBQVUsQ0FBMEI7UUFIdkQsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUliLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFTLEVBQUU7WUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBVSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVwQyxJQUFJLElBQUksR0FDSixNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUNsQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQzdDO1lBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVaLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQzdCLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBVSxFQUFFO1lBQ3JDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsQ0FBQyxFQUNELE9BQU8sQ0FDVixDQUFDO0lBQ04sQ0FBQzsrR0F4Q1Esb0JBQW9CO21HQUFwQixvQkFBb0Isd0RDOUJqQywrMkVBcUVBOzs0RkR2Q2Esb0JBQW9CO2tCQUpoQyxTQUFTOytCQUNJLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnQvbW9tZW50XCI7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50L21vbWVudFwiO1xuXG5pbXBvcnQgeyBEYXRlUGlja2VySW5uZXJDb21wb25lbnQgfSBmcm9tIFwiLi9kYXRlLXBpY2tlci1pbm5lci5jb21wb25lbnRcIjtcbi8qKiBAaWdub3JlICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJudWktbW9udGgtcGlja2VyXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9kYXRlLXBpY2tlci1tb250aC1waWNrZXIuY29tcG9uZW50Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgTW9udGhQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgcm93czogYW55W10gPSBbXTtcbiAgICBtYXhNb2RlOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0ZVBpY2tlcjogRGF0ZVBpY2tlcklubmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlciA9IGRhdGVQaWNrZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXIuc3RlcE1vbnRoID0geyB5ZWFyczogMSB9O1xuXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlci5zZXRSZWZyZXNoVmlld0hhbmRsZXIoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gdGhpcy5kYXRlUGlja2VyO1xuICAgICAgICAgICAgY29uc3QgbW9udGhzOiBhbnlbXSA9IG5ldyBBcnJheSgxMik7XG5cbiAgICAgICAgICAgIGxldCBkYXRlOiBNb21lbnQgPVxuICAgICAgICAgICAgICAgIHBpY2tlci52YWx1ZSAmJiBwaWNrZXIudmFsdWUuaXNWYWxpZCgpXG4gICAgICAgICAgICAgICAgICAgID8gcGlja2VyLnZhbHVlLmNsb25lKClcbiAgICAgICAgICAgICAgICAgICAgOiBtb21lbnQoKTtcbiAgICAgICAgICAgIGRhdGUgPSBkYXRlLnNldChcImRhdGVcIiwgMSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlLmNsb25lKCkuc2V0KFwibW9udGhcIiwgaSk7XG4gICAgICAgICAgICAgICAgbW9udGhzW2ldID0gcGlja2VyLmNyZWF0ZURhdGVPYmplY3QoZGF0ZSwgcGlja2VyLmZvcm1hdE1vbnRoKTtcbiAgICAgICAgICAgICAgICBtb250aHNbaV0udWlkID0gcGlja2VyLnVuaXF1ZUlkICsgXCItXCIgKyBpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gcGlja2VyLmZvcm1hdERhdGUoZGF0ZSwgcGlja2VyLmZvcm1hdE1vbnRoVGl0bGUpO1xuICAgICAgICAgICAgdGhpcy5yb3dzID0gcGlja2VyLnNwbGl0KG1vbnRocywgMyk7XG4gICAgICAgIH0sIFwibW9udGhcIik7XG5cbiAgICAgICAgdGhpcy5kYXRlUGlja2VyLnNldENvbXBhcmVIYW5kbGVyKFxuICAgICAgICAgICAgKGRhdGUxOiBNb21lbnQsIGRhdGUyOiBNb21lbnQpOiBudW1iZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQxID0gbW9tZW50KHsgeWVhcjogZGF0ZTEueWVhcigpLCBtb250aDogZGF0ZTEubW9udGgoKSB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkMiA9IG1vbWVudCh7IHllYXI6IGRhdGUyLnllYXIoKSwgbW9udGg6IGRhdGUyLm1vbnRoKCkgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQxLnZhbHVlT2YoKSAtIGQyLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1vbnRoXCJcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8dGFibGUgKm5nSWY9XCJkYXRlUGlja2VyLmRhdGVwaWNrZXJNb2RlID09PSAnbW9udGgnXCIgcm9sZT1cImdyaWRcIj5cbiAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG51aS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdHlsZT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjYXJldC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIubW92ZSgtMSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBudWktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0ZVBpY2tlci51bmlxdWVJZCArICctdGl0bGUnXCJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVN0eWxlPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRhdGVQaWNrZXIuZGF0ZXBpY2tlck1vZGUgPT09IG1heE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoYW5nZS1tb2RlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkYXRlUGlja2VyLmRhdGVwaWNrZXJNb2RlID09PSBtYXhNb2RlXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZVBpY2tlci50b2dnbGVNb2RlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG51aS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTdHlsZT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjYXJldC1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm1vdmUoMSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3NcIj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvd1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtb250aFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJ7eyBjZWxsLnVpZCB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBudWktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U3R5bGU9XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogY2VsbC5zZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjZWxsLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2VsbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLnNlbGVjdChjZWxsLmRhdGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsgJ3RleHQtaW5mbyc6IGNlbGwuY3VycmVudCB9XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG48L3RhYmxlPlxuIl19