UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

167 lines (165 loc) 18.2 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { isPlatformBrowser } from '@angular/common'; import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, PLATFORM_ID, ViewChild } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { NzButtonModule } from 'ng-zorro-antd/button'; import { NzIconModule } from 'ng-zorro-antd/icon'; import { NzSpinModule } from 'ng-zorro-antd/spin'; import { drawCanvas, plotQRCodeData } from './qrcode'; import * as i0 from "@angular/core"; import * as i1 from "ng-zorro-antd/i18n"; import * as i2 from "ng-zorro-antd/spin"; import * as i3 from "ng-zorro-antd/button"; import * as i4 from "ng-zorro-antd/core/transition-patch"; import * as i5 from "ng-zorro-antd/icon"; export class NzQRCodeComponent { constructor(i18n, el, cdr, platformId) { this.i18n = i18n; this.el = el; this.cdr = cdr; this.platformId = platformId; this.nzValue = ''; this.nzPadding = 0; this.nzColor = '#000000'; this.nzBgColor = '#FFFFFF'; this.nzSize = 160; this.nzIcon = ''; this.nzIconSize = 40; this.nzBordered = true; this.nzStatus = 'active'; this.nzLevel = 'M'; this.nzRefresh = new EventEmitter(); // https://github.com/angular/universal-starter/issues/538#issuecomment-365518693 // canvas is not supported by the SSR DOM this.isBrowser = true; this.destroy$ = new Subject(); this.isBrowser = isPlatformBrowser(this.platformId); this.cdr.markForCheck(); } ngOnInit() { this.el.nativeElement.style.backgroundColor = this.nzBgColor; this.i18n.localeChange.pipe(takeUntil(this.destroy$)).subscribe(() => { this.locale = this.i18n.getLocaleData('QRCode'); this.cdr.markForCheck(); }); } ngOnChanges(changes) { const { nzValue, nzIcon, nzLevel, nzSize, nzIconSize, nzColor, nzPadding, nzBgColor } = changes; if ((nzValue || nzIcon || nzLevel || nzSize || nzIconSize || nzColor || nzPadding || nzBgColor) && this.canvas) { this.drawCanvasQRCode(); } if (nzBgColor) { this.el.nativeElement.style.backgroundColor = this.nzBgColor; } } ngAfterViewInit() { this.drawCanvasQRCode(); } reloadQRCode() { this.drawCanvasQRCode(); this.nzRefresh.emit('refresh'); } drawCanvasQRCode() { if (this.canvas) { drawCanvas(this.canvas.nativeElement, plotQRCodeData(this.nzValue, this.nzLevel), this.nzSize, 10, this.nzPadding, this.nzColor, this.nzBgColor, this.nzIconSize, this.nzIcon); } } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: NzQRCodeComponent, deps: [{ token: i1.NzI18nService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: NzQRCodeComponent, isStandalone: true, selector: "nz-qrcode", inputs: { nzValue: "nzValue", nzPadding: "nzPadding", nzColor: "nzColor", nzBgColor: "nzBgColor", nzSize: "nzSize", nzIcon: "nzIcon", nzIconSize: "nzIconSize", nzBordered: "nzBordered", nzStatus: "nzStatus", nzLevel: "nzLevel" }, outputs: { nzRefresh: "nzRefresh" }, host: { properties: { "class.ant-qrcode-border": "nzBordered" }, classAttribute: "ant-qrcode" }, viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }], exportAs: ["nzQRCode"], usesOnChanges: true, ngImport: i0, template: ` @if (nzStatus !== 'active') { <div class="ant-qrcode-mask"> @switch (nzStatus) { @case ('loading') { <nz-spin /> } @case ('expired') { <div> <p class="ant-qrcode-expired">{{ locale.expired }}</p> <button nz-button nzType="link" (click)="reloadQRCode()"> <span nz-icon nzType="reload" nzTheme="outline"></span> <span>{{ locale.refresh }}</span> </button> </div> } } </div> } @if (isBrowser) { <canvas #canvas></canvas> } `, isInline: true, dependencies: [{ kind: "ngmodule", type: NzSpinModule }, { kind: "component", type: i2.NzSpinComponent, selector: "nz-spin", inputs: ["nzIndicator", "nzSize", "nzTip", "nzDelay", "nzSimple", "nzSpinning"], exportAs: ["nzSpin"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i3.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: NzQRCodeComponent, decorators: [{ type: Component, args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'nz-qrcode', exportAs: 'nzQRCode', template: ` @if (nzStatus !== 'active') { <div class="ant-qrcode-mask"> @switch (nzStatus) { @case ('loading') { <nz-spin /> } @case ('expired') { <div> <p class="ant-qrcode-expired">{{ locale.expired }}</p> <button nz-button nzType="link" (click)="reloadQRCode()"> <span nz-icon nzType="reload" nzTheme="outline"></span> <span>{{ locale.refresh }}</span> </button> </div> } } </div> } @if (isBrowser) { <canvas #canvas></canvas> } `, host: { class: 'ant-qrcode', '[class.ant-qrcode-border]': `nzBordered` }, imports: [NzSpinModule, NzButtonModule, NzIconModule], standalone: true }] }], ctorParameters: () => [{ type: i1.NzI18nService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }], propDecorators: { canvas: [{ type: ViewChild, args: ['canvas', { static: false }] }], nzValue: [{ type: Input }], nzPadding: [{ type: Input }], nzColor: [{ type: Input }], nzBgColor: [{ type: Input }], nzSize: [{ type: Input }], nzIcon: [{ type: Input }], nzIconSize: [{ type: Input }], nzBordered: [{ type: Input }], nzStatus: [{ type: Input }], nzLevel: [{ type: Input }], nzRefresh: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXJjb2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvcXItY29kZS9xcmNvZGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFDTixXQUFXLEVBRVgsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBRSxVQUFVLEVBQW1CLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7OztBQXFDdkUsTUFBTSxPQUFPLGlCQUFpQjtJQXFCNUIsWUFDVSxJQUFtQixFQUNuQixFQUFjLEVBQ2QsR0FBc0IsRUFDRCxVQUFrQjtRQUh2QyxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNELGVBQVUsR0FBVixVQUFVLENBQVE7UUF2QnhDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsY0FBUyxHQUFzQixDQUFDLENBQUM7UUFDakMsWUFBTyxHQUFXLFNBQVMsQ0FBQztRQUM1QixjQUFTLEdBQVcsU0FBUyxDQUFDO1FBQzlCLFdBQU0sR0FBVyxHQUFHLENBQUM7UUFDckIs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R3pDLGlCQUFpQjtrQkFuQzdCLFNBQVM7bUJBQUM7b0JBQ1QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLFlBQVk7d0JBQ25CLDJCQUEyQixFQUFFLFlBQVk7cUJBQzFDO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDO29CQUNyRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQTBCSSxNQUFNOzJCQUFDLFdBQVc7eUNBeEJtQixNQUFNO3NCQUE3QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQzdCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVhLFNBQVM7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE56QnV0dG9uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9idXR0b24nO1xuaW1wb3J0IHsgTnpJMThuU2VydmljZSwgTnpRUkNvZGVJMThuSW50ZXJmYWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pMThuJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5pbXBvcnQgeyBOelNwaW5Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL3NwaW4nO1xuXG5pbXBvcnQgeyBkcmF3Q2FudmFzLCBFUlJPUl9MRVZFTF9NQVAsIHBsb3RRUkNvZGVEYXRhIH0gZnJvbSAnLi9xcmNvZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHNlbGVjdG9yOiAnbnotcXJjb2RlJyxcbiAgZXhwb3J0QXM6ICduelFSQ29kZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChuelN0YXR1cyAhPT0gJ2FjdGl2ZScpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJhbnQtcXJjb2RlLW1hc2tcIj5cbiAgICAgICAgQHN3aXRjaCAobnpTdGF0dXMpIHtcbiAgICAgICAgICBAY2FzZSAoJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICA8bnotc3BpbiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2V4cGlyZWQnKSB7XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImFudC1xcmNvZGUtZXhwaXJlZFwiPnt7IGxvY2FsZS5leHBpcmVkIH19PC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJsaW5rXCIgKGNsaWNrKT1cInJlbG9hZFFSQ29kZSgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJyZWxvYWRcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBsb2NhbGUucmVmcmVzaCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaXNCcm93c2VyKSB7XG4gICAgICA8Y2FudmFzICNjYW52YXM+PC9jYW52YXM+XG4gICAgfVxuICBgLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdhbnQtcXJjb2RlJyxcbiAgICAnW2NsYXNzLmFudC1xcmNvZGUtYm9yZGVyXSc6IGBuekJvcmRlcmVkYFxuICB9LFxuICBpbXBvcnRzOiBbTnpTcGluTW9kdWxlLCBOekJ1dHRvbk1vZHVsZSwgTnpJY29uTW9kdWxlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBOelFSQ29kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjYW52YXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG4gIEBJbnB1dCgpIG56VmFsdWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBuelBhZGRpbmc6IG51bWJlciB8IG51bWJlcltdID0gMDtcbiAgQElucHV0KCkgbnpDb2xvcjogc3RyaW5nID0gJyMwMDAwMDAnO1xuICBASW5wdXQoKSBuekJnQ29sb3I6IHN0cmluZyA9ICcjRkZGRkZGJztcbiAgQElucHV0KCkgbnpTaXplOiBudW1iZXIgPSAxNjA7XG4gIEBJbnB1dCgpIG56SWNvbjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIG56SWNvblNpemU6IG51bWJlciA9IDQwO1xuICBASW5wdXQoKSBuekJvcmRlcmVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgbnpTdGF0dXM6ICdhY3RpdmUnIHwgJ2V4cGlyZWQnIHwgJ2xvYWRpbmcnID0gJ2FjdGl2ZSc7XG4gIEBJbnB1dCgpIG56TGV2ZWw6IGtleW9mIHR5cGVvZiBFUlJPUl9MRVZFTF9NQVAgPSAnTSc7XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG56UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGxvY2FsZSE6IE56UVJDb2RlSTE4bkludGVyZmFjZTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvdW5pdmVyc2FsLXN0YXJ0ZXIvaXNzdWVzLzUzOCNpc3N1ZWNvbW1lbnQtMzY1NTE4NjkzXG4gIC8vIGNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBTU1IgRE9NXG4gIGlzQnJvd3NlciA9IHRydWU7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaTE4bjogTnpJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdFxuICApIHtcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5uekJnQ29sb3I7XG4gICAgdGhpcy5pMThuLmxvY2FsZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5pMThuLmdldExvY2FsZURhdGEoJ1FSQ29kZScpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgeyBuelZhbHVlLCBuekljb24sIG56TGV2ZWwsIG56U2l6ZSwgbnpJY29uU2l6ZSwgbnpDb2xvciwgbnpQYWRkaW5nLCBuekJnQ29sb3IgfSA9IGNoYW5nZXM7XG4gICAgaWYgKChuelZhbHVlIHx8IG56SWNvbiB8fCBuekxldmVsIHx8IG56U2l6ZSB8fCBuekljb25TaXplIHx8IG56Q29sb3IgfHwgbnpQYWRkaW5nIHx8IG56QmdDb2xvcikgJiYgdGhpcy5jYW52YXMpIHtcbiAgICAgIHRoaXMuZHJhd0NhbnZhc1FSQ29kZSgpO1xuICAgIH1cblxuICAgIGlmIChuekJnQ29sb3IpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLm56QmdDb2xvcjtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3Q2FudmFzUVJDb2RlKCk7XG4gIH1cblxuICByZWxvYWRRUkNvZGUoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3Q2FudmFzUVJDb2RlKCk7XG4gICAgdGhpcy5uelJlZnJlc2guZW1pdCgncmVmcmVzaCcpO1xuICB9XG5cbiAgZHJhd0NhbnZhc1FSQ29kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgIGRyYXdDYW52YXMoXG4gICAgICAgIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIHBsb3RRUkNvZGVEYXRhKHRoaXMubnpWYWx1ZSwgdGhpcy5uekxldmVsKSxcbiAgICAgICAgdGhpcy5uelNpemUsXG4gICAgICAgIDEwLFxuICAgICAgICB0aGlzLm56UGFkZGluZyxcbiAgICAgICAgdGhpcy5uekNvbG9yLFxuICAgICAgICB0aGlzLm56QmdDb2xvcixcbiAgICAgICAgdGhpcy5uekljb25TaXplLFxuICAgICAgICB0aGlzLm56SWNvblxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==