@libs-ui/components-gallery 0.2.306 → 0.2.308-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, input, model, output, signal, untracked, viewChild, viewChildren } from "@angular/core";
3
- import { fromEvent } from "rxjs";
4
- import { viewDataNumberByLanguage } from "@libs-ui/utils";
5
- import { LibsUiComponentsPopoverComponent } from "@libs-ui/components-popover";
6
- import { TranslateModule } from "@ngx-translate/core";
7
- import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, input, model, output, signal, untracked, viewChild, viewChildren } from '@angular/core';
3
+ import { fromEvent } from 'rxjs';
4
+ import { viewDataNumberByLanguage } from '@libs-ui/utils';
5
+ import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@ngx-translate/core";
10
10
  export class LibsUiComponentsGalleryViewerComponent {
@@ -30,7 +30,7 @@ export class LibsUiComponentsGalleryViewerComponent {
30
30
  fieldDisplaySrcImage = input.required();
31
31
  imageSelected = model();
32
32
  removeBackdrop = input();
33
- zIndex = input(1200, { transform: val => val ?? 1200 });
33
+ zIndex = input(1200, { transform: (val) => val ?? 1200 });
34
34
  singleImage = input(false);
35
35
  classContainerInclude = input();
36
36
  // #region OUTPUT
@@ -53,7 +53,7 @@ export class LibsUiComponentsGalleryViewerComponent {
53
53
  return;
54
54
  }
55
55
  untracked(() => {
56
- const indexSelected = this.images().findIndex(item => item[this.fieldDisplaySrcImage()] === this.imageSelected()?.[this.fieldDisplaySrcImage()]);
56
+ const indexSelected = this.images().findIndex((item) => item[this.fieldDisplaySrcImage()] === this.imageSelected()?.[this.fieldDisplaySrcImage()]);
57
57
  this.indexSelected.set(indexSelected);
58
58
  this.createTimeout((id) => {
59
59
  this.clearTimeout(id);
@@ -63,7 +63,9 @@ export class LibsUiComponentsGalleryViewerComponent {
63
63
  });
64
64
  }
65
65
  ngAfterViewInit() {
66
- fromEvent(document, 'keyup').pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
66
+ fromEvent(document, 'keyup')
67
+ .pipe(takeUntilDestroyed(this.destroyRef))
68
+ .subscribe((event) => {
67
69
  event.stopPropagation();
68
70
  if (event.key === 'Escape') {
69
71
  this.handlerClosePopup(event);
@@ -131,11 +133,11 @@ export class LibsUiComponentsGalleryViewerComponent {
131
133
  isOverflowHiddenDesired: true,
132
134
  });
133
135
  this.draggableEl.set(draggableEl);
134
- if (this.scaleValue() * this.widthDefault() / this.widthImage() * 100 < 1) {
135
- this.scaleValue.set(1 / 100 * this.widthImage() / this.widthDefault());
136
+ if (((this.scaleValue() * this.widthDefault()) / this.widthImage()) * 100 < 1) {
137
+ this.scaleValue.set(((1 / 100) * this.widthImage()) / this.widthDefault());
136
138
  }
137
- if (this.scaleValue() * this.widthDefault() / this.widthImage() * 100 > 5000 * 0.9) {
138
- this.scaleValue.set(5000 * 0.9 / 100 * this.widthImage() / this.widthDefault());
139
+ if (((this.scaleValue() * this.widthDefault()) / this.widthImage()) * 100 > 5000 * 0.9) {
140
+ this.scaleValue.set((((5000 * 0.9) / 100) * this.widthImage()) / this.widthDefault());
139
141
  }
140
142
  if (type === 'in') {
141
143
  const scaleValue = this.scaleValue() * (1 + this.step());
@@ -206,7 +208,7 @@ export class LibsUiComponentsGalleryViewerComponent {
206
208
  this.disable.set(true);
207
209
  this.setStyleSelectImage(true);
208
210
  }
209
- makeElementDraggable = ({ element, DRAGGABLE_CSS_CLASS = 'draggable-element', }) => {
211
+ makeElementDraggable = ({ element, DRAGGABLE_CSS_CLASS = 'draggable-element' }) => {
210
212
  if (!element) {
211
213
  return null;
212
214
  }
@@ -258,7 +260,9 @@ export class LibsUiComponentsGalleryViewerComponent {
258
260
  if (!element) {
259
261
  return;
260
262
  }
261
- const scaleValue = (((this.viewPort()?.width || 0) / this.widthDefault()) < ((this.viewPort()?.height || 0) - (this.singleImage() ? 0 : 40)) / this.heightDefault()) ? ((this.viewPort()?.width || 0) / this.widthDefault()) : ((this.viewPort()?.height || 0) - (this.singleImage() ? 0 : 40)) / this.heightDefault();
263
+ const scaleValue = (this.viewPort()?.width || 0) / this.widthDefault() < ((this.viewPort()?.height || 0) - (this.singleImage() ? 0 : 40)) / this.heightDefault()
264
+ ? (this.viewPort()?.width || 0) / this.widthDefault()
265
+ : ((this.viewPort()?.height || 0) - (this.singleImage() ? 0 : 40)) / this.heightDefault();
262
266
  this.scaleValue.set(scaleValue);
263
267
  if (this.scaleValue() > 1 && (reset || this.isFirstRender()) && !this.fullScreen()) {
264
268
  this.scaleValue.set(1);
@@ -274,7 +278,7 @@ export class LibsUiComponentsGalleryViewerComponent {
274
278
  element.style.height = `${this.scaleValue() * this.heightDefault()}px`;
275
279
  this.canDrag.set(false);
276
280
  const rectElement = element.getBoundingClientRect();
277
- if ((rectElement.width > (this.viewPort()?.width || 0)) || (rectElement.height > (this.viewPort()?.height || 0))) {
281
+ if (rectElement.width > (this.viewPort()?.width || 0) || rectElement.height > (this.viewPort()?.height || 0)) {
278
282
  this.canDrag.set(true);
279
283
  }
280
284
  if (rectElement.left + rectElement.width < (this.viewPort()?.width || 0) + (this.viewPort()?.left || 0) || rectElement.left > (this.viewPort()?.left || 0)) {
@@ -287,7 +291,7 @@ export class LibsUiComponentsGalleryViewerComponent {
287
291
  }
288
292
  setDisplayRatio() {
289
293
  const element = this.singleImageRef()?.nativeElement;
290
- this.ratio.set(`${viewDataNumberByLanguage(element.width / this.widthDefault() * 100, false, 0)}%`);
294
+ this.ratio.set(`${viewDataNumberByLanguage((element.width / this.widthDefault()) * 100, false, 0)}%`);
291
295
  const elementRatio = this.elementRatioRef()?.nativeElement;
292
296
  elementRatio.style.display = 'flex';
293
297
  this.createTimeout((id) => {
@@ -297,23 +301,20 @@ export class LibsUiComponentsGalleryViewerComponent {
297
301
  }
298
302
  createTimeout(callback, delay) {
299
303
  const timeoutId = setTimeout(() => callback(timeoutId), delay);
300
- this.timeouts.update(ids => [...ids, timeoutId]);
304
+ this.timeouts.update((ids) => [...ids, timeoutId]);
301
305
  }
302
306
  clearTimeout(id) {
303
307
  clearTimeout(id);
304
- this.timeouts.update(ids => ids.filter(idStore => idStore !== id));
308
+ this.timeouts.update((ids) => ids.filter((idStore) => idStore !== id));
305
309
  }
306
310
  ngOnDestroy() {
307
- this.timeouts().forEach(item => clearTimeout(item));
311
+ this.timeouts().forEach((item) => clearTimeout(item));
308
312
  }
309
313
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
310
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryViewerComponent, isStandalone: true, selector: "libs_ui-components-gallery-viewer", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: true, transformFunction: null }, imageSelected: { classPropertyName: "imageSelected", publicName: "imageSelected", isSignal: true, isRequired: false, transformFunction: null }, removeBackdrop: { classPropertyName: "removeBackdrop", publicName: "removeBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, singleImage: { classPropertyName: "singleImage", publicName: "singleImage", isSignal: true, isRequired: false, transformFunction: null }, classContainerInclude: { classPropertyName: "classContainerInclude", publicName: "classContainerInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageSelected: "imageSelectedChange", outClose: "outClose" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, isSignal: true }, { propertyName: "singleImageRef", first: true, predicate: ["singleImageRef"], descendants: true, isSignal: true }, { propertyName: "elementRatioRef", first: true, predicate: ["elementRatioRef"], descendants: true, isSignal: true }, { propertyName: "fullContainerRef", first: true, predicate: ["fullContainerRef"], descendants: true, isSignal: true }, { propertyName: "imagesRef", predicate: ["imagesRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (images() || singleImage()) {\n <div class=\"libs-ui-gallery-img-popup libs-ui-gallery-img-popup-backdrop\"\n [class.!bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container {{ classContainerInclude() || '' }}\">\n <div class=\"flex w-full justify-end mb-[16px] z-10\">\n <i class=\"libs-ui-icon-close text-[24px] p-[4px] rounded-[4px] text-[#ffffff] cursor-pointer bg-[#030B184D] hover:bg-[#030B1826]\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef\n class=\"flex w-full h-full relative\">\n <div class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event,false)\">\n @if (fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio flex items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ ratio() }}\n </div>\n </div>\n </div>\n @if (!imageSelected()?.['error']) {\n <div class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5r absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:zIndex()+100}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event,'out')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:zIndex()+100}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event,'in')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex:zIndex()+100}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{ fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div class=\"libs-ui-font-h5r libs-ui-gallery-text-restore\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}\n </div>\n </div>\n </div>\n </div>\n }\n @if (!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5r text-[#ffffff] mt-[12px]\">\n @if (fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex items-center\">\n {{ indexSelected()+1 }}/{{ images().length }}\n </div>\n\n @if (fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (!singleImage()) {\n <div class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative overflow-hidden\">\n <div class=\"flex h-full overflow-hidden\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [style.width.px]=\"imagesRef.offsetHeight\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event,image,index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !==images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() ===images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup-backdrop{background-color:#030b1850;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #E6E7EA;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226FF5)}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
314
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsGalleryViewerComponent, isStandalone: true, selector: "libs_ui-components-gallery-viewer", inputs: { images: { classPropertyName: "images", publicName: "images", isSignal: true, isRequired: true, transformFunction: null }, fieldDisplaySrcImage: { classPropertyName: "fieldDisplaySrcImage", publicName: "fieldDisplaySrcImage", isSignal: true, isRequired: true, transformFunction: null }, imageSelected: { classPropertyName: "imageSelected", publicName: "imageSelected", isSignal: true, isRequired: false, transformFunction: null }, removeBackdrop: { classPropertyName: "removeBackdrop", publicName: "removeBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, singleImage: { classPropertyName: "singleImage", publicName: "singleImage", isSignal: true, isRequired: false, transformFunction: null }, classContainerInclude: { classPropertyName: "classContainerInclude", publicName: "classContainerInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageSelected: "imageSelectedChange", outClose: "outClose" }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, isSignal: true }, { propertyName: "singleImageRef", first: true, predicate: ["singleImageRef"], descendants: true, isSignal: true }, { propertyName: "elementRatioRef", first: true, predicate: ["elementRatioRef"], descendants: true, isSignal: true }, { propertyName: "fullContainerRef", first: true, predicate: ["fullContainerRef"], descendants: true, isSignal: true }, { propertyName: "imagesRef", predicate: ["imagesRef"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (images() || singleImage()) {\n <div\n class=\"libs-ui-gallery-img-popup libs-ui-gallery-img-popup-backdrop\"\n [class.!bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div\n #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container {{ classContainerInclude() || '' }}\">\n <div class=\"flex w-full justify-end mb-[16px] z-10\">\n <i\n class=\"libs-ui-icon-close text-[24px] p-[4px] rounded-[4px] text-[#ffffff] cursor-pointer bg-[#030B184D] hover:bg-[#030B1826]\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div\n class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div\n #containerRef\n class=\"flex w-full h-full relative\">\n <div\n class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event, false)\">\n @if (fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img\n #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div\n #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio flex items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ ratio() }}\n </div>\n </div>\n </div>\n @if (!imageSelected()?.['error']) {\n <div\n class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5r absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{ content: 'i18n_zoom_out', direction: 'top', zIndex: zIndex() + 100 }\">\n <i\n class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event, 'out')\"></i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{ content: 'i18n_zoom_in', direction: 'top', zIndex: zIndex() + 100 }\">\n <i\n class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event, 'in')\"></i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{ content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex: zIndex() + 100 }\">\n <div\n class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{ fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div\n class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i\n class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div\n class=\"libs-ui-font-h5r libs-ui-gallery-text-restore\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">\n {{ 'i18n_restore' | translate }}\n </div>\n </div>\n </div>\n </div>\n }\n @if (!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5r text-[#ffffff] mt-[12px]\">\n @if (fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div\n class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex items-center\">{{ indexSelected() + 1 }}/{{ images().length }}</div>\n\n @if (fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div\n [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (!singleImage()) {\n <div\n class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div\n class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative overflow-hidden\">\n <div class=\"flex h-full overflow-hidden\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div\n #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [style.width.px]=\"imagesRef.offsetHeight\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div\n class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event, image, index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img\n [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div\n [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup-backdrop{background-color:#030b1850;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #e6e7ea;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226ff5)}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
311
315
  }
312
316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsGalleryViewerComponent, decorators: [{
313
317
  type: Component,
314
- args: [{ selector: 'libs_ui-components-gallery-viewer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
315
- TranslateModule,
316
- LibsUiComponentsPopoverComponent
317
- ], template: "@if (images() || singleImage()) {\n <div class=\"libs-ui-gallery-img-popup libs-ui-gallery-img-popup-backdrop\"\n [class.!bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container {{ classContainerInclude() || '' }}\">\n <div class=\"flex w-full justify-end mb-[16px] z-10\">\n <i class=\"libs-ui-icon-close text-[24px] p-[4px] rounded-[4px] text-[#ffffff] cursor-pointer bg-[#030B184D] hover:bg-[#030B1826]\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div #containerRef\n class=\"flex w-full h-full relative\">\n <div class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event,false)\">\n @if (fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio flex items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ ratio() }}\n </div>\n </div>\n </div>\n @if (!imageSelected()?.['error']) {\n <div class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5r absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_out', direction: 'top', zIndex:zIndex()+100}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event,'out')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: 'i18n_zoom_in', direction: 'top', zIndex:zIndex()+100}\">\n <i class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event,'in')\"> </i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex:zIndex()+100}\">\n <div class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{ fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div class=\"libs-ui-font-h5r libs-ui-gallery-text-restore\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">{{ 'i18n_restore' | translate }}\n </div>\n </div>\n </div>\n </div>\n }\n @if (!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5r text-[#ffffff] mt-[12px]\">\n @if (fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex items-center\">\n {{ indexSelected()+1 }}/{{ images().length }}\n </div>\n\n @if (fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (!singleImage()) {\n <div class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative overflow-hidden\">\n <div class=\"flex h-full overflow-hidden\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [style.width.px]=\"imagesRef.offsetHeight\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event,image,index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div [class.cursor-pointer]=\"indexSelected() !==images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() ===images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() ===images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup-backdrop{background-color:#030b1850;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #E6E7EA;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226FF5)}\n"] }]
318
+ args: [{ selector: 'libs_ui-components-gallery-viewer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsPopoverComponent], template: "@if (images() || singleImage()) {\n <div\n class=\"libs-ui-gallery-img-popup libs-ui-gallery-img-popup-backdrop\"\n [class.!bg-[transparent]]=\"removeBackdrop()\"\n [style.zIndex]=\"zIndex()\">\n <div\n #fullContainerRef\n class=\"libs-ui-gallery-img-popup-container {{ classContainerInclude() || '' }}\">\n <div class=\"flex w-full justify-end mb-[16px] z-10\">\n <i\n class=\"libs-ui-icon-close text-[24px] p-[4px] rounded-[4px] text-[#ffffff] cursor-pointer bg-[#030B184D] hover:bg-[#030B1826]\"\n (click)=\"handlerClosePopup($event)\"></i>\n </div>\n <div class=\"relative w-full h-full\">\n <div class=\"flex flex-col w-full h-full justify-between\">\n <div class=\"libs-ui-gallery-img-popup-container-preview w-full h-full\">\n <div\n class=\"flex flex-col w-full h-full relative\"\n (mouseenter)=\"handlerShowButton(true)\"\n (mouseleave)=\"handlerShowButton(false)\">\n <div\n #containerRef\n class=\"flex w-full h-full relative\">\n <div\n class=\"absolute flex items-center justify-center w-full h-full overflow-hidden\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n (mouseleave)=\"handlerMouseEvent($event, false)\">\n @if (fieldDisplaySrcImage() && imageSelected(); as imageSelected) {\n <img\n #singleImageRef\n [src]=\"imageSelected[fieldDisplaySrcImage()]\"\n class=\"flex m-[auto]\"\n (error)=\"handlerImageError($event, imageSelected)\" />\n }\n <div\n #elementRatioRef\n class=\"libs-ui-gallery-img-popup-container-preview-ratio flex items-center justify-center libs-ui-font-h5m text-[#e6e7ea] w-[80px] h-[34px] rounded-[4px] absolute top-[50%] left-[50%]\">\n {{ ratio() }}\n </div>\n </div>\n </div>\n @if (!imageSelected()?.['error']) {\n <div\n class=\"relative w-full\"\n (mouseenter)=\"handlerMouseEvent($event, true)\"\n [class.hidden]=\"!hoverContentViewImage()\">\n <div class=\"flex w-full justify-center libs-ui-font-h5r absolute z-10 top-[-44px]\">\n <libs_ui-components-popover [config]=\"{ content: 'i18n_zoom_out', direction: 'top', zIndex: zIndex() + 100 }\">\n <i\n class=\"libs-ui-gallery-img-popup-container-preview-button rounded-l-[8px] libs-ui-icon-zoom-out before:text-[16px]\"\n (click)=\"handlerZoom($event, 'out')\"></i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{ content: 'i18n_zoom_in', direction: 'top', zIndex: zIndex() + 100 }\">\n <i\n class=\"libs-ui-gallery-img-popup-container-preview-button libs-ui-icon-zoom-in before:text-[16px]\"\n (click)=\"handlerZoom($event, 'in')\"></i>\n </libs_ui-components-popover>\n <libs_ui-components-popover [config]=\"{ content: fullScreen() ? 'i18n_action_exit_full_screen' : 'i18n_action_view_full_screen', direction: 'top', zIndex: zIndex() + 100 }\">\n <div\n class=\"libs-ui-gallery-img-popup-container-preview-button\"\n (click)=\"handlerFullScreen()\">\n <i class=\"{{ fullScreen() ? 'libs-ui-icon-fullscreen-exit' : 'libs-ui-icon-fullscreen-open' }} text-[#ffffff] text-[16px]\"></i>\n </div>\n </libs_ui-components-popover>\n <div\n class=\"libs-ui-gallery-img-popup-container-preview-button rounded-r-[8px] border-l border-l-1 border-[#5d636b] flex items-center\"\n (click)=\"handlerReset()\">\n <i\n class=\"libs-ui-icon-refresh text-16px mr-[8px]\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\"></i>\n <div\n class=\"libs-ui-font-h5r libs-ui-gallery-text-restore\"\n [class.text-[#ffffff]]=\"!disable()\"\n [class.text-[#6a7383]]=\"disable()\">\n {{ 'i18n_restore' | translate }}\n </div>\n </div>\n </div>\n </div>\n }\n @if (!singleImage()) {\n <div class=\"flex justify-center libs-ui-font-h5r text-[#ffffff] mt-[12px]\">\n @if (fullScreen()) {\n <div class=\"mr-[16px] flex items-center\">\n <div\n class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n }\n <div class=\"flex items-center\">{{ indexSelected() + 1 }}/{{ images().length }}</div>\n\n @if (fullScreen()) {\n <div class=\"ml-[16px] flex items-center\">\n <div\n [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === images().length - 1\"></i>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (!singleImage()) {\n <div\n class=\"libs-ui-gallery-img-popup-container-list px-[32px] mt-[24px] flex\"\n [class.!hidden]=\"fullScreen()\">\n <div class=\"mr-[24px] flex items-center\">\n <div\n class=\"rotate-180\"\n [class.cursor-pointer]=\"indexSelected() !== 0\"\n [class.pointer-events-none]=\"indexSelected() === 0\"\n (click)=\"handlerPreviousImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === 0\"></i>\n </div>\n </div>\n\n <div class=\"flex max-w-[80%] relative overflow-hidden\">\n <div class=\"flex h-full overflow-hidden\">\n @for (image of images(); track index; let index = $index; let last = $last) {\n <div\n #imagesRef\n class=\"libs-ui-gallery-img-popup-container-list-item\"\n [class.mr-[12px]]=\"!last\"\n [style.width.px]=\"imagesRef.offsetHeight\"\n [attr.active]=\"image[fieldDisplaySrcImage()] === imageSelected()?.[fieldDisplaySrcImage()]\">\n <div\n class=\"flex w-full h-full justify-center items-center\"\n (click)=\"handlerSelectImage($event, image, index)\">\n <div class=\"flex items-center justify-center w-full h-full\">\n <img\n [src]=\"image[fieldDisplaySrcImage()]\"\n class=\"flex max-h-full max-w-full m-[auto]\"\n (error)=\"handlerImageError($event, image)\" />\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"ml-[24px] flex items-center\">\n <div\n [class.cursor-pointer]=\"indexSelected() !== images().length - 1\"\n [class.pointer-events-none]=\"indexSelected() === images().length - 1\"\n (click)=\"handlerNextImage($event)\">\n <i\n class=\"text-[24px] cursor-pointer text-[#ffffff] libs-ui-icon-chevron-right\"\n [class.libs-ui-disable]=\"indexSelected() === images().length - 1\"></i>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".libs-ui-gallery-img-popup{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:1000;justify-content:center}.libs-ui-gallery-img-popup-backdrop{background-color:#030b1850;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container{position:relative;width:80%;height:90%;display:flex;flex-direction:column;margin:auto}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview{display:flex;position:relative}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-ratio{background:#071631;opacity:.65}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button{height:32px;background:#071631;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:8px;color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover{background:#5d636b}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-preview .libs-ui-gallery-img-popup-container-preview-button:hover .libs-ui-gallery-text-restore{color:#fff}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list{display:flex;flex-shrink:0;justify-content:center;height:15%}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid #e6e7ea;border-radius:8px;padding:2px;max-width:118px!important;max-height:118px!important}.libs-ui-gallery-img-popup .libs-ui-gallery-img-popup-container .libs-ui-gallery-img-popup-container-list .libs-ui-gallery-img-popup-container-list-item[active=true]{border:1px solid var(--libs-ui-color-default, #226ff5)}\n"] }]
318
319
  }], ctorParameters: () => [] });
319
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdk0sT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQWNoRSxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELG1CQUFtQjtJQUNULGFBQWEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLEdBQUcsTUFBTSxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEMsWUFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLEdBQUcsTUFBTSxD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QUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQXNCLENBQUM7UUFDcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLFlBQVksQ0FBQyxFQUFVO1FBQzdCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO3dHQXJYVSxzQ0FBc0M7NEZBQXRDLHNDQUFzQyx5dERDdEJuRCxvOVFBaUpBLHNxRUQvSEksZUFBZSw0RkFDZixnQ0FBZ0M7OzRGQUd2QixzQ0FBc0M7a0JBWmxELFNBQVM7K0JBRUUsbUNBQW1DLGNBR2pDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxlQUFlO3dCQUNmLGdDQUFnQztxQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCwgdmlld0NoaWxkcmVuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QsIElFdmVudCB9IGZyb20gXCJAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzXCI7XG5pbXBvcnQgeyBJWm9vbURyYWdIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3pvb20uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWdhbGxlcnktdmlld2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXdlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNHYWxsZXJ5Vmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgaW5kZXhTZWxlY3RlZCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgc2NhbGVWYWx1ZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcm90ZWN0ZWQgcmF0aW8gPSBzaWduYWw8c3RyaW5nPignMTAwJScpO1xuICBwcm90ZWN0ZWQgZnVsbFNjcmVlbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc1Nob3dCdXR0b24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZGlzYWJsZSA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcHJvdGVjdGVkIGhvdmVyQ29udGVudFZpZXdJbWFnZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBzdGVwID0gc2lnbmFsPG51bWJlcj4oMC4xKTtcbiAgcHJpdmF0ZSBkcmFnZ2FibGVFbCA9IHNpZ25hbDxJWm9vbURyYWdIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHdpZHRoRGVmYXVsdCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIGhlaWdodERlZmF1bHQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB2aWV3UG9ydCA9IHNpZ25hbDxJQm91bmRpbmdDbGllbnRSZWN0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNhbkRyYWcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHdpZHRoSW1hZ2UgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBpc0ZpcnN0UmVuZGVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB0aW1lb3V0cyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG5cblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGltYWdlcyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+PigpO1xuICByZWFkb25seSBmaWVsZERpc3BsYXlTcmNJbWFnZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaW1hZ2VTZWxlY3RlZCA9IG1vZGVsPFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XG4gIHJlYWRvbmx5IHJlbW92ZUJhY2tkcm9wID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLG51bWJlciB8IHVuZGVmaW5lZD4oMTIwMCx7dHJhbnNmb3JtOnZhbD0+dmFsPz8gMTIwMH0pO1xuICByZWFkb25seSBzaW5nbGVJbWFnZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBWSUVXIENISUxEXG4gIHByb3RlY3RlZCBjb250YWluZXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lclJlZicpO1xuICBwcm90ZWN0ZWQgc2luZ2xlSW1hZ2VSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3NpbmdsZUltYWdlUmVmJyk7XG4gIHByb3RlY3RlZCBlbGVtZW50UmF0aW9SZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2VsZW1lbnRSYXRpb1JlZicpO1xuICBwcm90ZWN0ZWQgZnVsbENvbnRhaW5lclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZnVsbENvbnRhaW5lclJlZicpO1xuICBwcm90ZWN0ZWQgaW1hZ2VzUmVmID0gdmlld0NoaWxkcmVuPEVsZW1lbnRSZWY+KCdpbWFnZXNSZWYnKTtcblxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZilcblxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlcygpLmxlbmd0aCkge1xuICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmltYWdlU2VsZWN0ZWQuc2V0KHRoaXMuaW1hZ2VzKClbMF0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhTZWxlY3RlZCA9IHRoaXMuaW1hZ2VzKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbVt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldID09PSB0aGlzLmltYWdlU2VsZWN0ZWQoKT8uW3RoaXMuZmllbGREaXNwbGF5U3JjSW1hZ2UoKV0pO1xuXG4gICAgICAgIHRoaXMuaW5kZXhTZWxlY3RlZC5zZXQoaW5kZXhTZWxlY3RlZCk7XG4gICAgXG4gICAgICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dChpZCk7XG4gICAgICAgICAgdGhpcy5pbWFnZXNSZWYoKVt0aGlzLmluZGV4U2VsZWN0ZWQoKV0ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5dXAnKS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlckNsb3NlUG9wdXAoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlclByZXZpb3VzSW1hZ2UoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICB0aGlzLmhhbmRsZXJOZXh0SW1hZ2UoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlzRmlyc3RSZW5kZXIuc2V0KHRydWUpO1xuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUodGhpcy5zZXRXaWR0aEltYWdlcy5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIHRoaXMuc2V0V2lkdGhJbWFnZXMoKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG5cbiAgcHJpdmF0ZSBzZXRXaWR0aEltYWdlcygpIHtcbiAgICBjb25zdCBzaW5nbGVJbWFnZVJlZiA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKTtcbiAgICBpZiAoc2luZ2xlSW1hZ2VSZWYpIHtcbiAgICAgIHNpbmdsZUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSAnJztcbiAgICAgIHNpbmdsZUltYWdlUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgfVxuICAgIHRoaXMudmlld1BvcnQuc2V0KHRoaXMuY29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgaW1nLnNyYyA9IHRoaXMuaW1hZ2VTZWxlY3RlZCgpPy5bdGhpcy5maWVsZERpc3BsYXlTcmNJbWFnZSgpXSBhcyBzdHJpbmc7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMud2lkdGhEZWZhdWx0LnNldChpbWcubmF0dXJhbFdpZHRoKTtcbiAgICAgIHRoaXMuaGVpZ2h0RGVmYXVsdC5zZXQoaW1nLm5hdHVyYWxIZWlnaHQpO1xuICAgICAgdGhpcy53aWR0aEltYWdlLnNldCh0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQud2lkdGgpO1xuXG4gICAgICB0aGlzLnNldFN0eWxlU2VsZWN0SW1hZ2UoKTtcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUVycm9yKGU6IEVycm9yRXZlbnQsIGltYWdlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgY29uc3QgZXZlbnQgPSBlIGFzIElFdmVudDtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaW1hZ2VbJ2lzRXJyb3InXSA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNob3dCdXR0b24oaXNTaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1Nob3dCdXR0b24uc2V0KGlzU2hvdyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck1vdXNlRXZlbnQoZXZlbnQ6IEV2ZW50LCBzdGF0dXM6IGJvb2xlYW4pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhvdmVyQ29udGVudFZpZXdJbWFnZS5zZXQoc3RhdHVzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xvc2VQb3B1cChlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclpvb20oZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6ICdpbicgfCAnb3V0Jykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZGlzYWJsZS5zZXQoZmFsc2UpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHJhZ2dhYmxlRWwgPSB0aGlzLm1ha2VFbGVtZW50RHJhZ2dhYmxlKHtcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBpc092ZXJmbG93SGlkZGVuRGVzaXJlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ2dhYmxlRWwuc2V0KGRyYWdnYWJsZUVsKTtcblxuICAgIGlmICh0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCkgLyB0aGlzLndpZHRoSW1hZ2UoKSAqIDEwMCA8IDEpIHtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoMSAvIDEwMCAqIHRoaXMud2lkdGhJbWFnZSgpIC8gdGhpcy53aWR0aERlZmF1bHQoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCkgLyB0aGlzLndpZHRoSW1hZ2UoKSAqIDEwMCA+IDUwMDAgKiAwLjkpIHtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoNTAwMCAqIDAuOSAvIDEwMCAqIHRoaXMud2lkdGhJbWFnZSgpIC8gdGhpcy53aWR0aERlZmF1bHQoKSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnaW4nKSB7XG4gICAgICBjb25zdCBzY2FsZVZhbHVlID0gdGhpcy5zY2FsZVZhbHVlKCkgKiAoMSArIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoc2NhbGVWYWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnb3V0Jykge1xuICAgICAgY29uc3Qgc2NhbGVWYWx1ZSA9IHRoaXMuc2NhbGVWYWx1ZSgpIC8gKDEgKyB0aGlzLnN0ZXAoKSk7XG4gICAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KHNjYWxlVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnNldFdpZHRoSGVpZ2h0KGVsZW1lbnQpO1xuICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBgYWJzb2x1dGVgO1xuICAgIGlmICghdGhpcy5jYW5EcmFnKCkgJiYgdGhpcy5kcmFnZ2FibGVFbCgpICYmIHRoaXMuZHJhZ2dhYmxlRWwoKT8uc3RvcERyYWdnYWJsZUJlaGF2aW9yKSB7XG5cbiAgICAgIHRoaXMuZHJhZ2dhYmxlRWwoKT8uc3RvcERyYWdnYWJsZUJlaGF2aW9yPy4oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck5leHRJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSArIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUHJldmlvdXNJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSAtIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0SW1hZ2UoZTogRXZlbnQsIGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGluZGV4U2VsZWN0ZWQ6IG51bWJlcikge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCFpbWFnZVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQodHJ1ZSk7XG4gICAgY29uc3QgZWxlbWVudFJhdGlvID0gdGhpcy5lbGVtZW50UmF0aW9SZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50UmF0aW8pIHtcbiAgICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLmltYWdlU2VsZWN0ZWQuc2V0KGltYWdlU2VsZWN0ZWQpO1xuICAgIHRoaXMuaW5kZXhTZWxlY3RlZC5zZXQoaW5kZXhTZWxlY3RlZCk7XG4gICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxKTtcbiAgICB0aGlzLmltYWdlc1JlZigpW2luZGV4U2VsZWN0ZWRdLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB0aGlzLnNldFdpZHRoSW1hZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bGxTY3JlZW4oKSB7XG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgdGhpcy5jbGVhclRpbWVvdXQoaWQpO1xuICAgICAgdGhpcy5kaXNhYmxlLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBmdWxsRWxlbWVudCA9IHRoaXMuZnVsbENvbnRhaW5lclJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICB0aGlzLmZ1bGxTY3JlZW4uc2V0KCF0aGlzLmZ1bGxTY3JlZW4oKSk7XG5cbiAgICAgIGlmICghZnVsbEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLndpZHRoID0gJzk1JSc7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLmhlaWdodCA9ICc5NSUnO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS53aWR0aCA9ICc4MCUnO1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnOTAlJztcbiAgICAgIH1cbiAgICAgIHRoaXMudmlld1BvcnQuc2V0KHRoaXMuY29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSh0cnVlKTtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGB1bnNldGA7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGB1bnNldGA7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc2V0KCkge1xuICAgIHRoaXMuZGlzYWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRTdHlsZVNlbGVjdEltYWdlKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRWxlbWVudERyYWdnYWJsZSA9ICh7XG4gICAgZWxlbWVudCxcbiAgICBEUkFHR0FCTEVfQ1NTX0NMQVNTID0gJ2RyYWdnYWJsZS1lbGVtZW50JyxcbiAgfToge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpc092ZXJmbG93SGlkZGVuRGVzaXJlZD86IGJvb2xlYW47XG4gICAgRFJBR0dBQkxFX0NTU19DTEFTUz86IHN0cmluZztcbiAgfSk6IElab29tRHJhZ0hUTUxFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXNUaGVSZXF1aXJlZENTU0FscmVhZHlJblBsYWNlID0gISFBcnJheS5mcm9tKFxuICAgICAgZWxlbWVudC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpXG4gICAgKS5maWx0ZXIoKHN0eWxlRWwpID0+XG4gICAgICBzdHlsZUVsPy50ZXh0Q29udGVudD8uaW5jbHVkZXMoYC4ke0RSQUdHQUJMRV9DU1NfQ0xBU1N9YClcbiAgICApPy5bMF07XG5cbiAgICBpZiAoIWlzVGhlUmVxdWlyZWRDU1NBbHJlYWR5SW5QbGFjZSkge1xuICAgICAgZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksIHtcbiAgICAgICAgICB0ZXh0Q29udGVudDogYFxuICAgICAgICAgIC4ke0RSQUdHQUJMRV9DU1NfQ0xBU1N9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGN1cnNvcjogZ3JhYmJpbmcgIWltcG9ydGFudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhEUkFHR0FCTEVfQ1NTX0NMQVNTKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKERSQUdHQUJMRV9DU1NfQ0xBU1MpO1xuICAgIH1cbiAgICBlbGVtZW50Lm9ubW91c2Vkb3duID0gKG1vdXNlRG93bkV2ZW50KSA9PiB7XG4gICAgICBtb3VzZURvd25FdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxlbWVudC5vbm1vdXNlbW92ZSA9IChtb3VzZU1vdmVFdmVudCkgPT4ge1xuICAgICAgICBtb3VzZU1vdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKHJlY3RFbGVtZW50LmxlZnQgKyByZWN0RWxlbWVudC53aWR0aCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WCA+ICh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSAmJiByZWN0RWxlbWVudC5sZWZ0ICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRYIDwgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQub2Zmc2V0TGVmdCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WH1weGA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3RFbGVtZW50LnRvcCArIHJlY3RFbGVtZW50LmhlaWdodCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WSA+ICh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSAmJiByZWN0RWxlbWVudC50b3AgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFkgPCAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke2VsZW1lbnQub2Zmc2V0VG9wICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRZfXB4YDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudC5vbm1vdXNldXAgPSAobW91c2VVcEV2ZW50KSA9PiB7XG4gICAgICBtb3VzZVVwRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbGVtZW50LCB7XG4gICAgICBzdG9wRHJhZ2dhYmxlQmVoYXZpb3IoKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShEUkFHR0FCTEVfQ1NTX0NMQVNTKTtcbiAgICAgICAgZWxlbWVudC5vbm1vdXNlZG93biA9IG51bGw7XG4gICAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgICBlbGVtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9ICd1bnNldCc7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gJ3Vuc2V0JztcblxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZVNlbGVjdEltYWdlKHJlc2V0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVWYWx1ZSA9ICgoKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKSA8ICgodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkgLSAodGhpcy5zaW5nbGVJbWFnZSgpID8gMCA6IDQwKSkgLyB0aGlzLmhlaWdodERlZmF1bHQoKSkgPyAoKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKSA6ICgodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkgLSAodGhpcy5zaW5nbGVJbWFnZSgpID8gMCA6IDQwKSkgLyB0aGlzLmhlaWdodERlZmF1bHQoKTtcblxuICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoc2NhbGVWYWx1ZSk7XG5cbiAgICBpZiAodGhpcy5zY2FsZVZhbHVlKCkgPiAxICYmIChyZXNldCB8fCB0aGlzLmlzRmlyc3RSZW5kZXIoKSkgJiYgIXRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KDEpO1xuICAgIH1cbiAgICB0aGlzLnNldFdpZHRoSGVpZ2h0KGVsZW1lbnQpO1xuICAgIGlmICh0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IGB1bnNldGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFdpZHRoSGVpZ2h0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2NhbGVWYWx1ZSgpICogdGhpcy53aWR0aERlZmF1bHQoKX1weGA7XG4gICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMuaGVpZ2h0RGVmYXVsdCgpfXB4YDtcbiAgICB0aGlzLmNhbkRyYWcuc2V0KGZhbHNlKTtcbiAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAoKHJlY3RFbGVtZW50LndpZHRoID4gKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkpIHx8IChyZWN0RWxlbWVudC5oZWlnaHQgPiAodGhpcy52aWV3UG9ydCgpPy5oZWlnaHQgfHwgMCkpKSB7XG4gICAgICB0aGlzLmNhbkRyYWcuc2V0KHRydWUpO1xuICAgIH1cbiAgICBpZiAocmVjdEVsZW1lbnQubGVmdCArIHJlY3RFbGVtZW50LndpZHRoIDwgKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgKyAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApIHx8IHJlY3RFbGVtZW50LmxlZnQgPiAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgdW5zZXRgO1xuICAgIH1cbiAgICBpZiAocmVjdEVsZW1lbnQudG9wICsgcmVjdEVsZW1lbnQuaGVpZ2h0IDwgKHRoaXMudmlld1BvcnQoKT8udG9wIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIHx8IHJlY3RFbGVtZW50LnRvcCA+ICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgdW5zZXRgO1xuICAgIH1cblxuICAgIHRoaXMuc2V0RGlzcGxheVJhdGlvKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXlSYXRpbygpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5yYXRpby5zZXQoYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKGVsZW1lbnQud2lkdGggLyB0aGlzLndpZHRoRGVmYXVsdCgpICogMTAwLCBmYWxzZSwgMCl9JWApO1xuICAgIGNvbnN0IGVsZW1lbnRSYXRpbyA9IHRoaXMuZWxlbWVudFJhdGlvUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBlbGVtZW50UmF0aW8uc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICB0aGlzLmNyZWF0ZVRpbWVvdXQoKGlkKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyVGltZW91dChpZCk7XG4gICAgICBlbGVtZW50UmF0aW8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGltZW91dChjYWxsYmFjazogKGlkOiBudW1iZXIpID0+IHZvaWQsIGRlbGF5OiBudW1iZXIpIHtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKHRpbWVvdXRJZCksIGRlbGF5KSBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICB0aGlzLnRpbWVvdXRzLnVwZGF0ZShpZHMgPT4gWy4uLmlkcywgdGltZW91dElkXSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyVGltZW91dChpZDogbnVtYmVyKSB7XG4gICAgY2xlYXJUaW1lb3V0KGlkKTtcblxuICAgIHRoaXMudGltZW91dHMudXBkYXRlKGlkcyA9PiBpZHMuZmlsdGVyKGlkU3RvcmUgPT4gaWRTdG9yZSAhPT0gaWQpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudGltZW91dHMoKS5mb3JFYWNoKGl0ZW0gPT4gY2xlYXJUaW1lb3V0KGl0ZW0pKTtcbiAgfVxufSIsIkBpZiAoaW1hZ2VzKCkgfHwgc2luZ2xlSW1hZ2UoKSkge1xuICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cCBsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWJhY2tkcm9wXCJcbiAgICBbY2xhc3MuIWJnLVt0cmFuc3BhcmVudF1dPVwicmVtb3ZlQmFja2Ryb3AoKVwiXG4gICAgW3N0eWxlLnpJbmRleF09XCJ6SW5kZXgoKVwiPlxuICAgIDxkaXYgI2Z1bGxDb250YWluZXJSZWZcbiAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXIge3sgY2xhc3NDb250YWluZXJJbmNsdWRlKCkgfHwgJycgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtYi1bMTZweF0gei0xMFwiPlxuICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jbG9zZSB0ZXh0LVsyNHB4XSBwLVs0cHhdIHJvdW5kZWQtWzRweF0gdGV4dC1bI2ZmZmZmZl0gY3Vyc29yLXBvaW50ZXIgYmctWyMwMzBCMTg0RF0gaG92ZXI6YmctWyMwMzBCMTgyNl1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xvc2VQb3B1cCgkZXZlbnQpXCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3IHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGwgcmVsYXRpdmVcIlxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVyU2hvd0J1dHRvbih0cnVlKVwiXG4gICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhhbmRsZXJTaG93QnV0dG9uKGZhbHNlKVwiPlxuICAgICAgICAgICAgICA8ZGl2ICNjb250YWluZXJSZWZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIGgtZnVsbCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVyTW91c2VFdmVudCgkZXZlbnQsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhhbmRsZXJNb3VzZUV2ZW50KCRldmVudCxmYWxzZSlcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGREaXNwbGF5U3JjSW1hZ2UoKSAmJiBpbWFnZVNlbGVjdGVkKCk7IGFzIGltYWdlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGltZyAjc2luZ2xlSW1hZ2VSZWZcbiAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlU2VsZWN0ZWRbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtLVthdXRvXVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWFnZUVycm9yKCRldmVudCwgaW1hZ2VTZWxlY3RlZClcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGRpdiAjZWxlbWVudFJhdGlvUmVmXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1yYXRpbyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBsaWJzLXVpLWZvbnQtaDVtIHRleHQtWyNlNmU3ZWFdIHctWzgwcHhdIGgtWzM0cHhdIHJvdW5kZWQtWzRweF0gYWJzb2x1dGUgdG9wLVs1MCVdIGxlZnQtWzUwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcmF0aW8oKSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKCFpbWFnZVNlbGVjdGVkKCk/LlsnZXJyb3InXSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFob3ZlckNvbnRlbnRWaWV3SW1hZ2UoKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNXIgYWJzb2x1dGUgei0xMCB0b3AtWy00NHB4XVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDogJ2kxOG5fem9vbV9vdXQnLCBkaXJlY3Rpb246ICd0b3AnLCB6SW5kZXg6ekluZGV4KCkrMTAwfVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gcm91bmRlZC1sLVs4cHhdIGxpYnMtdWktaWNvbi16b29tLW91dCBiZWZvcmU6dGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwnb3V0JylcIj4gPC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7Y29udGVudDogJ2kxOG5fem9vbV9pbicsIGRpcmVjdGlvbjogJ3RvcCcsIHpJbmRleDp6SW5kZXgoKSsxMDB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvbiBsaWJzLXVpLWljb24tem9vbS1pbiBiZWZvcmU6dGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwnaW4nKVwiPiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cIntjb250ZW50OiBmdWxsU2NyZWVuKCkgPyAnaTE4bl9hY3Rpb25fZXhpdF9mdWxsX3NjcmVlbicgOiAnaTE4bl9hY3Rpb25fdmlld19mdWxsX3NjcmVlbicsIGRpcmVjdGlvbjogJ3RvcCcsIHpJbmRleDp6SW5kZXgoKSsxMDB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyRnVsbFNjcmVlbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7IGZ1bGxTY3JlZW4oKSA/ICdsaWJzLXVpLWljb24tZnVsbHNjcmVlbi1leGl0JyA6ICdsaWJzLXVpLWljb24tZnVsbHNjcmVlbi1vcGVuJyB9fSB0ZXh0LVsjZmZmZmZmXSB0ZXh0LVsxNnB4XVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctYnV0dG9uIHJvdW5kZWQtci1bOHB4XSBib3JkZXItbCBib3JkZXItbC0xIGJvcmRlci1bIzVkNjM2Yl0gZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUmVzZXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLXJlZnJlc2ggdGV4dC0xNnB4IG1yLVs4cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjZmZmZmZmXV09XCIhZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCJkaXNhYmxlKClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNXIgbGlicy11aS1nYWxsZXJ5LXRleHQtcmVzdG9yZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bI2ZmZmZmZl1dPVwiIWRpc2FibGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiZGlzYWJsZSgpXCI+e3sgJ2kxOG5fcmVzdG9yZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKCFzaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg1ciB0ZXh0LVsjZmZmZmZmXSBtdC1bMTJweF1cIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZnVsbFNjcmVlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1bMTZweF0gZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm90YXRlLTE4MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiaW5kZXhTZWxlY3RlZCgpICE9PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclByZXZpb3VzSW1hZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LVsyNHB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpbmRleFNlbGVjdGVkKCkrMSB9fS97eyBpbWFnZXMoKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICBAaWYgKGZ1bGxTY3JlZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzE2cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiaW5kZXhTZWxlY3RlZCgpICE9PSBpbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gaW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlck5leHRJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09aW1hZ2VzKCkubGVuZ3RoIC0gMVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKCFzaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItbGlzdCBweC1bMzJweF0gbXQtWzI0cHhdIGZsZXhcIlxuICAgICAgICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCJmdWxsU2NyZWVuKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVsyNHB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3RhdGUtMTgwXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJpbmRleFNlbGVjdGVkKCkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUHJldmlvdXNJbWFnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzI0cHhdIGN1cnNvci1wb2ludGVyIHRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1heC13LVs4MCVdIHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGltYWdlIG9mIGltYWdlcygpOyB0cmFjayBpbmRleDsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI2ltYWdlc1JlZlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubXItWzEycHhdXT1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiaW1hZ2VzUmVmLm9mZnNldEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYWN0aXZlXT1cImltYWdlW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldID09PSBpbWFnZVNlbGVjdGVkKCk/LltmaWVsZERpc3BsYXlTcmNJbWFnZSgpXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyU2VsZWN0SW1hZ2UoJGV2ZW50LGltYWdlLGluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggbWF4LWgtZnVsbCBtYXgtdy1mdWxsIG0tW2F1dG9dXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50LCBpbWFnZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLVsyNHB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT1pbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImluZGV4U2VsZWN0ZWQoKSA9PT1pbWFnZXMoKS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyTmV4dEltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT1pbWFnZXMoKS5sZW5ndGggLSAxXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIH1cbiJdfQ==
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9nYWxsZXJ5L3NyYy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdk0sT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQVdoRSxNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELG1CQUFtQjtJQUNULGFBQWEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsVUFBVSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvQixLQUFLLEdBQUcsTUFBTSxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEMsWUFBWSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN0QyxPQUFPLEdBQUcsTUFBTSxD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QyxDQUFDO0lBQ1gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUE4QixFQUFFLEtBQWE7UUFDakUsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQXNCLENBQUM7UUFDcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sWUFBWSxDQUFDLEVBQVU7UUFDN0IsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7d0dBNVdVLHNDQUFzQzs0RkFBdEMsc0NBQXNDLHl0RENuQm5ELHlnU0EyS0Esc3FFRDFKWSxlQUFlLDRGQUFFLGdDQUFnQzs7NEZBRWhELHNDQUFzQztrQkFUbEQsU0FBUzsrQkFFRSxtQ0FBbUMsY0FHakMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZUFBZSxFQUFFLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUJvdW5kaW5nQ2xpZW50UmVjdCwgSUV2ZW50IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBJWm9vbURyYWdIVE1MRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvem9vbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWdhbGxlcnktdmlld2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZpZXdlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGluZGV4U2VsZWN0ZWQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIHNjYWxlVmFsdWUgPSBzaWduYWw8bnVtYmVyPigxKTtcbiAgcHJvdGVjdGVkIHJhdGlvID0gc2lnbmFsPHN0cmluZz4oJzEwMCUnKTtcbiAgcHJvdGVjdGVkIGZ1bGxTY3JlZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNTaG93QnV0dG9uID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGRpc2FibGUgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCBob3ZlckNvbnRlbnRWaWV3SW1hZ2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgc3RlcCA9IHNpZ25hbDxudW1iZXI+KDAuMSk7XG4gIHByaXZhdGUgZHJhZ2dhYmxlRWwgPSBzaWduYWw8SVpvb21EcmFnSFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSB3aWR0aERlZmF1bHQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBoZWlnaHREZWZhdWx0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgdmlld1BvcnQgPSBzaWduYWw8SUJvdW5kaW5nQ2xpZW50UmVjdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjYW5EcmFnID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB3aWR0aEltYWdlID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgaXNGaXJzdFJlbmRlciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgdGltZW91dHMgPSBzaWduYWw8QXJyYXk8bnVtYmVyPj4oW10pO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgaW1hZ2VzID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+KCk7XG4gIHJlYWRvbmx5IGZpZWxkRGlzcGxheVNyY0ltYWdlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBpbWFnZVNlbGVjdGVkID0gbW9kZWw8UmVjb3JkPHN0cmluZywgYW55Pj4oKTtcbiAgcmVhZG9ubHkgcmVtb3ZlQmFja2Ryb3AgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMjAwIH0pO1xuICByZWFkb25seSBzaW5nbGVJbWFnZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBWSUVXIENISUxEXG4gIHByb3RlY3RlZCBjb250YWluZXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lclJlZicpO1xuICBwcm90ZWN0ZWQgc2luZ2xlSW1hZ2VSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3NpbmdsZUltYWdlUmVmJyk7XG4gIHByb3RlY3RlZCBlbGVtZW50UmF0aW9SZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2VsZW1lbnRSYXRpb1JlZicpO1xuICBwcm90ZWN0ZWQgZnVsbENvbnRhaW5lclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZnVsbENvbnRhaW5lclJlZicpO1xuICBwcm90ZWN0ZWQgaW1hZ2VzUmVmID0gdmlld0NoaWxkcmVuPEVsZW1lbnRSZWY+KCdpbWFnZXNSZWYnKTtcblxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNpbmdsZUltYWdlKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VTZWxlY3RlZC5zZXQodGhpcy5pbWFnZXMoKVswXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleFNlbGVjdGVkID0gdGhpcy5pbWFnZXMoKS5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW1bdGhpcy5maWVsZERpc3BsYXlTcmNJbWFnZSgpXSA9PT0gdGhpcy5pbWFnZVNlbGVjdGVkKCk/Llt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldKTtcblxuICAgICAgICB0aGlzLmluZGV4U2VsZWN0ZWQuc2V0KGluZGV4U2VsZWN0ZWQpO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dChpZCk7XG4gICAgICAgICAgdGhpcy5pbWFnZXNSZWYoKVt0aGlzLmluZGV4U2VsZWN0ZWQoKV0ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5dXAnKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbG9zZVBvcHVwKGV2ZW50KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlclByZXZpb3VzSW1hZ2UoZXZlbnQpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlck5leHRJbWFnZShldmVudCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQodHJ1ZSk7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSh0aGlzLnNldFdpZHRoSW1hZ2VzLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgdGhpcy5jbGVhclRpbWVvdXQoaWQpO1xuICAgICAgdGhpcy5zZXRXaWR0aEltYWdlcygpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cblxuICBwcml2YXRlIHNldFdpZHRoSW1hZ2VzKCkge1xuICAgIGNvbnN0IHNpbmdsZUltYWdlUmVmID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpO1xuICAgIGlmIChzaW5nbGVJbWFnZVJlZikge1xuICAgICAgc2luZ2xlSW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgc2luZ2xlSW1hZ2VSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB9XG4gICAgdGhpcy52aWV3UG9ydC5zZXQodGhpcy5jb250YWluZXJSZWYoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICBpbWcuc3JjID0gdGhpcy5pbWFnZVNlbGVjdGVkKCk/Llt0aGlzLmZpZWxkRGlzcGxheVNyY0ltYWdlKCldIGFzIHN0cmluZztcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy53aWR0aERlZmF1bHQuc2V0KGltZy5uYXR1cmFsV2lkdGgpO1xuICAgICAgdGhpcy5oZWlnaHREZWZhdWx0LnNldChpbWcubmF0dXJhbEhlaWdodCk7XG4gICAgICB0aGlzLndpZHRoSW1hZ2Uuc2V0KHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudC53aWR0aCk7XG5cbiAgICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSgpO1xuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckltYWdlRXJyb3IoZTogRXJyb3JFdmVudCwgaW1hZ2U6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBjb25zdCBldmVudCA9IGUgYXMgSUV2ZW50O1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpbWFnZVsnaXNFcnJvciddID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2hvd0J1dHRvbihpc1Nob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzU2hvd0J1dHRvbi5zZXQoaXNTaG93KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTW91c2VFdmVudChldmVudDogRXZlbnQsIHN0YXR1czogYm9vbGVhbikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaG92ZXJDb250ZW50Vmlld0ltYWdlLnNldChzdGF0dXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbG9zZVBvcHVwKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm91dENsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyWm9vbShldmVudDogTW91c2VFdmVudCwgdHlwZTogJ2luJyB8ICdvdXQnKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0ZpcnN0UmVuZGVyLnNldChmYWxzZSk7XG4gICAgdGhpcy5kaXNhYmxlLnNldChmYWxzZSk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2luZ2xlSW1hZ2VSZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkcmFnZ2FibGVFbCA9IHRoaXMubWFrZUVsZW1lbnREcmFnZ2FibGUoe1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGlzT3ZlcmZsb3dIaWRkZW5EZXNpcmVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kcmFnZ2FibGVFbC5zZXQoZHJhZ2dhYmxlRWwpO1xuXG4gICAgaWYgKCgodGhpcy5zY2FsZVZhbHVlKCkgKiB0aGlzLndpZHRoRGVmYXVsdCgpKSAvIHRoaXMud2lkdGhJbWFnZSgpKSAqIDEwMCA8IDEpIHtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoKCgxIC8gMTAwKSAqIHRoaXMud2lkdGhJbWFnZSgpKSAvIHRoaXMud2lkdGhEZWZhdWx0KCkpO1xuICAgIH1cbiAgICBpZiAoKCh0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCkpIC8gdGhpcy53aWR0aEltYWdlKCkpICogMTAwID4gNTAwMCAqIDAuOSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCgoKCg1MDAwICogMC45KSAvIDEwMCkgKiB0aGlzLndpZHRoSW1hZ2UoKSkgLyB0aGlzLndpZHRoRGVmYXVsdCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdpbicpIHtcbiAgICAgIGNvbnN0IHNjYWxlVmFsdWUgPSB0aGlzLnNjYWxlVmFsdWUoKSAqICgxICsgdGhpcy5zdGVwKCkpO1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldChzY2FsZVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdvdXQnKSB7XG4gICAgICBjb25zdCBzY2FsZVZhbHVlID0gdGhpcy5zY2FsZVZhbHVlKCkgLyAoMSArIHRoaXMuc3RlcCgpKTtcbiAgICAgIHRoaXMuc2NhbGVWYWx1ZS5zZXQoc2NhbGVWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0V2lkdGhIZWlnaHQoZWxlbWVudCk7XG4gICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IGBhYnNvbHV0ZWA7XG4gICAgaWYgKCF0aGlzLmNhbkRyYWcoKSAmJiB0aGlzLmRyYWdnYWJsZUVsKCkgJiYgdGhpcy5kcmFnZ2FibGVFbCgpPy5zdG9wRHJhZ2dhYmxlQmVoYXZpb3IpIHtcbiAgICAgIHRoaXMuZHJhZ2dhYmxlRWwoKT8uc3RvcERyYWdnYWJsZUJlaGF2aW9yPy4oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlck5leHRJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSArIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUHJldmlvdXNJbWFnZShlOiBFdmVudCkge1xuICAgIGNvbnN0IGluZGV4U2VsZWN0ZWQgPSB0aGlzLmluZGV4U2VsZWN0ZWQoKSAtIDE7XG5cbiAgICB0aGlzLmhhbmRsZXJTZWxlY3RJbWFnZShlLCB0aGlzLmltYWdlcygpW2luZGV4U2VsZWN0ZWRdLCBpbmRleFNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0SW1hZ2UoZTogRXZlbnQsIGltYWdlU2VsZWN0ZWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGluZGV4U2VsZWN0ZWQ6IG51bWJlcikge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCFpbWFnZVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNGaXJzdFJlbmRlci5zZXQodHJ1ZSk7XG4gICAgY29uc3QgZWxlbWVudFJhdGlvID0gdGhpcy5lbGVtZW50UmF0aW9SZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50UmF0aW8pIHtcbiAgICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLmltYWdlU2VsZWN0ZWQuc2V0KGltYWdlU2VsZWN0ZWQpO1xuICAgIHRoaXMuaW5kZXhTZWxlY3RlZC5zZXQoaW5kZXhTZWxlY3RlZCk7XG4gICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxKTtcbiAgICB0aGlzLmltYWdlc1JlZigpW2luZGV4U2VsZWN0ZWRdLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB0aGlzLnNldFdpZHRoSW1hZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bGxTY3JlZW4oKSB7XG4gICAgdGhpcy5jcmVhdGVUaW1lb3V0KChpZCkgPT4ge1xuICAgICAgdGhpcy5jbGVhclRpbWVvdXQoaWQpO1xuICAgICAgdGhpcy5kaXNhYmxlLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBmdWxsRWxlbWVudCA9IHRoaXMuZnVsbENvbnRhaW5lclJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICB0aGlzLmZ1bGxTY3JlZW4uc2V0KCF0aGlzLmZ1bGxTY3JlZW4oKSk7XG5cbiAgICAgIGlmICghZnVsbEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnVsbFNjcmVlbigpKSB7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLndpZHRoID0gJzk1JSc7XG4gICAgICAgIGZ1bGxFbGVtZW50LnN0eWxlLmhlaWdodCA9ICc5NSUnO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS53aWR0aCA9ICc4MCUnO1xuICAgICAgICBmdWxsRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnOTAlJztcbiAgICAgIH1cbiAgICAgIHRoaXMudmlld1BvcnQuc2V0KHRoaXMuY29udGFpbmVyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3R5bGVTZWxlY3RJbWFnZSh0cnVlKTtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGB1bnNldGA7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGB1bnNldGA7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc2V0KCkge1xuICAgIHRoaXMuZGlzYWJsZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRTdHlsZVNlbGVjdEltYWdlKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRWxlbWVudERyYWdnYWJsZSA9ICh7IGVsZW1lbnQsIERSQUdHQUJMRV9DU1NfQ0xBU1MgPSAnZHJhZ2dhYmxlLWVsZW1lbnQnIH06IHsgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsOyBpc092ZXJmbG93SGlkZGVuRGVzaXJlZD86IGJvb2xlYW47IERSQUdHQUJMRV9DU1NfQ0xBU1M/OiBzdHJpbmcgfSk6IElab29tRHJhZ0hUTUxFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaXNUaGVSZXF1aXJlZENTU0FscmVhZHlJblBsYWNlID0gISFBcnJheS5mcm9tKGVsZW1lbnQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3R5bGUnKSkuZmlsdGVyKChzdHlsZUVsKSA9PiBzdHlsZUVsPy50ZXh0Q29udGVudD8uaW5jbHVkZXMoYC4ke0RSQUdHQUJMRV9DU1NfQ0xBU1N9YCkpPy5bMF07XG5cbiAgICBpZiAoIWlzVGhlUmVxdWlyZWRDU1NBbHJlYWR5SW5QbGFjZSkge1xuICAgICAgZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyksIHtcbiAgICAgICAgICB0ZXh0Q29udGVudDogYFxuICAgICAgICAgIC4ke0RSQUdHQUJMRV9DU1NfQ0xBU1N9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGN1cnNvcjogZ3JhYmJpbmcgIWltcG9ydGFudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhEUkFHR0FCTEVfQ1NTX0NMQVNTKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKERSQUdHQUJMRV9DU1NfQ0xBU1MpO1xuICAgIH1cbiAgICBlbGVtZW50Lm9ubW91c2Vkb3duID0gKG1vdXNlRG93bkV2ZW50KSA9PiB7XG4gICAgICBtb3VzZURvd25FdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxlbWVudC5vbm1vdXNlbW92ZSA9IChtb3VzZU1vdmVFdmVudCkgPT4ge1xuICAgICAgICBtb3VzZU1vdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCByZWN0RWxlbWVudCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKHJlY3RFbGVtZW50LmxlZnQgKyByZWN0RWxlbWVudC53aWR0aCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WCA+ICh0aGlzLnZpZXdQb3J0KCk/LndpZHRoIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSAmJiByZWN0RWxlbWVudC5sZWZ0ICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRYIDwgKHRoaXMudmlld1BvcnQoKT8ubGVmdCB8fCAwKSkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2VsZW1lbnQub2Zmc2V0TGVmdCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WH1weGA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3RFbGVtZW50LnRvcCArIHJlY3RFbGVtZW50LmhlaWdodCArIG1vdXNlTW92ZUV2ZW50Lm1vdmVtZW50WSA+ICh0aGlzLnZpZXdQb3J0KCk/LmhlaWdodCB8fCAwKSArICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSAmJiByZWN0RWxlbWVudC50b3AgKyBtb3VzZU1vdmVFdmVudC5tb3ZlbWVudFkgPCAodGhpcy52aWV3UG9ydCgpPy50b3AgfHwgMCkpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke2VsZW1lbnQub2Zmc2V0VG9wICsgbW91c2VNb3ZlRXZlbnQubW92ZW1lbnRZfXB4YDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudC5vbm1vdXNldXAgPSAobW91c2VVcEV2ZW50KSA9PiB7XG4gICAgICBtb3VzZVVwRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbGVtZW50LCB7XG4gICAgICBzdG9wRHJhZ2dhYmxlQmVoYXZpb3IoKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShEUkFHR0FCTEVfQ1NTX0NMQVNTKTtcbiAgICAgICAgZWxlbWVudC5vbm1vdXNlZG93biA9IG51bGw7XG4gICAgICAgIGVsZW1lbnQub25tb3VzZW1vdmUgPSBudWxsO1xuICAgICAgICBlbGVtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9ICd1bnNldCc7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gJ3Vuc2V0JztcblxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzZXRTdHlsZVNlbGVjdEltYWdlKHJlc2V0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnNpbmdsZUltYWdlUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVWYWx1ZSA9XG4gICAgICAodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSAvIHRoaXMud2lkdGhEZWZhdWx0KCkgPCAoKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIC0gKHRoaXMuc2luZ2xlSW1hZ2UoKSA/IDAgOiA0MCkpIC8gdGhpcy5oZWlnaHREZWZhdWx0KClcbiAgICAgICAgPyAodGhpcy52aWV3UG9ydCgpPy53aWR0aCB8fCAwKSAvIHRoaXMud2lkdGhEZWZhdWx0KClcbiAgICAgICAgOiAoKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIC0gKHRoaXMuc2luZ2xlSW1hZ2UoKSA/IDAgOiA0MCkpIC8gdGhpcy5oZWlnaHREZWZhdWx0KCk7XG5cbiAgICB0aGlzLnNjYWxlVmFsdWUuc2V0KHNjYWxlVmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuc2NhbGVWYWx1ZSgpID4gMSAmJiAocmVzZXQgfHwgdGhpcy5pc0ZpcnN0UmVuZGVyKCkpICYmICF0aGlzLmZ1bGxTY3JlZW4oKSkge1xuICAgICAgdGhpcy5zY2FsZVZhbHVlLnNldCgxKTtcbiAgICB9XG4gICAgdGhpcy5zZXRXaWR0aEhlaWdodChlbGVtZW50KTtcbiAgICBpZiAodGhpcy5mdWxsU2NyZWVuKCkpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBgdW5zZXRgO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRXaWR0aEhlaWdodChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt0aGlzLnNjYWxlVmFsdWUoKSAqIHRoaXMud2lkdGhEZWZhdWx0KCl9cHhgO1xuICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5zY2FsZVZhbHVlKCkgKiB0aGlzLmhlaWdodERlZmF1bHQoKX1weGA7XG4gICAgdGhpcy5jYW5EcmFnLnNldChmYWxzZSk7XG4gICAgY29uc3QgcmVjdEVsZW1lbnQgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgaWYgKHJlY3RFbGVtZW50LndpZHRoID4gKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgfHwgcmVjdEVsZW1lbnQuaGVpZ2h0ID4gKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApKSB7XG4gICAgICB0aGlzLmNhbkRyYWcuc2V0KHRydWUpO1xuICAgIH1cbiAgICBpZiAocmVjdEVsZW1lbnQubGVmdCArIHJlY3RFbGVtZW50LndpZHRoIDwgKHRoaXMudmlld1BvcnQoKT8ud2lkdGggfHwgMCkgKyAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApIHx8IHJlY3RFbGVtZW50LmxlZnQgPiAodGhpcy52aWV3UG9ydCgpPy5sZWZ0IHx8IDApKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgdW5zZXRgO1xuICAgIH1cbiAgICBpZiAocmVjdEVsZW1lbnQudG9wICsgcmVjdEVsZW1lbnQuaGVpZ2h0IDwgKHRoaXMudmlld1BvcnQoKT8udG9wIHx8IDApICsgKHRoaXMudmlld1BvcnQoKT8uaGVpZ2h0IHx8IDApIHx8IHJlY3RFbGVtZW50LnRvcCA+ICh0aGlzLnZpZXdQb3J0KCk/LnRvcCB8fCAwKSkge1xuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgdW5zZXRgO1xuICAgIH1cblxuICAgIHRoaXMuc2V0RGlzcGxheVJhdGlvKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXlSYXRpbygpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zaW5nbGVJbWFnZVJlZigpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy5yYXRpby5zZXQoYCR7dmlld0RhdGFOdW1iZXJCeUxhbmd1YWdlKChlbGVtZW50LndpZHRoIC8gdGhpcy53aWR0aERlZmF1bHQoKSkgKiAxMDAsIGZhbHNlLCAwKX0lYCk7XG4gICAgY29uc3QgZWxlbWVudFJhdGlvID0gdGhpcy5lbGVtZW50UmF0aW9SZWYoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIHRoaXMuY3JlYXRlVGltZW91dCgoaWQpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIGVsZW1lbnRSYXRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUaW1lb3V0KGNhbGxiYWNrOiAoaWQ6IG51bWJlcikgPT4gdm9pZCwgZGVsYXk6IG51bWJlcikge1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2sodGltZW91dElkKSwgZGVsYXkpIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgIHRoaXMudGltZW91dHMudXBkYXRlKChpZHMpID0+IFsuLi5pZHMsIHRpbWVvdXRJZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclRpbWVvdXQoaWQ6IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dChpZCk7XG5cbiAgICB0aGlzLnRpbWVvdXRzLnVwZGF0ZSgoaWRzKSA9PiBpZHMuZmlsdGVyKChpZFN0b3JlKSA9PiBpZFN0b3JlICE9PSBpZCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50aW1lb3V0cygpLmZvckVhY2goKGl0ZW0pID0+IGNsZWFyVGltZW91dChpdGVtKSk7XG4gIH1cbn1cbiIsIkBpZiAoaW1hZ2VzKCkgfHwgc2luZ2xlSW1hZ2UoKSkge1xuICA8ZGl2XG4gICAgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwIGxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtYmFja2Ryb3BcIlxuICAgIFtjbGFzcy4hYmctW3RyYW5zcGFyZW50XV09XCJyZW1vdmVCYWNrZHJvcCgpXCJcbiAgICBbc3R5bGUuekluZGV4XT1cInpJbmRleCgpXCI+XG4gICAgPGRpdlxuICAgICAgI2Z1bGxDb250YWluZXJSZWZcbiAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXIge3sgY2xhc3NDb250YWluZXJJbmNsdWRlKCkgfHwgJycgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtYi1bMTZweF0gei0xMFwiPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWNsb3NlIHRleHQtWzI0cHhdIHAtWzRweF0gcm91bmRlZC1bNHB4XSB0ZXh0LVsjZmZmZmZmXSBjdXJzb3ItcG9pbnRlciBiZy1bIzAzMEIxODREXSBob3ZlcjpiZy1bIzAzMEIxODI2XVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbG9zZVBvcHVwKCRldmVudClcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGwganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXcgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbCByZWxhdGl2ZVwiXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZXJTaG93QnV0dG9uKHRydWUpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlclNob3dCdXR0b24oZmFsc2UpXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAjY29udGFpbmVyUmVmXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBoLWZ1bGwgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZXJNb3VzZUV2ZW50KCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LCBmYWxzZSlcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZmllbGREaXNwbGF5U3JjSW1hZ2UoKSAmJiBpbWFnZVNlbGVjdGVkKCk7IGFzIGltYWdlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICNzaW5nbGVJbWFnZVJlZlxuICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VTZWxlY3RlZFtmaWVsZERpc3BsYXlTcmNJbWFnZSgpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IG0tW2F1dG9dXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlckltYWdlRXJyb3IoJGV2ZW50LCBpbWFnZVNlbGVjdGVkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICNlbGVtZW50UmF0aW9SZWZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LXJhdGlvIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNW0gdGV4dC1bI2U2ZTdlYV0gdy1bODBweF0gaC1bMzRweF0gcm91bmRlZC1bNHB4XSBhYnNvbHV0ZSB0b3AtWzUwJV0gbGVmdC1bNTAlXVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyByYXRpbygpIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoIWltYWdlU2VsZWN0ZWQoKT8uWydlcnJvciddKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaGFuZGxlck1vdXNlRXZlbnQoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIiFob3ZlckNvbnRlbnRWaWV3SW1hZ2UoKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIGxpYnMtdWktZm9udC1oNXIgYWJzb2x1dGUgei0xMCB0b3AtWy00NHB4XVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7IGNvbnRlbnQ6ICdpMThuX3pvb21fb3V0JywgZGlyZWN0aW9uOiAndG9wJywgekluZGV4OiB6SW5kZXgoKSArIDEwMCB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gcm91bmRlZC1sLVs4cHhdIGxpYnMtdWktaWNvbi16b29tLW91dCBiZWZvcmU6dGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwgJ291dCcpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NvbmZpZ109XCJ7IGNvbnRlbnQ6ICdpMThuX3pvb21faW4nLCBkaXJlY3Rpb246ICd0b3AnLCB6SW5kZXg6IHpJbmRleCgpICsgMTAwIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWdhbGxlcnktaW1nLXBvcHVwLWNvbnRhaW5lci1wcmV2aWV3LWJ1dHRvbiBsaWJzLXVpLWljb24tem9vbS1pbiBiZWZvcmU6dGV4dC1bMTZweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJab29tKCRldmVudCwgJ2luJylcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY29uZmlnXT1cInsgY29udGVudDogZnVsbFNjcmVlbigpID8gJ2kxOG5fYWN0aW9uX2V4aXRfZnVsbF9zY3JlZW4nIDogJ2kxOG5fYWN0aW9uX3ZpZXdfZnVsbF9zY3JlZW4nLCBkaXJlY3Rpb246ICd0b3AnLCB6SW5kZXg6IHpJbmRleCgpICsgMTAwIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZ2FsbGVyeS1pbWctcG9wdXAtY29udGFpbmVyLXByZXZpZXctYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyRnVsbFNjcmVlbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7IGZ1bGxTY3JlZW4oKSA/ICdsaWJzLXVpLWljb24tZnVsbHNjcmVlbi1leGl0JyA6ICdsaWJzLXVpLWljb24tZnVsbHNjcmVlbi1vcGVuJyB9fSB0ZXh0LVsjZmZmZmZmXSB0ZXh0LVsxNnB4XVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItcHJldmlldy1idXR0b24gcm91bmRlZC1yLVs4cHhdIGJvcmRlci1sIGJvcmRlci1sLTEgYm9yZGVyLVsjNWQ2MzZiXSBmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJSZXNldCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLXJlZnJlc2ggdGV4dC0xNnB4IG1yLVs4cHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjZmZmZmZmXV09XCIhZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCJkaXNhYmxlKClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIGxpYnMtdWktZ2FsbGVyeS10ZXh0LXJlc3RvcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtWyNmZmZmZmZdXT1cIiFkaXNhYmxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtWyM2YTczODNdXT1cImRpc2FibGUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2kxOG5fcmVzdG9yZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKCFzaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgbGlicy11aS1mb250LWg1ciB0ZXh0LVsjZmZmZmZmXSBtdC1bMTJweF1cIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZnVsbFNjcmVlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci1bMTZweF0gZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdGF0ZS0xODBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQcmV2aW91c0ltYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1bMjRweF0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bI2ZmZmZmZl0gbGlicy11aS1pY29uLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj57eyBpbmRleFNlbGVjdGVkKCkgKyAxIH19L3t7IGltYWdlcygpLmxlbmd0aCB9fTwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICBAaWYgKGZ1bGxTY3JlZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzE2cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gaW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IGltYWdlcygpLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJOZXh0SW1hZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVsyNHB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSBpbWFnZXMoKS5sZW5ndGggLSAxXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKCFzaW5nbGVJbWFnZSgpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItbGlzdCBweC1bMzJweF0gbXQtWzI0cHhdIGZsZXhcIlxuICAgICAgICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCJmdWxsU2NyZWVuKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLVsyNHB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm90YXRlLTE4MFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiaW5kZXhTZWxlY3RlZCgpICE9PSAwXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cImluZGV4U2VsZWN0ZWQoKSA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclByZXZpb3VzSW1hZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVsyNHB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYXgtdy1bODAlXSByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpbWFnZSBvZiBpbWFnZXMoKTsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgI2ltYWdlc1JlZlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1nYWxsZXJ5LWltZy1wb3B1cC1jb250YWluZXItbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubXItWzEycHhdXT1cIiFsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiaW1hZ2VzUmVmLm9mZnNldEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYWN0aXZlXT1cImltYWdlW2ZpZWxkRGlzcGxheVNyY0ltYWdlKCldID09PSBpbWFnZVNlbGVjdGVkKCk/LltmaWVsZERpc3BsYXlTcmNJbWFnZSgpXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB3LWZ1bGwgaC1mdWxsIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdEltYWdlKCRldmVudCwgaW1hZ2UsIGluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VbZmllbGREaXNwbGF5U3JjSW1hZ2UoKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBtYXgtaC1mdWxsIG1heC13LWZ1bGwgbS1bYXV0b11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQsIGltYWdlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzI0cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cImluZGV4U2VsZWN0ZWQoKSAhPT0gaW1hZ2VzKCkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCJpbmRleFNlbGVjdGVkKCkgPT09IGltYWdlcygpLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJOZXh0SW1hZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVsyNHB4XSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiaW5kZXhTZWxlY3RlZCgpID09PSBpbWFnZXMoKS5sZW5ndGggLSAxXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG59XG4iXX0=