ng-virtual-list 18.7.13 → 18.7.14

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.
package/README.md CHANGED
@@ -589,7 +589,7 @@ Selecting even elements:
589
589
 
590
590
  ## 📚 API
591
591
 
592
- [NgVirtualListComponent](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts)
592
+ ### [NgVirtualListComponent](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts)
593
593
 
594
594
  Inputs
595
595
 
@@ -640,6 +640,25 @@ Methods
640
640
  | scrollTo | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/types/id.ts), behavior: ScrollBehavior = 'auto') => number | The method scrolls the list to the element with the given id and returns the value of the scrolled area. Behavior accepts the values ​​"auto", "instant" and "smooth". |
641
641
  | scrollToEnd | (behavior?: ScrollBehavior) => void | Scrolls the scroll area to the desired element with the specified ID. |
642
642
  | getItemBounds | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/types/id.ts), behavior?: ScrollBehavior) => void | Returns the bounds of an element with a given id |
643
+ | focus | [Id](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/types/id.ts), align: [FocusAlignment](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/types/focus-alignment.ts) = [FocusAlignments.NONE](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts) | Focus an list item by a given id. |
644
+
645
+ <br/>
646
+
647
+ ### Template API
648
+
649
+ ```html
650
+ <ng-template #itemRenderer let-data="data" let-config="config" let-measures="measures">
651
+ <!-- content -->
652
+ </ng-template>
653
+ ```
654
+
655
+ Properties
656
+
657
+ | Property | Type | Description |
658
+ |--|--|--|
659
+ | data | {\[id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/types/id.ts) \], [otherProps: string]: any;} | Collection item data. |
660
+ | config | [IDisplayObjectConfig](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/models/display-object-config.model.ts) | Display object configuration. A set of `select`, `collapse`, and `focus` methods are also provided. |
661
+ | measures | [IDisplayObjectMeasures](https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/models/display-object-measures.model.ts) \| undefined | Display object metrics. |
643
662
 
644
663
  <br/>
645
664
 
@@ -1,14 +1,15 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, signal } from '@angular/core';
2
- import { DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN, PART_ITEM_FOCUSED, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, PART_ITEM_NEW, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D, } from '../const';
2
+ import { DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN, PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D, } from '../const';
3
3
  import { BaseVirtualListItemComponent } from '../models/base-virtual-list-item-component';
4
4
  import { NgVirtualListService } from '../ng-virtual-list.service';
5
5
  import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
6
6
  import { map, tap, combineLatest, fromEvent } from 'rxjs';
7
7
  import { MethodsForSelectingTypes } from '../enums/method-for-selecting-types';
8
8
  import { validateBoolean } from '../utils/validation';
9
+ import { FocusAlignments } from '../enums';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@angular/common";
11
- const ATTR_AREA_SELECTED = 'area-selected', TABINDEX = 'ng-vl-index', KEY_SPACE = " ", KEY_ARR_LEFT = "ArrowLeft", KEY_ARR_UP = "ArrowUp", KEY_ARR_RIGHT = "ArrowRight", KEY_ARR_DOWN = "ArrowDown", EVENT_FOCUS_IN = 'focusin', EVENT_FOCUS_OUT = 'focusout', EVENT_KEY_DOWN = 'keydown';
12
+ const ATTR_AREA_SELECTED = 'area-selected', TABINDEX = 'ng-vl-index', POSITION = 'position', POSITION_ZERO = '0', ID = 'item-id', KEY_SPACE = " ", KEY_ARR_LEFT = "ArrowLeft", KEY_ARR_UP = "ArrowUp", KEY_ARR_RIGHT = "ArrowRight", KEY_ARR_DOWN = "ArrowDown", EVENT_FOCUS_IN = 'focusin', EVENT_FOCUS_OUT = 'focusout', EVENT_KEY_DOWN = 'keydown';
12
13
  const getElementByIndex = (index) => {
13
14
  return `[${TABINDEX}="${index}"]`;
14
15
  };
@@ -29,7 +30,7 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
29
30
  _isCollapsed = false;
30
31
  config = signal({});
31
32
  measures = signal(undefined);
32
- focus = signal(false);
33
+ focused = signal(false);
33
34
  part = signal(PART_DEFAULT_ITEM);
34
35
  regular = false;
35
36
  data = signal(undefined);
@@ -95,21 +96,28 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
95
96
  }
96
97
  this._service.collapse(data, collapsed);
97
98
  };
99
+ _focusHandler = () =>
100
+ /**
101
+ * Focus a list item
102
+ */
103
+ (align = FocusAlignments.CENTER) => {
104
+ this.focus(align);
105
+ };
98
106
  constructor() {
99
107
  super();
100
108
  this._id = this._service.generateComponentId();
101
109
  this._elementRef.nativeElement.setAttribute('id', String(this._id));
102
- const $data = toObservable(this.data), $focus = toObservable(this.focus);
103
- $focus.pipe(takeUntilDestroyed(), tap(v => {
110
+ const $data = toObservable(this.data), $focused = toObservable(this.focused);
111
+ $focused.pipe(takeUntilDestroyed(), tap(v => {
104
112
  this._service.areaFocus(v ? this._id : this._service.focusedId === this._id ? null : this._service.focusedId);
105
113
  })).subscribe();
106
114
  fromEvent(this.element, EVENT_FOCUS_IN).pipe(takeUntilDestroyed(), tap(e => {
107
- this.focus.set(true);
115
+ this.focused.set(true);
108
116
  this.updateConfig(this._data);
109
117
  this.updatePartStr(this._data, this._isSelected, this._isCollapsed);
110
118
  })).subscribe(),
111
119
  fromEvent(this.element, EVENT_FOCUS_OUT).pipe(takeUntilDestroyed(), tap(e => {
112
- this.focus.set(false);
120
+ this.focused.set(false);
113
121
  this.updateConfig(this._data);
114
122
  this.updatePartStr(this._data, this._isSelected, this._isCollapsed);
115
123
  })).subscribe(),
@@ -212,23 +220,34 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
212
220
  }
213
221
  }
214
222
  }
223
+ focus(align = FocusAlignments.CENTER) {
224
+ if (this._service.listElement) {
225
+ const tabIndex = this._data?.config?.tabIndex ?? 0;
226
+ let index = tabIndex;
227
+ const el = this._service.listElement.querySelector(getElementByIndex(index));
228
+ if (el) {
229
+ this._service.focus(el, align);
230
+ }
231
+ }
232
+ }
215
233
  updateMeasures(v) {
216
234
  this.measures.set(v?.measures ? { ...v.measures } : undefined);
217
235
  }
218
236
  updateConfig(v) {
219
237
  this.config.set({
220
- ...v?.config || {}, selected: this._isSelected, collapsed: this._isCollapsed, focus: this.focus(),
221
- collapse: this._collapseHandler(v), select: this._selectHandler(v)
238
+ ...v?.config || {}, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),
239
+ collapse: this._collapseHandler(v), select: this._selectHandler(v), focus: this._focusHandler(),
222
240
  });
223
241
  }
224
242
  update() {
225
243
  const data = this._data, regular = this.regular, length = this._regularLength;
226
244
  if (data) {
245
+ this._elementRef.nativeElement.setAttribute(ID, `${data.id}`);
227
246
  const styles = this._elementRef.nativeElement.style;
228
247
  styles.zIndex = data.config.zIndex;
229
248
  if (data.config.snapped) {
230
- this._elementRef.nativeElement.setAttribute('position', data.config.sticky === 1 ? '0' : `${data.config.isVertical ? data.measures.y : data.measures.x}`);
231
- styles.transform = data.config.sticky === 1 ? ZEROS_TRANSLATE_3D : `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX} , 0)`;
249
+ this._elementRef.nativeElement.setAttribute(POSITION, data.config.sticky === 1 ? POSITION_ZERO : `${data.config.isVertical ? data.measures.y : data.measures.x}`);
250
+ styles.transform = data.config.sticky === 1 ? ZEROS_TRANSLATE_3D : `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;
232
251
  ;
233
252
  if (!data.config.isSnappingMethodAdvanced) {
234
253
  styles.position = POSITION_STICKY;
@@ -237,17 +256,20 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
237
256
  else {
238
257
  styles.position = POSITION_ABSOLUTE;
239
258
  if (regular) {
240
- this._elementRef.nativeElement.setAttribute('position', '0');
241
- styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX} , 0)`;
259
+ this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);
260
+ styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;
242
261
  }
243
262
  else {
244
- this._elementRef.nativeElement.setAttribute('position', `${data.config.isVertical ? data.measures.y : data.measures.x}`);
245
- styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX} , 0)`;
263
+ this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);
264
+ styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;
246
265
  }
247
266
  }
248
267
  styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;
249
268
  styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;
250
269
  }
270
+ else {
271
+ this._elementRef.nativeElement.removeAttribute(ID);
272
+ }
251
273
  this._cdr.markForCheck();
252
274
  }
253
275
  updatePartStr(v, isSelected, isCollapsed) {
@@ -269,7 +291,7 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
269
291
  if (v ? v.config.new : false) {
270
292
  part += PART_ITEM_NEW;
271
293
  }
272
- if (this.focus()) {
294
+ if (this.focused()) {
273
295
  part += PART_ITEM_FOCUSED;
274
296
  }
275
297
  this.part.set(part);
@@ -316,13 +338,13 @@ export class NgVirtualListItemComponent extends BaseVirtualListItemComponent {
316
338
  this._service.itemClick(this._data);
317
339
  }
318
340
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgVirtualListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
319
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NgVirtualListItemComponent, selector: "ng-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "@if (data(); as item) {\r\n <div #listItem [part]=\"part()\" class=\"ngvl-item__container\" [attr.ng-vl-index]=\"item.config.tabIndex || -1\" tabindex=\"0\" [ngClass]=\"{'snapped': item.config.snapped,\r\n 'snapped-out': item.config.snappedOut, 'focus': focus()}\" (click)=\"onClickHandler()\">\r\n @if (itemRenderer(); as renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data || {}, measures: measures(), config: config()}\" />\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
341
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NgVirtualListItemComponent, selector: "ng-virtual-list-item", host: { attributes: { "role": "listitem" }, classAttribute: "ngvl__item" }, usesInheritance: true, ngImport: i0, template: "@if (data(); as item) {\r\n <div #listItem [part]=\"part()\" class=\"ngvl-item__container\" [attr.ng-vl-index]=\"item.config.tabIndex || -1\" tabindex=\"0\" [ngClass]=\"{'snapped': item.config.snapped,\r\n 'snapped-out': item.config.snappedOut, 'focus': focused()}\" (click)=\"onClickHandler()\">\r\n @if (itemRenderer(); as renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data || {}, measures: measures(), config: config()}\" />\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
320
342
  }
321
343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgVirtualListItemComponent, decorators: [{
322
344
  type: Component,
323
345
  args: [{ selector: 'ng-virtual-list-item', standalone: false, host: {
324
346
  'class': 'ngvl__item',
325
347
  'role': 'listitem',
326
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (data(); as item) {\r\n <div #listItem [part]=\"part()\" class=\"ngvl-item__container\" [attr.ng-vl-index]=\"item.config.tabIndex || -1\" tabindex=\"0\" [ngClass]=\"{'snapped': item.config.snapped,\r\n 'snapped-out': item.config.snappedOut, 'focus': focus()}\" (click)=\"onClickHandler()\">\r\n @if (itemRenderer(); as renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data || {}, measures: measures(), config: config()}\" />\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"] }]
348
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (data(); as item) {\r\n <div #listItem [part]=\"part()\" class=\"ngvl-item__container\" [attr.ng-vl-index]=\"item.config.tabIndex || -1\" tabindex=\"0\" [ngClass]=\"{'snapped': item.config.snapped,\r\n 'snapped-out': item.config.snappedOut, 'focus': focused()}\" (click)=\"onClickHandler()\">\r\n @if (itemRenderer(); as renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data || {}, measures: measures(), config: config()}\" />\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block;position:absolute;left:0;top:0;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit;box-sizing:border-box}\n"] }]
327
349
  }], ctorParameters: () => [] });
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUNMLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUNwSixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUN2SSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsR0FDMUQsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFF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b3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3JlbmRlci1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgSWQsIElSZWN0LCBJU2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX1pJTkRFWCwgRElTUExBWV9CTE9DSywgRElTUExBWV9OT05FLCBISURERU5fWklOREVYLCBQQVJUX0RFRkFVTFRfSVRFTSwgUEFSVF9JVEVNX0NPTExBUFNFRCwgUEFSVF9JVEVNX0VWRU4sIFBBUlRfSVRFTV9GT0NVU0VELCBQQVJUX0lURU1fT0RELFxyXG4gIFBBUlRfSVRFTV9TRUxFQ1RFRCwgUEFSVF9JVEVNX1NOQVBQRUQsIFBPU0lUSU9OX0FCU09MVVRFLCBQT1NJVElPTl9TVElDS1ksIFBYLCBTSVpFXzEwMF9QRVJTRU5ULCBTSVpFX0FVVE8sIFRSQU5TTEFURV8zRCwgUEFSVF9JVEVNX05FVywgXHJcbiAgVklTSUJJTElUWV9ISURERU4sIFZJU0lCSUxJVFlfVklTSUJMRSwgWkVST1NfVFJBTlNMQVRFXzNELFxyXG59IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHsgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL21vZGVscy9iYXNlLXZpcnR1YWwtbGlzdC1pdGVtLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vbmctdmlydHVhbC1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgbWFwLCB0YXAsIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMgfSBmcm9tICcuLi9lbnVtcy9tZXRob2QtZm9yLXNlbGVjdGluZy10eXBlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcgfSBmcm9tICcuLi9tb2RlbHMvcmVuZGVyLWl0ZW0tY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgdmFsaWRhdGVCb29sZWFuIH0gZnJvbSAnLi4vdXRpbHMvdmFsaWRhdGlvbic7XHJcblxyXG5pbnRlcmZhY2UgSUl0ZW1Db25maWcgZXh0ZW5kcyBJUmVuZGVyVmlydHVhbExpc3RJdGVtQ29uZmlnIHtcclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIGZvY3VzIG9yIG5vdC5cclxuICAgKi9cclxuICBmb2N1czogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgb3Igbm90LlxyXG4gICAqL1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgb3Igbm90LlxyXG4gICAqL1xyXG4gIGNvbGxhcHNlZDogYm9vbGVhbjtcclxuICAvKipcclxuICAgICogU2VsZWN0cyBhIGxpc3QgaXRlbVxyXG4gICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAgKi9cclxuICBzZWxlY3Q6IChzZWxlY3RlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgICogQ29sbGFwc2UgbGlzdCBpdGVtc1xyXG4gICAgKiBAcGFyYW0gY29sbGFwc2VkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgY29sbGFwc2UvZXhwYW5kIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgY29sbGFwc2U6IChjb2xsYXBzZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmNvbnN0IEFUVFJfQVJFQV9TRUxFQ1RFRCA9ICdhcmVhLXNlbGVjdGVkJywgVEFCSU5ERVggPSAnbmctdmwtaW5kZXgnLFxyXG4gIEtFWV9TUEFDRSA9IFwiIFwiLCBLRVlfQVJSX0xFRlQgPSBcIkFycm93TGVmdFwiLCBLRVlfQVJSX1VQID0gXCJBcnJvd1VwXCIsIEtFWV9BUlJfUklHSFQgPSBcIkFycm93UmlnaHRcIiwgS0VZX0FSUl9ET1dOID0gXCJBcnJvd0Rvd25cIixcclxuICBFVkVOVF9GT0NVU19JTiA9ICdmb2N1c2luJywgRVZFTlRfRk9DVVNfT1VUID0gJ2ZvY3Vzb3V0JywgRVZFTlRfS0VZX0RPV04gPSAna2V5ZG93bic7XHJcblxyXG5jb25zdCBnZXRFbGVtZW50QnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgcmV0dXJuIGBbJHtUQUJJTkRFWH09XCIke2luZGV4fVwiXWA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWaXJ0dWFsIGxpc3QgaXRlbSBjb21wb25lbnRcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXZpcnR1YWwtbGlzdC1pdGVtJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQuc2NzcycsXHJcbiAgaG9zdDoge1xyXG4gICAgJ2NsYXNzJzogJ25ndmxfX2l0ZW0nLFxyXG4gICAgJ3JvbGUnOiAnbGlzdGl0ZW0nLFxyXG4gIH0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCBleHRlbmRzIEJhc2VWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQge1xyXG4gIHByaXZhdGUgX2lkITogbnVtYmVyO1xyXG4gIGdldCBpZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gIHByb3RlY3RlZCBfc2VydmljZSA9IGluamVjdChOZ1ZpcnR1YWxMaXN0U2VydmljZSk7XHJcblxyXG4gIHByaXZhdGUgX2lzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uZmlnID0gc2lnbmFsPElJdGVtQ29uZmlnPih7fSBhcyBJSXRlbUNvbmZpZyk7XHJcblxyXG4gIG1lYXN1cmVzID0gc2lnbmFsPElSZWN0ICYge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZWx0YSBpcyBjYWxjdWxhdGVkIGZvciBTbmFwcGluZyBNZXRob2QuQURWQU5DRURcclxuICAgICAqL1xyXG4gICAgZGVsdGE6IG51bWJlcjtcclxuICB9IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICBmb2N1cyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHBhcnQgPSBzaWduYWw8c3RyaW5nPihQQVJUX0RFRkFVTFRfSVRFTSk7XHJcblxyXG4gIHJlZ3VsYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGF0YSA9IHNpZ25hbDxJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByaXZhdGUgX2RhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgc2V0IGl0ZW0odjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGEgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2RhdGEgPSB2O1xyXG5cclxuICAgIHRoaXMudXBkYXRlUGFydFN0cih2LCB0aGlzLl9pc1NlbGVjdGVkLCB0aGlzLl9pc0NvbGxhcHNlZCk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVDb25maWcodik7XHJcblxyXG4gICAgdGhpcy51cGRhdGVNZWFzdXJlcyh2KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHRoaXMuZGF0YS5zZXQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZ3VsYXJMZW5ndGg6IHN0cmluZyA9IFNJWkVfMTAwX1BFUlNFTlQ7XHJcbiAgc2V0IHJlZ3VsYXJMZW5ndGgodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fcmVndWxhckxlbmd0aCA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmVndWxhckxlbmd0aCA9IHY7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtSWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YT8uaWQ7XHJcbiAgfVxyXG5cclxuICBpdGVtUmVuZGVyZXIgPSBzaWduYWw8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgc2V0IHJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuaXRlbVJlbmRlcmVyLnNldCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuICBnZXQgZWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3RIYW5kbGVyID0gKGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IHVuZGVmaW5lZCkgPT5cclxuICAgIC8qKlxyXG4gICAgICogU2VsZWN0cyBhIGxpc3QgaXRlbVxyXG4gICAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgICAqL1xyXG4gICAgKHNlbGVjdGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHNlbGVjdGVkLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdGVkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0KGRhdGEsIHNlbGVjdGVkKTtcclxuICAgIH07XHJcblxyXG4gIHByaXZhdGUgX2NvbGxhcHNlSGFuZGxlciA9IChkYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQpID0+XHJcbiAgICAvKipcclxuICAgICogQ29sbGFwc2UgbGlzdCBpdGVtc1xyXG4gICAgKiBAcGFyYW0gY29sbGFwc2VkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgY29sbGFwc2UvZXhwYW5kIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgICAoY29sbGFwc2VkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKGNvbGxhcHNlZCwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fc2VydmljZS5jb2xsYXBzZShkYXRhLCBjb2xsYXBzZWQpO1xyXG4gICAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5faWQgPSB0aGlzLl9zZXJ2aWNlLmdlbmVyYXRlQ29tcG9uZW50SWQoKTtcclxuXHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIFN0cmluZyh0aGlzLl9pZCkpO1xyXG5cclxuICAgIGNvbnN0ICRkYXRhID0gdG9PYnNlcnZhYmxlKHRoaXMuZGF0YSksXHJcbiAgICAgICRmb2N1cyA9IHRvT2JzZXJ2YWJsZSh0aGlzLmZvY3VzKTtcclxuXHJcbiAgICAkZm9jdXMucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmFyZWFGb2N1cyh2ID8gdGhpcy5faWQgOiB0aGlzLl9zZXJ2aWNlLmZvY3VzZWRJZCA9PT0gdGhpcy5faWQgPyBudWxsIDogdGhpcy5fc2VydmljZS5mb2N1c2VkSWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudCwgRVZFTlRfRk9DVVNfSU4pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb2N1cy5zZXQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuX2RhdGEpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVBhcnRTdHIodGhpcy5fZGF0YSwgdGhpcy5faXNTZWxlY3RlZCwgdGhpcy5faXNDb2xsYXBzZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCksXHJcblxyXG4gICAgICBmcm9tRXZlbnQodGhpcy5lbGVtZW50LCBFVkVOVF9GT0NVU19PVVQpLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb2N1cy5zZXQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuX2RhdGEpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlUGFydFN0cih0aGlzLl9kYXRhLCB0aGlzLl9pc1NlbGVjdGVkLCB0aGlzLl9pc0NvbGxhcHNlZCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICkuc3Vic2NyaWJlKCksXHJcblxyXG4gICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4odGhpcy5lbGVtZW50LCBFVkVOVF9LRVlfRE9XTikucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX1NQQUNFOiB7XHJcbiAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlcnZpY2Uuc2VsZWN0QnlDbGljaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5zZWxlY3QodGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlLmNvbGxhcHNlQnlDbGljaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZS5jb2xsYXBzZSh0aGlzLl9kYXRhKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBLRVlfQVJSX0xFRlQ6XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZygpLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUHJldigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1VQOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZygpLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUHJldigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBLRVlfQVJSX1JJR0hUOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c05leHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9ET1dOOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZygpLmlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTmV4dCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFskZGF0YSwgdGhpcy5fc2VydmljZS4kbWV0aG9kT2ZTZWxlY3RpbmcsIHRoaXMuX3NlcnZpY2UuJHNlbGVjdGVkSWRzLCB0aGlzLl9zZXJ2aWNlLiRjb2xsYXBzZWRJZHNdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgbWFwKChbLCBtLCBzZWxlY3RlZElkcywgY29sbGFwc2VkSWRzXSkgPT4gKHsgbWV0aG9kOiBtLCBzZWxlY3RlZElkcywgY29sbGFwc2VkSWRzIH0pKSxcclxuICAgICAgdGFwKCh7IG1ldGhvZCwgc2VsZWN0ZWRJZHMsIGNvbGxhcHNlZElkcyB9KSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHNlbGVjdGVkSWRzIGFzIElkIHwgdW5kZWZpbmVkLCBpc1NlbGVjdGVkID0gaWQgPT09IHRoaXMuaXRlbUlkO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJfQVJFQV9TRUxFQ1RFRCwgU3RyaW5nKGlzU2VsZWN0ZWQpKTtcclxuICAgICAgICAgICAgdGhpcy5faXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTVVMVElfU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbElkcyA9IHNlbGVjdGVkSWRzIGFzIEFycmF5PElkPiwgaXNTZWxlY3RlZCA9IHRoaXMuaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgYWN0dWFsSWRzICYmIGFjdHVhbElkcy5pbmNsdWRlcyh0aGlzLml0ZW1JZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUl9BUkVBX1NFTEVDVEVELCBTdHJpbmcoaXNTZWxlY3RlZCkpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJfQVJFQV9TRUxFQ1RFRCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhY3R1YWxJZHMgPSBjb2xsYXBzZWRJZHMsIGlzQ29sbGFwc2VkID0gdGhpcy5pdGVtSWQgIT09IHVuZGVmaW5lZCAmJiBhY3R1YWxJZHMgJiYgYWN0dWFsSWRzLmluY2x1ZGVzKHRoaXMuaXRlbUlkKTtcclxuICAgICAgICB0aGlzLl9pc0NvbGxhcHNlZCA9IGlzQ29sbGFwc2VkO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVBhcnRTdHIodGhpcy5fZGF0YSwgdGhpcy5faXNTZWxlY3RlZCwgaXNDb2xsYXBzZWQpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLl9kYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlcyh0aGlzLl9kYXRhKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c05leHQoKSB7XHJcbiAgICBpZiAodGhpcy5fc2VydmljZS5saXN0RWxlbWVudCkge1xyXG4gICAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuX2RhdGE/LmNvbmZpZz8udGFiSW5kZXggPz8gMCwgbGVuZ3RoID0gdGhpcy5fc2VydmljZS5jb2xsZWN0aW9uPy5sZW5ndGggPz8gMDtcclxuICAgICAgbGV0IGluZGV4ID0gdGFiSW5kZXg7XHJcbiAgICAgIHdoaWxlIChpbmRleCA8PSBsZW5ndGgpIHtcclxuICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fc2VydmljZS5saXN0RWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihnZXRFbGVtZW50QnlJbmRleChpbmRleCkpO1xyXG4gICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNQcmV2KCkge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLl9kYXRhPy5jb25maWc/LnRhYkluZGV4ID8/IDA7XHJcbiAgICAgIGxldCBpbmRleCA9IHRhYkluZGV4O1xyXG4gICAgICB3aGlsZSAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgIGluZGV4LS07XHJcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGdldEVsZW1lbnRCeUluZGV4KGluZGV4KSk7XHJcbiAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmZvY3VzKGVsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVNZWFzdXJlcyh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMubWVhc3VyZXMuc2V0KHY/Lm1lYXN1cmVzID8geyAuLi52Lm1lYXN1cmVzIH0gOiB1bmRlZmluZWQpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZyh2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuY29uZmlnLnNldCh7XHJcbiAgICAgIC4uLnY/LmNvbmZpZyB8fCB7fSBhcyBJSXRlbUNvbmZpZywgc2VsZWN0ZWQ6IHRoaXMuX2lzU2VsZWN0ZWQsIGNvbGxhcHNlZDogdGhpcy5faXNDb2xsYXBzZWQsIGZvY3VzOiB0aGlzLmZvY3VzKCksXHJcbiAgICAgIGNvbGxhcHNlOiB0aGlzLl9jb2xsYXBzZUhhbmRsZXIodiksIHNlbGVjdDogdGhpcy5fc2VsZWN0SGFuZGxlcih2KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhLCByZWd1bGFyID0gdGhpcy5yZWd1bGFyLCBsZW5ndGggPSB0aGlzLl9yZWd1bGFyTGVuZ3RoO1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgY29uc3Qgc3R5bGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlO1xyXG4gICAgICBzdHlsZXMuekluZGV4ID0gZGF0YS5jb25maWcuekluZGV4O1xyXG4gICAgICBpZiAoZGF0YS5jb25maWcuc25hcHBlZCkge1xyXG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJywgZGF0YS5jb25maWcuc3RpY2t5ID09PSAxID8gJzAnIDogYCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMueSA6IGRhdGEubWVhc3VyZXMueH1gKTtcclxuICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gZGF0YS5jb25maWcuc3RpY2t5ID09PSAxID8gWkVST1NfVFJBTlNMQVRFXzNEIDogYCR7VFJBTlNMQVRFXzNEfSgke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyAwIDogZGF0YS5tZWFzdXJlcy54fSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLnkgOiAwfSR7UFh9ICwgMClgOztcclxuICAgICAgICBpZiAoIWRhdGEuY29uZmlnLmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICAgICAgc3R5bGVzLnBvc2l0aW9uID0gUE9TSVRJT05fU1RJQ0tZO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdHlsZXMucG9zaXRpb24gPSBQT1NJVElPTl9BQlNPTFVURTtcclxuICAgICAgICBpZiAocmVndWxhcikge1xyXG4gICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCAnMCcpO1xyXG4gICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IGAke1RSQU5TTEFURV8zRH0oJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gMCA6IGRhdGEubWVhc3VyZXMuZGVsdGF9JHtQWH0sICR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMuZGVsdGEgOiAwfSR7UFh9ICwgMClgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdwb3NpdGlvbicsIGAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLnkgOiBkYXRhLm1lYXN1cmVzLnh9YCk7XHJcbiAgICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gYCR7VFJBTlNMQVRFXzNEfSgke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyAwIDogZGF0YS5tZWFzdXJlcy54fSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLnkgOiAwfSR7UFh9ICwgMClgO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBzdHlsZXMuaGVpZ2h0ID0gZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEuY29uZmlnLmR5bmFtaWMgPyBTSVpFX0FVVE8gOiBgJHtkYXRhLm1lYXN1cmVzLmhlaWdodH0ke1BYfWAgOiByZWd1bGFyID8gbGVuZ3RoIDogU0laRV8xMDBfUEVSU0VOVDtcclxuICAgICAgc3R5bGVzLndpZHRoID0gZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IHJlZ3VsYXIgPyBsZW5ndGggOiBTSVpFXzEwMF9QRVJTRU5UIDogZGF0YS5jb25maWcuZHluYW1pYyA/IFNJWkVfQVVUTyA6IGAke2RhdGEubWVhc3VyZXMud2lkdGh9JHtQWH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFydFN0cih2OiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkLCBpc1NlbGVjdGVkOiBib29sZWFuLCBpc0NvbGxhcHNlZDogYm9vbGVhbikge1xyXG4gICAgbGV0IG9kZCA9IGZhbHNlO1xyXG4gICAgaWYgKHY/LmluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgb2RkID0gdi5pbmRleCAlIDIgPT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcnQgPSBQQVJUX0RFRkFVTFRfSVRFTTtcclxuICAgIHBhcnQgKz0gb2RkID8gUEFSVF9JVEVNX09ERCA6IFBBUlRfSVRFTV9FVkVOO1xyXG4gICAgaWYgKHYgPyB2LmNvbmZpZy5zbmFwcGVkIDogZmFsc2UpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fU05BUFBFRDtcclxuICAgIH1cclxuICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX1NFTEVDVEVEO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX0NPTExBUFNFRDtcclxuICAgIH1cclxuICAgIGlmICh2ID8gdi5jb25maWcubmV3IDogZmFsc2UpIHtcclxuICAgICAgcGFydCArPSBQQVJUX0lURU1fTkVXO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9jdXMoKSkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9GT0NVU0VEO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYXJ0LnNldChwYXJ0KTtcclxuICB9XHJcblxyXG4gIGdldEJvdW5kcygpOiBJU2l6ZSB7XHJcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgY29uc3Qgc3R5bGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlO1xyXG4gICAgaWYgKHRoaXMucmVndWxhcikge1xyXG4gICAgICBpZiAoc3R5bGVzLmRpc3BsYXkgPT09IERJU1BMQVlfQkxPQ0spIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy5kaXNwbGF5ID0gRElTUExBWV9CTE9DSztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9WSVNJQkxFKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMudmlzaWJpbGl0eSA9IFZJU0lCSUxJVFlfVklTSUJMRTtcclxuICAgIH1cclxuICAgIHN0eWxlcy56SW5kZXggPSB0aGlzLl9kYXRhPy5jb25maWc/LnpJbmRleCA/PyBERUZBVUxUX1pJTkRFWDtcclxuICB9XHJcblxyXG4gIGhpZGUoKSB7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGU7XHJcbiAgICBpZiAodGhpcy5yZWd1bGFyKSB7XHJcbiAgICAgIGlmIChzdHlsZXMuZGlzcGxheSA9PT0gRElTUExBWV9OT05FKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMuZGlzcGxheSA9IERJU1BMQVlfTk9ORTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9ISURERU4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy52aXNpYmlsaXR5ID0gVklTSUJJTElUWV9ISURERU47XHJcbiAgICB9XHJcbiAgICBzdHlsZXMucG9zaXRpb24gPSBQT1NJVElPTl9BQlNPTFVURTtcclxuICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBaRVJPU19UUkFOU0xBVEVfM0Q7XHJcbiAgICBzdHlsZXMuekluZGV4ID0gSElEREVOX1pJTkRFWDtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tIYW5kbGVyKCkge1xyXG4gICAgdGhpcy5fc2VydmljZS5pdGVtQ2xpY2sodGhpcy5fZGF0YSk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoZGF0YSgpOyBhcyBpdGVtKSB7XHJcbiAgICA8ZGl2ICNsaXN0SXRlbSBbcGFydF09XCJwYXJ0KClcIiBjbGFzcz1cIm5ndmwtaXRlbV9fY29udGFpbmVyXCIgW2F0dHIubmctdmwtaW5kZXhdPVwiaXRlbS5jb25maWcudGFiSW5kZXggfHwgLTFcIiB0YWJpbmRleD1cIjBcIiBbbmdDbGFzc109XCJ7J3NuYXBwZWQnOiBpdGVtLmNvbmZpZy5zbmFwcGVkLFxyXG4gICAgICAgICAgICAnc25hcHBlZC1vdXQnOiBpdGVtLmNvbmZpZy5zbmFwcGVkT3V0LCAnZm9jdXMnOiBmb2N1cygpfVwiIChjbGljayk9XCJvbkNsaWNrSGFuZGxlcigpXCI+XHJcbiAgICAgICAgQGlmIChpdGVtUmVuZGVyZXIoKTsgYXMgcmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZW5kZXJlclwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2RhdGE6IGl0ZW0uZGF0YSB8fCB7fSwgbWVhc3VyZXM6IG1lYXN1cmVzKCksIGNvbmZpZzogY29uZmlnKCl9XCIgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbn1cclxuIl19
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUNMLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQ3JJLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQ3hJLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsR0FDeEUsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFF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IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3JlbmRlci1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnQsIElkLCBJU2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX1pJTkRFWCwgRElTUExBWV9CTE9DSywgRElTUExBWV9OT05FLCBISURERU5fWklOREVYLCBQQVJUX0RFRkFVTFRfSVRFTSwgUEFSVF9JVEVNX0NPTExBUFNFRCwgUEFSVF9JVEVNX0VWRU4sIFBBUlRfSVRFTV9GT0NVU0VELFxyXG4gIFBBUlRfSVRFTV9ORVcsIFBBUlRfSVRFTV9PREQsIFBBUlRfSVRFTV9TRUxFQ1RFRCwgUEFSVF9JVEVNX1NOQVBQRUQsIFBPU0lUSU9OX0FCU09MVVRFLCBQT1NJVElPTl9TVElDS1ksIFBYLCBTSVpFXzEwMF9QRVJTRU5ULCBTSVpFX0FVVE8sXHJcbiAgVFJBTlNMQVRFXzNELCBWSVNJQklMSVRZX0hJRERFTiwgVklTSUJJTElUWV9WSVNJQkxFLCBaRVJPU19UUkFOU0xBVEVfM0QsXHJcbn0gZnJvbSAnLi4vY29uc3QnO1xyXG5pbXBvcnQgeyBCYXNlVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWxzL2Jhc2UtdmlydHVhbC1saXN0LWl0ZW0tY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdFNlcnZpY2UgfSBmcm9tICcuLi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBtYXAsIHRhcCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcyB9IGZyb20gJy4uL2VudW1zL21ldGhvZC1mb3Itc2VsZWN0aW5nLXR5cGVzJztcclxuaW1wb3J0IHsgdmFsaWRhdGVCb29sZWFuIH0gZnJvbSAnLi4vdXRpbHMvdmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50cyB9IGZyb20gJy4uL2VudW1zJztcclxuaW1wb3J0IHsgSURpc3BsYXlPYmplY3RDb25maWcsIElEaXNwbGF5T2JqZWN0TWVhc3VyZXMgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuY29uc3QgQVRUUl9BUkVBX1NFTEVDVEVEID0gJ2FyZWEtc2VsZWN0ZWQnLCBUQUJJTkRFWCA9ICduZy12bC1pbmRleCcsIFBPU0lUSU9OID0gJ3Bvc2l0aW9uJywgUE9TSVRJT05fWkVSTyA9ICcwJywgSUQgPSAnaXRlbS1pZCcsXHJcbiAgS0VZX1NQQUNFID0gXCIgXCIsIEtFWV9BUlJfTEVGVCA9IFwiQXJyb3dMZWZ0XCIsIEtFWV9BUlJfVVAgPSBcIkFycm93VXBcIiwgS0VZX0FSUl9SSUdIVCA9IFwiQXJyb3dSaWdodFwiLCBLRVlfQVJSX0RPV04gPSBcIkFycm93RG93blwiLFxyXG4gIEVWRU5UX0ZPQ1VTX0lOID0gJ2ZvY3VzaW4nLCBFVkVOVF9GT0NVU19PVVQgPSAnZm9jdXNvdXQnLCBFVkVOVF9LRVlfRE9XTiA9ICdrZXlkb3duJztcclxuXHJcbmNvbnN0IGdldEVsZW1lbnRCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcclxuICByZXR1cm4gYFske1RBQklOREVYfT1cIiR7aW5kZXh9XCJdYDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFZpcnR1YWwgbGlzdCBpdGVtIGNvbXBvbmVudFxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xOC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctdmlydHVhbC1saXN0LWl0ZW0nLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJyxcclxuICBob3N0OiB7XHJcbiAgICAnY2xhc3MnOiAnbmd2bF9faXRlbScsXHJcbiAgICAncm9sZSc6ICdsaXN0aXRlbScsXHJcbiAgfSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfaWQhOiBudW1iZXI7XHJcbiAgZ2V0IGlkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgcHJvdGVjdGVkIF9zZXJ2aWNlID0gaW5qZWN0KE5nVmlydHVhbExpc3RTZXJ2aWNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9pc0NvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25maWcgPSBzaWduYWw8SURpc3BsYXlPYmplY3RDb25maWc+KHt9IGFzIElEaXNwbGF5T2JqZWN0Q29uZmlnKTtcclxuXHJcbiAgbWVhc3VyZXMgPSBzaWduYWw8SURpc3BsYXlPYmplY3RNZWFzdXJlcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgZm9jdXNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHBhcnQgPSBzaWduYWw8c3RyaW5nPihQQVJUX0RFRkFVTFRfSVRFTSk7XHJcblxyXG4gIHJlZ3VsYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZGF0YSA9IHNpZ25hbDxJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHByaXZhdGUgX2RhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgc2V0IGl0ZW0odjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX2RhdGEgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2RhdGEgPSB2O1xyXG5cclxuICAgIHRoaXMudXBkYXRlUGFydFN0cih2LCB0aGlzLl9pc1NlbGVjdGVkLCB0aGlzLl9pc0NvbGxhcHNlZCk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVDb25maWcodik7XHJcblxyXG4gICAgdGhpcy51cGRhdGVNZWFzdXJlcyh2KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHRoaXMuZGF0YS5zZXQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlZ3VsYXJMZW5ndGg6IHN0cmluZyA9IFNJWkVfMTAwX1BFUlNFTlQ7XHJcbiAgc2V0IHJlZ3VsYXJMZW5ndGgodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fcmVndWxhckxlbmd0aCA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmVndWxhckxlbmd0aCA9IHY7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtSWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YT8uaWQ7XHJcbiAgfVxyXG5cclxuICBpdGVtUmVuZGVyZXIgPSBzaWduYWw8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgc2V0IHJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuaXRlbVJlbmRlcmVyLnNldCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuICBnZXQgZWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3RIYW5kbGVyID0gKGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IHVuZGVmaW5lZCkgPT5cclxuICAgIC8qKlxyXG4gICAgICogU2VsZWN0cyBhIGxpc3QgaXRlbVxyXG4gICAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgICAqL1xyXG4gICAgKHNlbGVjdGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKHNlbGVjdGVkLCB0cnVlKTtcclxuICAgICAgaWYgKCF2YWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBcInNlbGVjdGVkXCIgcGFyYW1ldGVyIG11c3QgYmUgb2YgdHlwZSBgYm9vbGVhbmAgb3IgYHVuZGVmaW5lZGAuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0KGRhdGEsIHNlbGVjdGVkKTtcclxuICAgIH07XHJcblxyXG4gIHByaXZhdGUgX2NvbGxhcHNlSGFuZGxlciA9IChkYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCB1bmRlZmluZWQpID0+XHJcbiAgICAvKipcclxuICAgICogQ29sbGFwc2UgbGlzdCBpdGVtc1xyXG4gICAgKiBAcGFyYW0gY29sbGFwc2VkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgY29sbGFwc2UvZXhwYW5kIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgICAoY29sbGFwc2VkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVCb29sZWFuKGNvbGxhcHNlZCwgdHJ1ZSk7XHJcbiAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgXCJjb2xsYXBzZWRcIiBwYXJhbWV0ZXIgbXVzdCBiZSBvZiB0eXBlIGBib29sZWFuYCBvciBgdW5kZWZpbmVkYC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fc2VydmljZS5jb2xsYXBzZShkYXRhLCBjb2xsYXBzZWQpO1xyXG4gICAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfZm9jdXNIYW5kbGVyID0gKCkgPT5cclxuICAgIC8qKlxyXG4gICAgKiBGb2N1cyBhIGxpc3QgaXRlbVxyXG4gICAgKi9cclxuICAgIChhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXMoYWxpZ24pO1xyXG4gICAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5faWQgPSB0aGlzLl9zZXJ2aWNlLmdlbmVyYXRlQ29tcG9uZW50SWQoKTtcclxuXHJcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIFN0cmluZyh0aGlzLl9pZCkpO1xyXG5cclxuICAgIGNvbnN0ICRkYXRhID0gdG9PYnNlcnZhYmxlKHRoaXMuZGF0YSksXHJcbiAgICAgICRmb2N1c2VkID0gdG9PYnNlcnZhYmxlKHRoaXMuZm9jdXNlZCk7XHJcblxyXG4gICAgJGZvY3VzZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmFyZWFGb2N1cyh2ID8gdGhpcy5faWQgOiB0aGlzLl9zZXJ2aWNlLmZvY3VzZWRJZCA9PT0gdGhpcy5faWQgPyBudWxsIDogdGhpcy5fc2VydmljZS5mb2N1c2VkSWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudCwgRVZFTlRfRk9DVVNfSU4pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkLnNldCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5fZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUGFydFN0cih0aGlzLl9kYXRhLCB0aGlzLl9pc1NlbGVjdGVkLCB0aGlzLl9pc0NvbGxhcHNlZCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKSxcclxuXHJcbiAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnQsIEVWRU5UX0ZPQ1VTX09VVCkucGlwZShcclxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgICB0YXAoZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvY3VzZWQuc2V0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLl9kYXRhKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBhcnRTdHIodGhpcy5fZGF0YSwgdGhpcy5faXNTZWxlY3RlZCwgdGhpcy5faXNDb2xsYXBzZWQpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApLnN1YnNjcmliZSgpLFxyXG5cclxuICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHRoaXMuZWxlbWVudCwgRVZFTlRfS0VZX0RPV04pLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgICAgdGFwKGUgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoIChlLmtleSkge1xyXG4gICAgICAgICAgICBjYXNlIEtFWV9TUEFDRToge1xyXG4gICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2Uuc2VsZWN0KHRoaXMuX2RhdGEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5fc2VydmljZS5jb2xsYXBzZUJ5Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2UuY29sbGFwc2UodGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9MRUZUOlxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1ByZXYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9VUDpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1ByZXYoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgS0VZX0FSUl9SSUdIVDpcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnKCkuaXNWZXJ0aWNhbCkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNOZXh0KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEtFWV9BUlJfRE9XTjpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcoKS5pc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c05leHQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJGRhdGEsIHRoaXMuX3NlcnZpY2UuJG1ldGhvZE9mU2VsZWN0aW5nLCB0aGlzLl9zZXJ2aWNlLiRzZWxlY3RlZElkcywgdGhpcy5fc2VydmljZS4kY29sbGFwc2VkSWRzXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIG1hcCgoWywgbSwgc2VsZWN0ZWRJZHMsIGNvbGxhcHNlZElkc10pID0+ICh7IG1ldGhvZDogbSwgc2VsZWN0ZWRJZHMsIGNvbGxhcHNlZElkcyB9KSksXHJcbiAgICAgIHRhcCgoeyBtZXRob2QsIHNlbGVjdGVkSWRzLCBjb2xsYXBzZWRJZHMgfSkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAobWV0aG9kKSB7XHJcbiAgICAgICAgICBjYXNlIE1ldGhvZHNGb3JTZWxlY3RpbmdUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBzZWxlY3RlZElkcyBhcyBJZCB8IHVuZGVmaW5lZCwgaXNTZWxlY3RlZCA9IGlkID09PSB0aGlzLml0ZW1JZDtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSX0FSRUFfU0VMRUNURUQsIFN0cmluZyhpc1NlbGVjdGVkKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgTWV0aG9kc0ZvclNlbGVjdGluZ1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxJZHMgPSBzZWxlY3RlZElkcyBhcyBBcnJheTxJZD4sIGlzU2VsZWN0ZWQgPSB0aGlzLml0ZW1JZCAhPT0gdW5kZWZpbmVkICYmIGFjdHVhbElkcyAmJiBhY3R1YWxJZHMuaW5jbHVkZXModGhpcy5pdGVtSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJfQVJFQV9TRUxFQ1RFRCwgU3RyaW5nKGlzU2VsZWN0ZWQpKTtcclxuICAgICAgICAgICAgdGhpcy5faXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBNZXRob2RzRm9yU2VsZWN0aW5nVHlwZXMuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSX0FSRUFfU0VMRUNURUQpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWN0dWFsSWRzID0gY29sbGFwc2VkSWRzLCBpc0NvbGxhcHNlZCA9IHRoaXMuaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgYWN0dWFsSWRzICYmIGFjdHVhbElkcy5pbmNsdWRlcyh0aGlzLml0ZW1JZCk7XHJcbiAgICAgICAgdGhpcy5faXNDb2xsYXBzZWQgPSBpc0NvbGxhcHNlZDtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQYXJ0U3RyKHRoaXMuX2RhdGEsIHRoaXMuX2lzU2VsZWN0ZWQsIGlzQ29sbGFwc2VkKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5fZGF0YSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlTWVhc3VyZXModGhpcy5fZGF0YSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNOZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLl9kYXRhPy5jb25maWc/LnRhYkluZGV4ID8/IDAsIGxlbmd0aCA9IHRoaXMuX3NlcnZpY2UuY29sbGVjdGlvbj8ubGVuZ3RoID8/IDA7XHJcbiAgICAgIGxldCBpbmRleCA9IHRhYkluZGV4O1xyXG4gICAgICB3aGlsZSAoaW5kZXggPD0gbGVuZ3RoKSB7XHJcbiAgICAgICAgaW5kZXgrKztcclxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oZ2V0RWxlbWVudEJ5SW5kZXgoaW5kZXgpKTtcclxuICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuZm9jdXMoZWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzUHJldigpIHtcclxuICAgIGlmICh0aGlzLl9zZXJ2aWNlLmxpc3RFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy5fZGF0YT8uY29uZmlnPy50YWJJbmRleCA/PyAwO1xyXG4gICAgICBsZXQgaW5kZXggPSB0YWJJbmRleDtcclxuICAgICAgd2hpbGUgKGluZGV4ID49IDApIHtcclxuICAgICAgICBpbmRleC0tO1xyXG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fc2VydmljZS5saXN0RWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihnZXRFbGVtZW50QnlJbmRleChpbmRleCkpO1xyXG4gICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXMoYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUikge1xyXG4gICAgaWYgKHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLl9kYXRhPy5jb25maWc/LnRhYkluZGV4ID8/IDA7XHJcbiAgICAgIGxldCBpbmRleCA9IHRhYkluZGV4O1xyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuX3NlcnZpY2UubGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oZ2V0RWxlbWVudEJ5SW5kZXgoaW5kZXgpKTtcclxuICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5mb2N1cyhlbCwgYWxpZ24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1lYXN1cmVzKHY6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5tZWFzdXJlcy5zZXQodj8ubWVhc3VyZXMgPyB7IC4uLnYubWVhc3VyZXMgfSA6IHVuZGVmaW5lZClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ29uZmlnKHY6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5jb25maWcuc2V0KHtcclxuICAgICAgLi4udj8uY29uZmlnIHx8IHt9IGFzIElEaXNwbGF5T2JqZWN0Q29uZmlnLCBzZWxlY3RlZDogdGhpcy5faXNTZWxlY3RlZCwgY29sbGFwc2VkOiB0aGlzLl9pc0NvbGxhcHNlZCwgZm9jdXNlZDogdGhpcy5mb2N1c2VkKCksXHJcbiAgICAgIGNvbGxhcHNlOiB0aGlzLl9jb2xsYXBzZUhhbmRsZXIodiksIHNlbGVjdDogdGhpcy5fc2VsZWN0SGFuZGxlcih2KSwgZm9jdXM6IHRoaXMuX2ZvY3VzSGFuZGxlcigpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhLCByZWd1bGFyID0gdGhpcy5yZWd1bGFyLCBsZW5ndGggPSB0aGlzLl9yZWd1bGFyTGVuZ3RoO1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShJRCwgYCR7ZGF0YS5pZH1gKTtcclxuICAgICAgY29uc3Qgc3R5bGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlO1xyXG4gICAgICBzdHlsZXMuekluZGV4ID0gZGF0YS5jb25maWcuekluZGV4O1xyXG4gICAgICBpZiAoZGF0YS5jb25maWcuc25hcHBlZCkge1xyXG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoUE9TSVRJT04sIGRhdGEuY29uZmlnLnN0aWNreSA9PT0gMSA/IFBPU0lUSU9OX1pFUk8gOiBgJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5tZWFzdXJlcy55IDogZGF0YS5tZWFzdXJlcy54fWApO1xyXG4gICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBkYXRhLmNvbmZpZy5zdGlja3kgPT09IDEgPyBaRVJPU19UUkFOU0xBVEVfM0QgOiBgJHtUUkFOU0xBVEVfM0R9KCR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IDAgOiBkYXRhLm1lYXN1cmVzLnh9JHtQWH0sICR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMueSA6IDB9JHtQWH0sICR7UE9TSVRJT05fWkVST30pYDs7XHJcbiAgICAgICAgaWYgKCFkYXRhLmNvbmZpZy5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHN0eWxlcy5wb3NpdGlvbiA9IFBPU0lUSU9OX1NUSUNLWTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3R5bGVzLnBvc2l0aW9uID0gUE9TSVRJT05fQUJTT0xVVEU7XHJcbiAgICAgICAgaWYgKHJlZ3VsYXIpIHtcclxuICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoUE9TSVRJT04sIFBPU0lUSU9OX1pFUk8pO1xyXG4gICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IGAke1RSQU5TTEFURV8zRH0oJHtkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gMCA6IGRhdGEubWVhc3VyZXMuZGVsdGF9JHtQWH0sICR7ZGF0YS5jb25maWcuaXNWZXJ0aWNhbCA/IGRhdGEubWVhc3VyZXMuZGVsdGEgOiAwfSR7UFh9LCAke1BPU0lUSU9OX1pFUk99KWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoUE9TSVRJT04sIGAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLnkgOiBkYXRhLm1lYXN1cmVzLnh9YCk7XHJcbiAgICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gYCR7VFJBTlNMQVRFXzNEfSgke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyAwIDogZGF0YS5tZWFzdXJlcy54fSR7UFh9LCAke2RhdGEuY29uZmlnLmlzVmVydGljYWwgPyBkYXRhLm1lYXN1cmVzLnkgOiAwfSR7UFh9LCAke1BPU0lUSU9OX1pFUk99KWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHN0eWxlcy5oZWlnaHQgPSBkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gZGF0YS5jb25maWcuZHluYW1pYyA/IFNJWkVfQVVUTyA6IGAke2RhdGEubWVhc3VyZXMuaGVpZ2h0fSR7UFh9YCA6IHJlZ3VsYXIgPyBsZW5ndGggOiBTSVpFXzEwMF9QRVJTRU5UO1xyXG4gICAgICBzdHlsZXMud2lkdGggPSBkYXRhLmNvbmZpZy5pc1ZlcnRpY2FsID8gcmVndWxhciA/IGxlbmd0aCA6IFNJWkVfMTAwX1BFUlNFTlQgOiBkYXRhLmNvbmZpZy5keW5hbWljID8gU0laRV9BVVRPIDogYCR7ZGF0YS5tZWFzdXJlcy53aWR0aH0ke1BYfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKElEKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhcnRTdHIodjogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgaXNTZWxlY3RlZDogYm9vbGVhbiwgaXNDb2xsYXBzZWQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBvZGQgPSBmYWxzZTtcclxuICAgIGlmICh2Py5pbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIG9kZCA9IHYuaW5kZXggJSAyID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJ0ID0gUEFSVF9ERUZBVUxUX0lURU07XHJcbiAgICBwYXJ0ICs9IG9kZCA/IFBBUlRfSVRFTV9PREQgOiBQQVJUX0lURU1fRVZFTjtcclxuICAgIGlmICh2ID8gdi5jb25maWcuc25hcHBlZCA6IGZhbHNlKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX1NOQVBQRUQ7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9TRUxFQ1RFRDtcclxuICAgIH1cclxuICAgIGlmIChpc0NvbGxhcHNlZCkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9DT0xMQVBTRUQ7XHJcbiAgICB9XHJcbiAgICBpZiAodiA/IHYuY29uZmlnLm5ldyA6IGZhbHNlKSB7XHJcbiAgICAgIHBhcnQgKz0gUEFSVF9JVEVNX05FVztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvY3VzZWQoKSkge1xyXG4gICAgICBwYXJ0ICs9IFBBUlRfSVRFTV9GT0NVU0VEO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYXJ0LnNldChwYXJ0KTtcclxuICB9XHJcblxyXG4gIGdldEJvdW5kcygpOiBJU2l6ZSB7XHJcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgY29uc3Qgc3R5bGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlO1xyXG4gICAgaWYgKHRoaXMucmVndWxhcikge1xyXG4gICAgICBpZiAoc3R5bGVzLmRpc3BsYXkgPT09IERJU1BMQVlfQkxPQ0spIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy5kaXNwbGF5ID0gRElTUExBWV9CTE9DSztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9WSVNJQkxFKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMudmlzaWJpbGl0eSA9IFZJU0lCSUxJVFlfVklTSUJMRTtcclxuICAgIH1cclxuICAgIHN0eWxlcy56SW5kZXggPSB0aGlzLl9kYXRhPy5jb25maWc/LnpJbmRleCA/PyBERUZBVUxUX1pJTkRFWDtcclxuICB9XHJcblxyXG4gIGhpZGUoKSB7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGU7XHJcbiAgICBpZiAodGhpcy5yZWd1bGFyKSB7XHJcbiAgICAgIGlmIChzdHlsZXMuZGlzcGxheSA9PT0gRElTUExBWV9OT05FKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzdHlsZXMuZGlzcGxheSA9IERJU1BMQVlfTk9ORTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzdHlsZXMudmlzaWJpbGl0eSA9PT0gVklTSUJJTElUWV9ISURERU4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlcy52aXNpYmlsaXR5ID0gVklTSUJJTElUWV9ISURERU47XHJcbiAgICB9XHJcbiAgICBzdHlsZXMucG9zaXRpb24gPSBQT1NJVElPTl9BQlNPTFVURTtcclxuICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBaRVJPU19UUkFOU0xBVEVfM0Q7XHJcbiAgICBzdHlsZXMuekluZGV4ID0gSElEREVOX1pJTkRFWDtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tIYW5kbGVyKCkge1xyXG4gICAgdGhpcy5fc2VydmljZS5pdGVtQ2xpY2sodGhpcy5fZGF0YSk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoZGF0YSgpOyBhcyBpdGVtKSB7XHJcbiAgICA8ZGl2ICNsaXN0SXRlbSBbcGFydF09XCJwYXJ0KClcIiBjbGFzcz1cIm5ndmwtaXRlbV9fY29udGFpbmVyXCIgW2F0dHIubmctdmwtaW5kZXhdPVwiaXRlbS5jb25maWcudGFiSW5kZXggfHwgLTFcIiB0YWJpbmRleD1cIjBcIiBbbmdDbGFzc109XCJ7J3NuYXBwZWQnOiBpdGVtLmNvbmZpZy5zbmFwcGVkLFxyXG4gICAgICAgICAgICAnc25hcHBlZC1vdXQnOiBpdGVtLmNvbmZpZy5zbmFwcGVkT3V0LCAnZm9jdXMnOiBmb2N1c2VkKCl9XCIgKGNsaWNrKT1cIm9uQ2xpY2tIYW5kbGVyKClcIj5cclxuICAgICAgICBAaWYgKGl0ZW1SZW5kZXJlcigpOyBhcyByZW5kZXJlcikge1xyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJlbmRlcmVyXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTogaXRlbS5kYXRhIHx8IHt9LCBtZWFzdXJlczogbWVhc3VyZXMoKSwgY29uZmlnOiBjb25maWcoKX1cIiAvPlxyXG4gICAgICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxufVxyXG4iXX0=
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Focus Alignments.
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/18.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts
4
+ * @author Evgenii Grebennikov
5
+ * @email djonnyx@gmail.com
6
+ */
7
+ export var FocusAlignments;
8
+ (function (FocusAlignments) {
9
+ FocusAlignments["NONE"] = "none";
10
+ FocusAlignments["START"] = "start";
11
+ FocusAlignments["CENTER"] = "center";
12
+ FocusAlignments["END"] = "end";
13
+ })(FocusAlignments || (FocusAlignments = {}));
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9jdXMtYWxpZ25tZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2VudW1zL2ZvY3VzLWFsaWdubWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQU4sSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3ZCLGdDQUFhLENBQUE7SUFDYixrQ0FBZSxDQUFBO0lBQ2Ysb0NBQWlCLENBQUE7SUFDakIsOEJBQVcsQ0FBQTtBQUNmLENBQUMsRUFMVyxlQUFlLEtBQWYsZUFBZSxRQUsxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBGb2N1cyBBbGlnbm1lbnRzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xOC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL2VudW1zL2ZvY3VzLWFsaWdubWVudHMudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGVudW0gRm9jdXNBbGlnbm1lbnRzIHtcclxuICAgIE5PTkUgPSAnbm9uZScsXHJcbiAgICBTVEFSVCA9ICdzdGFydCcsXHJcbiAgICBDRU5URVIgPSAnY2VudGVyJyxcclxuICAgIEVORCA9ICdlbmQnLFxyXG59Il19
@@ -2,5 +2,6 @@ import { CollectionModes } from "./collection-modes";
2
2
  import { Directions } from "./directions";
3
3
  import { MethodsForSelecting } from "./methods-for-selecting";
4
4
  import { SnappingMethods } from "./snapping-methods";
5
- export { CollectionModes, Directions, MethodsForSelecting, SnappingMethods, };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsT0FBTyxFQUNILGVBQWUsRUFDZixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGVBQWUsR0FDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3Rpb25Nb2RlIH0gZnJvbSBcIi4vY29sbGVjdGlvbi1tb2RlXCI7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25Nb2RlcyB9IGZyb20gXCIuL2NvbGxlY3Rpb24tbW9kZXNcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9ucyB9IGZyb20gXCIuL2RpcmVjdGlvbnNcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSBcIi4vZGlyZWN0aW9uXCI7XHJcbmltcG9ydCB7IE1ldGhvZHNGb3JTZWxlY3RpbmcgfSBmcm9tIFwiLi9tZXRob2RzLWZvci1zZWxlY3RpbmdcIjtcclxuaW1wb3J0IHsgTWV0aG9kRm9yU2VsZWN0aW5nIH0gZnJvbSBcIi4vbWV0aG9kLWZvci1zZWxlY3RpbmdcIjtcclxuaW1wb3J0IHsgU25hcHBpbmdNZXRob2RzIH0gZnJvbSBcIi4vc25hcHBpbmctbWV0aG9kc1wiO1xyXG5pbXBvcnQgeyBTbmFwcGluZ01ldGhvZCB9IGZyb20gXCIuL3NuYXBwaW5nLW1ldGhvZFwiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIENvbGxlY3Rpb25Nb2RlcyxcclxuICAgIERpcmVjdGlvbnMsXHJcbiAgICBNZXRob2RzRm9yU2VsZWN0aW5nLFxyXG4gICAgU25hcHBpbmdNZXRob2RzLFxyXG59O1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgICBDb2xsZWN0aW9uTW9kZSxcclxuICAgIERpcmVjdGlvbixcclxuICAgIE1ldGhvZEZvclNlbGVjdGluZyxcclxuICAgIFNuYXBwaW5nTWV0aG9kLFxyXG59O1xyXG4iXX0=
5
+ import { FocusAlignments } from "./focus-alignments";
6
+ export { CollectionModes, Directions, MethodsForSelecting, SnappingMethods, FocusAlignments, };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9lbnVtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFDSCxlQUFlLEVBQ2YsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsZUFBZSxHQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvbk1vZGUgfSBmcm9tIFwiLi9jb2xsZWN0aW9uLW1vZGVcIjtcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1vZGVzIH0gZnJvbSBcIi4vY29sbGVjdGlvbi1tb2Rlc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25zIH0gZnJvbSBcIi4vZGlyZWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tIFwiLi9kaXJlY3Rpb25cIjtcclxuaW1wb3J0IHsgTWV0aG9kc0ZvclNlbGVjdGluZyB9IGZyb20gXCIuL21ldGhvZHMtZm9yLXNlbGVjdGluZ1wiO1xyXG5pbXBvcnQgeyBNZXRob2RGb3JTZWxlY3RpbmcgfSBmcm9tIFwiLi9tZXRob2QtZm9yLXNlbGVjdGluZ1wiO1xyXG5pbXBvcnQgeyBTbmFwcGluZ01ldGhvZHMgfSBmcm9tIFwiLi9zbmFwcGluZy1tZXRob2RzXCI7XHJcbmltcG9ydCB7IFNuYXBwaW5nTWV0aG9kIH0gZnJvbSBcIi4vc25hcHBpbmctbWV0aG9kXCI7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50cyB9IGZyb20gXCIuL2ZvY3VzLWFsaWdubWVudHNcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBDb2xsZWN0aW9uTW9kZXMsXHJcbiAgICBEaXJlY3Rpb25zLFxyXG4gICAgTWV0aG9kc0ZvclNlbGVjdGluZyxcclxuICAgIFNuYXBwaW5nTWV0aG9kcyxcclxuICAgIEZvY3VzQWxpZ25tZW50cyxcclxufTtcclxuZXhwb3J0IHR5cGUge1xyXG4gICAgQ29sbGVjdGlvbk1vZGUsXHJcbiAgICBEaXJlY3Rpb24sXHJcbiAgICBNZXRob2RGb3JTZWxlY3RpbmcsXHJcbiAgICBTbmFwcGluZ01ldGhvZCxcclxufTtcclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3QtY29uZmlnLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbW9kZWxzL2Rpc3BsYXktb2JqZWN0LWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbUNvbmZpZyB9IGZyb20gXCIuL3JlbmRlci1pdGVtLWNvbmZpZy5tb2RlbFwiO1xyXG5cclxuLyoqXHJcbiAqIERpc3BsYXkgb2JqZWN0IGNvbmZpZ3VyYXRpb24uIEEgc2V0IG9mIGBzZWxlY3RgLCBgY29sbGFwc2VgLCBhbmQgYGZvY3VzYCBtZXRob2RzIGFyZSBhbHNvIHByb3ZpZGVkLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xOC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL21vZGVscy9kaXNwbGF5LW9iamVjdC1jb25maWcubW9kZWwudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGlzcGxheU9iamVjdENvbmZpZyBleHRlbmRzIElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW1Db25maWcge1xyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgZm9jdXNlZCBvciBub3QuXHJcbiAgICovXHJcbiAgZm9jdXNlZDogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgc2VsZWN0ZWQgb3Igbm90LlxyXG4gICAqL1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgZWxlbWVudCBpcyBjb2xsYXBzZWQgb3Igbm90LlxyXG4gICAqL1xyXG4gIGNvbGxhcHNlZDogYm9vbGVhbjtcclxuICAvKipcclxuICAgICogRm9jdXMgYSBsaXN0IGl0ZW1cclxuICAgICovXHJcbiAgZm9jdXM6ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgc2VsZWN0OiAoc2VsZWN0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICAqIENvbGxhcHNlIGxpc3QgaXRlbXNcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gIGNvbGxhcHNlOiAoY29sbGFwc2VkOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xyXG59Il19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS1vYmplY3QtbWVhc3VyZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvZGlzcGxheS1vYmplY3QtbWVhc3VyZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZWN0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcblxyXG4vKipcclxuICogRGlzcGxheSBvYmplY3QgbWV0cmljcy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvZGlzcGxheS1vYmplY3QtbWVhc3VyZXMubW9kZWwudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJRGlzcGxheU9iamVjdE1lYXN1cmVzIGV4dGVuZHMgSVJlY3Qge1xyXG4gIC8qKlxyXG4gICAqIERlbHRhIGlzIGNhbGN1bGF0ZWQgZm9yIFNuYXBwaW5nIE1ldGhvZC5BRFZBTkNFRFxyXG4gICAqL1xyXG4gIGRlbHRhOiBudW1iZXI7XHJcbn0iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vc2Nyb2xsLWRpcmVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IElTY3JvbGxFdmVudCB9IGZyb20gJy4vc2Nyb2xsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSVZpcnR1YWxMaXN0SXRlbSB9IGZyb20gJy4vaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tICcuL2l0ZW0tY29uZmlnLW1hcC5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9yZW5kZXItaXRlbS5tb2RlbCc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgICBTY3JvbGxEaXJlY3Rpb24sXHJcbiAgICBJU2Nyb2xsRXZlbnQsXHJcbiAgICBJVmlydHVhbExpc3RJdGVtLFxyXG4gICAgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sXHJcbiAgICBJUmVuZGVyVmlydHVhbExpc3RJdGVtLFxyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9tb2RlbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vc2Nyb2xsLWRpcmVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IElTY3JvbGxFdmVudCB9IGZyb20gJy4vc2Nyb2xsLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSVZpcnR1YWxMaXN0SXRlbSB9IGZyb20gJy4vaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tICcuL2l0ZW0tY29uZmlnLW1hcC5tb2RlbCc7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSAnLi9yZW5kZXItaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IElEaXNwbGF5T2JqZWN0Q29uZmlnIH0gZnJvbSAnLi9kaXNwbGF5LW9iamVjdC1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBJRGlzcGxheU9iamVjdE1lYXN1cmVzIH0gZnJvbSAnLi9kaXNwbGF5LW9iamVjdC1tZWFzdXJlcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgdHlwZSB7XHJcbiAgICBJRGlzcGxheU9iamVjdENvbmZpZyxcclxuICAgIElEaXNwbGF5T2JqZWN0TWVhc3VyZXMsXHJcbiAgICBJU2Nyb2xsRXZlbnQsXHJcbiAgICBJVmlydHVhbExpc3RJdGVtLFxyXG4gICAgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCxcclxuICAgIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sXHJcbiAgICBJUmVuZGVyVmlydHVhbExpc3RJdGVtLFxyXG4gICAgU2Nyb2xsRGlyZWN0aW9uLFxyXG59XHJcbiJdfQ==