UNPKG

@hxui/angular

Version:

* * *

191 lines 14.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { ReflectiveInjector, Injectable, ComponentFactoryResolver, Optional, Inject } from '@angular/core'; import { ModalBackdropComponent } from './modal-backdrop.component'; import { FocusTrapFactory } from '@angular/cdk/a11y'; import { DOCUMENT } from '@angular/common'; var ModalService = /** @class */ (function () { function ModalService(componentFactoryResolver, focusTrapFactory, document) { this.componentFactoryResolver = componentFactoryResolver; this.focusTrapFactory = focusTrapFactory; this.document = document; // Element that was focused before the dialog was opened. Save this to restore upon close. this.elementFocusedBeforeDialogWasOpened = null; } /** * @param {?} vcRef * @return {?} */ ModalService.prototype.registerViewContainerRef = /** * @param {?} vcRef * @return {?} */ function (vcRef) { this.vcRef = vcRef; }; /** * @param {?} injector * @return {?} */ ModalService.prototype.registerInjector = /** * @param {?} injector * @return {?} */ function (injector) { this.injector = injector; }; /** * Create component dynamically */ /** * Create component dynamically * @template T * @param {?} component * @param {?=} parameters * @return {?} */ ModalService.prototype.create = /** * Create component dynamically * @template T * @param {?} component * @param {?=} parameters * @return {?} */ function (component, parameters) { // create backdrop this.backdropRef = this.dynamicComponentLoader(ModalBackdropComponent); // create dynamic component this.componentRef = this.dynamicComponentLoader(component, parameters); this.componentNativeElement = this.componentRef.location.nativeElement; this.trapFocus(); return this.componentRef; }; /** * @return {?} */ ModalService.prototype.close = /** * @return {?} */ function () { if (!!this.componentRef) { this.componentRef.destroy(); } }; /** * Load dynamic component and return componentRef */ /** * Load dynamic component and return componentRef * @template T * @param {?} component * @param {?=} parameters * @return {?} */ ModalService.prototype.dynamicComponentLoader = /** * Load dynamic component and return componentRef * @template T * @param {?} component * @param {?=} parameters * @return {?} */ function (component, parameters) { var _this = this; // compile the component based on its type and // create a component factory /** @type {?} */ var factory = this.componentFactoryResolver.resolveComponentFactory(component); // the injector will be needed for DI in // the custom component /** @type {?} */ var childInjector = ReflectiveInjector.resolveAndCreate([], this.injector); // create the actual component /** @type {?} */ var componentRef = this.vcRef.createComponent(factory, 0, childInjector); // pass the @Input parameters to the instance Object.assign(componentRef.instance, parameters); // add a destroy method to the modal instance componentRef.instance['destroy'] = function () { // this will close the backdrop _this.backdropRef.destroy(); // this will destroy the component componentRef.destroy(); _this.restoreFocus(); }; return componentRef; }; /** * @return {?} */ ModalService.prototype.trapFocus = /** * @return {?} */ function () { this.focusTrap = this.focusTrapFactory.create(this.componentNativeElement); this.savePreviouslyFocusedElement(); this.focusTrap.focusInitialElementWhenReady(); }; /** * @return {?} */ ModalService.prototype.restoreFocus = /** * @return {?} */ function () { /** @type {?} */ var toFocus = this.elementFocusedBeforeDialogWasOpened; if (toFocus && typeof toFocus.focus === 'function') { toFocus.focus(); } if (this.focusTrap) { this.focusTrap.destroy(); } }; /** * @return {?} */ ModalService.prototype.savePreviouslyFocusedElement = /** * @return {?} */ function () { if (this.document) { this.elementFocusedBeforeDialogWasOpened = (/** @type {?} */ (this.document .activeElement)); } }; ModalService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ ModalService.ctorParameters = function () { return [ { type: ComponentFactoryResolver }, { type: FocusTrapFactory }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] } ]; }; return ModalService; }()); export { ModalService }; if (false) { /** @type {?} */ ModalService.prototype.vcRef; /** @type {?} */ ModalService.prototype.injector; /** @type {?} */ ModalService.prototype.backdropRef; /** @type {?} */ ModalService.prototype.elementFocusedBeforeDialogWasOpened; /** @type {?} */ ModalService.prototype.componentRef; /** @type {?} */ ModalService.prototype.componentNativeElement; /** @type {?} */ ModalService.prototype.focusTrap; /** @type {?} */ ModalService.prototype.componentFactoryResolver; /** @type {?} */ ModalService.prototype.focusTrapFactory; /** @type {?} */ ModalService.prototype.document; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoeHVpL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvbW9kYWwvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVMLGtCQUFrQixFQUNsQixVQUFVLEVBR1Ysd0JBQXdCLEVBQ3hCLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDO0lBaUJFLHNCQUNVLHdCQUFrRCxFQUNsRCxnQkFBa0MsRUFHbEMsUUFBYTtRQUpiLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUdsQyxhQUFRLEdBQVIsUUFBUSxDQUFLOztRQWJmLHdDQUFtQyxHQUF1QixJQUFJLENBQUM7SUFjcEUsQ0FBQzs7Ozs7SUFFSiwrQ0FBd0I7Ozs7SUFBeEIsVUFBeUIsS0FBdUI7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCx1Q0FBZ0I7Ozs7SUFBaEIsVUFBaUIsUUFBa0I7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHOzs7Ozs7OztJQUNILDZCQUFNOzs7Ozs7O0lBQU4sVUFBVSxTQUFjLEVBQUUsVUFBbUI7UUFDM0Msa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUM1QyxzQkFBc0IsQ0FDdkIsQ0FBQztRQUVGLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBSSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUN2RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Ozs7SUFFRCw0QkFBSzs7O0lBQUw7UUFDRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQ7O09BRUc7Ozs7Ozs7O0lBQ0ssNkNBQXNCOzs7Ozs7O0lBQTlCLFVBQ0UsU0FBYyxFQUNkLFVBQW1CO1FBRnJCLGlCQThCQzs7OztZQXhCTyxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUNuRSxTQUFTLENBQ1Y7Ozs7WUFHSyxhQUFhLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLENBQ3ZELEVBQUUsRUFDRixJQUFJLENBQUMsUUFBUSxDQUNkOzs7WUFFSyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUM7UUFFMUUsNkNBQTZDO1FBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRCw2Q0FBNkM7UUFDN0MsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRztZQUNqQywrQkFBK0I7WUFDL0IsS0FBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixrQ0FBa0M7WUFDbEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLEtBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7UUFFRixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDOzs7O0lBRU8sZ0NBQVM7OztJQUFqQjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDaEQsQ0FBQzs7OztJQUVPLG1DQUFZOzs7SUFBcEI7O1lBQ1EsT0FBTyxHQUFHLElBQUksQ0FBQyxtQ0FBbUM7UUFFeEQsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUNsRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDakI7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7Ozs7SUFFTyxtREFBNEI7OztJQUFwQztRQUNFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsbUNBQW1DLEdBQUcsbUJBQUEsSUFBSSxDQUFDLFFBQVE7aUJBQ3JELGFBQWEsRUFBZSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7Z0JBbkhGLFVBQVU7Ozs7Z0JBUlQsd0JBQXdCO2dCQUtqQixnQkFBZ0I7Z0RBdUJwQixRQUFRLFlBQ1IsTUFBTSxTQUFDLFFBQVE7O0lBK0ZwQixtQkFBQztDQUFBLEFBcEhELElBb0hDO1NBbkhZLFlBQVk7OztJQUV2Qiw2QkFBZ0M7O0lBRWhDLGdDQUEyQjs7SUFFM0IsbUNBQTBEOztJQUUxRCwyREFBdUU7O0lBRXZFLG9DQUFxQjs7SUFFckIsOENBQStCOztJQUUvQixpQ0FBa0I7O0lBR2hCLGdEQUEwRDs7SUFDMUQsd0NBQTBDOztJQUMxQyxnQ0FFcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgUmVmbGVjdGl2ZUluamVjdG9yLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5qZWN0b3IsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBPcHRpb25hbCxcclxuICBJbmplY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTW9kYWxCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwtYmFja2Ryb3AuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9jdXNUcmFwRmFjdG9yeSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTW9kYWxTZXJ2aWNlIHtcclxuICAvLyBoZXJlIHdlIGhvbGQgb3VyIHBsYWNlaG9sZGVyXHJcbiAgcHJpdmF0ZSB2Y1JlZjogVmlld0NvbnRhaW5lclJlZjtcclxuICAvLyBoZXJlIHdlIGhvbGQgb3VyIGluamVjdG9yXHJcbiAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3I7XHJcbiAgLy8gaGVyZSB3ZSBob2xkIHRoZSBiYWNrZHJvcCBjb21wb25lbnRcclxuICBwcml2YXRlIGJhY2tkcm9wUmVmOiBDb21wb25lbnRSZWY8TW9kYWxCYWNrZHJvcENvbXBvbmVudD47XHJcbiAgLy8gRWxlbWVudCB0aGF0IHdhcyBmb2N1c2VkIGJlZm9yZSB0aGUgZGlhbG9nIHdhcyBvcGVuZWQuIFNhdmUgdGhpcyB0byByZXN0b3JlIHVwb24gY2xvc2UuXHJcbiAgcHJpdmF0ZSBlbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgY29tcG9uZW50TmF0aXZlRWxlbWVudDtcclxuXHJcbiAgcHJpdmF0ZSBmb2N1c1RyYXA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgZm9jdXNUcmFwRmFjdG9yeTogRm9jdXNUcmFwRmFjdG9yeSxcclxuICAgIEBPcHRpb25hbCgpXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKVxyXG4gICAgcHJpdmF0ZSBkb2N1bWVudDogYW55XHJcbiAgKSB7fVxyXG5cclxuICByZWdpc3RlclZpZXdDb250YWluZXJSZWYodmNSZWY6IFZpZXdDb250YWluZXJSZWYpOiB2b2lkIHtcclxuICAgIHRoaXMudmNSZWYgPSB2Y1JlZjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVySW5qZWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKTogdm9pZCB7XHJcbiAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgY29tcG9uZW50IGR5bmFtaWNhbGx5XHJcbiAgICovXHJcbiAgY3JlYXRlPFQ+KGNvbXBvbmVudDogYW55LCBwYXJhbWV0ZXJzPzogT2JqZWN0KTogQ29tcG9uZW50UmVmPFQ+IHtcclxuICAgIC8vIGNyZWF0ZSBiYWNrZHJvcFxyXG4gICAgdGhpcy5iYWNrZHJvcFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudExvYWRlcjxNb2RhbEJhY2tkcm9wQ29tcG9uZW50PihcclxuICAgICAgTW9kYWxCYWNrZHJvcENvbXBvbmVudFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgZHluYW1pYyBjb21wb25lbnRcclxuICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50TG9hZGVyPFQ+KGNvbXBvbmVudCwgcGFyYW1ldGVycyk7XHJcblxyXG4gICAgdGhpcy5jb21wb25lbnROYXRpdmVFbGVtZW50ID0gdGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMudHJhcEZvY3VzKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICBpZiAoISF0aGlzLmNvbXBvbmVudFJlZikge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIGR5bmFtaWMgY29tcG9uZW50IGFuZCByZXR1cm4gY29tcG9uZW50UmVmXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50TG9hZGVyPFQ+KFxyXG4gICAgY29tcG9uZW50OiBhbnksXHJcbiAgICBwYXJhbWV0ZXJzPzogT2JqZWN0XHJcbiAgKTogQ29tcG9uZW50UmVmPGFueT4ge1xyXG4gICAgLy8gY29tcGlsZSB0aGUgY29tcG9uZW50IGJhc2VkIG9uIGl0cyB0eXBlIGFuZFxyXG4gICAgLy8gY3JlYXRlIGEgY29tcG9uZW50IGZhY3RvcnlcclxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShcclxuICAgICAgY29tcG9uZW50XHJcbiAgICApO1xyXG4gICAgLy8gdGhlIGluamVjdG9yIHdpbGwgYmUgbmVlZGVkIGZvciBESSBpblxyXG4gICAgLy8gdGhlIGN1c3RvbSBjb21wb25lbnRcclxuICAgIGNvbnN0IGNoaWxkSW5qZWN0b3IgPSBSZWZsZWN0aXZlSW5qZWN0b3IucmVzb2x2ZUFuZENyZWF0ZShcclxuICAgICAgW10sXHJcbiAgICAgIHRoaXMuaW5qZWN0b3JcclxuICAgICk7XHJcbiAgICAvLyBjcmVhdGUgdGhlIGFjdHVhbCBjb21wb25lbnRcclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMudmNSZWYuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnksIDAsIGNoaWxkSW5qZWN0b3IpO1xyXG5cclxuICAgIC8vIHBhc3MgdGhlIEBJbnB1dCBwYXJhbWV0ZXJzIHRvIHRoZSBpbnN0YW5jZVxyXG4gICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2UsIHBhcmFtZXRlcnMpO1xyXG4gICAgLy8gYWRkIGEgZGVzdHJveSBtZXRob2QgdG8gdGhlIG1vZGFsIGluc3RhbmNlXHJcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2VbJ2Rlc3Ryb3knXSA9ICgpID0+IHtcclxuICAgICAgLy8gdGhpcyB3aWxsIGNsb3NlIHRoZSBiYWNrZHJvcFxyXG4gICAgICB0aGlzLmJhY2tkcm9wUmVmLmRlc3Ryb3koKTtcclxuICAgICAgLy8gdGhpcyB3aWxsIGRlc3Ryb3kgdGhlIGNvbXBvbmVudFxyXG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLnJlc3RvcmVGb2N1cygpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gY29tcG9uZW50UmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFwRm9jdXMoKSB7XHJcbiAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5jb21wb25lbnROYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMuc2F2ZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpO1xyXG4gICAgdGhpcy5mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXN0b3JlRm9jdXMoKSB7XHJcbiAgICBjb25zdCB0b0ZvY3VzID0gdGhpcy5lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDtcclxuXHJcbiAgICBpZiAodG9Gb2N1cyAmJiB0eXBlb2YgdG9Gb2N1cy5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0b0ZvY3VzLmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNUcmFwLmRlc3Ryb3koKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLmRvY3VtZW50KSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQgPSB0aGlzLmRvY3VtZW50XHJcbiAgICAgICAgLmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==