@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
195 lines • 22.4 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, HostListener, Input, ViewChild, } from '@angular/core';
import { ActionSheetController, Platform } from '@ionic/angular';
import { TapValueEditorContainerComponent } from '@iotize/ionic';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { MonitoringAppGenComponent } from '../../metadata/decorators';
import * as i0 from "@angular/core";
import * as i1 from "@ionic/angular";
import * as i2 from "@angular/common";
import * as i3 from "@iotize/ionic";
import * as i4 from "@iotize/app-common";
let TapVariablePushButtonComponent = class TapVariablePushButtonComponent {
onTouchStart() {
this._onTouchStartOrMouseDown();
}
onMouseDown() {
if (this.platform.is('desktop')) {
this._onTouchStartOrMouseDown();
if (this._handleMouseUp) {
document.removeEventListener('mouseup', this._handleMouseUp);
}
this._handleMouseUp = () => {
if (this._handleMouseUp) {
document.removeEventListener('mouseup', this._handleMouseUp);
}
this._onTouchEndOrMouseUp();
};
document.addEventListener('mouseup', this._handleMouseUp);
}
}
onTouchEnd() {
this._onTouchEndOrMouseUp();
}
_onTouchStartOrMouseDown() {
if (isConfiguredValue(this.mouseDownValue))
this.writeValue(this.mouseDownValue);
}
_onTouchEndOrMouseUp() {
if (isConfiguredValue(this.mouseUpValue))
this.writeValue(this.mouseUpValue);
}
/**
* @deprecated
*/
set defineValueOnClick(v) {
this.value = v;
}
set fieldError(err) {
this.error = err;
}
set variable(variable) {
this._variable = variable;
}
constructor(actionSheetController, platform) {
this.actionSheetController = actionSheetController;
this.platform = platform;
this.mouseDownValue = undefined;
this.mouseUpValue = undefined;
this.value = 1;
this.buttonText = 'Write';
this.size = 'default';
this.color = 'primary';
this.iconPosition = 'start';
this.strong = false;
this.confirm = false;
this.confirmMessage = 'Are you sure ?';
this.editable = true;
this.destroyed = new Subject();
this.loading = false;
}
ngAfterViewInit() {
this.ctx?.valueToDisplay
?.pipe(takeUntil(this.destroyed))
.subscribe((newValue) => { });
}
ngOnDestroy() {
this.destroyed.next();
}
async onClick() {
if (!isConfiguredValue(this.value)) {
return;
}
if (this.confirm) {
const actionSheet = await this.actionSheetController.create({
header: this.confirmMessage,
buttons: [
{
text: 'Confirm',
icon: 'checkmark',
handler: () => {
this.writeValue(this.value);
},
},
{
text: 'Cancel',
icon: 'close',
},
],
});
await actionSheet.present();
}
else {
this.writeValue(this.value);
}
}
async writeValue(valueToWrite) {
this.loading = true;
await this.ctx.notifyValueChange(valueToWrite, true);
this.loading = false;
}
};
/** @nocollapse */ TapVariablePushButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePushButtonComponent, deps: [{ token: i1.ActionSheetController }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TapVariablePushButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TapVariablePushButtonComponent, selector: "tap-variable-push-button", inputs: { mouseDownValue: "mouseDownValue", mouseUpValue: "mouseUpValue", value: "value", buttonText: "buttonText", size: "size", color: "color", icon: "icon", iconPosition: "iconPosition", fill: "fill", expand: "expand", strong: "strong", shape: "shape", confirm: "confirm", confirmMessage: "confirmMessage", editable: "editable", defineValueOnClick: "defineValueOnClick", fieldError: "fieldError", variable: "variable" }, host: { listeners: { "touchstart": "onTouchStart()", "mousedown": "onMouseDown()", "touchend": "onTouchEnd()" } }, viewQueries: [{ propertyName: "ctx", first: true, predicate: ["ctx"], descendants: true }], ngImport: i0, template: "<tap-value-editor-container #ctx [variable]=\"_variable\">\n <ion-button\n [disabled]=\"loading || !editable\"\n [color]=\"color\"\n [size]=\"size\"\n [fill]=\"fill\"\n [strong]=\"strong\"\n [shape]=\"shape\"\n [expand]=\"expand\"\n [ngClass]=\"{ 'full-width': expand === 'block' || expand === 'full' }\"\n (click)=\"onClick()\"\n >\n <span *ngIf=\"icon\" [slot]=\"iconPosition\">\n \n <app-common-icon [image]=\"icon\"> </app-common-icon>\n \n </span>\n <ion-text *ngIf=\"buttonText\">{{ buttonText }}</ion-text>\n </ion-button>\n</tap-value-editor-container>\n", styles: [".full-width{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.TapValueEditorContainerComponent, selector: "tap-value-editor-container", inputs: ["button", "variable", "inputOptions", "showRefreshButton", "showSubmitButton", "showEditButton", "error", "lines", "modalEdition", "value"], outputs: ["submit", "refresh"] }, { kind: "component", type: i4.IconComponent, selector: "app-common-icon", inputs: ["imageSize", "color", "image"] }] });
TapVariablePushButtonComponent = __decorate([
MonitoringAppGenComponent({
constraints: {
isArray: 'NO',
isNumber: 'YES',
},
events: [
{
name: 'submit',
dataType: 'void',
},
{
dataType: 'void',
name: 'mouseUp',
},
{
dataType: 'void',
name: 'mouseDown',
},
],
}),
__metadata("design:paramtypes", [ActionSheetController,
Platform])
], TapVariablePushButtonComponent);
export { TapVariablePushButtonComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapVariablePushButtonComponent, decorators: [{
type: Component,
args: [{ selector: 'tap-variable-push-button', template: "<tap-value-editor-container #ctx [variable]=\"_variable\">\n <ion-button\n [disabled]=\"loading || !editable\"\n [color]=\"color\"\n [size]=\"size\"\n [fill]=\"fill\"\n [strong]=\"strong\"\n [shape]=\"shape\"\n [expand]=\"expand\"\n [ngClass]=\"{ 'full-width': expand === 'block' || expand === 'full' }\"\n (click)=\"onClick()\"\n >\n <span *ngIf=\"icon\" [slot]=\"iconPosition\">\n \n <app-common-icon [image]=\"icon\"> </app-common-icon>\n \n </span>\n <ion-text *ngIf=\"buttonText\">{{ buttonText }}</ion-text>\n </ion-button>\n</tap-value-editor-container>\n", styles: [".full-width{width:100%!important}\n"] }]
}], ctorParameters: function () { return [{ type: i1.ActionSheetController }, { type: i1.Platform }]; }, propDecorators: { ctx: [{
type: ViewChild,
args: ['ctx']
}], onTouchStart: [{
type: HostListener,
args: ['touchstart']
}], onMouseDown: [{
type: HostListener,
args: ['mousedown']
}], onTouchEnd: [{
type: HostListener,
args: ['touchend']
}], mouseDownValue: [{
type: Input
}], mouseUpValue: [{
type: Input
}], value: [{
type: Input
}], buttonText: [{
type: Input
}], size: [{
type: Input
}], color: [{
type: Input
}], icon: [{
type: Input
}], iconPosition: [{
type: Input
}], fill: [{
type: Input
}], expand: [{
type: Input
}], strong: [{
type: Input
}], shape: [{
type: Input
}], confirm: [{
type: Input
}], confirmMessage: [{
type: Input
}], editable: [{
type: Input
}], defineValueOnClick: [{
type: Input
}], fieldError: [{
type: Input
}], variable: [{
type: Input
}] } });
function isConfiguredValue(value) {
return value !== undefined && value !== null;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcHVzaC1idXR0b24vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcHVzaC1idXR0b24vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQTJCL0QsSUFBTSw4QkFBOEIsR0FBcEMsTUFBTSw4QkFBOEI7SUFRYixZQUFZO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFMEIsV0FBVztRQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hD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QUwxQyxTQUFTOytCQUNFLDBCQUEwQjttSUFLbEIsR0FBRztzQkFBcEIsU0FBUzt1QkFBQyxLQUFLO2dCQU9ZLFlBQVk7c0JBQXZDLFlBQVk7dUJBQUMsWUFBWTtnQkFJQyxXQUFXO3NCQUFyQyxZQUFZO3VCQUFDLFdBQVc7Z0JBZ0JDLFVBQVU7c0JBQW5DLFlBQVk7dUJBQUMsVUFBVTtnQkFleEIsY0FBYztzQkFEYixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBT0Ysa0JBQWtCO3NCQURyQixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS0YsUUFBUTtzQkFEWCxLQUFLOztBQTZEUixTQUFTLGlCQUFpQixDQUFDLEtBQXlCO0lBQ2xELE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvblNoZWV0Q29udHJvbGxlciwgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBUYXBWYWx1ZUVkaXRvckNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJ0Bpb3RpemUvaW9uaWMnO1xuaW1wb3J0IHsgQWJzdHJhY3RWYXJpYWJsZSB9IGZyb20gJ0Bpb3RpemUvdGFwL2RhdGEnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0FwcEdlbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21ldGFkYXRhL2RlY29yYXRvcnMnO1xuXG5ATW9uaXRvcmluZ0FwcEdlbkNvbXBvbmVudCh7XG4gIGNvbnN0cmFpbnRzOiB7XG4gICAgaXNBcnJheTogJ05PJyxcbiAgICBpc051bWJlcjogJ1lFUycsXG4gIH0sXG4gIGV2ZW50czogW1xuICAgIHtcbiAgICAgIG5hbWU6ICdzdWJtaXQnLFxuICAgICAgZGF0YVR5cGU6ICd2b2lkJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRhdGFUeXBlOiAndm9pZCcsXG4gICAgICBuYW1lOiAnbW91c2VVcCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkYXRhVHlwZTogJ3ZvaWQnLFxuICAgICAgbmFtZTogJ21vdXNlRG93bicsXG4gICAgfSxcbiAgXSxcbn0pXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXAtdmFyaWFibGUtcHVzaC1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLXB1c2gtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhcFZhcmlhYmxlUHVzaEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2N0eCcpIGN0eCE6IFRhcFZhbHVlRWRpdG9yQ29udGFpbmVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2hhbmRsZU1vdXNlVXA/OiAoXG4gICAgdGhpczogRG9jdW1lbnQsXG4gICAgZXY6IERvY3VtZW50RXZlbnRNYXBbJ21vdXNldXAnXVxuICApID0+IGFueTtcblxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0Jykgb25Ub3VjaFN0YXJ0KCkge1xuICAgIHRoaXMuX29uVG91Y2hTdGFydE9yTW91c2VEb3duKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nKSBvbk1vdXNlRG93bigpIHtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pcygnZGVza3RvcCcpKSB7XG4gICAgICB0aGlzLl9vblRvdWNoU3RhcnRPck1vdXNlRG93bigpO1xuICAgICAgaWYgKHRoaXMuX2hhbmRsZU1vdXNlVXApIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX2hhbmRsZU1vdXNlVXApO1xuICAgICAgfVxuICAgICAgdGhpcy5faGFuZGxlTW91c2VVcCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2hhbmRsZU1vdXNlVXApIHtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5faGFuZGxlTW91c2VVcCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25Ub3VjaEVuZE9yTW91c2VVcCgpO1xuICAgICAgfTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9oYW5kbGVNb3VzZVVwKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcpIG9uVG91Y2hFbmQoKSB7XG4gICAgdGhpcy5fb25Ub3VjaEVuZE9yTW91c2VVcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaFN0YXJ0T3JNb3VzZURvd24oKSB7XG4gICAgaWYgKGlzQ29uZmlndXJlZFZhbHVlKHRoaXMubW91c2VEb3duVmFsdWUpKVxuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubW91c2VEb3duVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaEVuZE9yTW91c2VVcCgpIHtcbiAgICBpZiAoaXNDb25maWd1cmVkVmFsdWUodGhpcy5tb3VzZVVwVmFsdWUpKVxuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubW91c2VVcFZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIG1vdXNlRG93blZhbHVlPzogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIG1vdXNlVXBWYWx1ZT86IG51bWJlciA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICB2YWx1ZSA9IDE7XG5cbiAgQElucHV0KClcbiAgYnV0dG9uVGV4dCA9ICdXcml0ZSc7XG5cbiAgQElucHV0KClcbiAgc2l6ZSA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKVxuICBjb2xvcjogc3RyaW5nID0gJ3ByaW1hcnknO1xuXG4gIEBJbnB1dCgpXG4gIGljb24/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgaWNvblBvc2l0aW9uOiBzdHJpbmcgPSAnc3RhcnQnO1xuXG4gIEBJbnB1dCgpXG4gIGZpbGw/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgZXhwYW5kPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHN0cm9uZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNoYXBlPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBjb25maXJtID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgY29uZmlybU1lc3NhZ2UgPSAnQXJlIHlvdSBzdXJlID8nO1xuXG4gIEBJbnB1dCgpXG4gIGVkaXRhYmxlID0gdHJ1ZTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBkZWZpbmVWYWx1ZU9uQ2xpY2sodjogbnVtYmVyKSB7XG4gICAgdGhpcy52YWx1ZSA9IHY7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZmllbGRFcnJvcihlcnI6IEVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YXJpYWJsZSh2YXJpYWJsZTogQWJzdHJhY3RWYXJpYWJsZTxhbnkgfCBhbnlbXT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl92YXJpYWJsZSA9IHZhcmlhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBlcnJvcj86IEVycm9yO1xuICBwZW5kaW5nU3VibWl0VmFsdWU6IGFueTtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBfdmFyaWFibGU/OiBBYnN0cmFjdFZhcmlhYmxlPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFjdGlvblNoZWV0Q29udHJvbGxlcjogQWN0aW9uU2hlZXRDb250cm9sbGVyLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtXG4gICkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jdHg/LnZhbHVlVG9EaXNwbGF5XG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7fSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gIH1cblxuICBhc3luYyBvbkNsaWNrKCkge1xuICAgIGlmICghaXNDb25maWd1cmVkVmFsdWUodGhpcy52YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlybSkge1xuICAgICAgY29uc3QgYWN0aW9uU2hlZXQgPSBhd2FpdCB0aGlzLmFjdGlvblNoZWV0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgICBoZWFkZXI6IHRoaXMuY29uZmlybU1lc3NhZ2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAnQ29uZmlybScsXG4gICAgICAgICAgICBpY29uOiAnY2hlY2ttYXJrJyxcbiAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICAgICAgaWNvbjogJ2Nsb3NlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBhY3Rpb25TaGVldC5wcmVzZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgd3JpdGVWYWx1ZSh2YWx1ZVRvV3JpdGU6IG51bWJlcikge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5jdHgubm90aWZ5VmFsdWVDaGFuZ2UodmFsdWVUb1dyaXRlLCB0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbmZpZ3VyZWRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogdmFsdWUgaXMgbnVtYmVyIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG59XG4iLCI8dGFwLXZhbHVlLWVkaXRvci1jb250YWluZXIgI2N0eCBbdmFyaWFibGVdPVwiX3ZhcmlhYmxlXCI+XG4gIDxpb24tYnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgIWVkaXRhYmxlXCJcbiAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgIFtzaXplXT1cInNpemVcIlxuICAgIFtmaWxsXT1cImZpbGxcIlxuICAgIFtzdHJvbmddPVwic3Ryb25nXCJcbiAgICBbc2hhcGVdPVwic2hhcGVcIlxuICAgIFtleHBhbmRdPVwiZXhwYW5kXCJcbiAgICBbbmdDbGFzc109XCJ7ICdmdWxsLXdpZHRoJzogZXhwYW5kID09PSAnYmxvY2snIHx8IGV4cGFuZCA9PT0gJ2Z1bGwnIH1cIlxuICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICA+XG4gICAgPHNwYW4gKm5nSWY9XCJpY29uXCIgW3Nsb3RdPVwiaWNvblBvc2l0aW9uXCI+XG4gICAgICAmbmJzcDtcbiAgICAgIDxhcHAtY29tbW9uLWljb24gW2ltYWdlXT1cImljb25cIj4gPC9hcHAtY29tbW9uLWljb24+XG4gICAgICAmbmJzcDtcbiAgICA8L3NwYW4+XG4gICAgPGlvbi10ZXh0ICpuZ0lmPVwiYnV0dG9uVGV4dFwiPnt7IGJ1dHRvblRleHQgfX08L2lvbi10ZXh0PlxuICA8L2lvbi1idXR0b24+XG48L3RhcC12YWx1ZS1lZGl0b3ItY29udGFpbmVyPlxuIl19