UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

81 lines 16.7 kB
import { Component, Input } from '@angular/core'; import { ModalController } from '@ionic/angular'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@ionic/angular"; export class TapVariableDataPopupComponent { set variable(inputs) { this.results.push({ name: this.label, series: [], }); inputs.stream.pipe(takeUntil(this.destroyed)).subscribe((value) => { if (Array.isArray(value)) { this.currentValue = value[this.index]; } else { this.currentValue = value; } const seriesData = { name: new Date(), value: this.currentValue, extra: 0, }; this.results[0].series.push(seriesData); const itemCount = this.results[0].series.length; if (itemCount > 10) { const toRemove = itemCount - 10; this.results[0].series.splice(0, toRemove); } this.results = [...this.results]; }); } constructor(modalController) { this.modalController = modalController; this.legend = false; this.showLabels = false; this.animations = true; this.xAxis = true; this.yAxis = true; this.showYAxisLabel = false; this.showXAxisLabel = false; this.timeline = false; this.colorScheme = { domain: ['#5AA454', '#A10A28', '#C7B42C', '#AAAAAA'], }; this.results = []; this.destroyed = new Subject(); this.currentDate = '' + this.digit(+new Date().getHours()) + ':' + this.digit(+new Date().getMinutes()) + ':' + this.digit(+new Date().getSeconds()); } ngOnDestroy() { this.destroyed.next(); } async dismissModal() { await this.modalController.dismiss(); } digit(n) { return n > 9 ? '' + n : '0' + n; } } /** @nocollapse */ TapVariableDataPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariableDataPopupComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ TapVariableDataPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TapVariableDataPopupComponent, selector: "tap-tap-variable-data-popup", inputs: { value: "value", label: "label", index: "index", variable: "variable" }, ngImport: i0, template: "<ion-header translucent>\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"dismissModal()\"\n ><ion-icon name=\"arrow-back-outline\"></ion-icon\n ></ion-button>\n </ion-buttons>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <span>Details</span>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list>\n <ion-item>\n <ion-label>Value on click</ion-label>\n <ion-note class=\"value\" slot=\"end\">{{ value }}</ion-note>\n </ion-item>\n <ion-item>\n <ion-label>Time on click</ion-label>\n <ion-note class=\"value\" slot=\"end\">{{ currentDate }}</ion-note>\n </ion-item>\n\n <ion-item>\n <ion-label>Current value</ion-label>\n <ion-note class=\"value\" slot=\"end\">{{ currentValue }}</ion-note>\n </ion-item>\n\n <!-- <ion-item>\n <ion-label>Dynamic graphic</ion-label>\n <div #containerRef style=\"height: 30vh; width: 100%\">\n <ngx-charts-line-chart\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [showXAxisLabel]=\"showXAxisLabel\"\n [showYAxisLabel]=\"showYAxisLabel\"\n [legend]=\"legend\"\n [xAxis]=\"xAxis\"\n [yAxis]=\"yAxis\"\n [timeline]=\"timeline\"\n [results]=\"results\"\n >\n </ngx-charts-line-chart>\n </div>\n </ion-item> -->\n </ion-list>\n</ion-content>\n", styles: [".my-custom-modal-css{--background: transparent !important}.value{font-size:1.3em;font-weight:700}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariableDataPopupComponent, decorators: [{ type: Component, args: [{ selector: 'tap-tap-variable-data-popup', template: "<ion-header translucent>\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"dismissModal()\"\n ><ion-icon name=\"arrow-back-outline\"></ion-icon\n ></ion-button>\n </ion-buttons>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <span>Details</span>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-list>\n <ion-item>\n <ion-label>Value on click</ion-label>\n <ion-note class=\"value\" slot=\"end\">{{ value }}</ion-note>\n </ion-item>\n <ion-item>\n <ion-label>Time on click</ion-label>\n <ion-note class=\"value\" slot=\"end\">{{ currentDate }}</ion-note>\n </ion-item>\n\n <ion-item>\n <ion-label>Current value</ion-label>\n <ion-note class=\"value\" slot=\"end\">{{ currentValue }}</ion-note>\n </ion-item>\n\n <!-- <ion-item>\n <ion-label>Dynamic graphic</ion-label>\n <div #containerRef style=\"height: 30vh; width: 100%\">\n <ngx-charts-line-chart\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [showXAxisLabel]=\"showXAxisLabel\"\n [showYAxisLabel]=\"showYAxisLabel\"\n [legend]=\"legend\"\n [xAxis]=\"xAxis\"\n [yAxis]=\"yAxis\"\n [timeline]=\"timeline\"\n [results]=\"results\"\n >\n </ngx-charts-line-chart>\n </div>\n </ion-item> -->\n </ion-list>\n</ion-content>\n", styles: [".my-custom-modal-css{--background: transparent !important}.value{font-size:1.3em;font-weight:700}\n"] }] }], ctorParameters: function () { return [{ type: i1.ModalController }]; }, propDecorators: { value: [{ type: Input }], label: [{ type: Input }], index: [{ type: Input }], variable: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLWRhdGEtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW90aXplLWlvbmljL21vbml0b3Jpbmcvc3JjL2xpYi91aS1jb21wb25lbnRzL3RhcC12YXJpYWJsZS1kYXRhLXBvcHVwL3RhcC12YXJpYWJsZS1kYXRhLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtZGF0YS1wb3B1cC90YXAtdmFyaWFibGUtZGF0YS1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU8zQyxNQUFNLE9BQU8sNkJBQTZCO0lBdUJ4QyxJQUFhLFFBQVEsQ0FBQyxNQUEyQjtRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDaEIsTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7YUFDM0I7WUFDRCxNQUFNLFVBQVUsR0FBRztnQkFDakIsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3hCLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDaEQsSUFBSSxTQUFTLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWpEcEQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFJakIsZ0JBQVcsR0FBRztZQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztTQUNyRCxDQUFDO1FBRUYsWUFBTyxHQUFzQixFQUFFLENBQUM7UUFFeEIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFpQ3RDLElBQUksQ0FBQyxXQUFXO1lBQ2QsRUFBRTtnQkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsR0FBRztnQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsR0FBRztnQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFDdkIsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsQ0FBUztRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDOzs4SUF0RVUsNkJBQTZCO2tJQUE3Qiw2QkFBNkIscUpDWDFDLDQ5Q0FnREE7NEZEckNhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSw2QkFBNkI7c0dBd0I5QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDTyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFydElucHV0TXV0bGksIENoYXJ0SW5wdXRTdHJlYW1WYXIgfSBmcm9tICcuLi9DaGFydERhdGFNb2RlbCc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RhcC10YXAtdmFyaWFibGUtZGF0YS1wb3B1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXAtdmFyaWFibGUtZGF0YS1wb3B1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhcC12YXJpYWJsZS1kYXRhLXBvcHVwLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlRGF0YVBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgbGVnZW5kID0gZmFsc2U7XG4gIHNob3dMYWJlbHMgPSBmYWxzZTtcbiAgYW5pbWF0aW9ucyA9IHRydWU7XG4gIHhBeGlzID0gdHJ1ZTtcbiAgeUF4aXMgPSB0cnVlO1xuICBzaG93WUF4aXNMYWJlbCA9IGZhbHNlO1xuICBzaG93WEF4aXNMYWJlbCA9IGZhbHNlO1xuICB0aW1lbGluZSA9IGZhbHNlO1xuICBjdXJyZW50VmFsdWUhOiBudW1iZXI7XG4gIGN1cnJlbnREYXRlITogc3RyaW5nO1xuXG4gIGNvbG9yU2NoZW1lID0ge1xuICAgIGRvbWFpbjogWycjNUFBNDU0JywgJyNBMTBBMjgnLCAnI0M3QjQyQycsICcjQUFBQUFBJ10sXG4gIH07XG5cbiAgcmVzdWx0czogQ2hhcnRJbnB1dE11dGxpW10gPSBbXTtcblxuICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgdmFsdWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsITogc3RyaW5nO1xuICBASW5wdXQoKSBpbmRleCE6IG51bWJlcjtcbiAgQElucHV0KCkgc2V0IHZhcmlhYmxlKGlucHV0czogQ2hhcnRJbnB1dFN0cmVhbVZhcikge1xuICAgIHRoaXMucmVzdWx0cy5wdXNoKHtcbiAgICAgIG5hbWU6IHRoaXMubGFiZWwsXG4gICAgICBzZXJpZXM6IFtdLFxuICAgIH0pO1xuICAgIGlucHV0cy5zdHJlYW0ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB2YWx1ZVt0aGlzLmluZGV4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBjb25zdCBzZXJpZXNEYXRhID0ge1xuICAgICAgICBuYW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50VmFsdWUsXG4gICAgICAgIGV4dHJhOiAwLFxuICAgICAgfTtcbiAgICAgIHRoaXMucmVzdWx0c1swXS5zZXJpZXMucHVzaChzZXJpZXNEYXRhKTtcblxuICAgICAgY29uc3QgaXRlbUNvdW50ID0gdGhpcy5yZXN1bHRzWzBdLnNlcmllcy5sZW5ndGg7XG4gICAgICBpZiAoaXRlbUNvdW50ID4gMTApIHtcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBpdGVtQ291bnQgLSAxMDtcbiAgICAgICAgdGhpcy5yZXN1bHRzWzBdLnNlcmllcy5zcGxpY2UoMCwgdG9SZW1vdmUpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXN1bHRzID0gWy4uLnRoaXMucmVzdWx0c107XG4gICAgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyKSB7XG4gICAgdGhpcy5jdXJyZW50RGF0ZSA9XG4gICAgICAnJyArXG4gICAgICB0aGlzLmRpZ2l0KCtuZXcgRGF0ZSgpLmdldEhvdXJzKCkpICtcbiAgICAgICc6JyArXG4gICAgICB0aGlzLmRpZ2l0KCtuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKSkgK1xuICAgICAgJzonICtcbiAgICAgIHRoaXMuZGlnaXQoK25ldyBEYXRlKCkuZ2V0U2Vjb25kcygpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNtaXNzTW9kYWwoKSB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbENvbnRyb2xsZXIuZGlzbWlzcygpO1xuICB9XG5cbiAgZGlnaXQobjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG4gPiA5ID8gJycgKyBuIDogJzAnICsgbjtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXIgdHJhbnNsdWNlbnQ+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZGlzbWlzc01vZGFsKClcIlxuICAgICAgICA+PGlvbi1pY29uIG5hbWU9XCJhcnJvdy1iYWNrLW91dGxpbmVcIj48L2lvbi1pY29uXG4gICAgICA+PC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi10aXRsZT57eyBsYWJlbCB9fTwvaW9uLXRpdGxlPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8c3Bhbj5EZXRhaWxzPC9zcGFuPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG48aW9uLWNvbnRlbnQ+XG4gIDxpb24tbGlzdD5cbiAgICA8aW9uLWl0ZW0+XG4gICAgICA8aW9uLWxhYmVsPlZhbHVlIG9uIGNsaWNrPC9pb24tbGFiZWw+XG4gICAgICA8aW9uLW5vdGUgY2xhc3M9XCJ2YWx1ZVwiIHNsb3Q9XCJlbmRcIj57eyB2YWx1ZSB9fTwvaW9uLW5vdGU+XG4gICAgPC9pb24taXRlbT5cbiAgICA8aW9uLWl0ZW0+XG4gICAgICA8aW9uLWxhYmVsPlRpbWUgb24gY2xpY2s8L2lvbi1sYWJlbD5cbiAgICAgIDxpb24tbm90ZSBjbGFzcz1cInZhbHVlXCIgc2xvdD1cImVuZFwiPnt7IGN1cnJlbnREYXRlIH19PC9pb24tbm90ZT5cbiAgICA8L2lvbi1pdGVtPlxuXG4gICAgPGlvbi1pdGVtPlxuICAgICAgPGlvbi1sYWJlbD5DdXJyZW50IHZhbHVlPC9pb24tbGFiZWw+XG4gICAgICA8aW9uLW5vdGUgY2xhc3M9XCJ2YWx1ZVwiIHNsb3Q9XCJlbmRcIj57eyBjdXJyZW50VmFsdWUgfX08L2lvbi1ub3RlPlxuICAgIDwvaW9uLWl0ZW0+XG5cbiAgICA8IS0tIDxpb24taXRlbT5cbiAgICAgIDxpb24tbGFiZWw+RHluYW1pYyBncmFwaGljPC9pb24tbGFiZWw+XG4gICAgICA8ZGl2ICNjb250YWluZXJSZWYgc3R5bGU9XCJoZWlnaHQ6IDMwdmg7IHdpZHRoOiAxMDAlXCI+XG4gICAgICAgIDxuZ3gtY2hhcnRzLWxpbmUtY2hhcnRcbiAgICAgICAgICBbdmlld109XCJbY29udGFpbmVyUmVmLm9mZnNldFdpZHRoLCBjb250YWluZXJSZWYub2Zmc2V0SGVpZ2h0XVwiXG4gICAgICAgICAgW3NjaGVtZV09XCJjb2xvclNjaGVtZVwiXG4gICAgICAgICAgW3Nob3dYQXhpc0xhYmVsXT1cInNob3dYQXhpc0xhYmVsXCJcbiAgICAgICAgICBbc2hvd1lBeGlzTGFiZWxdPVwic2hvd1lBeGlzTGFiZWxcIlxuICAgICAgICAgIFtsZWdlbmRdPVwibGVnZW5kXCJcbiAgICAgICAgICBbeEF4aXNdPVwieEF4aXNcIlxuICAgICAgICAgIFt5QXhpc109XCJ5QXhpc1wiXG4gICAgICAgICAgW3RpbWVsaW5lXT1cInRpbWVsaW5lXCJcbiAgICAgICAgICBbcmVzdWx0c109XCJyZXN1bHRzXCJcbiAgICAgICAgPlxuICAgICAgICA8L25neC1jaGFydHMtbGluZS1jaGFydD5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWl0ZW0+IC0tPlxuICA8L2lvbi1saXN0PlxuPC9pb24tY29udGVudD5cbiJdfQ==