@pepperi-addons/ngx-composite-lib 0.4.2-beta.125 → 0.4.2-beta.126

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,32 +1,34 @@
1
- import { ViewChild, Component, EventEmitter, Input, Output, HostBinding, Optional } from '@angular/core';
1
+ import { ViewChild, Component, EventEmitter, Input, Output, HostBinding, Optional, inject, InjectFlags } from '@angular/core';
2
2
  import { coerceNumberProperty } from '@angular/cdk/coercion';
3
- import { BaseDestroyerDirective } from '@pepperi-addons/ngx-lib';
3
+ import { BaseDestroyerDirective, PepLayoutService } from '@pepperi-addons/ngx-lib';
4
4
  import { BehaviorSubject } from 'rxjs';
5
5
  import { LayoutBuilderInternalService } from '../layout-builder-internal.service';
6
+ import { TranslateService } from '@ngx-translate/core';
7
+ import { PepDialogService } from '@pepperi-addons/ngx-lib/dialog';
6
8
  import * as i0 from "@angular/core";
7
9
  import * as i1 from "../layout-builder.component";
8
- import * as i2 from "../layout-builder.service";
9
- import * as i3 from "../layout-builder-internal.service";
10
- import * as i4 from "@angular/common";
11
- import * as i5 from "@pepperi-addons/ngx-lib/skeleton-loader";
12
- import * as i6 from "@pepperi-addons/ngx-lib/size-detector";
13
- import * as i7 from "@angular/cdk/drag-drop";
14
- import * as i8 from "../section/section.component";
15
- import * as i9 from "@ngx-translate/core";
10
+ import * as i2 from "../layout-builder-internal.service";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "@pepperi-addons/ngx-lib/skeleton-loader";
13
+ import * as i5 from "@pepperi-addons/ngx-lib/size-detector";
14
+ import * as i6 from "@angular/cdk/drag-drop";
15
+ import * as i7 from "../section/section.component";
16
+ import * as i8 from "@ngx-translate/core";
16
17
  export class PepLayoutComponent extends BaseDestroyerDirective {
17
18
  constructor(parent,
18
19
  // public customizationService: PepCustomizationService,
19
20
  // public layoutService: PepLayoutService,
20
- layoutBuilderService,
21
+ // private layoutBuilderService: PepLayoutBuilderService,
21
22
  // limit to the host component's instance of the HeroCacheService
22
23
  // @Host() private layoutBuilderInternalServiceHost: LayoutBuilderInternalService,
23
24
  // @Self() private layoutBuilderInternalServiceSelf: LayoutBuilderInternalService,
24
25
  // @Optional() @SkipSelf() private layoutBuilderInternalServiceSkipSelf: LayoutBuilderInternalService,
25
26
  // limit to the host component's instance of the HeroCacheService
26
- layoutBuilderInternalService, hostElement, renderer) {
27
+ layoutBuilderInternalService,
28
+ // @Optional() @SkipSelf() private layoutBuilderInternalServiceParent: LayoutBuilderInternalService,
29
+ hostElement, renderer) {
27
30
  super();
28
31
  this.parent = parent;
29
- this.layoutBuilderService = layoutBuilderService;
30
32
  this.layoutBuilderInternalService = layoutBuilderInternalService;
31
33
  this.hostElement = hostElement;
32
34
  this.renderer = renderer;
@@ -44,16 +46,16 @@ export class PepLayoutComponent extends BaseDestroyerDirective {
44
46
  this._sectionsSubject = new BehaviorSubject([]);
45
47
  debugger;
46
48
  // const s = new LayoutBuilderInternalService();
47
- if (parent) {
48
- parent.layoutBuilderInternalService = this.layoutBuilderInternalService;
49
- }
49
+ // if (parent) {
50
+ // parent.layoutBuilderInternalService = this.layoutBuilderInternalService;
51
+ // }
50
52
  this.renderer.addClass(this.hostElement.nativeElement, 'pep-layout');
51
53
  }
52
54
  set layoutView(value) {
53
55
  this._layoutView = value;
54
56
  if (this.layoutView) {
55
- // Set the internal service into the layout helper service by the layout key
56
- this.layoutBuilderService.setInternalService(this.layoutView.Key, this.layoutBuilderInternalService);
57
+ // // Set the internal service into the layout helper service by the layout key
58
+ // this.layoutBuilderService.setInternalService(this.layoutView.Key, this.layoutBuilderInternalService);
57
59
  // Load the layout builder
58
60
  this.layoutBuilderInternalService.loadLayoutBuilder(value);
59
61
  }
@@ -168,7 +170,7 @@ export class PepLayoutComponent extends BaseDestroyerDirective {
168
170
  }
169
171
  ngOnDestroy() {
170
172
  super.ngOnDestroy();
171
- this.layoutBuilderService.removeInternalService(this.layoutView?.Key);
173
+ // this.layoutBuilderService.removeInternalService(this.layoutView?.Key);
172
174
  }
173
175
  getSectionsTemplateRows() {
174
176
  let gridAutoRows = '';
@@ -204,14 +206,36 @@ export class PepLayoutComponent extends BaseDestroyerDirective {
204
206
  this.layoutBuilderInternalService.onSectionDragEnd(event);
205
207
  }
206
208
  }
207
- PepLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutComponent, deps: [{ token: i1.PepLayoutBuilderComponent, optional: true }, { token: i2.PepLayoutBuilderService }, { token: i3.LayoutBuilderInternalService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
208
- PepLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepLayoutComponent, selector: "pep-layout", inputs: { editorMode: "editorMode", layoutView: "layoutView", blockTemplate: "blockTemplate", showSkeletonOnLoad: "showSkeletonOnLoad" }, outputs: { layoutViewChange: "layoutViewChange", screenTypeChange: "screenTypeChange" }, host: { properties: { "style.padding-inline": "this.paddingInline" } }, providers: [LayoutBuilderInternalService], viewQueries: [{ propertyName: "skeletonContainer", first: true, predicate: ["skeletonCont"], descendants: true, static: true }, { propertyName: "sectionsContainer", first: true, predicate: ["sectionsCont"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!-- For the top spacing -->\n<div class=\"top-spacing spacing-{{verticalSpacing}}\" ></div>\n<div #sectionsCont cdkDropListGroup class=\"sections-container gap-{{ sectionsGap }}\" [ngClass]=\"{'preview-state': previewMode }\" \n cdkDropList (cdkDropListDropped)=\"onSectionDropped($event)\" [ngStyle]=\"{'grid-auto-rows': getSectionsTemplateRows()}\"\n >\n <section *ngFor=\"let section of sections$ | async; let i=index;\" \n class=\"draggable-section \" [ngClass]=\"selectedScreenType === 'Phablet' ? 'margin-'+sectionsGap : ''\" [blockTemplate]=\"blockTemplate\"\n [key]=\"section.Key\" [name]=\"section.Name || ('LAYOUT_BUILDER.SECTION' | translate) + ' ' + (i+1)\" [split]=\"section.Split\" [height]=\"section.Height\"\n [columns]=\"section.Columns\" [padding]=\"section.Padding\" [collapseOnTablet]=\"section.CollapseOnTablet || false\" [hideIn]=\"section.Hide || []\" [columnsGap]=\"columnsGap\"\n >\n </section>\n</div>\n<div #skeletonCont class=\"skeleton-container \">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n <div class=\"split-skeleton-container\">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n </div>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n</div>\n<!-- For the bottom spacing -->\n<div class=\"bottom-spacing spacing-{{verticalSpacing}}\"></div>\n<pep-size-detector></pep-size-detector>", styles: [":host{display:grid;grid-template-areas:\"top-spacing\" \"content\" \"bottom-spacing\";grid-template-rows:auto 1fr auto;height:100%}.top-spacing{grid-area:top-spacing}.top-spacing.spacing-none{height:0}.top-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.top-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.top-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.bottom-spacing{grid-area:bottom-spacing}.bottom-spacing.spacing-none{height:0}.bottom-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.bottom-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.bottom-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.skeleton-container{display:grid;grid-area:content;height:100%;gap:var(--pep-spacing-lg, 1rem);grid-template-rows:auto auto auto 1fr;opacity:0}.skeleton-container .split-skeleton-container{display:grid;height:10rem;gap:var(--pep-spacing-lg, 1rem);grid-auto-flow:column}.sections-container{z-index:11;grid-area:content;width:100%;max-width:inherit;overflow-x:unset;margin:0 auto;position:relative;display:grid;grid-row:1px;height:inherit;opacity:0}.sections-container.gap-none{gap:0}.sections-container.gap-sm{gap:var(--pep-spacing-sm, .5rem)}.sections-container.gap-md{gap:var(--pep-spacing-lg, 1rem)}.sections-container.gap-lg{gap:var(--pep-spacing-2xl, 2rem)}.sections-container .draggable-section{display:block}.sections-container.preview-state section{display:contents}@keyframes in{0%{opacity:0;transform:translateY(-80);filter:blur(20px)}to{transform:translateY(0);opacity:1;filter:blur(0)}}.in{animation-name:in;animation-direction:normal;animation-duration:1.2s;animation-fill-mode:forwards}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i5.PepSkeletonLoaderComponent, selector: "pep-skeleton-loader", inputs: ["rowHeightType", "rowsNumber", "lastRowOffset"] }, { kind: "component", type: i6.PepSizeDetectorComponent, selector: "pep-size-detector", inputs: ["showScreenSize", "useAsWebComponent"], outputs: ["sizeChange"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: i8.SectionComponent, selector: "section", inputs: ["blockTemplate", "key", "name", "split", "height", "collapseOnTablet", "padding", "columns", "hideIn", "columnsGap"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
209
+ PepLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutComponent, deps: [{ token: i1.PepLayoutBuilderComponent, optional: true }, { token: i2.LayoutBuilderInternalService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
210
+ PepLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepLayoutComponent, selector: "pep-layout", inputs: { editorMode: "editorMode", layoutView: "layoutView", blockTemplate: "blockTemplate", showSkeletonOnLoad: "showSkeletonOnLoad" }, outputs: { layoutViewChange: "layoutViewChange", screenTypeChange: "screenTypeChange" }, host: { properties: { "style.padding-inline": "this.paddingInline" } }, providers: [
211
+ {
212
+ provide: LayoutBuilderInternalService,
213
+ useFactory: () => {
214
+ const layoutBuilderInternalService = inject(LayoutBuilderInternalService, InjectFlags.Optional & InjectFlags.SkipSelf);
215
+ return layoutBuilderInternalService || new LayoutBuilderInternalService(inject(TranslateService), inject(PepDialogService), inject(PepLayoutService));
216
+ }
217
+ }
218
+ // useFactory: (logger: Logger, authService: AuthService) =>
219
+ // new SecretMessageService(logger, authService.isAuthorized)
220
+ // }
221
+ ], viewQueries: [{ propertyName: "skeletonContainer", first: true, predicate: ["skeletonCont"], descendants: true, static: true }, { propertyName: "sectionsContainer", first: true, predicate: ["sectionsCont"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!-- For the top spacing -->\n<div class=\"top-spacing spacing-{{verticalSpacing}}\" ></div>\n<div #sectionsCont cdkDropListGroup class=\"sections-container gap-{{ sectionsGap }}\" [ngClass]=\"{'preview-state': previewMode }\" \n cdkDropList (cdkDropListDropped)=\"onSectionDropped($event)\" [ngStyle]=\"{'grid-auto-rows': getSectionsTemplateRows()}\"\n >\n <section *ngFor=\"let section of sections$ | async; let i=index;\" \n class=\"draggable-section \" [ngClass]=\"selectedScreenType === 'Phablet' ? 'margin-'+sectionsGap : ''\" [blockTemplate]=\"blockTemplate\"\n [key]=\"section.Key\" [name]=\"section.Name || ('LAYOUT_BUILDER.SECTION' | translate) + ' ' + (i+1)\" [split]=\"section.Split\" [height]=\"section.Height\"\n [columns]=\"section.Columns\" [padding]=\"section.Padding\" [collapseOnTablet]=\"section.CollapseOnTablet || false\" [hideIn]=\"section.Hide || []\" [columnsGap]=\"columnsGap\"\n >\n </section>\n</div>\n<div #skeletonCont class=\"skeleton-container \">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n <div class=\"split-skeleton-container\">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n </div>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n</div>\n<!-- For the bottom spacing -->\n<div class=\"bottom-spacing spacing-{{verticalSpacing}}\"></div>\n<pep-size-detector></pep-size-detector>", styles: [":host{display:grid;grid-template-areas:\"top-spacing\" \"content\" \"bottom-spacing\";grid-template-rows:auto 1fr auto;height:100%}.top-spacing{grid-area:top-spacing}.top-spacing.spacing-none{height:0}.top-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.top-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.top-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.bottom-spacing{grid-area:bottom-spacing}.bottom-spacing.spacing-none{height:0}.bottom-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.bottom-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.bottom-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.skeleton-container{display:grid;grid-area:content;height:100%;gap:var(--pep-spacing-lg, 1rem);grid-template-rows:auto auto auto 1fr;opacity:0}.skeleton-container .split-skeleton-container{display:grid;height:10rem;gap:var(--pep-spacing-lg, 1rem);grid-auto-flow:column}.sections-container{z-index:11;grid-area:content;width:100%;max-width:inherit;overflow-x:unset;margin:0 auto;position:relative;display:grid;grid-row:1px;height:inherit;opacity:0}.sections-container.gap-none{gap:0}.sections-container.gap-sm{gap:var(--pep-spacing-sm, .5rem)}.sections-container.gap-md{gap:var(--pep-spacing-lg, 1rem)}.sections-container.gap-lg{gap:var(--pep-spacing-2xl, 2rem)}.sections-container .draggable-section{display:block}.sections-container.preview-state section{display:contents}@keyframes in{0%{opacity:0;transform:translateY(-80);filter:blur(20px)}to{transform:translateY(0);opacity:1;filter:blur(0)}}.in{animation-name:in;animation-direction:normal;animation-duration:1.2s;animation-fill-mode:forwards}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.PepSkeletonLoaderComponent, selector: "pep-skeleton-loader", inputs: ["rowHeightType", "rowsNumber", "lastRowOffset"] }, { kind: "component", type: i5.PepSizeDetectorComponent, selector: "pep-size-detector", inputs: ["showScreenSize", "useAsWebComponent"], outputs: ["sizeChange"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: i7.SectionComponent, selector: "section", inputs: ["blockTemplate", "key", "name", "split", "height", "collapseOnTablet", "padding", "columns", "hideIn", "columnsGap"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
209
222
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutComponent, decorators: [{
210
223
  type: Component,
211
- args: [{ selector: 'pep-layout', providers: [LayoutBuilderInternalService], template: "<!-- For the top spacing -->\n<div class=\"top-spacing spacing-{{verticalSpacing}}\" ></div>\n<div #sectionsCont cdkDropListGroup class=\"sections-container gap-{{ sectionsGap }}\" [ngClass]=\"{'preview-state': previewMode }\" \n cdkDropList (cdkDropListDropped)=\"onSectionDropped($event)\" [ngStyle]=\"{'grid-auto-rows': getSectionsTemplateRows()}\"\n >\n <section *ngFor=\"let section of sections$ | async; let i=index;\" \n class=\"draggable-section \" [ngClass]=\"selectedScreenType === 'Phablet' ? 'margin-'+sectionsGap : ''\" [blockTemplate]=\"blockTemplate\"\n [key]=\"section.Key\" [name]=\"section.Name || ('LAYOUT_BUILDER.SECTION' | translate) + ' ' + (i+1)\" [split]=\"section.Split\" [height]=\"section.Height\"\n [columns]=\"section.Columns\" [padding]=\"section.Padding\" [collapseOnTablet]=\"section.CollapseOnTablet || false\" [hideIn]=\"section.Hide || []\" [columnsGap]=\"columnsGap\"\n >\n </section>\n</div>\n<div #skeletonCont class=\"skeleton-container \">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n <div class=\"split-skeleton-container\">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n </div>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n</div>\n<!-- For the bottom spacing -->\n<div class=\"bottom-spacing spacing-{{verticalSpacing}}\"></div>\n<pep-size-detector></pep-size-detector>", styles: [":host{display:grid;grid-template-areas:\"top-spacing\" \"content\" \"bottom-spacing\";grid-template-rows:auto 1fr auto;height:100%}.top-spacing{grid-area:top-spacing}.top-spacing.spacing-none{height:0}.top-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.top-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.top-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.bottom-spacing{grid-area:bottom-spacing}.bottom-spacing.spacing-none{height:0}.bottom-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.bottom-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.bottom-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.skeleton-container{display:grid;grid-area:content;height:100%;gap:var(--pep-spacing-lg, 1rem);grid-template-rows:auto auto auto 1fr;opacity:0}.skeleton-container .split-skeleton-container{display:grid;height:10rem;gap:var(--pep-spacing-lg, 1rem);grid-auto-flow:column}.sections-container{z-index:11;grid-area:content;width:100%;max-width:inherit;overflow-x:unset;margin:0 auto;position:relative;display:grid;grid-row:1px;height:inherit;opacity:0}.sections-container.gap-none{gap:0}.sections-container.gap-sm{gap:var(--pep-spacing-sm, .5rem)}.sections-container.gap-md{gap:var(--pep-spacing-lg, 1rem)}.sections-container.gap-lg{gap:var(--pep-spacing-2xl, 2rem)}.sections-container .draggable-section{display:block}.sections-container.preview-state section{display:contents}@keyframes in{0%{opacity:0;transform:translateY(-80);filter:blur(20px)}to{transform:translateY(0);opacity:1;filter:blur(0)}}.in{animation-name:in;animation-direction:normal;animation-duration:1.2s;animation-fill-mode:forwards}\n"] }]
224
+ args: [{ selector: 'pep-layout', providers: [
225
+ {
226
+ provide: LayoutBuilderInternalService,
227
+ useFactory: () => {
228
+ const layoutBuilderInternalService = inject(LayoutBuilderInternalService, InjectFlags.Optional & InjectFlags.SkipSelf);
229
+ return layoutBuilderInternalService || new LayoutBuilderInternalService(inject(TranslateService), inject(PepDialogService), inject(PepLayoutService));
230
+ }
231
+ }
232
+ // useFactory: (logger: Logger, authService: AuthService) =>
233
+ // new SecretMessageService(logger, authService.isAuthorized)
234
+ // }
235
+ ], template: "<!-- For the top spacing -->\n<div class=\"top-spacing spacing-{{verticalSpacing}}\" ></div>\n<div #sectionsCont cdkDropListGroup class=\"sections-container gap-{{ sectionsGap }}\" [ngClass]=\"{'preview-state': previewMode }\" \n cdkDropList (cdkDropListDropped)=\"onSectionDropped($event)\" [ngStyle]=\"{'grid-auto-rows': getSectionsTemplateRows()}\"\n >\n <section *ngFor=\"let section of sections$ | async; let i=index;\" \n class=\"draggable-section \" [ngClass]=\"selectedScreenType === 'Phablet' ? 'margin-'+sectionsGap : ''\" [blockTemplate]=\"blockTemplate\"\n [key]=\"section.Key\" [name]=\"section.Name || ('LAYOUT_BUILDER.SECTION' | translate) + ' ' + (i+1)\" [split]=\"section.Split\" [height]=\"section.Height\"\n [columns]=\"section.Columns\" [padding]=\"section.Padding\" [collapseOnTablet]=\"section.CollapseOnTablet || false\" [hideIn]=\"section.Hide || []\" [columnsGap]=\"columnsGap\"\n >\n </section>\n</div>\n<div #skeletonCont class=\"skeleton-container \">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n <div class=\"split-skeleton-container\">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n </div>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n</div>\n<!-- For the bottom spacing -->\n<div class=\"bottom-spacing spacing-{{verticalSpacing}}\"></div>\n<pep-size-detector></pep-size-detector>", styles: [":host{display:grid;grid-template-areas:\"top-spacing\" \"content\" \"bottom-spacing\";grid-template-rows:auto 1fr auto;height:100%}.top-spacing{grid-area:top-spacing}.top-spacing.spacing-none{height:0}.top-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.top-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.top-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.bottom-spacing{grid-area:bottom-spacing}.bottom-spacing.spacing-none{height:0}.bottom-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.bottom-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.bottom-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.skeleton-container{display:grid;grid-area:content;height:100%;gap:var(--pep-spacing-lg, 1rem);grid-template-rows:auto auto auto 1fr;opacity:0}.skeleton-container .split-skeleton-container{display:grid;height:10rem;gap:var(--pep-spacing-lg, 1rem);grid-auto-flow:column}.sections-container{z-index:11;grid-area:content;width:100%;max-width:inherit;overflow-x:unset;margin:0 auto;position:relative;display:grid;grid-row:1px;height:inherit;opacity:0}.sections-container.gap-none{gap:0}.sections-container.gap-sm{gap:var(--pep-spacing-sm, .5rem)}.sections-container.gap-md{gap:var(--pep-spacing-lg, 1rem)}.sections-container.gap-lg{gap:var(--pep-spacing-2xl, 2rem)}.sections-container .draggable-section{display:block}.sections-container.preview-state section{display:contents}@keyframes in{0%{opacity:0;transform:translateY(-80);filter:blur(20px)}to{transform:translateY(0);opacity:1;filter:blur(0)}}.in{animation-name:in;animation-direction:normal;animation-duration:1.2s;animation-fill-mode:forwards}\n"] }]
212
236
  }], ctorParameters: function () { return [{ type: i1.PepLayoutBuilderComponent, decorators: [{
213
237
  type: Optional
214
- }] }, { type: i2.PepLayoutBuilderService }, { type: i3.LayoutBuilderInternalService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { skeletonContainer: [{
238
+ }] }, { type: i2.LayoutBuilderInternalService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { skeletonContainer: [{
215
239
  type: ViewChild,
216
240
  args: ['skeletonCont', { static: true }]
217
241
  }], sectionsContainer: [{
@@ -233,4 +257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
233
257
  type: HostBinding,
234
258
  args: ['style.padding-inline']
235
259
  }] } });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThGLFNBQVMsRUFDbkYsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFLMUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBZ0UsTUFBTSx5QkFBeUIsQ0FBQztBQUMvSCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBR25ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7OztBQVVsRixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsc0JBQXNCO0lBc0UxRCxZQUVZLE1BQWlDO0lBQ3pDLHdEQUF3RDtJQUN4RCwwQ0FBMEM7SUFDbEMsb0JBQTZDO0lBQ3JELGlFQUFpRTtJQUNqRSxrRkFBa0Y7SUFDbEYsa0ZBQWtGO0lBQ2xGLHNHQUFzRztJQUN0RyxpRUFBaUU7SUFDekQsNEJBQTBELEVBQzFELFdBQXVCLEVBQ3ZCLFFBQW1CO1FBRzNCLEtBQUssRUFBRSxDQUFDO1FBZEEsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7UUFHakMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQU03QyxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBQzFELGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQVc7UUEvRXRCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFrQjVCLGtCQUFhLEdBQWlDLFNBQVMsQ0FBQztRQUV6RCx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFTcEMsMkJBQTJCO1FBQ25CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXBCLHFCQUFnQixHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BFLHFCQUFnQixHQUFxQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTFFLHVCQUFrQixHQUFrQyxJQUFJLENBQUM7UUFTekQscUJBQWdCLEdBQWtDLElBQUksQ0FBQztRQVNyRCxrQkFBYSxHQUFHLE1BQU0sQ0FBQztRQUl2QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUV0QixxQkFBZ0IsR0FBeUMsSUFBSSxlQUFlLENBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBd0JsSCxRQUFRLENBQUM7UUFDRCxnREFBZ0Q7UUFDaEQsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1NBQzNFO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQXZGRCxJQUNJLFVBQVUsQ0FBQyxLQUFxQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsNEVBQTRFO1lBQzVFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUNyRywwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlEO0lBQ0wsQ0FBQztJQUNELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBS0QsSUFDSSxrQkFBa0IsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUNELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFTRCxJQUFJLGlCQUFpQixDQUFDLEtBQW9DO1FBQ3RELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBR0QsSUFBSSxlQUFlLENBQUMsS0FBb0M7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQVVELElBQWMsU0FBUztRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBOEJPLHFCQUFxQixDQUFDLElBQWdDO1FBQzFELElBQUksR0FBRyxDQUFDO1FBRVIsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2YsR0FBRyxHQUFHLE1BQU0sQ0FBQztTQUNoQjthQUFNLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUN0QixHQUFHLEdBQUcsTUFBTSxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3RCLEdBQUcsR0FBRyxRQUFRLENBQUM7U0FDbEI7YUFBTTtZQUNILEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDYjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGVBQWU7UUFDbkIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLCtEQUErRDtZQUMvRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELGtFQUFrRTtTQUNyRTthQUFNO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELGtFQUFrRTtZQUNsRSwrREFBK0Q7WUFDL0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pFO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXBDLElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckUsTUFBTSxhQUFhLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQzthQUM1RjtZQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO1lBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO1lBRXZELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7U0FDNUQ7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLFVBQTZCO1FBQ2hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFOUMsaUdBQWlHO1FBQ2pHO3lHQUNpRztRQUVqRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7Z0JBQzFHLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNwRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDRCQUE0QixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDNUcsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQzFCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxvRkFBb0Y7UUFDcEYsaUNBQWlDO1FBQ2pDLE1BQU07UUFFTixJQUFJLENBQUMsNEJBQTRCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ2xHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxpR0FBaUc7UUFDakc7eUdBQ2lHO1FBRWpHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7WUFDeEcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7WUFDOUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDakUsSUFBSSxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBc0IsRUFBRSxFQUFFO29CQUN4QyxJQUFHLEdBQUcsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFDO3dCQUN2QixxQkFBcUI7d0JBQ3JCLFlBQVksSUFBSSxPQUFPLENBQUM7cUJBQzNCO3lCQUNJO3dCQUNELFlBQVksSUFBSSxjQUFjLENBQUM7cUJBQ2xDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILGtEQUFrRDtnQkFDbEQsb0VBQW9FO2dCQUNwRSxPQUFPLFlBQVksQ0FBQzthQUN2QjtpQkFBTTtnQkFDSCxPQUFPLEVBQUUsQ0FBQzthQUNiO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBeUI7UUFDdEMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBbUI7UUFDM0IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUM7OytHQTFPUSxrQkFBa0I7bUdBQWxCLGtCQUFrQixnVkFGaEIsQ0FBQyw0QkFBNEIsQ0FBQyxvU0NyQjdDLDZ4REF3QnVDOzJGREQxQixrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0ksWUFBWSxhQUdYLENBQUMsNEJBQTRCLENBQUM7OzBCQXlFcEMsUUFBUTs4S0F0RWdDLGlCQUFpQjtzQkFBN0QsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNFLGlCQUFpQjtzQkFBN0QsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVsQyxVQUFVO3NCQUFsQixLQUFLO2dCQUlGLFVBQVU7c0JBRGIsS0FBSztnQkFlRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFXSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQW9CRyxhQUFhO3NCQUR0QixXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgVmlld0NoaWxkLCBDb250ZW50Q2hpbGRyZW4sXG4gICAgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgSG9zdEJpbmRpbmcsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFxuICAgIE9uRGVzdHJveSxcbiAgICBIb3N0LFxuICAgIFNlbGYsXG4gICAgU2tpcFNlbGYsXG4gICAgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdFbnRlciwgQ2RrRHJhZ0V4aXQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIERyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBCYXNlRGVzdHJveWVyRGlyZWN0aXZlLCBQZXBDdXN0b21pemF0aW9uU2VydmljZSwgUGVwTGF5b3V0U2VydmljZSwgUGVwU2NyZWVuU2l6ZVR5cGUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGFWaWV3U2NyZWVuU2l6ZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9wYXBpLXNkayc7XG5pbXBvcnQgeyBJUGVwTGF5b3V0U2VjdGlvbiwgSVBlcExheW91dFZpZXcsIFBlcExheW91dFNpemVUeXBlIH0gZnJvbSAnLi4vbGF5b3V0LWJ1aWxkZXIubW9kZWwnO1xuaW1wb3J0IHsgTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSB9IGZyb20gJy4uL2xheW91dC1idWlsZGVyLWludGVybmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVwTGF5b3V0QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi9sYXlvdXQtYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcExheW91dEJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXQtYnVpbGRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1sYXlvdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xheW91dC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0xheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBMYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGVzdHJveWVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ3NrZWxldG9uQ29udCcsIHsgc3RhdGljOiB0cnVlIH0pIHNrZWxldG9uQ29udGFpbmVyITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzZWN0aW9uc0NvbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWN0aW9uc0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgICBASW5wdXQoKSBlZGl0b3JNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9sYXlvdXRWaWV3ITogSVBlcExheW91dFZpZXc7XG4gICAgQElucHV0KClcbiAgICBzZXQgbGF5b3V0Vmlldyh2YWx1ZTogSVBlcExheW91dFZpZXcpIHtcbiAgICAgICAgdGhpcy5fbGF5b3V0VmlldyA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmxheW91dFZpZXcpIHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgaW50ZXJuYWwgc2VydmljZSBpbnRvIHRoZSBsYXlvdXQgaGVscGVyIHNlcnZpY2UgYnkgdGhlIGxheW91dCBrZXlcbiAgICAgICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2Uuc2V0SW50ZXJuYWxTZXJ2aWNlKHRoaXMubGF5b3V0Vmlldy5LZXksIHRoaXMubGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSk7XG4gICAgICAgICAgICAvLyBMb2FkIHRoZSBsYXlvdXQgYnVpbGRlclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLmxvYWRMYXlvdXRCdWlsZGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbGF5b3V0VmlldygpOiBJUGVwTGF5b3V0VmlldyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYXlvdXRWaWV3O1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGJsb2NrVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBwcml2YXRlIF9zaG93U2tlbGV0b25PbkxvYWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93U2tlbGV0b25PbkxvYWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd1NrZWxldG9uT25Mb2FkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBzaG93U2tlbGV0b25PbkxvYWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93U2tlbGV0b25PbkxvYWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBzaG93ICYgaGlkZSBza2VsZXRvblxuICAgIHByaXZhdGUgX3Nob3dTa2VsZXRvbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGxheW91dFZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwTGF5b3V0Vmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHNjcmVlblR5cGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRhVmlld1NjcmVlblNpemU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBfaG9yaXpvbnRhbFNwYWNpbmc6IFBlcExheW91dFNpemVUeXBlIHwgdW5kZWZpbmVkID0gJ21kJztcbiAgICBzZXQgaG9yaXpvbnRhbFNwYWNpbmcodmFsdWU6IFBlcExheW91dFNpemVUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2hvcml6b250YWxTcGFjaW5nID0gdmFsdWU7XG4gICAgICAgIHRoaXMucGFkZGluZ0lubGluZSA9IHRoaXMuY29udmVydExheW91dFNpemVUeXBlKHZhbHVlIHx8ICdtZCcpO1xuICAgIH1cbiAgICBnZXQgaG9yaXpvbnRhbFNwYWNpbmcoKTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5faG9yaXpvbnRhbFNwYWNpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmVydGljYWxTcGFjaW5nOiBQZXBMYXlvdXRTaXplVHlwZSB8IHVuZGVmaW5lZCA9ICdtZCc7XG4gICAgc2V0IHZlcnRpY2FsU3BhY2luZyh2YWx1ZTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdmVydGljYWxTcGFjaW5nID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB2ZXJ0aWNhbFNwYWNpbmcoKTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVydGljYWxTcGFjaW5nO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUucGFkZGluZy1pbmxpbmUnKVxuICAgIHByb3RlY3RlZCBwYWRkaW5nSW5saW5lID0gJzFyZW0nO1xuICAgIFxuICAgIHByb3RlY3RlZCBzZWN0aW9uc0dhcCE6IFBlcExheW91dFNpemVUeXBlO1xuICAgIHByb3RlY3RlZCBjb2x1bW5zR2FwITogUGVwTGF5b3V0U2l6ZVR5cGU7XG4gICAgcHJvdGVjdGVkIHByZXZpZXdNb2RlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9zZWN0aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0U2VjdGlvbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFNlY3Rpb25bXT4oW10pO1xuICAgIHByb3RlY3RlZCBnZXQgc2VjdGlvbnMkKCk6IE9ic2VydmFibGU8SVBlcExheW91dFNlY3Rpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZWxlY3RlZFNjcmVlblR5cGUhOiBEYXRhVmlld1NjcmVlblNpemU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgcHJpdmF0ZSBwYXJlbnQ6IFBlcExheW91dEJ1aWxkZXJDb21wb25lbnQsXG4gICAgICAgIC8vIHB1YmxpYyBjdXN0b21pemF0aW9uU2VydmljZTogUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgICAgIC8vIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxheW91dEJ1aWxkZXJTZXJ2aWNlOiBQZXBMYXlvdXRCdWlsZGVyU2VydmljZSxcbiAgICAgICAgLy8gbGltaXQgdG8gdGhlIGhvc3QgY29tcG9uZW50J3MgaW5zdGFuY2Ugb2YgdGhlIEhlcm9DYWNoZVNlcnZpY2VcbiAgICAgICAgLy8gQEhvc3QoKSBwcml2YXRlIGxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2VIb3N0OiBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLFxuICAgICAgICAvLyBAU2VsZigpIHByaXZhdGUgbGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZVNlbGY6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UsXG4gICAgICAgIC8vIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgbGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZVNraXBTZWxmOiBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLFxuICAgICAgICAvLyBsaW1pdCB0byB0aGUgaG9zdCBjb21wb25lbnQncyBpbnN0YW5jZSBvZiB0aGUgSGVyb0NhY2hlU2VydmljZVxuICAgICAgICBwcml2YXRlIGxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2U6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgLy8gcHJpdmF0ZSBkcmFnRHJvcFNlcnZpY2U6IERyYWdEcm9wXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5kZWJ1Z2dlcjtcbiAgICAgICAgLy8gY29uc3QgcyA9IG5ldyBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlKCk7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHBhcmVudC5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlID0gdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdwZXAtbGF5b3V0Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0TGF5b3V0U2l6ZVR5cGUoc2l6ZTogUGVwTGF5b3V0U2l6ZVR5cGUgfCAnbm9uZScpIHtcbiAgICAgICAgbGV0IHJlcztcblxuICAgICAgICBpZiAoc2l6ZSA9PT0gJ2xnJykge1xuICAgICAgICAgICAgcmVzID0gJzJyZW0nO1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT09ICdtZCcpIHtcbiAgICAgICAgICAgIHJlcyA9ICcxcmVtJztcbiAgICAgICAgfSBlbHNlIGlmIChzaXplID09PSAnc20nKSB7XG4gICAgICAgICAgICByZXMgPSAnMC41cmVtJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbmltYXRlU2tlbGV0b24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93U2tlbGV0b24pIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ291dCcpO1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnaW4nKTtcbiAgICAgICAgICAgIHRoaXMuc2tlbGV0b25Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2luJyk7XG4gICAgICAgICAgICAvLyB0aGlzLnNrZWxldG9uQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdvdXQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2luJyk7XG4gICAgICAgICAgICAvLyB0aGlzLnNlY3Rpb25zQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdvdXQnKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2tlbGV0b25Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ291dCcpO1xuICAgICAgICAgICAgdGhpcy5za2VsZXRvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnaW4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGF5b3V0RGF0YVByb3BlcnRpZXMoKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFZpZXcgPSB0aGlzLl9sYXlvdXRWaWV3O1xuXG4gICAgICAgIGlmIChsYXlvdXRWaWV3KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gY29lcmNlTnVtYmVyUHJvcGVydHkobGF5b3V0Vmlldy5MYXlvdXQuTWF4V2lkdGgsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoVG9TZXQgPSBtYXhXaWR0aCA9PT0gMCA/ICd1bnNldCcgOiBgJHttYXhXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlY3Rpb25zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdtYXgtd2lkdGgnLCBtYXhXaWR0aFRvU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0dhcCA9IGxheW91dFZpZXcuTGF5b3V0LlNlY3Rpb25zR2FwIHx8ICdtZCc7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNHYXAgPSBsYXlvdXRWaWV3LkxheW91dC5Db2x1bW5zR2FwIHx8ICdtZCc7XG5cbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcgPSBsYXlvdXRWaWV3LkxheW91dC5Ib3Jpem9udGFsU3BhY2luZztcbiAgICAgICAgICAgIHRoaXMudmVydGljYWxTcGFjaW5nID0gbGF5b3V0Vmlldy5MYXlvdXQuVmVydGljYWxTcGFjaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTY3JlZW50VHlwZShzY3JlZW5TaXplOiBQZXBTY3JlZW5TaXplVHlwZSkge1xuICAgICAgICBjb25zdCBzY3JlZW5UeXBlID0gdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLmdldFNjcmVlblR5cGUoc2NyZWVuU2l6ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTY3JlZW5UeXBlID0gc2NyZWVuVHlwZTtcbiAgICAgICAgdGhpcy5zY3JlZW5UeXBlQ2hhbmdlLmVtaXQoc2NyZWVuVHlwZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuX3Nob3dTa2VsZXRvbiA9IHRoaXMuX3Nob3dTa2VsZXRvbk9uTG9hZDtcblxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbCBFdmVudHMgLSBmb3IgY29kZSB1c2FnZVxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLnByZXZpZXdNb2RlQ2hhbmdlJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgocHJldmlld01vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld01vZGUgPSBwcmV2aWV3TW9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLnNlY3Rpb25zQ2hhbmdlJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgoc2VjdGlvbnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VjdGlvbnNTdWJqZWN0Lm5leHQoc2VjdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2Uuc2hvd1NrZWxldG9uQ2hhbmdlJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgoc2hvd1NrZWxldG9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG93U2tlbGV0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dTa2VsZXRvbiA9IHNob3dTa2VsZXRvbjtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGVTa2VsZXRvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0aGlzLmxheW91dFNlcnZpY2Uub25SZXNpemUkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzaXplOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0U2NyZWVudFR5cGUoc2l6ZSk7XG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZS5zY3JlZW5TaXplQ2hhbmdlJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgoc2l6ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFNjcmVlbnRUeXBlKHNpemUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbCBFdmVudHMgLSBmb3IgcmFpc2UgdG8gdGhlIGNsaWVudFxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLmxheW91dFZpZXdDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChsYXlvdXRWaWV3OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xheW91dFZpZXcgPSBsYXlvdXRWaWV3O1xuICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXREYXRhUHJvcGVydGllcygpO1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWaWV3Q2hhbmdlLmVtaXQodGhpcy5fbGF5b3V0Vmlldyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLnJlbW92ZUludGVybmFsU2VydmljZSh0aGlzLmxheW91dFZpZXc/LktleSk7XG4gICAgfVxuXG4gICAgZ2V0U2VjdGlvbnNUZW1wbGF0ZVJvd3MoKSB7XG4gICAgICAgIGxldCBncmlkQXV0b1Jvd3MgPSAnJztcbiAgICAgICAgLy8gbGV0IGZpbGxIZWlnaHRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzZWN0aW9uczogYW55KSA9PiB7ICAgIFxuICAgICAgICAgICAgaWYgKHNlY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9ucy5mb3JFYWNoKChzZWM6IElQZXBMYXlvdXRTZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHNlYy5GaWxsSGVpZ2h0ID09PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGxIZWlnaHRDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZEF1dG9Sb3dzICs9ICcgYXV0byc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkQXV0b1Jvd3MgKz0gJyBtaW4tY29udGVudCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvL2lmIGFsbCBhcmUgZmlsbCBoZWlnaHQgc2hvdWxkIHJldHVybiAxZnIgZm9yIGFsbFxuICAgICAgICAgICAgICAgIC8vaWYgbm90IHNob3VsZCByZXR1cm4gYXV0byBmb3IgZmlsbCBoZWlnaHQgYW5kIG1pbiBjb250ZW50IGZvciBub25lXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyaWRBdXRvUm93cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZ3JpZEF1dG9Sb3dzO1xuICAgIH1cblxuICAgIG9uU2VjdGlvbkRyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2Uub25TZWN0aW9uRHJvcHBlZChldmVudCk7XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnQoZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2Uub25TZWN0aW9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdFbmQoZXZlbnQ6IENka0RyYWdFbmQpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLm9uU2VjdGlvbkRyYWdFbmQoZXZlbnQpO1xuICAgIH1cbn1cbiIsIjwhLS0gRm9yIHRoZSB0b3Agc3BhY2luZyAtLT5cbjxkaXYgY2xhc3M9XCJ0b3Atc3BhY2luZyBzcGFjaW5nLXt7dmVydGljYWxTcGFjaW5nfX1cIiA+PC9kaXY+XG48ZGl2ICNzZWN0aW9uc0NvbnQgY2RrRHJvcExpc3RHcm91cCBjbGFzcz1cInNlY3Rpb25zLWNvbnRhaW5lciBnYXAte3sgc2VjdGlvbnNHYXAgfX1cIiBbbmdDbGFzc109XCJ7J3ByZXZpZXctc3RhdGUnOiBwcmV2aWV3TW9kZSB9XCIgIFxuICAgIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25TZWN0aW9uRHJvcHBlZCgkZXZlbnQpXCIgW25nU3R5bGVdPVwieydncmlkLWF1dG8tcm93cyc6IGdldFNlY3Rpb25zVGVtcGxhdGVSb3dzKCl9XCJcbiAgICA+XG4gICAgPHNlY3Rpb24gKm5nRm9yPVwibGV0IHNlY3Rpb24gb2Ygc2VjdGlvbnMkIHwgYXN5bmM7IGxldCBpPWluZGV4O1wiIFxuICAgICAgICBjbGFzcz1cImRyYWdnYWJsZS1zZWN0aW9uIFwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkU2NyZWVuVHlwZSA9PT0gJ1BoYWJsZXQnID8gJ21hcmdpbi0nK3NlY3Rpb25zR2FwIDogJydcIiBbYmxvY2tUZW1wbGF0ZV09XCJibG9ja1RlbXBsYXRlXCJcbiAgICAgICAgW2tleV09XCJzZWN0aW9uLktleVwiIFtuYW1lXT1cInNlY3Rpb24uTmFtZSB8fCAoJ0xBWU9VVF9CVUlMREVSLlNFQ1RJT04nIHwgdHJhbnNsYXRlKSArICcgJyArIChpKzEpXCIgW3NwbGl0XT1cInNlY3Rpb24uU3BsaXRcIiBbaGVpZ2h0XT1cInNlY3Rpb24uSGVpZ2h0XCJcbiAgICAgICAgW2NvbHVtbnNdPVwic2VjdGlvbi5Db2x1bW5zXCIgW3BhZGRpbmddPVwic2VjdGlvbi5QYWRkaW5nXCIgW2NvbGxhcHNlT25UYWJsZXRdPVwic2VjdGlvbi5Db2xsYXBzZU9uVGFibGV0IHx8IGZhbHNlXCIgW2hpZGVJbl09XCJzZWN0aW9uLkhpZGUgfHwgW11cIiBbY29sdW1uc0dhcF09XCJjb2x1bW5zR2FwXCJcbiAgICAgICAgPlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuPGRpdiAjc2tlbGV0b25Db250IGNsYXNzPVwic2tlbGV0b24tY29udGFpbmVyIFwiPlxuICAgIDxwZXAtc2tlbGV0b24tbG9hZGVyIFtyb3dzTnVtYmVyXT1cIjFcIiBbbGFzdFJvd09mZnNldF09XCJmYWxzZVwiIHJvd0hlaWdodFR5cGU9XCJ4bFwiID48L3BlcC1za2VsZXRvbi1sb2FkZXI+XG4gICAgPGRpdiBjbGFzcz1cInNwbGl0LXNrZWxldG9uLWNvbnRhaW5lclwiPlxuICAgICAgICA8cGVwLXNrZWxldG9uLWxvYWRlciBbcm93c051bWJlcl09XCIxXCIgW2xhc3RSb3dPZmZzZXRdPVwiZmFsc2VcIiByb3dIZWlnaHRUeXBlPVwibWF4XCIgPjwvcGVwLXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgPHBlcC1za2VsZXRvbi1sb2FkZXIgW3Jvd3NOdW1iZXJdPVwiMVwiIFtsYXN0Um93T2Zmc2V0XT1cImZhbHNlXCIgcm93SGVpZ2h0VHlwZT1cIm1heFwiID48L3BlcC1za2VsZXRvbi1sb2FkZXI+XG4gICAgPC9kaXY+XG4gICAgPHBlcC1za2VsZXRvbi1sb2FkZXIgW3Jvd3NOdW1iZXJdPVwiMVwiIFtsYXN0Um93T2Zmc2V0XT1cImZhbHNlXCIgcm93SGVpZ2h0VHlwZT1cInhsXCIgPjwvcGVwLXNrZWxldG9uLWxvYWRlcj5cblxuICAgIDxwZXAtc2tlbGV0b24tbG9hZGVyIFtyb3dzTnVtYmVyXT1cIjFcIiBbbGFzdFJvd09mZnNldF09XCJmYWxzZVwiIHJvd0hlaWdodFR5cGU9XCJtYXhcIiA+PC9wZXAtc2tlbGV0b24tbG9hZGVyPlxuPC9kaXY+XG48IS0tIEZvciB0aGUgYm90dG9tIHNwYWNpbmcgLS0+XG48ZGl2IGNsYXNzPVwiYm90dG9tLXNwYWNpbmcgc3BhY2luZy17e3ZlcnRpY2FsU3BhY2luZ319XCI+PC9kaXY+XG48cGVwLXNpemUtZGV0ZWN0b3I+PC9wZXAtc2l6ZS1kZXRlY3Rvcj4iXX0=
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThGLFNBQVMsRUFDbkYsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFLMUUsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUEyQixnQkFBZ0IsRUFBcUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMvSCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBR25ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7O0FBb0JsRSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsc0JBQXNCO0lBc0UxRCxZQUVZLE1BQWlDO0lBQ3pDLHdEQUF3RDtJQUN4RCwwQ0FBMEM7SUFDMUMseURBQXlEO0lBQ3pELGlFQUFpRTtJQUNqRSxrRkFBa0Y7SUFDbEYsa0ZBQWtGO0lBQ2xGLHNHQUFzRztJQUN0RyxpRUFBaUU7SUFDekQsNEJBQTBEO0lBQ2xFLG9HQUFvRztJQUM1RixXQUF1QixFQUN2QixRQUFtQjtRQUczQixLQUFLLEVB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QUFpRTtRQUNqRSxJQUFJO0tBQ0wsb1NDckNQLDZ4REF3QnVDOzJGRGUxQixrQkFBa0I7a0JBbEI5QixTQUFTOytCQUNJLFlBQVksYUFJWDt3QkFDUDs0QkFDRSxPQUFPLEVBQUUsNEJBQTRCOzRCQUNyQyxVQUFVLEVBQUUsR0FBRyxFQUFFO2dDQUNmLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixFQUFFLFdBQVcsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBRSxDQUFDO2dDQUN4SCxPQUFPLDRCQUE0QixJQUFJLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzs0QkFDeEosQ0FBQzt5QkFDRjt3QkFDRCw4REFBOEQ7d0JBQzlELGlFQUFpRTt3QkFDakUsSUFBSTtxQkFDTDs7MEJBeUVFLFFBQVE7d0lBdEVnQyxpQkFBaUI7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxpQkFBaUI7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFbEMsVUFBVTtzQkFBbEIsS0FBSztnQkFJRixVQUFVO3NCQURiLEtBQUs7Z0JBZUcsYUFBYTtzQkFBckIsS0FBSztnQkFJRixrQkFBa0I7c0JBRHJCLEtBQUs7Z0JBV0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFvQkcsYUFBYTtzQkFEdEIsV0FBVzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgQ29udGVudENoaWxkcmVuLFxuICAgIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIEhvc3RCaW5kaW5nLCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBcbiAgICBPbkRlc3Ryb3ksXG4gICAgSG9zdCxcbiAgICBTZWxmLFxuICAgIFNraXBTZWxmLFxuICAgIE9wdGlvbmFsLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RGbGFnc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ0VudGVyLCBDZGtEcmFnRXhpdCwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCwgRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEJhc2VEZXN0cm95ZXJEaXJlY3RpdmUsIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLCBQZXBMYXlvdXRTZXJ2aWNlLCBQZXBTY3JlZW5TaXplVHlwZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YVZpZXdTY3JlZW5TaXplIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL3BhcGktc2RrJztcbmltcG9ydCB7IElQZXBMYXlvdXRTZWN0aW9uLCBJUGVwTGF5b3V0VmlldywgUGVwTGF5b3V0U2l6ZVR5cGUgfSBmcm9tICcuLi9sYXlvdXQtYnVpbGRlci5tb2RlbCc7XG5pbXBvcnQgeyBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbGF5b3V0LWJ1aWxkZXItaW50ZXJuYWwuc2VydmljZSc7XG4vLyBpbXBvcnQgeyBQZXBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uL2xheW91dC1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVwTGF5b3V0QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL2xheW91dC1idWlsZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBQZXBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWIvZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9sYXlvdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICAvLyBwcm92aWRlcnM6IFtMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UsXG4gICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSA9IGluamVjdChMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLCBJbmplY3RGbGFncy5PcHRpb25hbCAmIEluamVjdEZsYWdzLlNraXBTZWxmICk7XG4gICAgICAgICAgICByZXR1cm4gbGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSB8fCBuZXcgTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZShpbmplY3QoVHJhbnNsYXRlU2VydmljZSksIGluamVjdChQZXBEaWFsb2dTZXJ2aWNlKSwgaW5qZWN0KFBlcExheW91dFNlcnZpY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gICB1c2VGYWN0b3J5OiAobG9nZ2VyOiBMb2dnZXIsIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkgPT5cbiAgICAgICAgLy8gICAgIG5ldyBTZWNyZXRNZXNzYWdlU2VydmljZShsb2dnZXIsIGF1dGhTZXJ2aWNlLmlzQXV0aG9yaXplZClcbiAgICAgICAgLy8gfVxuICAgICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQZXBMYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGVzdHJveWVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ3NrZWxldG9uQ29udCcsIHsgc3RhdGljOiB0cnVlIH0pIHNrZWxldG9uQ29udGFpbmVyITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdzZWN0aW9uc0NvbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWN0aW9uc0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgICBASW5wdXQoKSBlZGl0b3JNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9sYXlvdXRWaWV3ITogSVBlcExheW91dFZpZXc7XG4gICAgQElucHV0KClcbiAgICBzZXQgbGF5b3V0Vmlldyh2YWx1ZTogSVBlcExheW91dFZpZXcpIHtcbiAgICAgICAgdGhpcy5fbGF5b3V0VmlldyA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmxheW91dFZpZXcpIHtcbiAgICAgICAgICAgIC8vIC8vIFNldCB0aGUgaW50ZXJuYWwgc2VydmljZSBpbnRvIHRoZSBsYXlvdXQgaGVscGVyIHNlcnZpY2UgYnkgdGhlIGxheW91dCBrZXlcbiAgICAgICAgICAgIC8vIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2Uuc2V0SW50ZXJuYWxTZXJ2aWNlKHRoaXMubGF5b3V0Vmlldy5LZXksIHRoaXMubGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSk7XG4gICAgICAgICAgICAvLyBMb2FkIHRoZSBsYXlvdXQgYnVpbGRlclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLmxvYWRMYXlvdXRCdWlsZGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbGF5b3V0VmlldygpOiBJUGVwTGF5b3V0VmlldyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYXlvdXRWaWV3O1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGJsb2NrVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBwcml2YXRlIF9zaG93U2tlbGV0b25PbkxvYWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93U2tlbGV0b25PbkxvYWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd1NrZWxldG9uT25Mb2FkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBzaG93U2tlbGV0b25PbkxvYWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93U2tlbGV0b25PbkxvYWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBzaG93ICYgaGlkZSBza2VsZXRvblxuICAgIHByaXZhdGUgX3Nob3dTa2VsZXRvbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGxheW91dFZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwTGF5b3V0Vmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHNjcmVlblR5cGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRhVmlld1NjcmVlblNpemU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBfaG9yaXpvbnRhbFNwYWNpbmc6IFBlcExheW91dFNpemVUeXBlIHwgdW5kZWZpbmVkID0gJ21kJztcbiAgICBzZXQgaG9yaXpvbnRhbFNwYWNpbmcodmFsdWU6IFBlcExheW91dFNpemVUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2hvcml6b250YWxTcGFjaW5nID0gdmFsdWU7XG4gICAgICAgIHRoaXMucGFkZGluZ0lubGluZSA9IHRoaXMuY29udmVydExheW91dFNpemVUeXBlKHZhbHVlIHx8ICdtZCcpO1xuICAgIH1cbiAgICBnZXQgaG9yaXpvbnRhbFNwYWNpbmcoKTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5faG9yaXpvbnRhbFNwYWNpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmVydGljYWxTcGFjaW5nOiBQZXBMYXlvdXRTaXplVHlwZSB8IHVuZGVmaW5lZCA9ICdtZCc7XG4gICAgc2V0IHZlcnRpY2FsU3BhY2luZyh2YWx1ZTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdmVydGljYWxTcGFjaW5nID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB2ZXJ0aWNhbFNwYWNpbmcoKTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVydGljYWxTcGFjaW5nO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUucGFkZGluZy1pbmxpbmUnKVxuICAgIHByb3RlY3RlZCBwYWRkaW5nSW5saW5lID0gJzFyZW0nO1xuICAgIFxuICAgIHByb3RlY3RlZCBzZWN0aW9uc0dhcCE6IFBlcExheW91dFNpemVUeXBlO1xuICAgIHByb3RlY3RlZCBjb2x1bW5zR2FwITogUGVwTGF5b3V0U2l6ZVR5cGU7XG4gICAgcHJvdGVjdGVkIHByZXZpZXdNb2RlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9zZWN0aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0U2VjdGlvbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFNlY3Rpb25bXT4oW10pO1xuICAgIHByb3RlY3RlZCBnZXQgc2VjdGlvbnMkKCk6IE9ic2VydmFibGU8SVBlcExheW91dFNlY3Rpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZWxlY3RlZFNjcmVlblR5cGUhOiBEYXRhVmlld1NjcmVlblNpemU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgcHJpdmF0ZSBwYXJlbnQ6IFBlcExheW91dEJ1aWxkZXJDb21wb25lbnQsXG4gICAgICAgIC8vIHB1YmxpYyBjdXN0b21pemF0aW9uU2VydmljZTogUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgICAgIC8vIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICAvLyBwcml2YXRlIGxheW91dEJ1aWxkZXJTZXJ2aWNlOiBQZXBMYXlvdXRCdWlsZGVyU2VydmljZSxcbiAgICAgICAgLy8gbGltaXQgdG8gdGhlIGhvc3QgY29tcG9uZW50J3MgaW5zdGFuY2Ugb2YgdGhlIEhlcm9DYWNoZVNlcnZpY2VcbiAgICAgICAgLy8gQEhvc3QoKSBwcml2YXRlIGxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2VIb3N0OiBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLFxuICAgICAgICAvLyBAU2VsZigpIHByaXZhdGUgbGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZVNlbGY6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UsXG4gICAgICAgIC8vIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgbGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZVNraXBTZWxmOiBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLFxuICAgICAgICAvLyBsaW1pdCB0byB0aGUgaG9zdCBjb21wb25lbnQncyBpbnN0YW5jZSBvZiB0aGUgSGVyb0NhY2hlU2VydmljZVxuICAgICAgICBwcml2YXRlIGxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2U6IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UsXG4gICAgICAgIC8vIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgbGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZVBhcmVudDogTGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICAvLyBwcml2YXRlIGRyYWdEcm9wU2VydmljZTogRHJhZ0Ryb3BcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbmRlYnVnZ2VyO1xuICAgICAgICAvLyBjb25zdCBzID0gbmV3IExheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UoKTtcbiAgICAgICAgLy8gaWYgKHBhcmVudCkge1xuICAgICAgICAvLyAgICAgcGFyZW50LmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UgPSB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2U7XG4gICAgICAgIC8vIH1cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3BlcC1sYXlvdXQnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRMYXlvdXRTaXplVHlwZShzaXplOiBQZXBMYXlvdXRTaXplVHlwZSB8ICdub25lJykge1xuICAgICAgICBsZXQgcmVzO1xuXG4gICAgICAgIGlmIChzaXplID09PSAnbGcnKSB7XG4gICAgICAgICAgICByZXMgPSAnMnJlbSc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gJ21kJykge1xuICAgICAgICAgICAgcmVzID0gJzFyZW0nO1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT09ICdzbScpIHtcbiAgICAgICAgICAgIHJlcyA9ICcwLjVyZW0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFuaW1hdGVTa2VsZXRvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dTa2VsZXRvbikge1xuICAgICAgICAgICAgLy8gdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnb3V0Jyk7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25zQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdpbicpO1xuICAgICAgICAgICAgdGhpcy5za2VsZXRvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnaW4nKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2tlbGV0b25Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ291dCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnaW4nKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ291dCcpO1xuICAgICAgICAgICAgLy8gdGhpcy5za2VsZXRvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnb3V0Jyk7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdpbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYXlvdXREYXRhUHJvcGVydGllcygpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXc7XG5cbiAgICAgICAgaWYgKGxheW91dFZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25zQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShsYXlvdXRWaWV3LkxheW91dC5NYXhXaWR0aCwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGhUb1NldCA9IG1heFdpZHRoID09PSAwID8gJ3Vuc2V0JyA6IGAke21heFdpZHRofXB4YDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VjdGlvbnNDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ21heC13aWR0aCcsIG1heFdpZHRoVG9TZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25zR2FwID0gbGF5b3V0Vmlldy5MYXlvdXQuU2VjdGlvbnNHYXAgfHwgJ21kJztcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0dhcCA9IGxheW91dFZpZXcuTGF5b3V0LkNvbHVtbnNHYXAgfHwgJ21kJztcblxuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsU3BhY2luZyA9IGxheW91dFZpZXcuTGF5b3V0Lkhvcml6b250YWxTcGFjaW5nO1xuICAgICAgICAgICAgdGhpcy52ZXJ0aWNhbFNwYWNpbmcgPSBsYXlvdXRWaWV3LkxheW91dC5WZXJ0aWNhbFNwYWNpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNjcmVlbnRUeXBlKHNjcmVlblNpemU6IFBlcFNjcmVlblNpemVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHNjcmVlblR5cGUgPSB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UuZ2V0U2NyZWVuVHlwZShzY3JlZW5TaXplKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNjcmVlblR5cGUgPSBzY3JlZW5UeXBlO1xuICAgICAgICB0aGlzLnNjcmVlblR5cGVDaGFuZ2UuZW1pdChzY3JlZW5UeXBlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NrZWxldG9uID0gdGhpcy5fc2hvd1NrZWxldG9uT25Mb2FkO1xuXG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsIEV2ZW50cyAtIGZvciBjb2RlIHVzYWdlXG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgICAgICBpZiAodGhpcy5lZGl0b3JNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UucHJldmlld01vZGVDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChwcmV2aWV3TW9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3TW9kZSA9IHByZXZpZXdNb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2Uuc2VjdGlvbnNDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzZWN0aW9uczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZWN0aW9uc1N1YmplY3QubmV4dChzZWN0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZS5zaG93U2tlbGV0b25DaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzaG93U2tlbGV0b246IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3dTa2VsZXRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd1NrZWxldG9uID0gc2hvd1NrZWxldG9uO1xuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZVNrZWxldG9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSh0aGlzLmdldERlc3Ryb3llcigpKS5zdWJzY3JpYmUoKHNpemU6IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRTY3JlZW50VHlwZShzaXplKTtcbiAgICAgICAgLy8gfSk7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLnNjcmVlblNpemVDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzaXplOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2NyZWVudFR5cGUoc2l6ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIEV2ZW50cyAtIGZvciByYWlzZSB0byB0aGUgY2xpZW50XG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2UubGF5b3V0Vmlld0NoYW5nZSQucGlwZSh0aGlzLmdldERlc3Ryb3llcigpKS5zdWJzY3JpYmUoKGxheW91dFZpZXc6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbGF5b3V0VmlldyA9IGxheW91dFZpZXc7XG4gICAgICAgICAgICB0aGlzLnNldExheW91dERhdGFQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZpZXdDaGFuZ2UuZW1pdCh0aGlzLl9sYXlvdXRWaWV3KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIC8vIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2UucmVtb3ZlSW50ZXJuYWxTZXJ2aWNlKHRoaXMubGF5b3V0Vmlldz8uS2V5KTtcbiAgICB9XG5cbiAgICBnZXRTZWN0aW9uc1RlbXBsYXRlUm93cygpIHtcbiAgICAgICAgbGV0IGdyaWRBdXRvUm93cyA9ICcnO1xuICAgICAgICAvLyBsZXQgZmlsbEhlaWdodENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5zZWN0aW9ucyQucGlwZSh0aGlzLmdldERlc3Ryb3llcigpKS5zdWJzY3JpYmUoKHNlY3Rpb25zOiBhbnkpID0+IHsgICAgXG4gICAgICAgICAgICBpZiAoc2VjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNlY3Rpb25zLmZvckVhY2goKHNlYzogSVBlcExheW91dFNlY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoc2VjLkZpbGxIZWlnaHQgPT09IHRydWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsbEhlaWdodENvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkQXV0b1Jvd3MgKz0gJyBhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRBdXRvUm93cyArPSAnIG1pbi1jb250ZW50JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vaWYgYWxsIGFyZSBmaWxsIGhlaWdodCBzaG91bGQgcmV0dXJuIDFmciBmb3IgYWxsXG4gICAgICAgICAgICAgICAgLy9pZiBub3Qgc2hvdWxkIHJldHVybiBhdXRvIGZvciBmaWxsIGhlaWdodCBhbmQgbWluIGNvbnRlbnQgZm9yIG5vbmVcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JpZEF1dG9Sb3dzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBncmlkQXV0b1Jvd3M7XG4gICAgfVxuXG4gICAgb25TZWN0aW9uRHJvcHBlZChldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZS5vblNlY3Rpb25Ecm9wcGVkKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlckludGVybmFsU2VydmljZS5vblNlY3Rpb25EcmFnU3RhcnQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZChldmVudDogQ2RrRHJhZ0VuZCkge1xuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJJbnRlcm5hbFNlcnZpY2Uub25TZWN0aW9uRHJhZ0VuZChldmVudCk7XG4gICAgfVxufVxuIiwiPCEtLSBGb3IgdGhlIHRvcCBzcGFjaW5nIC0tPlxuPGRpdiBjbGFzcz1cInRvcC1zcGFjaW5nIHNwYWNpbmcte3t2ZXJ0aWNhbFNwYWNpbmd9fVwiID48L2Rpdj5cbjxkaXYgI3NlY3Rpb25zQ29udCBjZGtEcm9wTGlzdEdyb3VwIGNsYXNzPVwic2VjdGlvbnMtY29udGFpbmVyIGdhcC17eyBzZWN0aW9uc0dhcCB9fVwiIFtuZ0NsYXNzXT1cInsncHJldmlldy1zdGF0ZSc6IHByZXZpZXdNb2RlIH1cIiAgXG4gICAgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvblNlY3Rpb25Ecm9wcGVkKCRldmVudClcIiBbbmdTdHlsZV09XCJ7J2dyaWQtYXV0by1yb3dzJzogZ2V0U2VjdGlvbnNUZW1wbGF0ZVJvd3MoKX1cIlxuICAgID5cbiAgICA8c2VjdGlvbiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzZWN0aW9ucyQgfCBhc3luYzsgbGV0IGk9aW5kZXg7XCIgXG4gICAgICAgIGNsYXNzPVwiZHJhZ2dhYmxlLXNlY3Rpb24gXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRTY3JlZW5UeXBlID09PSAnUGhhYmxldCcgPyAnbWFyZ2luLScrc2VjdGlvbnNHYXAgOiAnJ1wiIFtibG9ja1RlbXBsYXRlXT1cImJsb2NrVGVtcGxhdGVcIlxuICAgICAgICBba2V5XT1cInNlY3Rpb24uS2V5XCIgW25hbWVdPVwic2VjdGlvbi5OYW1lIHx8ICgnTEFZT1VUX0JVSUxERVIuU0VDVElPTicgfCB0cmFuc2xhdGUpICsgJyAnICsgKGkrMSlcIiBbc3BsaXRdPVwic2VjdGlvbi5TcGxpdFwiIFtoZWlnaHRdPVwic2VjdGlvbi5IZWlnaHRcIlxuICAgICAgICBbY29sdW1uc109XCJzZWN0aW9uLkNvbHVtbnNcIiBbcGFkZGluZ109XCJzZWN0aW9uLlBhZGRpbmdcIiBbY29sbGFwc2VPblRhYmxldF09XCJzZWN0aW9uLkNvbGxhcHNlT25UYWJsZXQgfHwgZmFsc2VcIiBbaGlkZUluXT1cInNlY3Rpb24uSGlkZSB8fCBbXVwiIFtjb2x1bW5zR2FwXT1cImNvbHVtbnNHYXBcIlxuICAgICAgICA+XG4gICAgPC9zZWN0aW9uPlxuPC9kaXY+XG48ZGl2ICNza2VsZXRvbkNvbnQgY2xhc3M9XCJza2VsZXRvbi1jb250YWluZXIgXCI+XG4gICAgPHBlcC1za2VsZXRvbi1sb2FkZXIgW3Jvd3NOdW1iZXJdPVwiMVwiIFtsYXN0Um93T2Zmc2V0XT1cImZhbHNlXCIgcm93SGVpZ2h0VHlwZT1cInhsXCIgPjwvcGVwLXNrZWxldG9uLWxvYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwic3BsaXQtc2tlbGV0b24tY29udGFpbmVyXCI+XG4gICAgICAgIDxwZXAtc2tlbGV0b24tbG9hZGVyIFtyb3dzTnVtYmVyXT1cIjFcIiBbbGFzdFJvd09mZnNldF09XCJmYWxzZVwiIHJvd0hlaWdodFR5cGU9XCJtYXhcIiA+PC9wZXAtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICA8cGVwLXNrZWxldG9uLWxvYWRlciBbcm93c051bWJlcl09XCIxXCIgW2xhc3RSb3dPZmZzZXRdPVwiZmFsc2VcIiByb3dIZWlnaHRUeXBlPVwibWF4XCIgPjwvcGVwLXNrZWxldG9uLWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8cGVwLXNrZWxldG9uLWxvYWRlciBbcm93c051bWJlcl09XCIxXCIgW2xhc3RSb3dPZmZzZXRdPVwiZmFsc2VcIiByb3dIZWlnaHRUeXBlPVwieGxcIiA+PC9wZXAtc2tlbGV0b24tbG9hZGVyPlxuXG4gICAgPHBlcC1za2VsZXRvbi1sb2FkZXIgW3Jvd3NOdW1iZXJdPVwiMVwiIFtsYXN0Um93T2Zmc2V0XT1cImZhbHNlXCIgcm93SGVpZ2h0VHlwZT1cIm1heFwiID48L3BlcC1za2VsZXRvbi1sb2FkZXI+XG48L2Rpdj5cbjwhLS0gRm9yIHRoZSBib3R0b20gc3BhY2luZyAtLT5cbjxkaXYgY2xhc3M9XCJib3R0b20tc3BhY2luZyBzcGFjaW5nLXt7dmVydGljYWxTcGFjaW5nfX1cIj48L2Rpdj5cbjxwZXAtc2l6ZS1kZXRlY3Rvcj48L3BlcC1zaXplLWRldGVjdG9yPiJdfQ==