UNPKG

ng-zorro-antd-mobile

Version:

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

796 lines 75.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ContentChildren, HostBinding, Input, Output, HostListener, QueryList, EventEmitter, ElementRef, ViewEncapsulation } from '@angular/core'; import { CarouselSlideComponent } from './carousel-slide/carousel-slide.component'; import * as touchEvent from '../core/util/touch-event'; export class CarouselComponent { /** * @param {?} _ele */ constructor(_ele) { this._ele = _ele; this.style = { height: 'auto', width: '100%', transform: 'translate3d(0px, 0px, 0px)', margin: '' }; this.lastIndex = 0; this.currentSelectedIndex = 0; this._nodeArr = []; this._isMouseDown = false; this._rationWidth = 0; this._currentSlideWidth = 0; this._currentSlideHeight = 0; this._transition = ''; this._spaceWidth = 0; this._dragging = true; this._selectedIndex = 0; this.speed = 500; this.dots = true; this.vertical = false; this.autoplay = false; this.autoplayInterval = 3000; this.infinite = false; this.dotStyle = {}; this.dotActiveStyle = {}; this.frameOverflow = 'hidden'; this.cellSpacing = 0; this.slideWidth = 1; this.swipeSpeed = 12; this.dragging = true; this.afterChange = new EventEmitter(); this.beforeChange = new EventEmitter(); this.carouselWrapper = true; this.carouselwrap = true; } /** * @return {?} */ get selectedIndex() { return this._selectedIndex; } /** * @param {?} value * @return {?} */ set selectedIndex(value) { this._selectedIndex = Math.abs(value); if (this._nodeArr.length > 0) { this.carousel(1); } } /** * @param {?} event * @return {?} */ panstart(event) { event.stopPropagation(); if (!this._dragging) { return; } this.stopTimer(); this._isMouseDown = true; this.touchObject = { startX: touchEvent.getEventTarget(event).pageX, startY: touchEvent.getEventTarget(event).pageY, direction: this.touchObject.direction }; } /** * @param {?} event * @return {?} */ panmove(event) { event.stopPropagation(); if (!this._dragging || !this._isMouseDown) { return; } const { direction } = this.swipeDirection(this.touchObject.startX, touchEvent.getEventTarget(event).pageX, this.touchObject.startY, touchEvent.getEventTarget(event).pageY); if (direction === 0) { return; } /** @type {?} */ const length = this.vertical ? Math.abs(touchEvent.getEventTarget(event).pageY - this.touchObject.startY) : Math.abs(touchEvent.getEventTarget(event).pageX - this.touchObject.startX); /** @type {?} */ const offset = -this.touchObject.direction * length - this.currentSelectedIndex * this._rationWidth; this.touchObject = { startX: this.touchObject.startX, startY: this.touchObject.startY, endX: touchEvent.getEventTarget(event).pageX, endY: touchEvent.getEventTarget(event).pageY, length, direction, offset }; if (direction !== 0) { this.setSlideStyles(this.currentSelectedIndex, this.touchObject.direction); } this.getListStyles(offset); } /** * @param {?} event * @return {?} */ panend(event) { event.stopPropagation(); if (!this._dragging || !this._isMouseDown || !this.touchObject.length || this.touchObject.length === undefined) { this._isMouseDown = false; return; } this._isMouseDown = false; if (this.touchObject.length > this.swipeSpeed) { this.carousel(this.touchObject.direction); } else { this.getListStyles(this.touchObject.direction * this.touchObject.length + this.touchObject.offset); this.style['transition'] = this._transition; } setTimeout((/** * @return {?} */ () => { this.startTimer(); }), this.speed); } /** * @return {?} */ cancel() { setTimeout((/** * @return {?} */ () => { this.startTimer(); }), this.speed); } /** * @return {?} */ resize() { if (this._resizeTimer) { clearTimeout(this._resizeTimer); } this._resizeTimer = setTimeout((/** * @return {?} */ () => { this.ngAfterViewInit(); clearTimeout(this._resizeTimer); }), 200); } /** * @return {?} */ initCarouselSize() { /** @type {?} */ const nativeElement = this._ele.nativeElement; this.slideHeight = nativeElement.querySelector('carouselslide').clientHeight; this._currentSlideHeight = this.slideHeight * this.slideWidth; this._currentSlideWidth = nativeElement.clientWidth; this._rationWidth = this.vertical ? this._currentSlideHeight : this._currentSlideWidth * this.slideWidth; this._spaceWidth = ((this.vertical ? this.slideHeight : this._currentSlideWidth) - this._rationWidth) / 2; } /** * @param {?} items * @return {?} */ carouselInit(items) { this.infinite = this.infinite || true; this._nodeArr = items['_results']; /** @type {?} */ const shouldDragging = this._nodeArr.length > 1; this._dragging = this.dragging && shouldDragging ? true : false; if (this._nodeArr.length > 1) { this.lastIndex = this._nodeArr.length - 1; setTimeout((/** * @return {?} */ () => { this._nodeArr.forEach((/** * @param {?} v * @param {?} index * @return {?} */ (v, index) => { v.width = this.vertical ? 'auto' : this._rationWidth - this.cellSpacing; v.left = this.vertical ? 0 : index === this.lastIndex ? -this._rationWidth : index * this._rationWidth; v.top = this.vertical ? (index === this.lastIndex ? -this._rationWidth : index * this._rationWidth) : 0; v.margin = this.vertical ? `${this.cellSpacing / 2}px auto` : `auto ${this.cellSpacing / 2}px`; })); this.startTimer(); }), 0); } else if (this._nodeArr.length === 1) { setTimeout((/** * @return {?} */ () => { this._nodeArr.forEach((/** * @param {?} v * @return {?} */ v => { v.width = this.vertical ? 'auto' : this._rationWidth - this.cellSpacing; v.left = 0; v.top = 0; v.margin = `auto ${this.cellSpacing / 2}px`; })); }), 0); } } /** * @return {?} */ startTimer() { if (!this.autoplay) { return; } this.stopTimer(); this._timer = this.autoplayInterval ? setInterval((/** * @return {?} */ () => { if (document.getElementsByTagName('carousel').length === 0) { return; } this.carousel(1); }), this.autoplayInterval) : 0; } /** * @return {?} */ stopTimer() { clearInterval(this._timer); } /** * @param {?} moveDirection * @return {?} */ carousel(moveDirection) { if (this.vertical) { if (moveDirection === 1) { this.moveUp(); } else if (moveDirection === -1) { this.moveDown(); } } else { if (moveDirection === 1) { this.moveLeft(); } else if (moveDirection === -1) { this.moveRight(); } } this.style['transition'] = this._transition; } /** * @return {?} */ moveUp() { this.gotoCarousel(this.getAfterNode(false)); } /** * @return {?} */ moveDown() { this.gotoCarousel(this.getAfterNode(true)); } /** * @return {?} */ moveLeft() { this.gotoCarousel(this.getAfterNode(false)); } /** * @return {?} */ moveRight() { this.gotoCarousel(this.getAfterNode(true)); } /** * @param {?} pre * @return {?} */ getAfterNode(pre) { /** @type {?} */ let nextIndex; if (pre) { if (this.currentSelectedIndex <= 0) { this.getListStyles(this._rationWidth); setTimeout((/** * @return {?} */ () => { this._nodeArr.forEach((/** * @param {?} v * @param {?} tempIndex * @return {?} */ (v, tempIndex) => { if (tempIndex === 0) { v.left = this.vertical ? 0 : this._nodeArr.length * this._rationWidth; v.top = this.vertical ? this._nodeArr.length * this._rationWidth : 0; } else { v.left = this.vertical ? 0 : tempIndex * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } })); this.getListStyles(-this._rationWidth * (this.items.length - 1)); }), this.speed); nextIndex = !this.infinite ? null : this.lastIndex; this.beforeChange.emit({ from: this.currentSelectedIndex, to: nextIndex }); return nextIndex; } nextIndex = this.currentSelectedIndex - 1; this.getListStyles(nextIndex * this._rationWidth * this.touchObject.direction); this._nodeArr.forEach((/** * @param {?} v * @param {?} tempIndex * @return {?} */ (v, tempIndex) => { if (0 === tempIndex && nextIndex === this._nodeArr.length - 2) { v.left = 0; v.top = 0; } })); this.beforeChange.emit({ from: this.currentSelectedIndex, to: nextIndex }); return nextIndex; } else { if (this.currentSelectedIndex >= this.lastIndex) { this.setSlideStyles(this.currentSelectedIndex, 1); this.getListStyles(-(this.lastIndex + 1) * this._rationWidth); nextIndex = !this.infinite ? null : 0; this.beforeChange.emit({ from: this.currentSelectedIndex, to: nextIndex }); return nextIndex; } nextIndex = this.currentSelectedIndex + 1; this.setSlideStyles(this.currentSelectedIndex, 1); this.getListStyles(-nextIndex * this._rationWidth); this.beforeChange.emit({ from: this.currentSelectedIndex, to: nextIndex }); return nextIndex; } } /** * @return {?} */ caculateDirectionLeftCurrentIndex() { /** @type {?} */ const previousIndex = this.currentSelectedIndex; this.currentSelectedIndex = (previousIndex + 1) % this.items.length; } /** * @return {?} */ caculateDirectionRightCurrentIndex() { if (this.currentSelectedIndex === 0) { this.currentSelectedIndex = this.items.length; } /** @type {?} */ const previousIndex = this.currentSelectedIndex; this.currentSelectedIndex = (previousIndex - 1) % this.items.length; } /** * @param {?} afterIndex * @return {?} */ gotoCarousel(afterIndex) { if (afterIndex === null) { return; } this.getCurrentIndex(); if (afterIndex === 0) { setTimeout((/** * @return {?} */ () => { this._nodeArr.forEach((/** * @param {?} v * @param {?} index * @return {?} */ (v, index) => { if (index === this._nodeArr.length - 1) { v.left = this.vertical ? 0 : -this._rationWidth; v.top = this.vertical ? -this._rationWidth : 0; } else { v.left = this.vertical ? 0 : index * this._rationWidth; v.top = this.vertical ? index * this._rationWidth : 0; } })); this.startTimer(); this.getListStyles(0); }), this.speed); } this.currentSelectedIndex = afterIndex; this.afterChange.emit(this.currentSelectedIndex); } /** * @return {?} */ getCurrentIndex() { if (this.touchObject.direction === 1) { this.caculateDirectionLeftCurrentIndex(); } else { this.caculateDirectionRightCurrentIndex(); } } /** * @param {?} index * @param {?} direction * @param {?=} xDist * @return {?} */ setSlideStyles(index, direction, xDist = 0) { if (direction === 1) { this._nodeArr.forEach((/** * @param {?} v * @param {?} tempIndex * @return {?} */ (v, tempIndex) => { if (index < this._nodeArr.length && index - 1 === tempIndex) { if (xDist === 0 || xDist > this._spaceWidth) { v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth; v.top = this.vertical ? (this._nodeArr.length + tempIndex) * this._rationWidth : 0; } } else if (this._nodeArr.length - 1 === tempIndex && index !== 2) { if (xDist === 0 || xDist > this._spaceWidth) { v.left = this.vertical ? 0 : (this._nodeArr.length - 1) * this._rationWidth; v.top = this.vertical ? (this._nodeArr.length - 1) * this._rationWidth : 0; } } else if (index === this._nodeArr.length - 1 && tempIndex === 1 && this.autoplay) { v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } else if (index === this._nodeArr.length - 1 && tempIndex === 0 && !this.autoplay) { v.left = this.vertical ? 0 : (this._nodeArr.length + tempIndex) * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } })); } else if (direction === -1) { this._nodeArr.forEach((/** * @param {?} v * @param {?} tempIndex * @return {?} */ (v, tempIndex) => { if (index === 0 && this._nodeArr.length - 1 === tempIndex) { v.left = this.vertical ? 0 : direction * this._rationWidth; v.top = this.vertical ? direction * this._rationWidth : 0; } else if (index === this._nodeArr.length - 2 && index + 1 === tempIndex) { v.left = this.vertical ? 0 : direction * this._rationWidth; v.top = this.vertical ? direction * this._rationWidth : 0; } else if (index === 1 && 0 === tempIndex) { v.left = this.vertical ? 0 : direction * this._rationWidth * tempIndex; v.top = this.vertical ? direction * this._rationWidth : 0; } else if (index > 1) { v.left = this.vertical ? 0 : tempIndex * this._rationWidth; v.top = this.vertical ? tempIndex * this._rationWidth : 0; } })); } } /** * @param {?=} offset * @return {?} */ getListStyles(offset = 0) { /** @type {?} */ const positionOffset = offset + (this.vertical ? (this.slideHeight - this._currentSlideHeight) / 2 : (this._currentSlideWidth - this._rationWidth) / 2) - this.cellSpacing; this.style = { height: this._currentSlideHeight + 'px', width: '100%', transform: this.vertical ? `translate3d(0px, ${positionOffset}px, 0px)` : `translate3d(${positionOffset}px, 0px, 0px)`, margin: this.vertical ? `${(this.cellSpacing / 2) * -1}px 0px` : `0px ${(this.cellSpacing / 2) * -1}px` }; } /** * @param {?} x1 * @param {?} x2 * @param {?} y1 * @param {?} y2 * @return {?} */ swipeDirection(x1, x2, y1, y2) { /** @type {?} */ const xDist = x1 - x2; /** @type {?} */ const yDist = y1 - y2; /** @type {?} */ const r = Math.atan2(yDist, xDist); /** @type {?} */ let swipeAngle = Math.round((r * 180) / Math.PI); if (swipeAngle < 0) { swipeAngle = 360 - Math.abs(swipeAngle); } if (swipeAngle <= 45 && swipeAngle >= 0) { return { direction: 1, xDist: xDist }; } if (swipeAngle <= 360 && swipeAngle >= 315) { return { direction: 1, xDist: xDist }; } if (swipeAngle >= 135 && swipeAngle <= 225) { return { direction: -1, xDist: xDist }; } if (this.vertical === true) { if (swipeAngle >= 35 + 33 && swipeAngle <= 135) { return { direction: 1, xDist: xDist }; } else { return { direction: -1, xDist: xDist }; } } return { direction: 0, xDist: xDist }; } /** * @return {?} */ get page() { return this.dots ? this.currentSelectedIndex : 0; } /** * @return {?} */ get pageCount() { return this.dots ? this.items.length : 0; } /** * @return {?} */ get dotindicatorStatus() { return this.dots ? this.items.length > 1 : this.dots; } /** * @return {?} */ ngAfterViewInit() { this.touchObject = { direction: 1 }; this._transition = `transform ${this.speed / 1000}s`; this.items.changes.subscribe((/** * @param {?} items * @return {?} */ items => { this.carouselInit(items); })); this.initCarouselSize(); this.selectedIndex = this.items.length - 1 < this.selectedIndex ? 0 : this.selectedIndex; /** @type {?} */ const index = this.items.length > 1 ? (this.items.length - 1 === this.selectedIndex ? -1 : this.selectedIndex) : 0; setTimeout((/** * @return {?} */ () => { this.currentSelectedIndex = this.selectedIndex; }), 0); this.getListStyles(-index * this._rationWidth); this.carouselInit(this.items); /** @type {?} */ const nativeElement = this._ele.nativeElement; /** @type {?} */ const targetNode = nativeElement.querySelector('carouselslide'); /** @type {?} */ const config = { attributes: true, childList: true, subtree: true }; /** @type {?} */ const callback = (/** * @param {?} mutationsList * @return {?} */ mutationsList => { for (const mutation of mutationsList) { if (mutation.type == 'attributes') { if (this.slideHeight !== nativeElement.querySelector('carouselslide').clientHeight) { this.initCarouselSize(); this.getListStyles(-index * this._rationWidth); this.carouselInit(this.items); } } } }); this._observer = new MutationObserver(callback); this._observer.observe(targetNode, config); } /** * @return {?} */ ngOnDestroy() { this._observer.disconnect(); this._observer = null; this.stopTimer(); } } CarouselComponent.decorators = [ { type: Component, args: [{ selector: 'Carousel, nzm-carousel', encapsulation: ViewEncapsulation.None, template: "<div class=\"slider-frame\" [ngStyle]=\"{ overflow: frameOverflow }\">\n <ul class=\"slider-list\" [ngStyle]=\"style\">\n <ng-content></ng-content>\n </ul>\n</div>\n<DotIndicator\n *ngIf=\"dotindicatorStatus\"\n class=\"am-carousel-wrap-dot\"\n [page]=\"page\"\n [dotStyle]=\"dotStyle\"\n [pageCount]=\"pageCount\"\n [dotActiveStyle]=\"dotActiveStyle\"\n></DotIndicator>\n" }] } ]; /** @nocollapse */ CarouselComponent.ctorParameters = () => [ { type: ElementRef } ]; CarouselComponent.propDecorators = { items: [{ type: ContentChildren, args: [CarouselSlideComponent,] }], speed: [{ type: Input }], dots: [{ type: Input }], vertical: [{ type: Input }], autoplay: [{ type: Input }], autoplayInterval: [{ type: Input }], infinite: [{ type: Input }], dotStyle: [{ type: Input }], dotActiveStyle: [{ type: Input }], frameOverflow: [{ type: Input }], cellSpacing: [{ type: Input }], slideWidth: [{ type: Input }], swipeSpeed: [{ type: Input }], dragging: [{ type: Input }], selectedIndex: [{ type: Input }], afterChange: [{ type: Output }], beforeChange: [{ type: Output }], carouselWrapper: [{ type: HostBinding, args: ['class.am-carousel',] }], carouselwrap: [{ type: HostBinding, args: ['class.carousel',] }], panstart: [{ type: HostListener, args: ['mousedown', ['$event'],] }, { type: HostListener, args: ['touchstart', ['$event'],] }], panmove: [{ type: HostListener, args: ['mousemove', ['$event'],] }, { type: HostListener, args: ['touchmove', ['$event'],] }], panend: [{ type: HostListener, args: ['mouseleave', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }, { type: HostListener, args: ['touchend', ['$event'],] }], cancel: [{ type: HostListener, args: ['touchcancel',] }], resize: [{ type: HostListener, args: ['window:resize',] }] }; if (false) { /** @type {?} */ CarouselComponent.prototype.slideHeight; /** @type {?} */ CarouselComponent.prototype.touchObject; /** @type {?} */ CarouselComponent.prototype.style; /** @type {?} */ CarouselComponent.prototype.lastIndex; /** @type {?} */ CarouselComponent.prototype.currentSelectedIndex; /** * @type {?} * @private */ CarouselComponent.prototype._timer; /** * @type {?} * @private */ CarouselComponent.prototype._resizeTimer; /** * @type {?} * @private */ CarouselComponent.prototype._nodeArr; /** * @type {?} * @private */ CarouselComponent.prototype._isMouseDown; /** * @type {?} * @private */ CarouselComponent.prototype._rationWidth; /** * @type {?} * @private */ CarouselComponent.prototype._currentSlideWidth; /** * @type {?} * @private */ CarouselComponent.prototype._currentSlideHeight; /** * @type {?} * @private */ CarouselComponent.prototype._transition; /** * @type {?} * @private */ CarouselComponent.prototype._spaceWidth; /** * @type {?} * @private */ CarouselComponent.prototype._observer; /** * @type {?} * @private */ CarouselComponent.prototype._dragging; /** * @type {?} * @private */ CarouselComponent.prototype._selectedIndex; /** @type {?} */ CarouselComponent.prototype.items; /** @type {?} */ CarouselComponent.prototype.speed; /** @type {?} */ CarouselComponent.prototype.dots; /** @type {?} */ CarouselComponent.prototype.vertical; /** @type {?} */ CarouselComponent.prototype.autoplay; /** @type {?} */ CarouselComponent.prototype.autoplayInterval; /** @type {?} */ CarouselComponent.prototype.infinite; /** @type {?} */ CarouselComponent.prototype.dotStyle; /** @type {?} */ CarouselComponent.prototype.dotActiveStyle; /** @type {?} */ CarouselComponent.prototype.frameOverflow; /** @type {?} */ CarouselComponent.prototype.cellSpacing; /** @type {?} */ CarouselComponent.prototype.slideWidth; /** @type {?} */ CarouselComponent.prototype.swipeSpeed; /** @type {?} */ CarouselComponent.prototype.dragging; /** @type {?} */ CarouselComponent.prototype.afterChange; /** @type {?} */ CarouselComponent.prototype.beforeChange; /** @type {?} */ CarouselComponent.prototype.carouselWrapper; /** @type {?} */ CarouselComponent.prototype.carouselwrap; /** * @type {?} * @private */ CarouselComponent.prototype._ele; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvIiwic291cmNlcyI6WyJjYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFFVixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxLQUFLLFVBQVUsTUFBTSwwQkFBMEIsQ0FBQztBQU92RCxNQUFNLE9BQU8saUJBQWlCOzs7O0lBcUs1QixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBbEtwQyxVQUFLLEdBQUc7WUFDTixNQUFNLEVBQUUsTUFBTTtZQUNkLEtBQUssRUFBRSxNQUFNO1lBQ2IsU0FBUyxFQUFFLDRCQUE0QjtZQUN2QyxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFDRixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQUl6QixhQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQUMvQix3QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDaEMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFFeEIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixtQkFBYyxHQUFXLENBQUMsQ0FBQztRQU1uQyxVQUFLLEdBQVcsR0FBRyxDQUFDO1FBRXBCLFNBQUksR0FBWSxJQUFJLENB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QUFDLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO29CQUN6RCxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQzNELENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7cUJBQU0sSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO29CQUN4RSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQzNELENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7cUJBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7b0JBQ3pDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7b0JBQ3ZFLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxD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