@fivethree/core
Version:
Fivethree Core Components
823 lines • 65.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/gallery/gallery.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { FivGalleryToolbar } from './gallery-toolbar/gallery-toolbar.component';
import { IonSlides, DomController, Platform } from '@ionic/angular';
import { FivOverlay } from './../overlay/overlay.component';
import { Component, ViewChild, ElementRef, Renderer2, ContentChildren, QueryList, forwardRef, HostListener, Inject, ChangeDetectorRef, Input, Output, EventEmitter, ViewChildren } from '@angular/core';
import { style, animate, AnimationBuilder, trigger, transition, useAnimation } from '@angular/animations';
import { DOCUMENT } from '@angular/common';
import { FivGalleryImage } from './gallery-image/gallery-image.component';
import { from, Subject, zip, of } from 'rxjs';
import { mergeMap, takeUntil, tap } from 'rxjs/operators';
import { tween, fromTo, getPosition, setPosition, fromToPixels, easeOutSine } from '@fivethree/ngx-rxjs-animations';
import { fade } from '../animations/animations';
import { ImageService } from './image.service';
var FivGallery = /** @class */ (function () {
function FivGallery(domCtrl, renderer, animation, change, platform, imageService, document) {
this.domCtrl = domCtrl;
this.renderer = renderer;
this.animation = animation;
this.change = change;
this.platform = platform;
this.imageService = imageService;
this.document = document;
this.activeIndex = 0;
this.inFullscreen = false;
this.zoomedIn = false;
this.controlsVisible = true;
this.slidesLoaded = false;
this.morphing = false;
this.backdrop = false;
this.backdropColor = '#000000ee';
this.pagerVisible = true;
this.ambient = false;
this.willOpen = new EventEmitter();
this.willClose = new EventEmitter();
this.didOpen = new EventEmitter();
this.didClose = new EventEmitter();
this.backdropChange = new EventEmitter();
this.$onDestroy = new Subject();
}
/**
* @return {?}
*/
FivGallery.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
this.updateImagesIndex();
this.setupToolbars();
this.subscribeToImageEvents();
};
/**
* @return {?}
*/
FivGallery.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.$onDestroy.next();
};
/**
* @return {?}
*/
FivGallery.prototype.subscribeToImageEvents = /**
* @return {?}
*/
function () {
var _this = this;
from(this.images.map((/**
* @param {?} image
* @return {?}
*/
function (image) { return image.click; })))
.pipe(mergeMap((/**
* @param {?} value
* @return {?}
*/
function (value) { return value; })), takeUntil(this.$onDestroy))
.subscribe((/**
* @param {?} image
* @return {?}
*/
function (image) {
_this.open(image);
}));
};
/**
* @return {?}
*/
FivGallery.prototype.updateImagesIndex = /**
* @return {?}
*/
function () {
this.images.forEach((/**
* @param {?} img
* @param {?} i
* @return {?}
*/
function (img, i) {
img.index = i;
}));
};
/**
* @return {?}
*/
FivGallery.prototype.setupToolbars = /**
* @return {?}
*/
function () {
var _this = this;
this.toolbars.forEach((/**
* @param {?} toolbar
* @return {?}
*/
function (toolbar) {
if (toolbar.position === 'top') {
_this.topToolbar = toolbar.content;
}
else {
_this.bottomToolbar = toolbar.content;
}
}));
};
/**
* @param {?} initial
* @return {?}
*/
FivGallery.prototype.open = /**
* @param {?} initial
* @return {?}
*/
function (initial) {
var _this = this;
this.willOpen.emit(initial);
this.activeIndex = initial.index;
this.morphing = true;
this.overlay.show(50000);
this.initialImage = initial;
this.updateBackdrop(this.activeIndex);
this.initialImage.originalSrc = initial.src;
setTimeout((/**
* @return {?}
*/
function () {
//wait a little for ripple
_this.backdrop = true;
_this.showControls();
_this.morphIn();
}), 300);
};
/**
* @return {?}
*/
FivGallery.prototype.morphIn = /**
* @return {?}
*/
function () {
var _this = this;
this.morphOverlay.show(49999);
/** @type {?} */
var f = getPosition(this.initialImage.thumbnail);
/** @type {?} */
var t = this.calculateImagePosition();
/** @type {?} */
var tweenDone = new Subject();
tween(easeOutSine, 320)
.pipe(fromToPixels(this.morphImage, f.top, t.top, 'top'), fromToPixels(this.morphImage, f.left, t.left, 'left'), fromToPixels(this.morphImage, f.height, t.height, 'height'), fromToPixels(this.morphImage, f.width, t.width, 'width'))
.subscribe({
complete: (/**
* @return {?}
*/
function () {
tweenDone.next();
})
});
zip(tweenDone, !this.slidesLoaded ? this.slides.ionSlidesDidLoad : of(true))
.pipe(tap((/**
* @return {?}
*/
function () {
_this.morphing = false;
_this.morphOverlay.hide();
_this.didOpen.emit(_this.initialImage);
_this.swiper.nativeElement.swiper.on('click', (/**
* @return {?}
*/
function () {
_this.handleSingleTap();
}));
})), takeUntil(this.$onDestroy))
.subscribe();
};
/**
* @return {?}
*/
FivGallery.prototype.dismiss = /**
* @return {?}
*/
function () {
this.close(false);
};
/**
* @param {?=} emit
* @return {?}
*/
FivGallery.prototype.close = /**
* @param {?=} emit
* @return {?}
*/
function (emit) {
if (emit === void 0) { emit = true; }
if (emit) {
this.willClose.emit(this.initialImage);
}
this.backdrop = false;
/** @type {?} */
var sameAsInitial = this.images.toArray()[this.activeIndex].index === this.initialImage.index;
if (sameAsInitial) {
this.morphBack();
}
else {
this.slideOut();
}
this.resetSlides(0);
if (this.inFullscreen) {
this.closeFullscreen();
}
this.slidesLoaded = false;
};
/**
* @return {?}
*/
FivGallery.prototype.morphBack = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var f = getPosition(this.getActiveImage());
/** @type {?} */
var t = getPosition(this.initialImage.thumbnail);
this.overlay.hide();
this.morphOverlay.show();
tween(easeOutSine, 240)
.pipe(fromToPixels(this.morphImage, f.top, t.top, 'top'), fromToPixels(this.morphImage, f.left, t.left, 'left'), fromToPixels(this.morphImage, f.height, t.height, 'height'), fromToPixels(this.morphImage, f.width, t.width, 'width'))
.subscribe({
complete: (/**
* @return {?}
*/
function () {
_this.morphOverlay.hide();
_this.didClose.emit(_this.initialImage);
_this.initialImage = null;
})
});
};
/**
* @return {?}
*/
FivGallery.prototype.slideOut = /**
* @return {?}
*/
function () {
var _this = this;
this.overlay.hide();
this.morphOverlay.show();
this.morphImage.nativeElement.src = this.getActiveImage().nativeElement.src;
setPosition(this.morphImage, getPosition(this.getActiveImage()));
tween(easeOutSine, 240)
.pipe(fromTo(this.morphImage, 'transform', 0, 100, (/**
* @param {?} t
* @return {?}
*/
function (t) { return "translateY(" + t + "%)"; })))
.subscribe({
complete: (/**
* @return {?}
*/
function () {
_this.morphImage.nativeElement.style.transform = '';
_this.morphOverlay.hide();
_this.didClose.emit(_this.initialImage);
_this.initialImage = null;
})
});
};
/**
* @return {?}
*/
FivGallery.prototype.getActiveImage = /**
* @return {?}
*/
function () {
return this.slideImages.toArray()[this.activeIndex];
};
/**
* @param {?} progress
* @return {?}
*/
FivGallery.prototype.transformSlides = /**
* @param {?} progress
* @return {?}
*/
function (progress) {
var _this = this;
if (this.controlsVisible) {
this.hideControls();
}
this.domCtrl.write((/**
* @return {?}
*/
function () {
_this.renderer.setStyle(_this.viewer.nativeElement, 'transform', "translateY(" + progress * 120 + "px)");
}));
};
/**
* @param {?} progress
* @return {?}
*/
FivGallery.prototype.resetSlides = /**
* @param {?} progress
* @return {?}
*/
function (progress) {
var _this = this;
/** @type {?} */
var reset = this.animation.build([
style({ transform: "translateY(" + progress * 120 + "px)" }),
animate('150ms', style({ transform: "translateY(0px)" }))
]);
/** @type {?} */
var animation = reset.create(this.viewer.nativeElement);
animation.play();
animation.onDone((/**
* @return {?}
*/
function () {
animation.destroy();
_this.transformSlides(0);
_this.showControls();
}));
};
/**
* @return {?}
*/
FivGallery.prototype.slideDidChange = /**
* @return {?}
*/
function () {
this.activeIndex = this.swiper.nativeElement.swiper.activeIndex;
};
/**
* @return {?}
*/
FivGallery.prototype.ionSlideNextStart = /**
* @return {?}
*/
function () {
if (this.slidesLoaded) {
this.updateBackdrop(this.activeIndex + 1);
}
};
/**
* @return {?}
*/
FivGallery.prototype.ionSlidePrevStart = /**
* @return {?}
*/
function () {
if (this.slidesLoaded) {
this.updateBackdrop(this.activeIndex - 1);
}
};
/**
* @param {?} index
* @return {?}
*/
FivGallery.prototype.updateBackdrop = /**
* @param {?} index
* @return {?}
*/
function (index) {
this.backdropColor = this.ambient
? this.imageService.getAverageRGB(this.images.toArray()[index].thumbnail.nativeElement)
: '#000000ee';
this.backdropChange.emit();
};
/**
* @return {?}
*/
FivGallery.prototype.onSlidesLoad = /**
* @return {?}
*/
function () {
this.slidesLoaded = true;
};
/**
* @return {?}
*/
FivGallery.prototype.calculateImagePosition = /**
* @return {?}
*/
function () {
/** @type {?} */
var nH = this.initialImage.thumbnail.nativeElement.naturalHeight;
/** @type {?} */
var nW = this.initialImage.thumbnail.nativeElement.naturalWidth;
/** @type {?} */
var height = Math.min(nH, this.platform.height());
/** @type {?} */
var width = Math.min(nW, this.platform.width());
/** @type {?} */
var ratio = nW / nH;
if (ratio * height < width) {
width = height * ratio;
}
else {
height = width / ratio;
}
/** @type {?} */
var top = this.platform.height() / 2 - height / 2;
/** @type {?} */
var left = this.platform.width() / 2 - width / 2;
/** @type {?} */
var p = {
height: height,
width: width,
left: left,
top: top
};
return p;
};
/**
* @return {?}
*/
FivGallery.prototype.fullscreen = /**
* @return {?}
*/
function () {
if (this.inFullscreen) {
this.closeFullscreen();
}
else {
this.openFullscreen();
}
};
/**
* @return {?}
*/
FivGallery.prototype.openFullscreen = /**
* @return {?}
*/
function () {
/** @type {?} */
var elem = document.documentElement;
if (elem.requestFullscreen) {
elem.requestFullscreen();
}
else if (elem['mozRequestFullScreen']) {
/* Firefox */
elem['mozRequestFullScreen']();
}
else if (elem['webkitRequestFullscreen']) {
/* Chrome, Safari and Opera */
elem['webkitRequestFullscreen']();
}
else if (elem['msRequestFullscreen']) {
/* IE/Edge */
elem['msRequestFullscreen']();
}
this.inFullscreen = true;
};
/**
* @return {?}
*/
FivGallery.prototype.closeFullscreen = /**
* @return {?}
*/
function () {
this.inFullscreen = false;
if (this.document.exitFullscreen) {
this.document.exitFullscreen();
}
else if (this.document.mozCancelFullScreen) {
/* Firefox */
this.document.mozCancelFullScreen();
}
else if (this.document.webkitExitFullscreen) {
/* Chrome, Safari and Opera */
this.document.webkitExitFullscreen();
}
else if (this.document.msExitFullscreen) {
/* IE/Edge */
this.document.msExitFullscreen();
}
};
/**
* @return {?}
*/
FivGallery.prototype.zoom = /**
* @return {?}
*/
function () {
if (this.zoomedIn) {
this.zoomOut();
}
else {
this.zoomIn();
}
};
/**
* @return {?}
*/
FivGallery.prototype.zoomIn = /**
* @return {?}
*/
function () {
this.swiper.nativeElement.swiper.zoom.in();
this.zoomedIn = true;
};
/**
* @return {?}
*/
FivGallery.prototype.zoomOut = /**
* @return {?}
*/
function () {
this.swiper.nativeElement.swiper.zoom.out();
this.zoomedIn = false;
};
/**
* @return {?}
*/
FivGallery.prototype.handleSingleTap = /**
* @return {?}
*/
function () {
this.controlsVisible = !this.controlsVisible;
this.change.detectChanges();
};
/**
* @return {?}
*/
FivGallery.prototype.hideControls = /**
* @return {?}
*/
function () {
this.controlsVisible = false;
this.change.detectChanges();
};
/**
* @return {?}
*/
FivGallery.prototype.showControls = /**
* @return {?}
*/
function () {
this.controlsVisible = true;
this.change.detectChanges();
};
/**
* @param {?} event
* @return {?}
*/
FivGallery.prototype.keyEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.slidesLoaded && !this.morphing) {
this.handleKeyboardEvents(event);
}
};
/**
* @param {?} event
* @return {?}
*/
FivGallery.prototype.handleKeyboardEvents = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (event.key === 'ArrowRight') {
this.next();
return;
}
if (event.key === 'ArrowLeft') {
this.prev();
return;
}
if (event.key === 'ArrowDown' || event.key === 'Escape') {
this.close();
return;
}
};
/**
* @return {?}
*/
FivGallery.prototype.next = /**
* @return {?}
*/
function () {
if (this.slides && this.slidesLoaded) {
this.slides.slideNext();
}
};
/**
* @return {?}
*/
FivGallery.prototype.prev = /**
* @return {?}
*/
function () {
if (this.slides && this.slidesLoaded) {
this.slides.slidePrev();
}
};
FivGallery.decorators = [
{ type: Component, args: [{
selector: 'fiv-gallery',
template: "<ng-content></ng-content>\n<fiv-overlay #overlay>\n <div [style.background]=\"backdropColor\" [@fade] class=\"backdrop\" *ngIf=\"overlay.open && backdrop\"></div>\n\n <div [style.visibility]=\"!morphing ? 'visible' : 'hidden'\">\n <div [@slideDown] *ngIf=\"controlsVisible && topToolbar\" class=\"gallery-toolbar header\" color=\"transparent\">\n <ng-container [ngTemplateOutlet]=\"topToolbar\">\n </ng-container>\n </div>\n\n <ng-container *fivIf=\"['desktop']\">\n <ion-fab [@scale] *ngIf=\"controlsVisible && images?.length > 0 && pagerVisible\" vertical=\"center\"\n horizontal=\"start\" slot=\"fixed\">\n <ion-fab-button color=\"light\" (click)=\"prev()\" [disabled]=\"activeIndex === 0\">\n <ion-icon name=\"arrow-back\"></ion-icon>\n </ion-fab-button>\n </ion-fab>\n </ng-container>\n\n <div #viewer class=\"viewer\" fivPull [maxPullHeight]=\"160\" [minPullHeight]=\"120\" (fivPull)=\"transformSlides($event)\"\n (fivRefresh)=\"close()\" (fivCancel)=\"resetSlides($event)\" [enableScroll]=\"true\">\n <ion-slides #slider *ngIf=\"overlay.open\" (ionSlideDidChange)=\"slideDidChange()\"\n (ionSlideNextStart)=\"ionSlideNextStart()\" (ionSlidePrevStart)=\"ionSlidePrevStart()\"\n (ionSlidesDidLoad)=\"onSlidesLoad()\" [options]=\"{ zoom: true, initialSlide: initialImage?.index}\">\n <ion-slide *ngFor=\"let image of images; let i = index\">\n <div class=\"swiper-zoom-container\">\n <img #slideImage [ngClass]=\"{'instant': activeIndex !== i}\" [src]=\"image.src\">\n </div>\n </ion-slide>\n </ion-slides>\n </div>\n\n <ng-container *fivIf=\"['desktop']\">\n <ion-fab [@scale] *ngIf=\"controlsVisible && pagerVisible\" vertical=\"center\" horizontal=\"end\" slot=\"fixed\">\n <ion-fab-button color=\"light\" (click)=\"next()\" [disabled]=\"activeIndex === images.length - 1\">\n <ion-icon name=\"arrow-forward\"></ion-icon>\n </ion-fab-button>\n </ion-fab>\n </ng-container>\n\n <div [@slideUp] *ngIf=\"controlsVisible && bottomToolbar\" class=\"gallery-toolbar footer\" color=\"transparent\">\n <ng-container [ngTemplateOutlet]=\"bottomToolbar\">\n </ng-container>\n </div>\n </div>\n\n\n\n\n</fiv-overlay>\n<fiv-overlay #morphOverlay>\n <img #morph class=\"morph\" *ngIf=\"initialImage\" [src]=\"initialImage.src\">\n</fiv-overlay>",
animations: [
trigger('scale', [
transition('void => *', [
style({ opacity: 0, transform: 'scale(0)' }),
animate('125ms', style({ opacity: 1, transform: 'scale(1)' }))
]),
transition('* => void', [
style({ opacity: 1, transform: 'scale(1)' }),
animate('125ms', style({ opacity: 0, transform: 'scale(0)' }))
])
]),
trigger('slideUp', [
transition('void => *', [
style({ opacity: 0, transform: 'translateY(100%)' }),
animate('75ms', style({ opacity: 1, transform: 'translateY(0%)' }))
]),
transition('* => void', [
style({ opacity: 1, transform: 'translateY(0%)' }),
animate('75ms', style({ opacity: 0, transform: 'translateY(100%)' }))
])
]),
trigger('slideDown', [
transition('* => void', [
style({ opacity: 0, transform: 'translateY(0%)' }),
animate('75ms', style({ opacity: 1, transform: 'translateY(-100%)' }))
]),
transition('void => *', [
style({ opacity: 1, transform: 'translateY(-100%)' }),
animate('75ms', style({ opacity: 0, transform: 'translateY(0%)' }))
])
]),
trigger('fade', [
transition('* => void', useAnimation(fade, {
params: {
fromOpacity: 1,
toOpacity: 0,
time: '240ms'
}
})),
transition('void => *', useAnimation(fade, {
params: {
fromOpacity: 0,
toOpacity: 1,
time: '240ms'
}
}))
])
],
styles: [".viewer{width:100vw;height:100vh}.viewer ion-slides{height:100%}.viewer img{height:auto;max-height:100%;width:auto;max-width:100%}.viewer img.instant{transition-duration:0s!important}.gallery-toolbar{width:100%;--fiv-gallery-toolbar-color:#fff;position:absolute;color:var(--fiv-gallery-toolbar-color)}.gallery-toolbar.header{top:env(safe-area-inset-top)}.gallery-toolbar.footer{bottom:env(safe-area-inset-bottom)}.morph{position:absolute;-o-object-position:center;object-position:center;-o-object-fit:cover;object-fit:cover;display:block}.backdrop{height:100vh;width:100vw;position:absolute;transition:background-color .2s}"]
}] }
];
/** @nocollapse */
FivGallery.ctorParameters = function () { return [
{ type: DomController },
{ type: Renderer2 },
{ type: AnimationBuilder },
{ type: ChangeDetectorRef },
{ type: Platform },
{ type: ImageService },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
]; };
FivGallery.propDecorators = {
overlay: [{ type: ViewChild, args: ['overlay', { static: false },] }],
morphOverlay: [{ type: ViewChild, args: ['morphOverlay', { static: false },] }],
viewer: [{ type: ViewChild, args: ['viewer', { static: false },] }],
morphImage: [{ type: ViewChild, args: ['morph', { static: false },] }],
swiper: [{ type: ViewChild, args: ['slider', { static: false, read: ElementRef },] }],
slides: [{ type: ViewChild, args: ['slider', { static: false },] }],
slideImages: [{ type: ViewChildren, args: ['slideImage',] }],
images: [{ type: ContentChildren, args: [forwardRef((/**
* @return {?}
*/
function () { return FivGalleryImage; })),
{ descendants: true },] }],
toolbars: [{ type: ContentChildren, args: [FivGalleryToolbar,] }],
pagerVisible: [{ type: Input }],
ambient: [{ type: Input }],
willOpen: [{ type: Output }],
willClose: [{ type: Output }],
didOpen: [{ type: Output }],
didClose: [{ type: Output }],
backdropChange: [{ type: Output }],
keyEvent: [{ type: HostListener, args: ['window:keyup', ['$event'],] }]
};
return FivGallery;
}());
export { FivGallery };
if (false) {
/** @type {?} */
FivGallery.prototype.overlay;
/** @type {?} */
FivGallery.prototype.morphOverlay;
/** @type {?} */
FivGallery.prototype.viewer;
/** @type {?} */
FivGallery.prototype.morphImage;
/** @type {?} */
FivGallery.prototype.swiper;
/** @type {?} */
FivGallery.prototype.slides;
/** @type {?} */
FivGallery.prototype.slideImages;
/** @type {?} */
FivGallery.prototype.images;
/** @type {?} */
FivGallery.prototype.toolbars;
/** @type {?} */
FivGallery.prototype.topToolbar;
/** @type {?} */
FivGallery.prototype.bottomToolbar;
/** @type {?} */
FivGallery.prototype.initialImage;
/** @type {?} */
FivGallery.prototype.activeIndex;
/** @type {?} */
FivGallery.prototype.inFullscreen;
/** @type {?} */
FivGallery.prototype.zoomedIn;
/** @type {?} */
FivGallery.prototype.controlsVisible;
/** @type {?} */
FivGallery.prototype.slidesLoaded;
/** @type {?} */
FivGallery.prototype.morphing;
/** @type {?} */
FivGallery.prototype.backdrop;
/** @type {?} */
FivGallery.prototype.backdropColor;
/** @type {?} */
FivGallery.prototype.pagerVisible;
/** @type {?} */
FivGallery.prototype.ambient;
/** @type {?} */
FivGallery.prototype.willOpen;
/** @type {?} */
FivGallery.prototype.willClose;
/** @type {?} */
FivGallery.prototype.didOpen;
/** @type {?} */
FivGallery.prototype.didClose;
/** @type {?} */
FivGallery.prototype.backdropChange;
/** @type {?} */
FivGallery.prototype.$onDestroy;
/**
* @type {?}
* @private
*/
FivGallery.prototype.domCtrl;
/**
* @type {?}
* @private
*/
FivGallery.prototype.renderer;
/**
* @type {?}
* @private
*/
FivGallery.prototype.animation;
/**
* @type {?}
* @private
*/
FivGallery.prototype.change;
/**
* @type {?}
* @private
*/
FivGallery.prototype.platform;
/**
* @type {?}
* @private
*/
FivGallery.prototype.imageService;
/**
* @type {?}
* @private
*/
FivGallery.prototype.document;
}
var Position = /** @class */ (function () {
function Position() {
}
return Position;
}());
export { Position };
if (false) {
/** @type {?} */
Position.prototype.top;
/** @type {?} */
Position.prototype.left;
/** @type {?} */
Position.prototype.height;
/** @type {?} */
Position.prototype.width;
/** @type {?} */
Position.prototype.translate;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsbGVyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZml2ZXRocmVlL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ2FsbGVyeS9nYWxsZXJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04saUJBQWlCLEVBRWpCLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsS0FBSyxFQUNMLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFVBQVUsRUFDVixZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFdBQVcsRUFFWCxZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxF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Ozs7OztJQUd6Qiw2QkFBOEI7Ozs7O0lBQzlCLDhCQUEyQjs7Ozs7SUFDM0IsK0JBQW1DOzs7OztJQUNuQyw0QkFBaUM7Ozs7O0lBQ2pDLDhCQUEwQjs7Ozs7SUFDMUIsa0NBQWtDOzs7OztJQUNsQyw4QkFBdUM7O0FBOFYzQztJQUFBO0lBTUEsQ0FBQztJQUFELGVBQUM7QUFBRCxDQUFDLEFBTkQsSUFNQzs7OztJQUxDLHVCQUFZOztJQUNaLHdCQUFhOztJQUNiLDBCQUFlOztJQUNmLHlCQUFjOztJQUNkLDZCQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpdkdhbGxlcnlUb29sYmFyIH0gZnJvbSAnLi9nYWxsZXJ5LXRvb2xiYXIvZ2FsbGVyeS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJb25TbGlkZXMsIERvbUNvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRml2T3ZlcmxheSB9IGZyb20gJy4vLi4vb3ZlcmxheS9vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgUmVuZGVyZXIyLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIHN0eWxlLFxuICBhbmltYXRlLFxuICBBbmltYXRpb25CdWlsZGVyLFxuICB0cmlnZ2VyLFxuICB0cmFuc2l0aW9uLFxuICB1c2VBbmltYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuL2tleWNvZGVzLmVudW0nO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmF2aWdhdGVhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGaXZHYWxsZXJ5SW1hZ2UgfSBmcm9tICcuL2dhbGxlcnktaW1hZ2UvZ2FsbGVyeS1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZnJvbSwgU3ViamVjdCwgemlwLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgdHdlZW4sXG4gIGZyb21UbyxcbiAgZ2V0UG9zaXRpb24sXG4gIHNldFBvc2l0aW9uLFxuICBSZWN0UG9zaXRpb24sXG4gIGZyb21Ub1BpeGVscyxcbiAgZWFzZU91dFNpbmVcbn0gZnJvbSAnQGZpdmV0aHJlZS9uZ3gtcnhqcy1hbmltYXRpb25zJztcbmltcG9ydCB7IGZhZGUgfSBmcm9tICcuLi9hbmltYXRpb25zL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi9pbWFnZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZml2LWdhbGxlcnknLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FsbGVyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dhbGxlcnkuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NjYWxlJywgW1xuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDApJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMTI1bXMnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyB9KSlcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW1xuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMTI1bXMnLCBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlKDApJyB9KSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignc2xpZGVVcCcsIFtcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnNzVtcycsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwJSknIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwJSknIH0pLFxuICAgICAgICBhbmltYXRlKCc3NW1zJywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJyB9KSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignc2xpZGVEb3duJywgW1xuICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW1xuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnNzVtcycsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSknIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSknIH0pLFxuICAgICAgICBhbmltYXRlKCc