UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

852 lines (851 loc) 76.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { AbstractHasData } from './AbstractHasData'; import { ComponentPopoverModel } from './model/models'; import { NeedFocusService } from '../service/NeedFocusService.service'; import { Option } from '../decorator/Option.decorator'; import { EventUtils } from '../share/utils/EventUtils'; import { SHOW_EVENT, BEFORE_SHOW_EVENT, HIDE_EVENT, BEFORE_HIDE_EVENT } from '../share/CustomEventType'; const /** @type {?} */ HIDE_ON_CLICK_DELAY = 100; const /** @type {?} */ TYPE_NAME = "phx-component-popover"; const /** @type {?} */ LEFT = 'left'; const /** @type {?} */ RIGHT = 'right'; const /** @type {?} */ TOP = 'top'; const /** @type {?} */ BOTTOM = 'bottom'; export class ComponentPopover extends AbstractHasData { /** * @param {?} elementRef * @param {?} needFocusService */ constructor(elementRef, needFocusService) { super(elementRef); this.ARROW_GAP = 5; this.MIN_HEIGHT = 40; this.needFocusService = needFocusService; this._show = false; this.defaultArrowTop = 10; this.showEvent = new EventEmitter(); this.beforeShowEvent = new EventEmitter(); this.hideEvent = new EventEmitter(); this.beforeHideEvent = new EventEmitter(); this._compClicked = false; // when wrapper finished render this._componentHandler = (result) => { let /** @type {?} */ comInstance = null; if (result !== null && typeof result !== 'undefined') { comInstance = result.instance; } if (this.data !== null && typeof this.data !== 'undefined' && comInstance !== null) { if (typeof comInstance.setData === 'function') { comInstance.setData(this.data); } } if (typeof comInstance.getBeforeClickEvent === 'function' && typeof comInstance.getClickEvent === 'function') { // If the component has before/after click implemented, use them. comInstance.getBeforeClickEvent().subscribe(() => { this._compClicked = true; }); comInstance.getClickEvent().subscribe(() => { if (this.hideOnClick && this.needFocusService) { this.hide(); } }); } else if (comInstance.elementRef && comInstance.elementRef.nativeElement) { // Else, use jquery event. let /** @type {?} */ comp = $(comInstance.elementRef.nativeElement); comp.mousedown(() => { this._compClicked = true; }); } if (this.componentHandler !== null && this.componentHandler !== undefined) { this.componentHandler.call(this, result); } this.compoWrapInstance = comInstance; }; if (window.history && window.history.pushState) { $(window).on('popstate', (event) => { this.hide(); }); } } /** * @return {?} */ ngOnInit() { super.ngOnInit(); if (this.position === null || typeof this.position === 'undefined') { this.position = LEFT; } if (this.autoFocus === null || typeof this.autoFocus === 'undefined') { this.autoFocus = true; } if (this.hideOnClick === null || typeof this.hideOnClick === 'undefined') { this.hideOnClick = false; } // this.render(); this.showPopover(this._show); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes['position'] !== null && typeof changes['position'] !== 'undefined') { let /** @type {?} */ oldVal = changes['position'].previousValue; let /** @type {?} */ newVal = changes['position'].currentValue; if (oldVal !== newVal) { this.render(); } } } /** * @return {?} */ render() { // force show to save width and height before detach $(this.elementRef.nativeElement).children().first().addClass('show'); this._popoverWidth = 0; this._popoverHeight = 0; let /** @type {?} */ popoverElement = $(this.elementRef.nativeElement); if (popoverElement !== undefined) { this._popoverWidth = popoverElement.children().first().outerWidth(); this._popoverHeight = popoverElement.children().first().outerHeight(); } // remove dom and save them in RAM this.nativeElement = $(this.elementRef.nativeElement).detach(); } /** * @param {?} isShow * @param {?=} $event * @param {?=} fireEvent * @return {?} */ showPopover(isShow, $event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } if (isShow) { EventUtils.handleBrowserEvent(this, 'beforeShowEvent', $event, fireEvent, ($event) => { // doEvent this._show = isShow; $(this.nativeElement).children().first().addClass('show'); // append dom $("body").append(this.nativeElement); if (this.needFocusService !== null) { if (this.autoFocus) { this.needFocusService.setFocusingComponent(this); } } }, ($event) => { // emitBeforeEvent this.emitBeforeShowEvent($event); }, ($event) => { // emitAfterEvent this.emitShowEvent($event); }, ($event) => { // doPrevented }); } else { EventUtils.handleBrowserEvent(this, 'beforeHideEvent', $event, fireEvent, ($event) => { // doEvent this._show = isShow; $(this.nativeElement).children().first().removeClass('show'); if (this.needFocusService !== null) { if (this.autoFocus && this.needFocusService.getFocusingComponent() === this) { this.needFocusService.resetFocusingComponent(); } } }, ($event) => { // emitBeforeEvent this.emitBeforeHideEvent($event); }, ($event) => { // emitAfterEvent this.emitHideEvent($event); }, ($event) => { // doPrevented }); } } /** * @param {?=} $event * @return {?} */ emitBeforeShowEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_SHOW_EVENT, this, data, $event); if (this.beforeShowEvent !== null && this.beforeShowEvent !== undefined) { this.beforeShowEvent.emit(ev); } } /** * @param {?=} $event * @return {?} */ emitShowEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(SHOW_EVENT, this, data, $event); if (this.showEvent !== null && this.showEvent !== undefined) { this.showEvent.emit(ev); } } /** * @param {?=} $event * @return {?} */ emitBeforeHideEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_HIDE_EVENT, this, data, $event); if (this.beforeHideEvent !== null && this.beforeHideEvent !== undefined) { this.beforeHideEvent.emit(ev); } } /** * @param {?=} $event * @return {?} */ emitHideEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(HIDE_EVENT, this, data, $event); if (this.hideEvent !== null && this.hideEvent !== undefined) { this.hideEvent.emit(ev); } } /** * @param {?} $event * @return {?} */ _doFocus($event) { // do something when focus } /** * @param {?} $event * @return {?} */ _doLostFocus($event) { if (this.compoWrapInstance !== null && this.compoWrapInstance !== undefined) { // If the component has click event, we've to wait for click event to be completely performed before hide. if (typeof this.compoWrapInstance.getBeforeClickEvent === 'function' && typeof this.compoWrapInstance.getClickEvent === 'function') { // The component has click event implemented. We'll use before/after click events. setTimeout(() => { if (!this._compClicked) { // Auto hide this popup if it wasn't blurred from component clicked. this.hide(); } else { $(this.nativeElement).find(".fake").focus(); this._compClicked = false; } }, HIDE_ON_CLICK_DELAY); } else { // If not, use jquery event. setTimeout(() => { if (!this._compClicked) { // Auto hide this popup if it wasn't blurred from component clicked. this.hide(); } else { if (this.hideOnClick) { this.hide(); } else { $(this.nativeElement).find(".fake").focus(); } this._compClicked = false; } }, HIDE_ON_CLICK_DELAY); } } else { // Else, hide it immediately. this.hide(); } } /** * @param {?} event * @return {?} */ onFocus(event) { $(this.nativeElement).find(".fake").focus(); } /** * @param {?} event * @return {?} */ onLostFocus(event) { $(this.nativeElement).find(".fake").blur(); } /** * @return {?} */ isModelEmpty() { if (this.model === null || typeof this.model === 'undefined') { return true; } return false; } /** * @param {?} top * @return {?} */ setArrowTop(top) { if (top === null || typeof top === 'undefined') { return; } let /** @type {?} */ contWrapElement = $(this.nativeElement).find('.container-wrapper'); if (typeof contWrapElement !== 'undefined') { if (typeof $(contWrapElement).find('.container-after') !== 'undefined') { $(contWrapElement).find('.container-after').css("top", top); } if (typeof $(contWrapElement).find('.container-before') !== 'undefined') { $(contWrapElement).find('.container-before').css("top", top - 1); } } } /** * @param {?} left * @return {?} */ setArrowLeft(left) { if (left === null || typeof left === 'undefined') { return; } let /** @type {?} */ contWrapElement = $(this.nativeElement).find('.container-wrapper'); if (typeof contWrapElement !== 'undefined') { if (typeof $(contWrapElement).find('.container-after') !== 'undefined') { $(contWrapElement).find('.container-after').css("left", left); } if (typeof $(contWrapElement).find('.container-before') !== 'undefined') { $(contWrapElement).find('.container-before').css("left", left - 1); } } } /** * @return {?} */ getPosition() { if (this.position !== null && typeof this.position !== 'undefined') { if (LEFT === this.position) { return LEFT; } else if (RIGHT === this.position) { return RIGHT; } else if (BOTTOM === this.position) { return BOTTOM; } else if (TOP === this.position) { return TOP; } } // default is left return LEFT; } /** * @param {?} positionX * @param {?} positionY * @param {?=} $event * @param {?=} fireEvent * @return {?} */ showAt(positionX, positionY, $event, fireEvent) { if (positionX == null && positionY == null) { return; } if (positionX == null) { positionX = 0; } if (positionY == null) { positionY = 0; } $(this.nativeElement).children().first().css('top', positionX); $(this.nativeElement).children().first().css('left', positionY); this.showPopover(true, $event, fireEvent); // let data: any = null; // let ev = EventUtils.newCustomEvent(POPOVER_SHOW_EVENT, this, data, null); // // this.showEvent.emit(ev); } /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ show($event, fireEvent) { let /** @type {?} */ byPassModel = false; if (this.anchor !== null && typeof this.anchor !== 'undefined') { let /** @type {?} */ anchorElement = $(this.anchor); if (anchorElement !== null && typeof anchorElement !== 'undefined') { let /** @type {?} */ top = 0; let /** @type {?} */ left = 0; let /** @type {?} */ height = 0; let /** @type {?} */ width = 0; if (typeof anchorElement.offset() !== 'undefined') { top = anchorElement.offset().top; left = anchorElement.offset().left; height = anchorElement.outerHeight(); width = anchorElement.outerWidth(); } let /** @type {?} */ halfHeight = height / 2; let /** @type {?} */ finalTop = top; let /** @type {?} */ finalLeft = left; if (this.position === LEFT) { // arrow right popover left finalLeft = left - this._popoverWidth - this.ARROW_GAP - 10; finalTop = top - halfHeight; } else if (this.position === RIGHT) { // arrow left popover right finalLeft = left + width + this.ARROW_GAP + 10; finalTop = top - halfHeight; } else if (this.position === TOP) { // arrow bottom popover top finalLeft = finalLeft + 15; finalTop = top - this._popoverHeight - this.ARROW_GAP - 9; } else if (this.position === BOTTOM) { // arrow top popover bottom finalLeft = finalLeft + 15; finalTop = top + height + this.ARROW_GAP + 9.5; } $(this.nativeElement).children().first().css('top', finalTop); $(this.nativeElement).children().first().css('left', finalLeft); byPassModel = true; } } if (this.model !== null && typeof this.model !== 'undefined' && !byPassModel) { if (this.model.top != null) { $(this.nativeElement).children().first().css('top', this.model.top); } if (this.model.left != null) { $(this.nativeElement).children().first().css('left', this.model.left); } } this.showPopover(true, $event, fireEvent); } /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ hide($event, fireEvent) { this.showPopover(false, $event, fireEvent); } /** * @return {?} */ getData() { return this.data; } /** * @param {?} data * @return {?} */ setData(data) { this.data = data; } /** * @return {?} */ getModel() { return this.model; } /** * @param {?} model * @return {?} */ setModel(model) { this.model = model; } /** * @return {?} */ isShow() { return this._show; } /** * @return {?} */ isSelfDataDirty() { return false; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } /** * @return {?} */ getShowEvent() { return this.showEvent; } /** * @param {?} event * @return {?} */ setShowEvent(event) { this.showEvent = event; } /** * @return {?} */ getHideEvent() { return this.hideEvent; } /** * @param {?} event * @return {?} */ setHideEvent(event) { this.hideEvent = event; } /** * @param {?} autoFocus * @return {?} */ setAutoFocus(autoFocus) { this.autoFocus = autoFocus; } /** * @return {?} */ isAutoFocus() { return this.autoFocus; } /** * @param {?} hideOnClick * @return {?} */ setHideOnClick(hideOnClick) { this.hideOnClick = hideOnClick; } /** * @return {?} */ isHideOnClick() { return this.hideOnClick; } /** * @param {?} componentHandler * @return {?} */ setComponentHandler(componentHandler) { this.componentHandler = componentHandler; } /** * @return {?} */ getComponentHandler() { return this.componentHandler; } /** * @return {?} */ getI18NKey() { return "componentPopover"; } /** * @return {?} */ doPreload() { return new Promise((resolve, reject) => { resolve(null); }); } /** * @return {?} */ doLoaded() { } /** * @return {?} */ getPopoverWidth() { return this.model.popoverWidth; } /** * @return {?} */ getPopoverHeight() { return this.model.popoverHeight ? this.model.popoverHeight : this.MIN_HEIGHT + 'pt'; } /** * @return {?} */ isShowArrow() { return this.model.showArrow; } /** * @return {?} */ getComponentInstance() { return this.compoWrapInstance; } /** * @return {?} */ getStyleClasses() { if (this.model !== null && this.model !== undefined) { if (this.model.styleClasses !== null && this.model.styleClasses !== undefined) { return this.model.styleClasses; } } return []; } } ComponentPopover.TYPE_NAME = TYPE_NAME; ComponentPopover.LEFT = LEFT; ComponentPopover.RIGHT = RIGHT; ComponentPopover.TOP = TOP; ComponentPopover.BOTTOM = BOTTOM; ComponentPopover.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-component-popover" [ngClass]="getStyleClasses()" [style.width]="getPopoverWidth()" [style.height]="getPopoverHeight()" [class.show]="isShow()" [class.left]="getPosition() === 'left'" [class.right]="getPosition() === 'right'" [class.top]="getPosition() === 'top'" [class.bottom]="getPosition() === 'bottom'"> <div class="container-wrapper" [style.width]="getPopoverWidth()" [style.height]="getPopoverHeight()"> <div class="container"> <phx-component-wrapper *ngIf="!isModelEmpty()" [type]="getModel().type" [data]="getData()" [handler]="_componentHandler" [dataParent]="this" [model]="getModel().model"></phx-component-wrapper> </div> <div *ngIf="isShowArrow()" class="container-before"></div> <div *ngIf="isShowArrow()" class="container-after"></div> </div> <button type="button" class="fake" (focusin)="_doFocus($event)" (blur)="_doLostFocus($event)"></button> </div> ` },] }, ]; /** @nocollapse */ ComponentPopover.ctorParameters = () => [ { type: ElementRef, }, { type: NeedFocusService, }, ]; ComponentPopover.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "styleClasses": [{ type: Input },], "model": [{ type: Input },], "position": [{ type: Input },], "anchor": [{ type: Input },], "autoFocus": [{ type: Input },], "hideOnClick": [{ type: Input },], "componentHandler": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },], "showEvent": [{ type: Output, args: ['phxShow',] },], "beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },], "hideEvent": [{ type: Output, args: ['phxHide',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentPopover.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentPopover.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentPopover.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentPopover.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentPopover.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Array) ], ComponentPopover.prototype, "styleClasses", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", ComponentPopoverModel) ], ComponentPopover.prototype, "model", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentPopover.prototype, "position", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentPopover.prototype, "anchor", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "autoFocus", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentPopover.prototype, "hideOnClick", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentPopover.prototype, "componentHandler", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentPopover.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('beforeShow'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentPopover.prototype, "beforeShowEvent", void 0); tslib_1.__decorate([ Option('show'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentPopover.prototype, "showEvent", void 0); tslib_1.__decorate([ Option('beforeHide'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentPopover.prototype, "beforeHideEvent", void 0); tslib_1.__decorate([ Option('hide'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentPopover.prototype, "hideEvent", void 0); function ComponentPopover_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ComponentPopover.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ComponentPopover.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ComponentPopover.propDecorators; /** @type {?} */ ComponentPopover.TYPE_NAME; /** @type {?} */ ComponentPopover.LEFT; /** @type {?} */ ComponentPopover.RIGHT; /** @type {?} */ ComponentPopover.TOP; /** @type {?} */ ComponentPopover.BOTTOM; /** @type {?} */ ComponentPopover.prototype.dataParent; /** @type {?} */ ComponentPopover.prototype.ignoreParentData; /** @type {?} */ ComponentPopover.prototype.data; /** @type {?} */ ComponentPopover.prototype.ignoreParentDisabled; /** @type {?} */ ComponentPopover.prototype.delegateHistory; /** @type {?} */ ComponentPopover.prototype.onDisabled; /** @type {?} */ ComponentPopover.prototype.onEnabled; /** @type {?} */ ComponentPopover.prototype.loadingEnabled; /** @type {?} */ ComponentPopover.prototype.i18nKey; /** @type {?} */ ComponentPopover.prototype.bypass; /** @type {?} */ ComponentPopover.prototype.options; /** @type {?} */ ComponentPopover.prototype.disabled; /** @type {?} */ ComponentPopover.prototype.styleClasses; /** @type {?} */ ComponentPopover.prototype.model; /** @type {?} */ ComponentPopover.prototype.position; /** @type {?} */ ComponentPopover.prototype.anchor; /** @type {?} */ ComponentPopover.prototype.autoFocus; /** @type {?} */ ComponentPopover.prototype.hideOnClick; /** @type {?} */ ComponentPopover.prototype.componentHandler; /** @type {?} */ ComponentPopover.prototype.ARROW_GAP; /** @type {?} */ ComponentPopover.prototype.MIN_HEIGHT; /** @type {?} */ ComponentPopover.prototype.loadEvent; /** @type {?} */ ComponentPopover.prototype.beforeShowEvent; /** @type {?} */ ComponentPopover.prototype.showEvent; /** @type {?} */ ComponentPopover.prototype.beforeHideEvent; /** @type {?} */ ComponentPopover.prototype.hideEvent; /** @type {?} */ ComponentPopover.prototype._show; /** @type {?} */ ComponentPopover.prototype.defaultArrowTop; /** @type {?} */ ComponentPopover.prototype.compoWrapInstance; /** @type {?} */ ComponentPopover.prototype.needFocusService; /** @type {?} */ ComponentPopover.prototype.nativeElement; /** @type {?} */ ComponentPopover.prototype._popoverWidth; /** @type {?} */ ComponentPopover.prototype._popoverHeight; /** @type {?} */ ComponentPopover.prototype._compClicked; /** @type {?} */ ComponentPopover.prototype._componentHandler; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50UG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvQ29tcG9uZW50UG9wb3Zlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFzQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUl4Ryx1QkFBTSxtQkFBbUIsR0FBVyxHQUFHLENBQUM7QUFDeEMsdUJBQU0sU0FBUyxHQUFXLHVCQUF1QixDQUFDO0FBRWxELHVCQUFNLElBQUksR0FBVyxNQUFNLENBQUM7QUFDNUIsdUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQztBQUM5Qix1QkFBTSxHQUFHLEdBQVcsS0FBSyxDQUFDO0FBQzFCLHVCQUFNLE1BQU0sR0FBVyxRQUFRLENBQUM7QUFvQmhDLE1BQU0sdUJBQXdCLFNBQVEsZUFBZTs7Ozs7SUF3R25ELFlBQVksVUFBc0IsRUFBRSxnQkFBa0M7UUFDcEUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3lCQWpDUSxDQUFDOzBCQUNBLEVBQUU7UUFpQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FB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