@libs-ui/components-drag-drop 0.2.305 → 0.2.306-10

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,8 +1,8 @@
1
- import { ChangeDetectorRef, Directive, effect, inject, input, model, output, signal, untracked } from "@angular/core";
2
- import { checkMouseOverInContainer, cloneDeep, get, set, uuid } from "@libs-ui/utils";
3
- import { debounceTime, filter, takeUntil } from "rxjs";
4
- import { styleContainer } from "./defines/css.define";
5
- import { LibsUiComponentsDragScrollDirective } from "./drag-scroll.directive";
1
+ import { ChangeDetectorRef, Directive, effect, inject, input, model, output, signal, untracked } from '@angular/core';
2
+ import { checkMouseOverInContainer, cloneDeep, get, set, uuid } from '@libs-ui/utils';
3
+ import { debounceTime, filter, takeUntil } from 'rxjs';
4
+ import { styleContainer } from './defines/css.define';
5
+ import { LibsUiComponentsDragScrollDirective } from './drag-scroll.directive';
6
6
  import * as i0 from "@angular/core";
7
7
  export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective {
8
8
  // #region PROPERTY
@@ -11,12 +11,12 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
11
11
  cdr = inject(ChangeDetectorRef);
12
12
  // #region INPUT
13
13
  disableDragContainer = input();
14
- mode = input('move', { transform: value => value ?? 'move' });
14
+ mode = input('move', { transform: (value) => value ?? 'move' });
15
15
  directionDrag = input();
16
- viewEncapsulation = input('emulated', { transform: value => value ?? 'emulated' });
17
- acceptDragSameGroup = input(false, { transform: value => value ?? false });
18
- placeholder = input(true, { transform: value => value ?? true });
19
- groupName = input('groupDragAndDropDefault', { transform: value => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop
16
+ viewEncapsulation = input('emulated', { transform: (value) => value ?? 'emulated' });
17
+ acceptDragSameGroup = input(false, { transform: (value) => value ?? false });
18
+ placeholder = input(true, { transform: (value) => value ?? true });
19
+ groupName = input('groupDragAndDropDefault', { transform: (value) => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop
20
20
  dropToGroupName = input(null); // nếu item trong các group A được drop vào group B nhưng group B không được drop vào group A
21
21
  items = model.required();
22
22
  stylesOverride = input();
@@ -34,11 +34,12 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
34
34
  const container = { element };
35
35
  this.dragDropService.Container().set(this.groupID(), container);
36
36
  effect(() => {
37
- if (!this.rootElementScroll()) {
37
+ const elementScroll = this.rootElementScroll();
38
+ if (!elementScroll) {
38
39
  return;
39
40
  }
40
41
  untracked(() => {
41
- set(container, 'elementScroll', this.rootElementScroll());
42
+ set(container, 'elementScroll', elementScroll);
42
43
  });
43
44
  });
44
45
  effect(() => {
@@ -53,13 +54,13 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
53
54
  });
54
55
  }
55
56
  ngAfterViewInit() {
56
- this.outFunctionControl.emit({ setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement) });
57
- this.outDroppedContainer.subscribe(eventDropped => {
57
+ this.outFunctionControl.emit(this.FunctionsControl);
58
+ this.outDroppedContainer.subscribe((eventDropped) => {
58
59
  this.dragDropService.OnDropContainer.next(eventDropped);
59
60
  });
60
61
  this.onDestroy.subscribe(() => {
61
62
  if (indexSpliceListTo > -1) {
62
- this.items.update(items => {
63
+ this.items.update((items) => {
63
64
  items.splice(indexSpliceListTo, 1);
64
65
  return [...items];
65
66
  });
@@ -68,9 +69,9 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
68
69
  });
69
70
  const elementContainer = this.elementRef.nativeElement;
70
71
  this.initStyleAndAttribute(elementContainer, true);
71
- this.dragDropService.OnItemInit.pipe(debounceTime(250), filter(groupName => groupName === this.groupName()), takeUntil(this.onDestroy)).subscribe(() => this.initStyleAndAttribute(elementContainer));
72
- const styleTag = document.createElement("style");
73
- styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());
72
+ this.dragDropService.OnItemInit.pipe(debounceTime(250), filter((groupName) => groupName === this.groupName()), takeUntil(this.onDestroy)).subscribe(() => this.initStyleAndAttribute(elementContainer));
73
+ const styleTag = document.createElement('style');
74
+ styleTag.textContent = styleContainer(this.stylesOverride() || [], this.viewEncapsulation(), this.groupID());
74
75
  elementContainer.appendChild(styleTag);
75
76
  elementContainer.classList.add(this.dragDropService.ClassContainerDefine);
76
77
  const handlerDragStart = (eventDragStart) => {
@@ -90,10 +91,11 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
90
91
  const indexDragOver = Number(elementDragOver.getAttribute('index')).valueOf();
91
92
  const idGroupElementDrag = elementDrag.getAttribute('groupID');
92
93
  const idGroupElementDragOver = elementDragOver.getAttribute('groupID');
93
- if ((this.groupID() !== idGroupElementDrag) || (idGroupElementDrag !== idGroupElementDragOver)) { // xử lý cho item drag over qua 1 item khác container
94
+ if (this.groupID() !== idGroupElementDrag || idGroupElementDrag !== idGroupElementDragOver) {
95
+ // xử lý cho item drag over qua 1 item khác container
94
96
  if (idGroupElementDragOver === this.groupID() && this.placeholder()) {
95
97
  const item = this.mode() === 'copy' ? cloneDeep(this.dragDropService.ItemDragInfo?.item) : this.dragDropService.ItemDragInfo?.item;
96
- this.items.update(items => {
98
+ this.items.update((items) => {
97
99
  if (indexSpliceListTo >= 0) {
98
100
  items.splice(indexSpliceListTo, 1);
99
101
  }
@@ -106,7 +108,13 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
106
108
  }
107
109
  return;
108
110
  }
109
- if (!this.acceptDragSameGroup() || indexDrag < 0 || indexDragOver < 0 || !this.items().length || indexDrag > this.items().length || indexDragOver > this.items().length || (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)) {
111
+ if (!this.acceptDragSameGroup() ||
112
+ indexDrag < 0 ||
113
+ indexDragOver < 0 ||
114
+ !this.items().length ||
115
+ indexDrag > this.items().length ||
116
+ indexDragOver > this.items().length ||
117
+ (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)) {
110
118
  return;
111
119
  }
112
120
  // xử lý cho item drag over qua 1 item cùng container
@@ -114,7 +122,7 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
114
122
  this.setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver);
115
123
  storeIndex.indexDrag = indexDrag;
116
124
  storeIndex.indexDragOver = indexDragOver;
117
- this.items.update(items => {
125
+ this.items.update((items) => {
118
126
  items.splice(indexDrag, 1);
119
127
  items.splice(indexDragOver, 0, itemDrag);
120
128
  return [...items];
@@ -128,10 +136,10 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
128
136
  storeIndex.indexDrag = -1;
129
137
  storeIndex.indexDragOver = -1;
130
138
  const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine);
131
- if (!checkMouseOverInContainer(eventDrag.mousePosition, (this.rootElementScroll() || elementContainer))) {
139
+ if (!checkMouseOverInContainer(eventDrag.mousePosition, this.rootElementScroll() || elementContainer)) {
132
140
  const childElementIndex = Array.from(childrenElement).findIndex((child) => child.classList.contains('libs-ui-drag-drop-item-drop-placeholder'));
133
141
  if (childElementIndex >= 0 && this.groupID() !== eventDrag.elementDrag.getAttribute('groupID')) {
134
- this.items.update(items => {
142
+ this.items.update((items) => {
135
143
  items.splice(childElementIndex, 1);
136
144
  return [...items];
137
145
  });
@@ -142,7 +150,7 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
142
150
  return;
143
151
  }
144
152
  if (indexSpliceListTo >= 0) {
145
- this.items.update(items => {
153
+ this.items.update((items) => {
146
154
  items.splice(indexSpliceListTo, 1);
147
155
  return [...items];
148
156
  });
@@ -154,14 +162,14 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
154
162
  const { elementDrag } = eventDragging;
155
163
  const fieldIdItem = elementDrag.getAttribute('field_id');
156
164
  const idItemDrag = elementDrag.getAttribute('item_id');
157
- if (fieldIdItem && idItemDrag && this.items().find(item => get(item, fieldIdItem) === idItemDrag)) {
165
+ if (fieldIdItem && idItemDrag && this.items().find((item) => get(item, fieldIdItem) === idItemDrag)) {
158
166
  const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine);
159
167
  const childElement = Array.from(childrenElement).find((child) => child.getAttribute('item_id') === idItemDrag);
160
168
  if (this.items() === eventDragging.itemDragInfo?.itemsDrag() && childElement && !childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder') && !childElement.getAttribute(this.dragDropService.TargetItemDragFlag)) {
161
169
  childElement.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');
162
170
  this.groupID.set(elementDrag.getAttribute('groupID') || '');
163
171
  styleTag.remove();
164
- styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());
172
+ styleTag.textContent = styleContainer(this.stylesOverride() || [], this.viewEncapsulation(), this.groupID());
165
173
  elementContainer.appendChild(styleTag);
166
174
  this.setAttributeElementAndItemDrag(elementContainer, true);
167
175
  }
@@ -173,7 +181,7 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
173
181
  this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll() || !this.acceptDragSameGroup());
174
182
  return;
175
183
  }
176
- if (!checkMouseOverInContainer(eventDragging.mousePosition, (this.rootElementScroll() || elementContainer))) {
184
+ if (!checkMouseOverInContainer(eventDragging.mousePosition, this.rootElementScroll() || elementContainer)) {
177
185
  if (this.isDragOver()) {
178
186
  this.isDragOver.set(false);
179
187
  this.outDragLeaveContainer.emit({ ...eventDragging, elementDragLeave: elementContainer });
@@ -198,14 +206,15 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
198
206
  return null;
199
207
  }
200
208
  return 0;
201
- }
209
+ },
202
210
  };
203
211
  this.dragDropService.OnDragOver.next(eventDragOver);
204
212
  return;
205
213
  }
206
214
  const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine);
207
215
  let childElement = Array.from(childrenElement).find((child) => checkMouseOverInContainer(eventDragging.mousePosition, child));
208
- if (childElement) { // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit
216
+ if (childElement) {
217
+ // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit
209
218
  return;
210
219
  }
211
220
  childElement = Array.from(childrenElement).pop();
@@ -253,7 +262,7 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
253
262
  return null;
254
263
  }
255
264
  return childrenElement.length;
256
- }
265
+ },
257
266
  };
258
267
  this.dragDropService.OnDrop.next(eventDrop);
259
268
  };
@@ -288,7 +297,7 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
288
297
  if (!this.items().length) {
289
298
  this.outDroppedContainerEmpty.emit(eventDrop);
290
299
  }
291
- this.items.update(items => {
300
+ this.items.update((items) => {
292
301
  items.splice(indexDragOver, 0, item);
293
302
  return [...items];
294
303
  });
@@ -300,28 +309,38 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
300
309
  this.removeAttributes(elementContainer);
301
310
  this.setIndexElement(elementContainer);
302
311
  };
303
- [{
312
+ [
313
+ {
304
314
  name: 'OnDragStart',
305
315
  event: this.dragDropService.OnDragStart,
306
- functionCall: handlerDragStart
307
- }, {
316
+ functionCall: handlerDragStart,
317
+ },
318
+ {
308
319
  name: 'OnDragOver',
309
320
  event: this.dragDropService.OnDragOver,
310
321
  functionCall: handlerDragOver,
311
- }, {
322
+ },
323
+ {
312
324
  name: 'OnDragging',
313
325
  event: this.dragDropService.OnDragging,
314
- functionCall: handlerDragging
315
- }, {
326
+ functionCall: handlerDragging,
327
+ },
328
+ {
316
329
  name: 'OnDragEnd',
317
330
  event: this.dragDropService.OnDragEnd,
318
- functionCall: handlerDragEnd
319
- }, {
331
+ functionCall: handlerDragEnd,
332
+ },
333
+ {
320
334
  name: 'OnDrop',
321
335
  event: this.dragDropService.OnDrop,
322
- functionCall: handlerDrop
323
- }
324
- ].forEach((item) => (item.event.pipe(takeUntil(this.onDestroy)).subscribe(item.functionCall)));
336
+ functionCall: handlerDrop,
337
+ },
338
+ ].forEach((item) => item.event.pipe(takeUntil(this.onDestroy)).subscribe(item.functionCall));
339
+ }
340
+ get FunctionsControl() {
341
+ return {
342
+ setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement),
343
+ };
325
344
  }
326
345
  /* */
327
346
  async setAttributeElementAndItemDrag(elementContainer, setItemDrag, indexInsert) {
@@ -376,7 +395,7 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
376
395
  }
377
396
  this.dragDropService.ItemDragInfo = { item: this.items()[index], indexDrag: index, itemsDrag: this.items, containerDrag: elementContainer, itemsMove: signal([...this.items()]) };
378
397
  if (this.mode() === 'move') {
379
- this.dragDropService.ItemDragInfo.itemsMove?.update(items => {
398
+ this.dragDropService.ItemDragInfo.itemsMove?.update((items) => {
380
399
  items.splice(index, 1);
381
400
  return [...items];
382
401
  });
@@ -391,7 +410,6 @@ export class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDrag
391
410
  }
392
411
  this.setIndexElement(elementContainer);
393
412
  }
394
- ;
395
413
  setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver) {
396
414
  if (!this.directionDrag() || !elementDragOver) {
397
415
  return;
@@ -457,8 +475,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
457
475
  type: Directive,
458
476
  args: [{
459
477
  // eslint-disable-next-line @angular-eslint/directive-selector
460
- selector: "[LibsUiComponentsDragContainerDirective]",
478
+ selector: '[LibsUiComponentsDragContainerDirective]',
461
479
  standalone: true,
462
480
  }]
463
481
  }], ctorParameters: () => [] });
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmFnLWRyb3Avc3JjL2RyYWctZHJvcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU85RSxNQUFNLE9BQU8sc0NBQXVDLFNBQVEsbUNBQW1DO0lBQzdGLG1CQUFtQjtJQUNYLE9BQU8sR0FBRyxNQUFNLENBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqQyxVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUV4QyxnQkFBZ0I7SUFDUCxvQkFBb0IsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUEwQixNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RixhQUFhLEdBQUcsS0FBSyxFQUE2QixDQUFDO0lBQ25ELGlCQUFpQixHQUFH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Z0JBQ3BFLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDO29CQUU1QyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUM3RSxDQUFDO2dCQUNELFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQzt3R0FsZ0JVLHNDQUFzQzs0RkFBdEMsc0NBQXNDOzs0RkFBdEMsc0NBQXNDO2tCQUxsRCxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgT25EZXN0cm95LCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIsIGNsb25lRGVlcCwgZ2V0LCBzZXQsIHV1aWQgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgc3R5bGVDb250YWluZXIgfSBmcm9tIFwiLi9kZWZpbmVzL2Nzcy5kZWZpbmVcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEcmFnU2Nyb2xsRGlyZWN0aXZlIH0gZnJvbSBcIi4vZHJhZy1zY3JvbGwuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCwgSURyYWdFbmQsIElEcmFnTGVhdmUsIElEcmFnT3ZlciwgSURyYWdTdGFydCwgSURyYWdnaW5nLCBJRHJvcCB9IGZyb20gXCIuL2ludGVyZmFjZXMvZXZlbnQuaW50ZXJmYWNlXCI7XG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6IFwiW0xpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlXVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBleHRlbmRzIExpYnNVaUNvbXBvbmVudHNEcmFnU2Nyb2xsRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIGdyb3VwSUQgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpO1xuICBwcml2YXRlIGlzRHJhZ092ZXIgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBkaXNhYmxlRHJhZ0NvbnRhaW5lciA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG1vZGUgPSBpbnB1dDxzdHJpbmcsICdtb3ZlJyB8ICdjb3B5Jz4oJ21vdmUnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ21vdmUnIH0pO1xuICByZWFkb25seSBkaXJlY3Rpb25EcmFnID0gaW5wdXQ8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oKTtcbiAgcmVhZG9ubHkgdmlld0VuY2Fwc3VsYXRpb24gPSBpbnB1dDwnZW11bGF0ZWQnIHwgJ25vbmUnLCAnZW11bGF0ZWQnIHwgJ25vbmUnIHwgdW5kZWZpbmVkPignZW11bGF0ZWQnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ2VtdWxhdGVkJyB9KTtcbiAgcmVhZG9ubHkgYWNjZXB0RHJhZ1NhbWVHcm91cCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGdyb3VwTmFtZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignZ3JvdXBEcmFnQW5kRHJvcERlZmF1bHQnLCB7IHRyYW5zZm9ybTogdmFsdWUgPT4gdmFsdWUgPz8gJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0JyB9KTsgLy8gbuG6v3UgY8OhYyBncm91cCBjw7MgdMOqbiB0csO5bmcgbmhhdSBz4bq9IMSRxrDhu6NjIGRyb3BcbiAgcmVhZG9ubHkgZHJvcFRvR3JvdXBOYW1lID0gaW5wdXQ8QXJyYXk8c3RyaW5nPiB8IG51bGw+KG51bGwpOyAvLyBu4bq/dSBpdGVtIHRyb25nIGPDoWMgZ3JvdXAgQSDEkcaw4bujYyBkcm9wIHbDoG8gZ3JvdXAgQiBuaMawbmcgZ3JvdXAgQiBraMO0bmcgxJHGsOG7o2MgZHJvcCB2w6BvIGdyb3VwIEFcbiAgcmVhZG9ubHkgaXRlbXMgPSBtb2RlbC5yZXF1aXJlZDxBcnJheTx1bmtub3duPj4oKTtcbiAgcmVhZG9ubHkgc3R5bGVzT3ZlcnJpZGUgPSBpbnB1dDxBcnJheTx7IGNsYXNzTmFtZTogc3RyaW5nLCBzdHlsZXM6IHN0cmluZyB9Pj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXREcmFnU3RhcnRDb250YWluZXIgPSBvdXRwdXQ8SURyYWdTdGFydD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ092ZXJDb250YWluZXIgPSBvdXRwdXQ8SURyYWdPdmVyPigpO1xuICByZWFkb25seSBvdXREcmFnTGVhdmVDb250YWluZXIgPSBvdXRwdXQ8SURyYWdMZWF2ZT4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ0VuZENvbnRhaW5lciA9IG91dHB1dDxJRHJhZ0VuZD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJvcHBlZENvbnRhaW5lciA9IG91dHB1dDxJRHJvcD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJvcHBlZENvbnRhaW5lckVtcHR5ID0gb3V0cHV0PElEcm9wPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2wgPSBvdXRwdXQ8SURyYWdEcm9wRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgY29udGFpbmVyID0geyBlbGVtZW50IH07XG5cbiAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5Db250YWluZXIoKS5zZXQodGhpcy5ncm91cElEKCksIGNvbnRhaW5lcik7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnJvb3RFbGVtZW50U2Nyb2xsKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgc2V0KGNvbnRhaW5lciwgJ2VsZW1lbnRTY3JvbGwnLCB0aGlzLnJvb3RFbGVtZW50U2Nyb2xsKCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uRHJhZygpICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKSAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbkNvbnRyb2wuZW1pdCh7IHNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZzogKCkgPT4gdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIH0pO1xuXG4gICAgdGhpcy5vdXREcm9wcGVkQ29udGFpbmVyLnN1YnNjcmliZShldmVudERyb3BwZWQgPT4ge1xuICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25Ecm9wQ29udGFpbmVyLm5leHQoZXZlbnREcm9wcGVkKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uRGVzdHJveS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKGluZGV4U3BsaWNlTGlzdFRvID4gLTEpIHtcbiAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleFNwbGljZUxpc3RUbywgMSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5Db250YWluZXIoKS5kZWxldGUodGhpcy5ncm91cElEKCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGVsZW1lbnRDb250YWluZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIHRoaXMuaW5pdFN0eWxlQW5kQXR0cmlidXRlKGVsZW1lbnRDb250YWluZXIsIHRydWUpO1xuICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uSXRlbUluaXQucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgZmlsdGVyKGdyb3VwTmFtZSA9PiBncm91cE5hbWUgPT09IHRoaXMuZ3JvdXBOYW1lKCkpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pbml0U3R5bGVBbmRBdHRyaWJ1dGUoZWxlbWVudENvbnRhaW5lcikpO1xuICAgIGNvbnN0IHN0eWxlVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXG4gICAgc3R5bGVUYWcudGV4dENvbnRlbnQgPSBzdHlsZUNvbnRhaW5lcigodGhpcy5zdHlsZXNPdmVycmlkZSgpIHx8IFtdKSwgdGhpcy52aWV3RW5jYXBzdWxhdGlvbigpLCB0aGlzLmdyb3VwSUQoKSk7XG4gICAgZWxlbWVudENvbnRhaW5lci5hcHBlbmRDaGlsZChzdHlsZVRhZyk7XG4gICAgZWxlbWVudENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzQ29udGFpbmVyRGVmaW5lKTtcblxuICAgIGNvbnN0IGhhbmRsZXJEcmFnU3RhcnQgPSAoZXZlbnREcmFnU3RhcnQ6IElEcmFnU3RhcnQpID0+IHtcblxuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICBpZiAodGhpcy5ncm91cElEKCkgPT09IGV2ZW50RHJhZ1N0YXJ0LmVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpKSB7XG4gICAgICAgIHRoaXMub3V0RHJhZ1N0YXJ0Q29udGFpbmVyLmVtaXQoeyAuLi5ldmVudERyYWdTdGFydCwgaXRlbURyYWdJbmZvOiB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8gfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHN0b3JlSW5kZXggPSB7IGluZGV4RHJhZzogLTEsIGluZGV4RHJhZ092ZXI6IC0xIH07XG4gICAgbGV0IGluZGV4U3BsaWNlTGlzdFRvID0gLTE7XG4gICAgY29uc3QgaGFuZGxlckRyYWdPdmVyID0gKGV2ZW50RHJhZ092ZXI6IElEcmFnT3ZlcikgPT4ge1xuICAgICAgY29uc3QgeyBlbGVtZW50RHJhZywgZWxlbWVudERyYWdPdmVyIH0gPSBldmVudERyYWdPdmVyO1xuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpIHx8ICF0aGlzLmRyYWdEcm9wU2VydmljZS5jaGVja0VsZW1lbnRPdmVyQWNjZXB0RWxlbWVudERyYWcodGhpcy5ncm91cE5hbWUoKSwgZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdncm91cE5hbWUnKSwgZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdkcm9wVG9Hcm91cE5hbWUnKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXhEcmFnID0gTnVtYmVyKGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnaW5kZXgnKSkudmFsdWVPZigpO1xuICAgICAgY29uc3QgaW5kZXhEcmFnT3ZlciA9IE51bWJlcihlbGVtZW50RHJhZ092ZXIuZ2V0QXR0cmlidXRlKCdpbmRleCcpKS52YWx1ZU9mKCk7XG4gICAgICBjb25zdCBpZEdyb3VwRWxlbWVudERyYWcgPSBlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKTtcbiAgICAgIGNvbnN0IGlkR3JvdXBFbGVtZW50RHJhZ092ZXIgPSBlbGVtZW50RHJhZ092ZXIuZ2V0QXR0cmlidXRlKCdncm91cElEJyk7XG5cbiAgICAgIGlmICgodGhpcy5ncm91cElEKCkgIT09IGlkR3JvdXBFbGVtZW50RHJhZykgfHwgKGlkR3JvdXBFbGVtZW50RHJhZyAhPT0gaWRHcm91cEVsZW1lbnREcmFnT3ZlcikpIHsgLy8geOG7rSBsw70gY2hvIGl0ZW0gZHJhZyBvdmVyIHF1YSAxIGl0ZW0ga2jDoWMgY29udGFpbmVyXG4gICAgICAgIGlmIChpZEdyb3VwRWxlbWVudERyYWdPdmVyID09PSB0aGlzLmdyb3VwSUQoKSAmJiB0aGlzLnBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tb2RlKCkgPT09ICdjb3B5JyA/IGNsb25lRGVlcCh0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8/Lml0ZW0pIDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbURyYWdJbmZvPy5pdGVtO1xuICAgICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleFNwbGljZUxpc3RUbyA+PSAwKSB7XG4gICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleFNwbGljZUxpc3RUbywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcmFnT3ZlciwgMCwgaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpbmRleFNwbGljZUxpc3RUbyA9IGluZGV4RHJhZ092ZXI7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnKGVsZW1lbnRDb250YWluZXIsIGZhbHNlLCBpbmRleFNwbGljZUxpc3RUbyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5hY2NlcHREcmFnU2FtZUdyb3VwKCkgfHwgaW5kZXhEcmFnIDwgMCB8fCBpbmRleERyYWdPdmVyIDwgMCB8fCAhdGhpcy5pdGVtcygpLmxlbmd0aCB8fCBpbmRleERyYWcgPiB0aGlzLml0ZW1zKCkubGVuZ3RoIHx8IGluZGV4RHJhZ092ZXIgPiB0aGlzLml0ZW1zKCkubGVuZ3RoIHx8IChzdG9yZUluZGV4LmluZGV4RHJhZyA9PT0gaW5kZXhEcmFnICYmIHN0b3JlSW5kZXguaW5kZXhEcmFnT3ZlciA9PT0gaW5kZXhEcmFnT3ZlcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8geOG7rSBsw70gY2hvIGl0ZW0gZHJhZyBvdmVyIHF1YSAxIGl0ZW0gY8O5bmcgY29udGFpbmVyXG4gICAgICBjb25zdCBpdGVtRHJhZyA9IHRoaXMuaXRlbXMoKVtpbmRleERyYWddO1xuXG4gICAgICB0aGlzLnNldEFuaW1hdGlvbkVsZW1lbnREcmFnT3ZlcihpbmRleERyYWcsIGluZGV4RHJhZ092ZXIsIGVsZW1lbnREcmFnT3Zlcik7XG4gICAgICBzdG9yZUluZGV4LmluZGV4RHJhZyA9IGluZGV4RHJhZztcbiAgICAgIHN0b3JlSW5kZXguaW5kZXhEcmFnT3ZlciA9IGluZGV4RHJhZ092ZXI7XG4gICAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyYWcsIDEpO1xuICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcmFnT3ZlciwgMCwgaXRlbURyYWcpO1xuICAgICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICAgIH0pO1xuICAgICAgZWxlbWVudERyYWcuc2V0QXR0cmlidXRlKCdpbmRleCcsIGluZGV4RHJhZ092ZXIudG9TdHJpbmcoKSk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZyhlbGVtZW50Q29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVtb3ZlUGxhY2Vob2xkZXJEcmFnID0gKGV2ZW50RHJhZzogSURyYWdFbmQsIGlzRHJhZ2dpbmc/OiBib29sZWFuKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxTY3JvbGxUb0VsZW1lbnQoKSk7XG4gICAgICBzdG9yZUluZGV4LmluZGV4RHJhZyA9IC0xO1xuICAgICAgc3RvcmVJbmRleC5pbmRleERyYWdPdmVyID0gLTE7XG4gICAgICBjb25zdCBjaGlsZHJlbkVsZW1lbnQgPSBlbGVtZW50Q29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lKSBhcyB1bmtub3duIGFzIEFycmF5PEhUTUxFbGVtZW50PjtcblxuICAgICAgaWYgKCFjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKGV2ZW50RHJhZy5tb3VzZVBvc2l0aW9uLCAodGhpcy5yb290RWxlbWVudFNjcm9sbCgpIHx8IGVsZW1lbnRDb250YWluZXIpKSkge1xuICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnRJbmRleCA9IEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KGNoaWxkcmVuRWxlbWVudCkuZmluZEluZGV4KChjaGlsZCkgPT4gY2hpbGQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyb3AtcGxhY2Vob2xkZXInKSk7XG5cbiAgICAgICAgaWYgKGNoaWxkRWxlbWVudEluZGV4ID49IDAgJiYgdGhpcy5ncm91cElEKCkgIT09IGV2ZW50RHJhZy5lbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgICAgICAgIGl0ZW1zLnNwbGljZShjaGlsZEVsZW1lbnRJbmRleCwgMSk7XG4gICAgICAgICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpbmRleFNwbGljZUxpc3RUbyA9IC0xO1xuXG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlcyhlbGVtZW50Q29udGFpbmVyLCBpc0RyYWdnaW5nKTtcbiAgICAgICAgdGhpcy5zZXRJbmRleEVsZW1lbnQoZWxlbWVudENvbnRhaW5lcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4U3BsaWNlTGlzdFRvID49IDApIHtcbiAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleFNwbGljZUxpc3RUbywgMSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaW5kZXhTcGxpY2VMaXN0VG8gPSAtMTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlckRyYWdnaW5nID0gKGV2ZW50RHJhZ2dpbmc6IElEcmFnZ2luZykgPT4ge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lcik7XG4gICAgICBjb25zdCB7IGVsZW1lbnREcmFnIH0gPSBldmVudERyYWdnaW5nO1xuICAgICAgY29uc3QgZmllbGRJZEl0ZW0gPSBlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2ZpZWxkX2lkJyk7XG4gICAgICBjb25zdCBpZEl0ZW1EcmFnID0gZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdpdGVtX2lkJyk7XG5cbiAgICAgIGlmIChmaWVsZElkSXRlbSAmJiBpZEl0ZW1EcmFnICYmIHRoaXMuaXRlbXMoKS5maW5kKGl0ZW0gPT4gZ2V0KGl0ZW0sIGZpZWxkSWRJdGVtKSA9PT0gaWRJdGVtRHJhZykpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5FbGVtZW50ID0gZWxlbWVudENvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZSkgYXMgdW5rbm93biBhcyBBcnJheTxIVE1MRWxlbWVudD47XG4gICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudCA9IEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KGNoaWxkcmVuRWxlbWVudCkuZmluZCgoY2hpbGQpID0+IGNoaWxkLmdldEF0dHJpYnV0ZSgnaXRlbV9pZCcpID09PSBpZEl0ZW1EcmFnKTtcblxuICAgICAgICBpZiAodGhpcy5pdGVtcygpID09PSBldmVudERyYWdnaW5nLml0ZW1EcmFnSW5mbz8uaXRlbXNEcmFnKCkgJiYgY2hpbGRFbGVtZW50ICYmICFjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyb3AtcGxhY2Vob2xkZXInKSAmJiAhY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZSh0aGlzLmRyYWdEcm9wU2VydmljZS5UYXJnZXRJdGVtRHJhZ0ZsYWcpKSB7XG4gICAgICAgICAgY2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLmRyYWdEcm9wU2VydmljZS5UYXJnZXRJdGVtRHJhZ0ZsYWcsICd0cnVlJyk7XG4gICAgICAgICAgdGhpcy5ncm91cElELnNldChlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSB8fCAnJyk7XG4gICAgICAgICAgc3R5bGVUYWcucmVtb3ZlKCk7XG4gICAgICAgICAgc3R5bGVUYWcudGV4dENvbnRlbnQgPSBzdHlsZUNvbnRhaW5lcigodGhpcy5zdHlsZXNPdmVycmlkZSgpIHx8IFtdKSwgdGhpcy52aWV3RW5jYXBzdWxhdGlvbigpLCB0aGlzLmdyb3VwSUQoKSk7XG4gICAgICAgICAgZWxlbWVudENvbnRhaW5lci5hcHBlbmRDaGlsZChzdHlsZVRhZyk7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdyb3VwSUQoKSA9PT0gZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdncm91cElEJykgJiYgIXRoaXMuYWNjZXB0RHJhZ1NhbWVHcm91cCgpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTY3JvbGxFbGVtZW50VG9Qb3NpdGlvbihldmVudERyYWdnaW5nLCB0aGlzLmlnbm9yZUF1dG9TY3JvbGwoKSB8fCAhdGhpcy5hY2NlcHREcmFnU2FtZUdyb3VwKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihldmVudERyYWdnaW5nLm1vdXNlUG9zaXRpb24sICh0aGlzLnJvb3RFbGVtZW50U2Nyb2xsKCkgfHwgZWxlbWVudENvbnRhaW5lcikpKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJhZ092ZXIoKSkge1xuICAgICAgICAgIHRoaXMuaXNEcmFnT3Zlci5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMub3V0RHJhZ0xlYXZlQ29udGFpbmVyLmVtaXQoeyAuLi5ldmVudERyYWdnaW5nLCBlbGVtZW50RHJhZ0xlYXZlOiBlbGVtZW50Q29udGFpbmVyIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZVBsYWNlaG9sZGVyRHJhZyhldmVudERyYWdnaW5nLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tBbmRTY3JvbGxFbGVtZW50VG9Qb3NpdGlvbihldmVudERyYWdnaW5nLCB0aGlzLmlnbm9yZUF1dG9TY3JvbGwoKSk7XG5cbiAgICAgIC8vIMSQb+G6oW4gY29kZSB44butIGzDvSBjaG8gdmnhu4djIGvDqW8gbeG7mXQgZWxlbWVudCB2w6BvIDEgY29udGFpbmVyIG5oxrBuZyBjb250YWluZXIga2jDtG5nIGPDsyBpdGVtIGhv4bq3YyBpdGVtIGRyYWcga2jDtG5nIG92ZXIgcXVhIGl0ZW0gdHJvbmcgY29udGFpbmVyXG4gICAgICBpZiAoIXRoaXMuaXNEcmFnT3ZlcigpKSB7XG4gICAgICAgIGVsZW1lbnRDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtY29udGFpbmVyLWRyYWdvdmVyJyk7XG4gICAgICAgIHRoaXMuaXNEcmFnT3Zlci5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMub3V0RHJhZ092ZXJDb250YWluZXIuZW1pdCh7IC4uLmV2ZW50RHJhZ2dpbmcsIGVsZW1lbnREcmFnT3ZlcjogZWxlbWVudENvbnRhaW5lciB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50RHJhZ092ZXIgPSB7IC4uLmV2ZW50RHJhZ2dpbmcsIGVsZW1lbnREcmFnT3ZlcjogZWxlbWVudENvbnRhaW5lciB9O1xuXG4gICAgICBpZiAoIXRoaXMuaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgZXZlbnREcmFnT3Zlci5lbGVtZW50RHJhZ092ZXIgPSB7XG4gICAgICAgICAgZ2V0QXR0cmlidXRlOiAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dyb3VwSUQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyb3VwSUQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuYW1lICE9PSAnaW5kZXgnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnT3Zlci5uZXh0KGV2ZW50RHJhZ092ZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRyZW5FbGVtZW50ID0gZWxlbWVudENvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZSkgYXMgdW5rbm93biBhcyBBcnJheTxIVE1MRWxlbWVudD47XG4gICAgICBsZXQgY2hpbGRFbGVtZW50ID0gQXJyYXkuZnJvbTxIVE1MRWxlbWVudD4oY2hpbGRyZW5FbGVtZW50KS5maW5kKChjaGlsZCkgPT4gY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihldmVudERyYWdnaW5nLm1vdXNlUG9zaXRpb24sIGNoaWxkKSk7XG5cbiAgICAgIGlmIChjaGlsZEVsZW1lbnQpIHsgLy8gbuG6v3UgdMOsbSB0aOG6pXkgdGjDrCBz4bq9IG5o4bqtbiBxdWEgc+G7sSBraeG7h24gY+G7p2EgZHJhZy1pdGVtLmRpcmVjdGl2ZSBlbWl0XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNoaWxkRWxlbWVudCA9IEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KGNoaWxkcmVuRWxlbWVudCkucG9wKCk7XG5cbiAgICAgIGlmIChjaGlsZEVsZW1lbnQpIHtcbiAgICAgICAgZXZlbnREcmFnT3Zlci5lbGVtZW50RHJhZ092ZXIgPSBjaGlsZEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ092ZXIubmV4dChldmVudERyYWdPdmVyKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlckRyYWdFbmQgPSAoZXZlbnREcmFnRW5kOiBJRHJhZ0VuZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcmVjdCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRoaXMucm9vdEVsZW1lbnRTY3JvbGwoKSB8fCBlbGVtZW50Q29udGFpbmVyKSB7XG4gICAgICAgIHJlY3QgPSAodGhpcy5yb290RWxlbWVudFNjcm9sbCgpIHx8IGVsZW1lbnRDb250YWluZXIpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZVBsYWNlaG9sZGVyRHJhZyhldmVudERyYWdFbmQpO1xuICAgICAgY29uc3QgeyBlbGVtZW50RHJhZywgbW91c2VQb3NpdGlvbiwgaXRlbURyYWdJbmZvIH0gPSBldmVudERyYWdFbmQ7XG5cbiAgICAgIGlmICh0aGlzLmdyb3VwSUQoKSA9PT0gZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdncm91cElEJykpIHtcbiAgICAgICAgdGhpcy5vdXREcmFnRW5kQ29udGFpbmVyLmVtaXQoeyAuLi5ldmVudERyYWdFbmQgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrTW91c2VPdmVySW5Db250YWluZXIobW91c2VQb3NpdGlvbiwgdGhpcy5yb290RWxlbWVudFNjcm9sbCgpIHx8IGVsZW1lbnRDb250YWluZXIsIHJlY3QpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50RHJvcCA9IHsgZWxlbWVudERyYWc6IGVsZW1lbnREcmFnLCBlbGVtZW50RHJvcDogZWxlbWVudENvbnRhaW5lciwgaXRlbURyYWdJbmZvOiBpdGVtRHJhZ0luZm8gfTtcblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKSB8fCAhdGhpcy5kcmFnRHJvcFNlcnZpY2UuY2hlY2tFbGVtZW50T3ZlckFjY2VwdEVsZW1lbnREcmFnKHRoaXMuZ3JvdXBOYW1lKCksIGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJyksIGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZHJvcFRvR3JvdXBOYW1lJykpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRyZW5FbGVtZW50ID0gZWxlbWVudENvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZSkgYXMgdW5rbm93biBhcyBBcnJheTxIVE1MRWxlbWVudD47XG4gICAgICBjb25zdCBjaGlsZEVsZW1lbnQgPSBBcnJheS5mcm9tPEhUTUxFbGVtZW50PihjaGlsZHJlbkVsZW1lbnQpLmZpbmQoKGNoaWxkKSA9PiBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKG1vdXNlUG9zaXRpb24sIGNoaWxkKSk7XG5cbiAgICAgIGlmIChjaGlsZEVsZW1lbnQpIHtcbiAgICAgICAgZXZlbnREcm9wLmVsZW1lbnREcm9wID0gY2hpbGRFbGVtZW50O1xuICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyb3AubmV4dChldmVudERyb3ApO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGV2ZW50RHJvcC5lbGVtZW50RHJvcCA9IHtcbiAgICAgICAgZ2V0QXR0cmlidXRlOiAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdkcm9wQ29udGFpbmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuYW1lID09PSAnZ3JvdXBJRCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyb3VwSUQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5hbWUgIT09ICdpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjaGlsZHJlbkVsZW1lbnQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyb3AubmV4dChldmVudERyb3ApO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVyRHJvcCA9IChldmVudERyb3A6IElEcm9wKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgZWxlbWVudERyYWcsIGVsZW1lbnREcm9wLCBpdGVtRHJhZ0luZm8gfSA9IGV2ZW50RHJvcDtcblxuICAgICAgaWYgKHRoaXMuZ3JvdXBJRCgpID09PSBlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSAmJiB0aGlzLmdyb3VwSUQoKSA9PT0gZWxlbWVudERyb3AuZ2V0QXR0cmlidXRlKCdncm91cElEJykpIHtcbiAgICAgICAgaWYgKGl0ZW1EcmFnSW5mbykge1xuICAgICAgICAgIGl0ZW1EcmFnSW5mby5pbmRleERyb3AgPSBOdW1iZXIoZWxlbWVudERyb3AuZ2V0QXR0cmlidXRlKCdpbmRleCcpKS52YWx1ZU9mKCk7XG4gICAgICAgICAgaXRlbURyYWdJbmZvLml0ZW1zRHJvcCA9IHRoaXMuaXRlbXM7XG4gICAgICAgICAgaXRlbURyYWdJbmZvLmNvbnRhaW5lckRyb3AgPSBlbGVtZW50Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdERyYWdTYW1lR3JvdXAoKSkge1xuICAgICAgICAgIHRoaXMub3V0RHJvcHBlZENvbnRhaW5lci5lbWl0KGV2ZW50RHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVzKGVsZW1lbnRDb250YWluZXIpO1xuICAgICAgICB0aGlzLnNldEluZGV4RWxlbWVudChlbGVtZW50Q29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5ncm91cElEKCkgIT09IGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpIHx8IGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpID09PSBlbGVtZW50RHJvcC5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleERyYWdPdmVyID0gdGhpcy5ncm91cElEKCkgIT09IGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpID8gTnVtYmVyKGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnaW5kZXgnKSkudmFsdWVPZigpIDogTnVtYmVyKGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnaW5kZXgnKSkudmFsdWVPZigpIC0gKGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnZHJvcENvbnRhaW5lcicpID8gMCA6IDEpO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMubW9kZSgpID09PSAnY29weScgPyBjbG9uZURlZXAoaXRlbURyYWdJbmZvPy5pdGVtKSA6IGl0ZW1EcmFnSW5mbz8uaXRlbTtcblxuICAgICAgaWYgKGl0ZW1EcmFnSW5mbykge1xuICAgICAgICBpdGVtRHJhZ0luZm8uaW5kZXhEcm9wID0gaW5kZXhEcmFnT3ZlcjtcbiAgICAgICAgaXRlbURyYWdJbmZvLml0ZW1zRHJvcCA9IHRoaXMuaXRlbXM7XG4gICAgICAgIGl0ZW1EcmFnSW5mby5jb250YWluZXJEcm9wID0gZWxlbWVudENvbnRhaW5lcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLml0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub3V0RHJvcHBlZENvbnRhaW5lckVtcHR5LmVtaXQoZXZlbnREcm9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcmFnT3ZlciwgMCwgaXRlbSk7XG4gICAgICAgIHJldHVybiBbLi4uaXRlbXNdO1xuICAgICAgfSk7XG4gICAgICBpZiAoaXRlbURyYWdJbmZvICYmIGl0ZW1EcmFnSW5mby5pdGVtc01vdmUgJiYgaXRlbURyYWdJbmZvLml0ZW1zTW92ZSgpKSB7XG4gICAgICAgIGl0ZW1EcmFnSW5mby5pdGVtc0RyYWcuc2V0KFsuLi5pdGVtRHJhZ0luZm8uaXRlbXNNb3ZlKCldKTtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lcilcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0RHJvcHBlZENvbnRhaW5lci5lbWl0KGV2ZW50RHJvcCk7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZXMoZWxlbWVudENvbnRhaW5lcik7XG4gICAgICB0aGlzLnNldEluZGV4RWxlbWVudChlbGVtZW50Q29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgW3tcbiAgICAgIG5hbWU6ICdPbkRyYWdTdGFydCcsXG4gICAgICBldmVudDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnU3RhcnQsXG4gICAgICBmdW5jdGlvbkNhbGw6IGhhbmRsZXJEcmFnU3RhcnRcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnT25EcmFnT3ZlcicsXG4gICAgICBldmVudDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnT3ZlcixcbiAgICAgIGZ1bmN0aW9uQ2FsbDogaGFuZGxlckRyYWdPdmVyLFxuICAgIH0sIHtcbiAgICAgIG5hbWU6ICdPbkRyYWdnaW5nJyxcbiAgICAgIGV2ZW50OiB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdnaW5nLFxuICAgICAgZnVuY3Rpb25DYWxsOiBoYW5kbGVyRHJhZ2dpbmdcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnT25EcmFnRW5kJyxcbiAgICAgIGV2ZW50OiB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdFbmQsXG4gICAgICBmdW5jdGlvbkNhbGw6IGhhbmRsZXJEcmFnRW5kXG4gICAgfSwge1xuICAgICAgbmFtZTogJ09uRHJvcCcsXG4gICAgICBldmVudDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25Ecm9wLFxuICAgICAgZnVuY3Rpb25DYWxsOiBoYW5kbGVyRHJvcFxuICAgIH1cbiAgICBdLmZvckVhY2goKGl0ZW06IHsgbmFtZTogc3RyaW5nOyBldmVudDogT2JzZXJ2YWJsZTx1bmtub3duPjsgZnVuY3Rpb25DYWxsOiBvYmplY3QgfSkgPT4gKGl0ZW0uZXZlbnQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoaXRlbS5mdW5jdGlvbkNhbGwpKSk7XG4gIH1cblxuICAvKiAqL1xuICBwcml2YXRlIGFzeW5jIHNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZyhlbGVtZW50Q29udGFpbmVyOiBIVE1MRWxlbWVudCwgc2V0SXRlbURyYWc/OiBib29sZWFuLCBpbmRleEluc2VydD86IG51bWJlcikge1xuICAgIGNvbnN0IGNoaWxkcmVuRWxlbWVudCA9IGVsZW1lbnRDb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmUpIGFzIHVua25vd24gYXMgQXJyYXk8SFRNTEVsZW1lbnQ+O1xuICAgIGxldCBpbmRleCA9IC0xO1xuXG4gICAgZWxlbWVudENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnLCB0aGlzLmdyb3VwSUQoKSk7XG4gICAgZWxlbWVudENvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJyk7XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpKSB7XG4gICAgICBlbGVtZW50Q29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGlzYWJsZURyYWdDb250YWluZXInLCBgJHt0aGlzLmRpc2FibGVEcmFnQ29udGFpbmVyKCl9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdyb3VwTmFtZSgpKSB7XG4gICAgICBlbGVtZW50Q29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJywgdGhpcy5ncm91cE5hbWUoKSB8fCAnJyk7XG4gICAgfVxuICAgIEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KGNoaWxkcmVuRWxlbWVudCkuZm9yRWFjaCgoY2hpbGRFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIWNoaWxkRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2dyb3VwTmFtZScpIHx8IGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2dyb3VwTmFtZScpID09PSB0aGlzLmdyb3VwTmFtZSgpKSB7XG4gICAgICAgIGNoaWxkRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnLCB0aGlzLmdyb3VwSUQoKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpICE9PSB0aGlzLmdyb3VwSUQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgY2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaW5kZXgnLCBgJHtpbmRleH1gKTtcbiAgICAgIGNoaWxkRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJyk7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpKSB7XG4gICAgICAgIGNoaWxkRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVEcmFnQ29udGFpbmVyJywgYCR7dGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZ3JvdXBOYW1lKCkgJiYgIWNoaWxkRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2dyb3VwTmFtZScpKSB7XG4gICAgICAgIGNoaWxkRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2dyb3VwTmFtZScsIHRoaXMuZ3JvdXBOYW1lKCkgfHwgJycpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIoKSkge1xuICAgICAgICBjaGlsZEVsZW1lbnQuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIGAke3RoaXMucGxhY2Vob2xkZXIoKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRyb3BUb0dyb3VwTmFtZSgpKSB7XG4gICAgICAgIGNoaWxkRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Ryb3BUb0dyb3VwTmFtZScsIGAke3RoaXMuZHJvcFRvR3JvdXBOYW1lKCk/LmpvaW4oJzsnKX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleEluc2VydCA9PT0gaW5kZXggJiYgdGhpcy5wbGFjZWhvbGRlcigpKSB7XG4gICAgICAgIGlmICghY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1wbGFjZWhvbGRlcicpKSB7XG4gICAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tcGxhY2Vob2xkZXInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoaWxkRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJvcC1wbGFjZWhvbGRlcicpKSB7XG4gICAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJvcC1wbGFjZWhvbGRlcicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXRJdGVtRHJhZyAmJiBjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLlRhcmdldEl0ZW1EcmFnRmxhZykgJiYgdGhpcy5pdGVtcygpLmxlbmd0aCA+PSBpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlcigpKSB7XG4gICAgICAgICAgaWYgKCFjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJykpIHtcbiAgICAgICAgICAgIGNoaWxkRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1vcmlnaW4tcGxhY2Vob2xkZXInKSkge1xuICAgICAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tb3JpZ2luLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbURyYWdJbmZvID0geyBpdGVtOiB0aGlzLml0ZW1zKClbaW5kZXhdIGFzIG9iamVjdCwgaW5kZXhEcmFnOiBpbmRleCwgaXRlbXNEcmFnOiB0aGlzLml0ZW1zLCBjb250YWluZXJEcmFnOiBlbGVtZW50Q29udGFpbmVyLCBpdGVtc01vdmU6IHNpZ25hbChbLi4udGhpcy5pdGVtcygpXSkgfTtcbiAgICAgICAgaWYgKHRoaXMubW9kZSgpID09PSAnbW92ZScpIHtcbiAgICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8uaXRlbXNNb3ZlPy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHJldHVybiBbLi4uaXRlbXNdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0eWxlQW5kQXR0cmlidXRlKGVsZW1lbnRDb250YWluZXI6IEhUTUxFbGVtZW50LCBoYXNSZW1vdmVBdHRyaWJ1dGUgPSBmYWxzZSwpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZyhlbGVtZW50Q29udGFpbmVyKTtcbiAgICBpZiAoaGFzUmVtb3ZlQXR0cmlidXRlKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZXMoZWxlbWVudENvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuc2V0SW5kZXhFbGVtZW50KGVsZW1lbnRDb250YWluZXIpO1xuICB9O1xuXG4gIHByaXZhdGUgc2V0QW5pbWF0aW9uRWxlbWVudERyYWdPdmVyKGluZGV4RHJhZzogbnVtYmVyLCBpbmRleERyYWdPdmVyOiBudW1iZXIsIGVsZW1lbnREcmFnT3ZlcjogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlyZWN0aW9uRHJhZygpIHx8ICFlbGVtZW50RHJhZ092ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uRHJhZygpID09PSAndmVydGljYWwnKSB7XG4gICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtYm90dG9tJyk7XG4gICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtdG9wJyk7XG4gICAgICBpZiAoaW5kZXhEcmFnID4gaW5kZXhEcmFnT3Zlcikge1xuICAgICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtYm90dG9tJyk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXhEcmFnIDwgaW5kZXhEcmFnT3Zlcikge1xuICAgICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtdG9wJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtbGVmdCcpO1xuICAgIGVsZW1lbnREcmFnT3Zlci5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXRyYW5zbGF0ZS1yaWdodCcpO1xuICAgIGlmIChpbmRleERyYWcgPiBpbmRleERyYWdPdmVyKSB7XG4gICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtcmlnaHQnKTtcbiAgICB9XG4gICAgaWYgKGluZGV4RHJhZyA8IGluZGV4RHJhZ092ZXIpIHtcbiAgICAgIGVsZW1lbnREcmFnT3Zlci5jbGFzc0xpc3QuYWRkKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXRyYW5zbGF0ZS1sZWZ0Jyk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIHNldEluZGV4RWxlbWVudChlbGVtZW50Q29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGNoaWxkcmVuRWxlbWVudCA9IGVsZW1lbnRDb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmUpIGFzIHVua25vd24gYXMgQXJyYXk8SFRNTEVsZW1lbnQ+O1xuICAgIGxldCBpbmRleCA9IC0xO1xuXG4gICAgQXJyYXkuZnJvbTxIVE1MRWxlbWVudD4oY2hpbGRyZW5FbGVtZW50KS5mb3JFYWNoKChjaGlsZEVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdncm91cElEJykgIT09IHRoaXMuZ3JvdXBJRCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBjaGlsZEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpbmRleCcsIGAke2luZGV4fWApO1xuICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUF0dHJpYnV0ZXMoZWxlbWVudENvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGlnbm9yZVJlbW92ZUNsYXNzSXRlbU9yaWdpblBsYWNlaG9sZGVyPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGNoaWxkcmVuRWxlbWVudCA9IGVsZW1lbnRDb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmRyYWdEcm9wU2VydmljZS5DbGFzc0l0ZW1EZWZpbmUpIGFzIHVua25vd24gYXMgQXJyYXk8SFRNTEVsZW1lbnQ+O1xuXG4gICAgZWxlbWVudENvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1jb250YWluZXItZHJhZ292ZXInKTtcbiAgICBBcnJheS5mcm9tPEhUTUxFbGVtZW50PihjaGlsZHJlbkVsZW1lbnQpLmZvckVhY2goKGNoaWxkRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSAhPT0gdGhpcy5ncm91cElEKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2hpbGRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnaW5kZXgnKTtcbiAgICAgIGlmICghdGhpcy5kcm9wVG9Hcm91cE5hbWUoKSB8fCAhdGhpcy5kcm9wVG9Hcm91cE5hbWUoKT8ubGVuZ3RoKSB7XG4gICAgICAgIGNoaWxkRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2Ryb3BUb0dyb3VwTmFtZScpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgY2hpbGRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tcGxhY2Vob2xkZXInKTtcbiAgICAgICAgaWYgKCFpZ25vcmVSZW1vdmVDbGFzc0l0ZW1PcmlnaW5QbGFjZWhvbGRlcikge1xuXG4gICAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tb3JpZ2luLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJvcC1wbGFjZWhvbGRlcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cbn1cbiJdfQ==
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kcmFnLWRyb3Avc3JjL2RyYWctZHJvcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU85RSxNQUFNLE9BQU8sc0NBQXVDLFNBQVEsbUNBQW1DO0lBQzdGLG1CQUFtQjtJQUNYLE9BQU8sR0FBRyxNQUFNLENBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqQyxVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUV4QyxnQkFBZ0I7SUFDUCxvQkFBb0IsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUEwQixNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLGFBQWEsR0FBRyxLQUFLLEVBQTZCLENBQUM7SUFDbkQsaUJBQWlC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LElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZCLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDO29CQUM1QyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUM3RSxDQUFDO2dCQUNELFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F2aEJVLHNDQUFzQzs0RkFBdEMsc0NBQXNDOzs0RkFBdEMsc0NBQXNDO2tCQUxsRCxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgT25EZXN0cm95LCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyLCBjbG9uZURlZXAsIGdldCwgc2V0LCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3R5bGVDb250YWluZXIgfSBmcm9tICcuL2RlZmluZXMvY3NzLmRlZmluZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzRHJhZ1Njcm9sbERpcmVjdGl2ZSB9IGZyb20gJy4vZHJhZy1zY3JvbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IElEcmFnRHJvcEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJRHJhZ0VuZCwgSURyYWdMZWF2ZSwgSURyYWdPdmVyLCBJRHJhZ1N0YXJ0LCBJRHJhZ2dpbmcsIElEcm9wIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2V2ZW50LmludGVyZmFjZSc7XG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgZXh0ZW5kcyBMaWJzVWlDb21wb25lbnRzRHJhZ1Njcm9sbERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSBncm91cElEID0gc2lnbmFsPHN0cmluZz4odXVpZCgpKTtcbiAgcHJpdmF0ZSBpc0RyYWdPdmVyID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgZGlzYWJsZURyYWdDb250YWluZXIgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBtb2RlID0gaW5wdXQ8c3RyaW5nLCAnbW92ZScgfCAnY29weSc+KCdtb3ZlJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ21vdmUnIH0pO1xuICByZWFkb25seSBkaXJlY3Rpb25EcmFnID0gaW5wdXQ8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oKTtcbiAgcmVhZG9ubHkgdmlld0VuY2Fwc3VsYXRpb24gPSBpbnB1dDwnZW11bGF0ZWQnIHwgJ25vbmUnLCAnZW11bGF0ZWQnIHwgJ25vbmUnIHwgdW5kZWZpbmVkPignZW11bGF0ZWQnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnZW11bGF0ZWQnIH0pO1xuICByZWFkb25seSBhY2NlcHREcmFnU2FtZUdyb3VwID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGdyb3VwTmFtZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignZ3JvdXBEcmFnQW5kRHJvcERlZmF1bHQnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnZ3JvdXBEcmFnQW5kRHJvcERlZmF1bHQnIH0pOyAvLyBu4bq/dSBjw6FjIGdyb3VwIGPDsyB0w6puIHRyw7luZyBuaGF1IHPhur0gxJHGsOG7o2MgZHJvcFxuICByZWFkb25seSBkcm9wVG9Hcm91cE5hbWUgPSBpbnB1dDxBcnJheTxzdHJpbmc+IHwgbnVsbD4obnVsbCk7IC8vIG7hur91IGl0ZW0gdHJvbmcgY8OhYyBncm91cCBBIMSRxrDhu6NjIGRyb3AgdsOgbyBncm91cCBCIG5oxrBuZyBncm91cCBCIGtow7RuZyDEkcaw4bujYyBkcm9wIHbDoG8gZ3JvdXAgQVxuICByZWFkb25seSBpdGVtcyA9IG1vZGVsLnJlcXVpcmVkPEFycmF5PHVua25vd24+PigpO1xuICByZWFkb25seSBzdHlsZXNPdmVycmlkZSA9IGlucHV0PEFycmF5PHsgY2xhc3NOYW1lOiBzdHJpbmc7IHN0eWxlczogc3RyaW5nIH0+PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dERyYWdTdGFydENvbnRhaW5lciA9IG91dHB1dDxJRHJhZ1N0YXJ0PigpO1xuICByZWFkb25seSBvdXREcmFnT3ZlckNvbnRhaW5lciA9IG91dHB1dDxJRHJhZ092ZXI+KCk7XG4gIHJlYWRvbmx5IG91dERyYWdMZWF2ZUNvbnRhaW5lciA9IG91dHB1dDxJRHJhZ0xlYXZlPigpO1xuICByZWFkb25seSBvdXREcmFnRW5kQ29udGFpbmVyID0gb3V0cHV0PElEcmFnRW5kPigpO1xuICByZWFkb25seSBvdXREcm9wcGVkQ29udGFpbmVyID0gb3V0cHV0PElEcm9wPigpO1xuICByZWFkb25seSBvdXREcm9wcGVkQ29udGFpbmVyRW1wdHkgPSBvdXRwdXQ8SURyb3A+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbCA9IG91dHB1dDxJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjb250YWluZXI6IHsgZWxlbWVudDogSFRNTEVsZW1lbnQsIGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCB9ID0geyBlbGVtZW50IH07XG5cbiAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5Db250YWluZXIoKS5zZXQodGhpcy5ncm91cElEKCksIGNvbnRhaW5lcik7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFNjcm9sbCA9IHRoaXMucm9vdEVsZW1lbnRTY3JvbGwoKTtcbiAgICAgIGlmICghZWxlbWVudFNjcm9sbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBzZXQoY29udGFpbmVyLCAnZWxlbWVudFNjcm9sbCcsIGVsZW1lbnRTY3JvbGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uRHJhZygpICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKSAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbkNvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuXG4gICAgdGhpcy5vdXREcm9wcGVkQ29udGFpbmVyLnN1YnNjcmliZSgoZXZlbnREcm9wcGVkKSA9PiB7XG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyb3BDb250YWluZXIubmV4dChldmVudERyb3BwZWQpO1xuICAgIH0pO1xuICAgIHRoaXMub25EZXN0cm95LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoaW5kZXhTcGxpY2VMaXN0VG8gPiAtMSkge1xuICAgICAgICB0aGlzLml0ZW1zLnVwZGF0ZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhTcGxpY2VMaXN0VG8sIDEpO1xuICAgICAgICAgIHJldHVybiBbLi4uaXRlbXNdO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuQ29udGFpbmVyKCkuZGVsZXRlKHRoaXMuZ3JvdXBJRCgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBlbGVtZW50Q29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICB0aGlzLmluaXRTdHlsZUFuZEF0dHJpYnV0ZShlbGVtZW50Q29udGFpbmVyLCB0cnVlKTtcbiAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5Pbkl0ZW1Jbml0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgIGZpbHRlcigoZ3JvdXBOYW1lKSA9PiBncm91cE5hbWUgPT09IHRoaXMuZ3JvdXBOYW1lKCkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMuaW5pdFN0eWxlQW5kQXR0cmlidXRlKGVsZW1lbnRDb250YWluZXIpKTtcbiAgICBjb25zdCBzdHlsZVRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgICBzdHlsZVRhZy50ZXh0Q29udGVudCA9IHN0eWxlQ29udGFpbmVyKHRoaXMuc3R5bGVzT3ZlcnJpZGUoKSB8fCBbXSwgdGhpcy52aWV3RW5jYXBzdWxhdGlvbigpLCB0aGlzLmdyb3VwSUQoKSk7XG4gICAgZWxlbWVudENvbnRhaW5lci5hcHBlbmRDaGlsZChzdHlsZVRhZyk7XG4gICAgZWxlbWVudENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzQ29udGFpbmVyRGVmaW5lKTtcblxuICAgIGNvbnN0IGhhbmRsZXJEcmFnU3RhcnQgPSAoZXZlbnREcmFnU3RhcnQ6IElEcmFnU3RhcnQpID0+IHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnKGVsZW1lbnRDb250YWluZXIsIHRydWUpO1xuICAgICAgaWYgKHRoaXMuZ3JvdXBJRCgpID09PSBldmVudERyYWdTdGFydC5lbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSkge1xuICAgICAgICB0aGlzLm91dERyYWdTdGFydENvbnRhaW5lci5lbWl0KHsgLi4uZXZlbnREcmFnU3RhcnQsIGl0ZW1EcmFnSW5mbzogdGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbURyYWdJbmZvIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBzdG9yZUluZGV4ID0geyBpbmRleERyYWc6IC0xLCBpbmRleERyYWdPdmVyOiAtMSB9O1xuICAgIGxldCBpbmRleFNwbGljZUxpc3RUbyA9IC0xO1xuICAgIGNvbnN0IGhhbmRsZXJEcmFnT3ZlciA9IChldmVudERyYWdPdmVyOiBJRHJhZ092ZXIpID0+IHtcbiAgICAgIGNvbnN0IHsgZWxlbWVudERyYWcsIGVsZW1lbnREcmFnT3ZlciB9ID0gZXZlbnREcmFnT3ZlcjtcblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKSB8fCAhdGhpcy5kcmFnRHJvcFNlcnZpY2UuY2hlY2tFbGVtZW50T3ZlckFjY2VwdEVsZW1lbnREcmFnKHRoaXMuZ3JvdXBOYW1lKCksIGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJyksIGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZHJvcFRvR3JvdXBOYW1lJykpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4RHJhZyA9IE51bWJlcihlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2luZGV4JykpLnZhbHVlT2YoKTtcbiAgICAgIGNvbnN0IGluZGV4RHJhZ092ZXIgPSBOdW1iZXIoZWxlbWVudERyYWdPdmVyLmdldEF0dHJpYnV0ZSgnaW5kZXgnKSkudmFsdWVPZigpO1xuICAgICAgY29uc3QgaWRHcm91cEVsZW1lbnREcmFnID0gZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdncm91cElEJyk7XG4gICAgICBjb25zdCBpZEdyb3VwRWxlbWVudERyYWdPdmVyID0gZWxlbWVudERyYWdPdmVyLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpO1xuXG4gICAgICBpZiAodGhpcy5ncm91cElEKCkgIT09IGlkR3JvdXBFbGVtZW50RHJhZyB8fCBpZEdyb3VwRWxlbWVudERyYWcgIT09IGlkR3JvdXBFbGVtZW50RHJhZ092ZXIpIHtcbiAgICAgICAgLy8geOG7rSBsw70gY2hvIGl0ZW0gZHJhZyBvdmVyIHF1YSAxIGl0ZW0ga2jDoWMgY29udGFpbmVyXG4gICAgICAgIGlmIChpZEdyb3VwRWxlbWVudERyYWdPdmVyID09PSB0aGlzLmdyb3VwSUQoKSAmJiB0aGlzLnBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tb2RlKCkgPT09ICdjb3B5JyA/IGNsb25lRGVlcCh0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8/Lml0ZW0pIDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuSXRlbURyYWdJbmZvPy5pdGVtO1xuICAgICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4U3BsaWNlTGlzdFRvID49IDApIHtcbiAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4U3BsaWNlTGlzdFRvLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyYWdPdmVyLCAwLCBpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBbLi4uaXRlbXNdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGluZGV4U3BsaWNlTGlzdFRvID0gaW5kZXhEcmFnT3ZlcjtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lciwgZmFsc2UsIGluZGV4U3BsaWNlTGlzdFRvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5hY2NlcHREcmFnU2FtZUdyb3VwKCkgfHxcbiAgICAgICAgaW5kZXhEcmFnIDwgMCB8fFxuICAgICAgICBpbmRleERyYWdPdmVyIDwgMCB8fFxuICAgICAgICAhdGhpcy5pdGVtcygpLmxlbmd0aCB8fFxuICAgICAgICBpbmRleERyYWcgPiB0aGlzLml0ZW1zKCkubGVuZ3RoIHx8XG4gICAgICAgIGluZGV4RHJhZ092ZXIgPiB0aGlzLml0ZW1zKCkubGVuZ3RoIHx8XG4gICAgICAgIChzdG9yZUluZGV4LmluZGV4RHJhZyA9PT0gaW5kZXhEcmFnICYmIHN0b3JlSW5kZXguaW5kZXhEcmFnT3ZlciA9PT0gaW5kZXhEcmFnT3ZlcilcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyB44butIGzDvSBjaG8gaXRlbSBkcmFnIG92ZXIgcXVhIDEgaXRlbSBjw7luZyBjb250YWluZXJcbiAgICAgIGNvbnN0IGl0ZW1EcmFnID0gdGhpcy5pdGVtcygpW2luZGV4RHJhZ107XG5cbiAgICAgIHRoaXMuc2V0QW5pbWF0aW9uRWxlbWVudERyYWdPdmVyKGluZGV4RHJhZywgaW5kZXhEcmFnT3ZlciwgZWxlbWVudERyYWdPdmVyKTtcbiAgICAgIHN0b3JlSW5kZXguaW5kZXhEcmFnID0gaW5kZXhEcmFnO1xuICAgICAgc3RvcmVJbmRleC5pbmRleERyYWdPdmVyID0gaW5kZXhEcmFnT3ZlcjtcbiAgICAgIHRoaXMuaXRlbXMudXBkYXRlKChpdGVtcykgPT4ge1xuICAgICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcmFnLCAxKTtcbiAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4RHJhZ092ZXIsIDAsIGl0ZW1EcmFnKTtcbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgICB9KTtcbiAgICAgIGVsZW1lbnREcmFnLnNldEF0dHJpYnV0ZSgnaW5kZXgnLCBpbmRleERyYWdPdmVyLnRvU3RyaW5nKCkpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lcik7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbW92ZVBsYWNlaG9sZGVyRHJhZyA9IChldmVudERyYWc6IElEcmFnRW5kLCBpc0RyYWdnaW5nPzogYm9vbGVhbikgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsU2Nyb2xsVG9FbGVtZW50KCkpO1xuICAgICAgc3RvcmVJbmRleC5pbmRleERyYWcgPSAtMTtcbiAgICAgIHN0b3JlSW5kZXguaW5kZXhEcmFnT3ZlciA9IC0xO1xuICAgICAgY29uc3QgY2hpbGRyZW5FbGVtZW50ID0gZWxlbWVudENvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZSkgYXMgdW5rbm93biBhcyBBcnJheTxIVE1MRWxlbWVudD47XG5cbiAgICAgIGlmICghY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihldmVudERyYWcubW91c2VQb3NpdGlvbiwgdGhpcy5yb290RWxlbWVudFNjcm9sbCgpIHx8IGVsZW1lbnRDb250YWluZXIpKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudEluZGV4ID0gQXJyYXkuZnJvbTxIVE1MRWxlbWVudD4oY2hpbGRyZW5FbGVtZW50KS5maW5kSW5kZXgoKGNoaWxkKSA9PiBjaGlsZC5jbGFzc0xpc3QuY29udGFpbnMoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJvcC1wbGFjZWhvbGRlcicpKTtcblxuICAgICAgICBpZiAoY2hpbGRFbGVtZW50SW5kZXggPj0gMCAmJiB0aGlzLmdyb3VwSUQoKSAhPT0gZXZlbnREcmFnLmVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy51cGRhdGUoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICBpdGVtcy5zcGxpY2UoY2hpbGRFbGVtZW50SW5kZXgsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXhTcGxpY2VMaXN0VG8gPSAtMTtcblxuICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZXMoZWxlbWVudENvbnRhaW5lciwgaXNEcmFnZ2luZyk7XG4gICAgICAgIHRoaXMuc2V0SW5kZXhFbGVtZW50KGVsZW1lbnRDb250YWluZXIpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleFNwbGljZUxpc3RUbyA+PSAwKSB7XG4gICAgICAgIHRoaXMuaXRlbXMudXBkYXRlKChpdGVtcykgPT4ge1xuICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleFNwbGljZUxpc3RUbywgMSk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaW5kZXhTcGxpY2VMaXN0VG8gPSAtMTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlckRyYWdnaW5nID0gKGV2ZW50RHJhZ2dpbmc6IElEcmFnZ2luZykgPT4ge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lcik7XG4gICAgICBjb25zdCB7IGVsZW1lbnREcmFnIH0gPSBldmVudERyYWdnaW5nO1xuICAgICAgY29uc3QgZmllbGRJZEl0ZW0gPSBlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2ZpZWxkX2lkJyk7XG4gICAgICBjb25zdCBpZEl0ZW1EcmFnID0gZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdpdGVtX2lkJyk7XG5cbiAgICAgIGlmIChmaWVsZElkSXRlbSAmJiBpZEl0ZW1EcmFnICYmIHRoaXMuaXRlbXMoKS5maW5kKChpdGVtKSA9PiBnZXQoaXRlbSwgZmllbGRJZEl0ZW0pID09PSBpZEl0ZW1EcmFnKSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbkVsZW1lbnQgPSBlbGVtZW50Q29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lKSBhcyB1bmtub3duIGFzIEFycmF5PEhUTUxFbGVtZW50PjtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50ID0gQXJyYXkuZnJvbTxIVE1MRWxlbWVudD4oY2hpbGRyZW5FbGVtZW50KS5maW5kKChjaGlsZCkgPT4gY2hpbGQuZ2V0QXR0cmlidXRlKCdpdGVtX2lkJykgPT09IGlkSXRlbURyYWcpO1xuXG4gICAgICAgIGlmICh0aGlzLml0ZW1zKCkgPT09IGV2ZW50RHJhZ2dpbmcuaXRlbURyYWdJbmZvPy5pdGVtc0RyYWcoKSAmJiBjaGlsZEVsZW1lbnQgJiYgIWNoaWxkRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJvcC1wbGFjZWhvbGRlcicpICYmICFjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLlRhcmdldEl0ZW1EcmFnRmxhZykpIHtcbiAgICAgICAgICBjaGlsZEVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLlRhcmdldEl0ZW1EcmFnRmxhZywgJ3RydWUnKTtcbiAgICAgICAgICB0aGlzLmdyb3VwSUQuc2V0KGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpIHx8ICcnKTtcbiAgICAgICAgICBzdHlsZVRhZy5yZW1vdmUoKTtcbiAgICAgICAgICBzdHlsZVRhZy50ZXh0Q29udGVudCA9IHN0eWxlQ29udGFpbmVyKHRoaXMuc3R5bGVzT3ZlcnJpZGUoKSB8fCBbXSwgdGhpcy52aWV3RW5jYXBzdWxhdGlvbigpLCB0aGlzLmdyb3VwSUQoKSk7XG4gICAgICAgICAgZWxlbWVudENvbnRhaW5lci5hcHBlbmRDaGlsZChzdHlsZVRhZyk7XG4gICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmdyb3VwSUQoKSA9PT0gZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdncm91cElEJykgJiYgIXRoaXMuYWNjZXB0RHJhZ1NhbWVHcm91cCgpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTY3JvbGxFbGVtZW50VG9Qb3NpdGlvbihldmVudERyYWdnaW5nLCB0aGlzLmlnbm9yZUF1dG9TY3JvbGwoKSB8fCAhdGhpcy5hY2NlcHREcmFnU2FtZUdyb3VwKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihldmVudERyYWdnaW5nLm1vdXNlUG9zaXRpb24sIHRoaXMucm9vdEVsZW1lbnRTY3JvbGwoKSB8fCBlbGVtZW50Q29udGFpbmVyKSkge1xuICAgICAgICBpZiAodGhpcy5pc0RyYWdPdmVyKCkpIHtcbiAgICAgICAgICB0aGlzLmlzRHJhZ092ZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLm91dERyYWdMZWF2ZUNvbnRhaW5lci5lbWl0KHsgLi4uZXZlbnREcmFnZ2luZywgZWxlbWVudERyYWdMZWF2ZTogZWxlbWVudENvbnRhaW5lciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW1vdmVQbGFjZWhvbGRlckRyYWcoZXZlbnREcmFnZ2luZywgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrQW5kU2Nyb2xsRWxlbWVudFRvUG9zaXRpb24oZXZlbnREcmFnZ2luZywgdGhpcy5pZ25vcmVBdXRvU2Nyb2xsKCkpO1xuXG4gICAgICAvLyDEkG/huqFuIGNvZGUgeOG7rSBsw70gY2hvIHZp4buHYyBrw6lvIG3hu5l0IGVsZW1lbnQgdsOgbyAxIGNvbnRhaW5lciBuaMawbmcgY29udGFpbmVyIGtow7RuZyBjw7MgaXRlbSBob+G6t2MgaXRlbSBkcmFnIGtow7RuZyBvdmVyIHF1YSBpdGVtIHRyb25nIGNvbnRhaW5lclxuICAgICAgaWYgKCF0aGlzLmlzRHJhZ092ZXIoKSkge1xuICAgICAgICBlbGVtZW50Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2xpYnMtdWktZHJhZy1kcm9wLWNvbnRhaW5lci1kcmFnb3ZlcicpO1xuICAgICAgICB0aGlzLmlzRHJhZ092ZXIuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLm91dERyYWdPdmVyQ29udGFpbmVyLmVtaXQoeyAuLi5ldmVudERyYWdnaW5nLCBlbGVtZW50RHJhZ092ZXI6IGVsZW1lbnRDb250YWluZXIgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBldmVudERyYWdPdmVyID0geyAuLi5ldmVudERyYWdnaW5nLCBlbGVtZW50RHJhZ092ZXI6IGVsZW1lbnRDb250YWluZXIgfTtcblxuICAgICAgaWYgKCF0aGlzLml0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgIGV2ZW50RHJhZ092ZXIuZWxlbWVudERyYWdPdmVyID0ge1xuICAgICAgICAgIGdldEF0dHJpYnV0ZTogKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdncm91cElEJykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cElEKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyYWdPdmVyLm5leHQoZXZlbnREcmFnT3Zlcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZHJlbkVsZW1lbnQgPSBlbGVtZW50Q29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lKSBhcyB1bmtub3duIGFzIEFycmF5PEhUTUxFbGVtZW50PjtcbiAgICAgIGxldCBjaGlsZEVsZW1lbnQgPSBBcnJheS5mcm9tPEhUTUxFbGVtZW50PihjaGlsZHJlbkVsZW1lbnQpLmZpbmQoKGNoaWxkKSA9PiBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKGV2ZW50RHJhZ2dpbmcubW91c2VQb3NpdGlvbiwgY2hpbGQpKTtcblxuICAgICAgaWYgKGNoaWxkRWxlbWVudCkge1xuICAgICAgICAvLyBu4bq/dSB0w6xtIHRo4bqleSB0aMOsIHPhur0gbmjhuq1uIHF1YSBz4buxIGtp4buHbiBj4bunYSBkcmFnLWl0ZW0uZGlyZWN0aXZlIGVtaXRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2hpbGRFbGVtZW50ID0gQXJyYXkuZnJvbTxIVE1MRWxlbWVudD4oY2hpbGRyZW5FbGVtZW50KS5wb3AoKTtcblxuICAgICAgaWYgKGNoaWxkRWxlbWVudCkge1xuICAgICAgICBldmVudERyYWdPdmVyLmVsZW1lbnREcmFnT3ZlciA9IGNoaWxkRWxlbWVudDtcbiAgICAgICAgdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnT3Zlci5uZXh0KGV2ZW50RHJhZ092ZXIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVyRHJhZ0VuZCA9IChldmVudERyYWdFbmQ6IElEcmFnRW5kKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCByZWN0ID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodGhpcy5yb290RWxlbWVudFNjcm9sbCgpIHx8IGVsZW1lbnRDb250YWluZXIpIHtcbiAgICAgICAgcmVjdCA9ICh0aGlzLnJvb3RFbGVtZW50U2Nyb2xsKCkgfHwgZWxlbWVudENvbnRhaW5lcik/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgfVxuICAgICAgcmVtb3ZlUGxhY2Vob2xkZXJEcmFnKGV2ZW50RHJhZ0VuZCk7XG4gICAgICBjb25zdCB7IGVsZW1lbnREcmFnLCBtb3VzZVBvc2l0aW9uLCBpdGVtRHJhZ0luZm8gfSA9IGV2ZW50RHJhZ0VuZDtcblxuICAgICAgaWYgKHRoaXMuZ3JvdXBJRCgpID09PSBlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSkge1xuICAgICAgICB0aGlzLm91dERyYWdFbmRDb250YWluZXIuZW1pdCh7IC4uLmV2ZW50RHJhZ0VuZCB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihtb3VzZVBvc2l0aW9uLCB0aGlzLnJvb3RFbGVtZW50U2Nyb2xsKCkgfHwgZWxlbWVudENvbnRhaW5lciwgcmVjdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZlbnREcm9wID0geyBlbGVtZW50RHJhZzogZWxlbWVudERyYWcsIGVsZW1lbnREcm9wOiBlbGVtZW50Q29udGFpbmVyLCBpdGVtRHJhZ0luZm86IGl0ZW1EcmFnSW5mbyB9O1xuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpIHx8ICF0aGlzLmRyYWdEcm9wU2VydmljZS5jaGVja0VsZW1lbnRPdmVyQWNjZXB0RWxlbWVudERyYWcodGhpcy5ncm91cE5hbWUoKSwgZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdncm91cE5hbWUnKSwgZWxlbWVudERyYWcuZ2V0QXR0cmlidXRlKCdkcm9wVG9Hcm91cE5hbWUnKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZHJlbkVsZW1lbnQgPSBlbGVtZW50Q29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lKSBhcyB1bmtub3duIGFzIEFycmF5PEhUTUxFbGVtZW50PjtcbiAgICAgIGNvbnN0IGNoaWxkRWxlbWVudCA9IEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KGNoaWxkcmVuRWxlbWVudCkuZmluZCgoY2hpbGQpID0+IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIobW91c2VQb3NpdGlvbiwgY2hpbGQpKTtcblxuICAgICAgaWYgKGNoaWxkRWxlbWVudCkge1xuICAgICAgICBldmVudERyb3AuZWxlbWVudERyb3AgPSBjaGlsZEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJvcC5uZXh0KGV2ZW50RHJvcCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnREcm9wLmVsZW1lbnREcm9wID0ge1xuICAgICAgICBnZXRBdHRyaWJ1dGU6IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Ryb3BDb250YWluZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdncm91cElEJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBJRCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmFtZSAhPT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNoaWxkcmVuRWxlbWVudC5sZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICB9IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5PbkRyb3AubmV4dChldmVudERyb3ApO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVyRHJvcCA9IChldmVudERyb3A6IElEcm9wKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlRHJhZ0NvbnRhaW5lcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgZWxlbWVudERyYWcsIGVsZW1lbnREcm9wLCBpdGVtRHJhZ0luZm8gfSA9IGV2ZW50RHJvcDtcblxuICAgICAgaWYgKHRoaXMuZ3JvdXBJRCgpID09PSBlbGVtZW50RHJhZy5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSAmJiB0aGlzLmdyb3VwSUQoKSA9PT0gZWxlbWVudERyb3AuZ2V0QXR0cmlidXRlKCdncm91cElEJykpIHtcbiAgICAgICAgaWYgKGl0ZW1EcmFnSW5mbykge1xuICAgICAgICAgIGl0ZW1EcmFnSW5mby5pbmRleERyb3AgPSBOdW1iZXIoZWxlbWVudERyb3AuZ2V0QXR0cmlidXRlKCdpbmRleCcpKS52YWx1ZU9mKCk7XG4gICAgICAgICAgaXRlbURyYWdJbmZvLml0ZW1zRHJvcCA9IHRoaXMuaXRlbXM7XG4gICAgICAgICAgaXRlbURyYWdJbmZvLmNvbnRhaW5lckRyb3AgPSBlbGVtZW50Q29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjY2VwdERyYWdTYW1lR3JvdXAoKSkge1xuICAgICAgICAgIHRoaXMub3V0RHJvcHBlZENvbnRhaW5lci5lbWl0KGV2ZW50RHJvcCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVzKGVsZW1lbnRDb250YWluZXIpO1xuICAgICAgICB0aGlzLnNldEluZGV4RWxlbWVudChlbGVtZW50Q29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5ncm91cElEKCkgIT09IGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpIHx8IGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpID09PSBlbGVtZW50RHJvcC5nZXRBdHRyaWJ1dGUoJ2dyb3VwSUQnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleERyYWdPdmVyID0gdGhpcy5ncm91cElEKCkgIT09IGVsZW1lbnREcmFnLmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpID8gTnVtYmVyKGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnaW5kZXgnKSkudmFsdWVPZigpIDogTnVtYmVyKGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnaW5kZXgnKSkudmFsdWVPZigpIC0gKGVsZW1lbnREcm9wLmdldEF0dHJpYnV0ZSgnZHJvcENvbnRhaW5lcicpID8gMCA6IDEpO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMubW9kZSgpID09PSAnY29weScgPyBjbG9uZURlZXAoaXRlbURyYWdJbmZvPy5pdGVtKSA6IGl0ZW1EcmFnSW5mbz8uaXRlbTtcblxuICAgICAgaWYgKGl0ZW1EcmFnSW5mbykge1xuICAgICAgICBpdGVtRHJhZ0luZm8uaW5kZXhEcm9wID0gaW5kZXhEcmFnT3ZlcjtcbiAgICAgICAgaXRlbURyYWdJbmZvLml0ZW1zRHJvcCA9IHRoaXMuaXRlbXM7XG4gICAgICAgIGl0ZW1EcmFnSW5mby5jb250YWluZXJEcm9wID0gZWxlbWVudENvbnRhaW5lcjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLml0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub3V0RHJvcHBlZENvbnRhaW5lckVtcHR5LmVtaXQoZXZlbnREcm9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pdGVtcy51cGRhdGUoKGl0ZW1zKSA9PiB7XG4gICAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyYWdPdmVyLCAwLCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgICB9KTtcbiAgICAgIGlmIChpdGVtRHJhZ0luZm8gJiYgaXRlbURyYWdJbmZvLml0ZW1zTW92ZSAmJiBpdGVtRHJhZ0luZm8uaXRlbXNNb3ZlKCkpIHtcbiAgICAgICAgaXRlbURyYWdJbmZvLml0ZW1zRHJhZy5zZXQoWy4uLml0ZW1EcmFnSW5mby5pdGVtc01vdmUoKV0pO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZyhlbGVtZW50Q29udGFpbmVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0RHJvcHBlZENvbnRhaW5lci5lbWl0KGV2ZW50RHJvcCk7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZXMoZWxlbWVudENvbnRhaW5lcik7XG4gICAgICB0aGlzLnNldEluZGV4RWxlbWVudChlbGVtZW50Q29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnT25EcmFnU3RhcnQnLFxuICAgICAgICBldmVudDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnU3RhcnQsXG4gICAgICAgIGZ1bmN0aW9uQ2FsbDogaGFuZGxlckRyYWdTdGFydCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdPbkRyYWdPdmVyJyxcbiAgICAgICAgZXZlbnQ6IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ092ZXIsXG4gICAgICAgIGZ1bmN0aW9uQ2FsbDogaGFuZGxlckRyYWdPdmVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ09uRHJhZ2dpbmcnLFxuICAgICAgICBldmVudDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25EcmFnZ2luZyxcbiAgICAgICAgZnVuY3Rpb25DYWxsOiBoYW5kbGVyRHJhZ2dpbmcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnT25EcmFnRW5kJyxcbiAgICAgICAgZXZlbnQ6IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLk9uRHJhZ0VuZCxcbiAgICAgICAgZnVuY3Rpb25DYWxsOiBoYW5kbGVyRHJhZ0VuZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdPbkRyb3AnLFxuICAgICAgICBldmVudDogdGhpcy5kcmFnRHJvcFNlcnZpY2UuT25Ecm9wLFxuICAgICAgICBmdW5jdGlvbkNhbGw6IGhhbmRsZXJEcm9wLFxuICAgICAgfSxcbiAgICBdLmZvckVhY2goKGl0ZW06IHsgbmFtZTogc3RyaW5nOyBldmVudDogT2JzZXJ2YWJsZTx1bmtub3duPjsgZnVuY3Rpb25DYWxsOiBvYmplY3QgfSkgPT4gaXRlbS5ldmVudC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZShpdGVtLmZ1bmN0aW9uQ2FsbCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElEcmFnRHJvcEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnOiAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCksXG4gICAgfTtcbiAgfVxuXG4gIC8qICovXG4gIHByaXZhdGUgYXN5bmMgc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnKGVsZW1lbnRDb250YWluZXI6IEhUTUxFbGVtZW50LCBzZXRJdGVtRHJhZz86IGJvb2xlYW4sIGluZGV4SW5zZXJ0PzogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hpbGRyZW5FbGVtZW50ID0gZWxlbWVudENvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZSkgYXMgdW5rbm93biBhcyBBcnJheTxIVE1MRWxlbWVudD47XG4gICAgbGV0IGluZGV4ID0gLTE7XG5cbiAgICBlbGVtZW50Q29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZ3JvdXBJRCcsIHRoaXMuZ3JvdXBJRCgpKTtcbiAgICBlbGVtZW50Q29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZURyYWdDb250YWluZXInKTtcblxuICAgIGlmICh0aGlzLmRpc2FibGVEcmFnQ29udGFpbmVyKCkpIHtcbiAgICAgIGVsZW1lbnRDb250YWluZXIuc2V0QXR0cmlidXRlKCdkaXNhYmxlRHJhZ0NvbnRhaW5lcicsIGAke3RoaXMuZGlzYWJsZURyYWdDb250YWluZXIoKX1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ3JvdXBOYW1lKCkpIHtcbiAgICAgIGVsZW1lbnRDb250YWluZXIuc2V0QXR0cmlidXRlKCdncm91cE5hbWUnLCB0aGlzLmdyb3VwTmFtZSgpIHx8ICcnKTtcbiAgICB9XG4gICAgQXJyYXkuZnJvbTxIVE1MRWxlbWVudD4oY2hpbGRyZW5FbGVtZW50KS5mb3JFYWNoKChjaGlsZEVsZW1lbnQpID0+IHtcbiAgICAgIGlmICghY2hpbGRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZ3JvdXBOYW1lJykgfHwgY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJykgPT09IHRoaXMuZ3JvdXBOYW1lKCkpIHtcbiAgICAgICAgY2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZ3JvdXBJRCcsIHRoaXMuZ3JvdXBJRCgpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdncm91cElEJykgIT09IHRoaXMuZ3JvdXBJRCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBjaGlsZEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpbmRleCcsIGAke2luZGV4fWApO1xuICAgICAgY2hpbGRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZURyYWdDb250YWluZXInKTtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVEcmFnQ29udGFpbmVyKCkpIHtcbiAgICAgICAgY2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlzYWJsZURyYWdDb250YWluZXInLCBgJHt0aGlzLmRpc2FibGVEcmFnQ29udGFpbmVyKCl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ncm91cE5hbWUoKSAmJiAhY2hpbGRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZ3JvdXBOYW1lJykpIHtcbiAgICAgICAgY2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZ3JvdXBOYW1lJywgdGhpcy5ncm91cE5hbWUoKSB8fCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlcigpKSB7XG4gICAgICAgIGNoaWxkRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgYCR7dGhpcy5wbGFjZWhvbGRlcigpfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZHJvcFRvR3JvdXBOYW1lKCkpIHtcbiAgICAgICAgY2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZHJvcFRvR3JvdXBOYW1lJywgYCR7dGhpcy5kcm9wVG9Hcm91cE5hbWUoKT8uam9pbignOycpfWApO1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4SW5zZXJ0ID09PSBpbmRleCAmJiB0aGlzLnBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgaWYgKCFjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJykpIHtcbiAgICAgICAgICBjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1wbGFjZWhvbGRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kcm9wLXBsYWNlaG9sZGVyJykpIHtcbiAgICAgICAgICBjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kcm9wLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNldEl0ZW1EcmFnICYmIGNoaWxkRWxlbWVudC5nZXRBdHRyaWJ1dGUodGhpcy5kcmFnRHJvcFNlcnZpY2UuVGFyZ2V0SXRlbURyYWdGbGFnKSAmJiB0aGlzLml0ZW1zKCkubGVuZ3RoID49IGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgICBpZiAoIWNoaWxkRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tcGxhY2Vob2xkZXInKSkge1xuICAgICAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tcGxhY2Vob2xkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLW9yaWdpbi1wbGFjZWhvbGRlcicpKSB7XG4gICAgICAgICAgICBjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1vcmlnaW4tcGxhY2Vob2xkZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5JdGVtRHJhZ0luZm8gPSB7IGl0ZW06IHRoaXMuaXRlbXMoKVtpbmRleF0gYXMgb2JqZWN0LCBpbmRleERyYWc6IGluZGV4LCBpdGVtc0RyYWc6IHRoaXMuaXRlbXMsIGNvbnRhaW5lckRyYWc6IGVsZW1lbnRDb250YWluZXIsIGl0ZW1zTW92ZTogc2lnbmFsKFsuLi50aGlzLml0ZW1zKCldKSB9O1xuICAgICAgICBpZiAodGhpcy5tb2RlKCkgPT09ICdtb3ZlJykge1xuICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkl0ZW1EcmFnSW5mby5pdGVtc01vdmU/LnVwZGF0ZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3R5bGVBbmRBdHRyaWJ1dGUoZWxlbWVudENvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGhhc1JlbW92ZUF0dHJpYnV0ZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVFbGVtZW50QW5kSXRlbURyYWcoZWxlbWVudENvbnRhaW5lcik7XG4gICAgaWYgKGhhc1JlbW92ZUF0dHJpYnV0ZSkge1xuICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVzKGVsZW1lbnRDb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLnNldEluZGV4RWxlbWVudChlbGVtZW50Q29udGFpbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QW5pbWF0aW9uRWxlbWVudERyYWdPdmVyKGluZGV4RHJhZzogbnVtYmVyLCBpbmRleERyYWdPdmVyOiBudW1iZXIsIGVsZW1lbnREcmFnT3ZlcjogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlyZWN0aW9uRHJhZygpIHx8ICFlbGVtZW50RHJhZ092ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uRHJhZygpID09PSAndmVydGljYWwnKSB7XG4gICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtYm90dG9tJyk7XG4gICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtdG9wJyk7XG4gICAgICBpZiAoaW5kZXhEcmFnID4gaW5kZXhEcmFnT3Zlcikge1xuICAgICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtYm90dG9tJyk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXhEcmFnIDwgaW5kZXhEcmFnT3Zlcikge1xuICAgICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtdG9wJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtbGVmdCcpO1xuICAgIGVsZW1lbnREcmFnT3Zlci5jbGFzc0xpc3QucmVtb3ZlKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXRyYW5zbGF0ZS1yaWdodCcpO1xuICAgIGlmIChpbmRleERyYWcgPiBpbmRleERyYWdPdmVyKSB7XG4gICAgICBlbGVtZW50RHJhZ092ZXIuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS10cmFuc2xhdGUtcmlnaHQnKTtcbiAgICB9XG4gICAgaWYgKGluZGV4RHJhZyA8IGluZGV4RHJhZ092ZXIpIHtcbiAgICAgIGVsZW1lbnREcmFnT3Zlci5jbGFzc0xpc3QuYWRkKCdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXRyYW5zbGF0ZS1sZWZ0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbmRleEVsZW1lbnQoZWxlbWVudENvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBjaGlsZHJlbkVsZW1lbnQgPSBlbGVtZW50Q29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5kcmFnRHJvcFNlcnZpY2UuQ2xhc3NJdGVtRGVmaW5lKSBhcyB1bmtub3duIGFzIEFycmF5PEhUTUxFbGVtZW50PjtcbiAgICBsZXQgaW5kZXggPSAtMTtcblxuICAgIEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KGNoaWxkcmVuRWxlbWVudCkuZm9yRWFjaCgoY2hpbGRFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpICE9PSB0aGlzLmdyb3VwSUQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgY2hpbGRFbGVtZW50LnNldEF0dHJpYnV0ZSgnaW5kZXgnLCBgJHtpbmRleH1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXR0cmlidXRlcyhlbGVtZW50Q29udGFpbmVyOiBIVE1MRWxlbWVudCwgaWdub3JlUmVtb3ZlQ2xhc3NJdGVtT3JpZ2luUGxhY2Vob2xkZXI/OiBib29sZWFuKSB7XG4gICAgY29uc3QgY2hpbGRyZW5FbGVtZW50ID0gZWxlbWVudENvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLkNsYXNzSXRlbURlZmluZSkgYXMgdW5rbm93biBhcyBBcnJheTxIVE1MRWxlbWVudD47XG5cbiAgICBlbGVtZW50Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWNvbnRhaW5lci1kcmFnb3ZlcicpO1xuICAgIEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KGNoaWxkcmVuRWxlbWVudCkuZm9yRWFjaCgoY2hpbGRFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoY2hpbGRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZ3JvdXBJRCcpICE9PSB0aGlzLmdyb3VwSUQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjaGlsZEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdpbmRleCcpO1xuICAgICAgaWYgKCF0aGlzLmRyb3BUb0dyb3VwTmFtZSgpIHx8ICF0aGlzLmRyb3BUb0dyb3VwTmFtZSgpPy5sZW5ndGgpIHtcbiAgICAgICAgY2hpbGRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZHJvcFRvR3JvdXBOYW1lJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIoKSkge1xuICAgICAgICBjaGlsZEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIoKSkge1xuICAgICAgICBjaGlsZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1wbGFjZWhvbGRlcicpO1xuICAgICAgICBpZiAoIWlnbm9yZVJlbW92ZUNsYXNzSXRlbU9yaWdpblBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tb3JpZ2luLXBsYWNlaG9sZGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJvcC1wbGFjZWhvbGRlcicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
- import { Injectable, signal } from "@angular/core";
2
- import { Subject } from "rxjs";
1
+ import { Injectable, signal } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
4
  export class MoLibsSharedDragDropService {
5
5
  itemsClick = new Array();
@@ -75,7 +75,11 @@ export class MoLibsSharedDragDropService {
75
75
  if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {
76
76
  return false;
77
77
  }
78
- if (groupNameOfDropTo !== null && !groupNameOfDropTo.toString().split(';').includes(groupNameOfContainer || 'undefinedName')) {
78
+ if (groupNameOfDropTo !== null &&
79
+ !groupNameOfDropTo
80
+ .toString()
81
+ .split(';')
82
+ .includes(groupNameOfContainer || 'undefinedName')) {
79
83
  return false;
80
84
  }
81
85
  return true;
@@ -86,7 +90,7 @@ export class MoLibsSharedDragDropService {
86
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoLibsSharedDragDropService, decorators: [{
87
91
  type: Injectable,
88
92
  args: [{
89
- providedIn: 'any'
93
+ providedIn: 'any',
90
94
  }]
91
95
  }] });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kcmFnLWRyb3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFNL0IsTUFBTSxPQUFPLDJCQUEyQjtJQUM5QixVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztJQUN0QyxrQ0FBa0MsR0FBRyxJQUFJLE9BQU8sRUFBcUMsQ0FBQztJQUN0RixZQUFZLENBQWlCO0lBQzdCLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQWlFLENBQUMsQ0FBQztJQUM3RixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUN4QyxvQkFBb0IsR0FBRyw2QkFBNkIsQ0FBQztJQUNyRCxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFDM0MsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDeEMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDeEMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDOUIsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDdkMsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7SUFFM0MsSUFBVyxrQ0FBa0M7UUFDM0MsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQVcsWUFBWSxDQUFDLElBQStCO1FBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsSUFBaUI7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQ0FBaUMsQ0FBQyxvQkFBbUMsRUFBRSxzQkFBcUMsRUFBRSxpQkFBZ0M7UUFDbkosSUFBSSxvQkFBb0IsS0FBSyxzQkFBc0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDMUUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxpQkFBaUIsS0FBSyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDN0gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQW5HVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixjQUgxQixLQUFLOzs0RkFHTiwyQkFBMkI7a0JBSnZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgV3JpdGFibGVTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IElEcmFnRW5kLCBJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwsIElEcmFnTGVhdmUsIElEcmFnT3ZlciwgSURyYWdTdGFydCwgSURyYWdnaW5nLCBJRHJvcCwgSUl0ZW1EcmFnSW5mbyB9IGZyb20gXCIuL2ludGVyZmFjZXMvZXZlbnQuaW50ZXJmYWNlXCI7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdhbnknXG59KVxuXG5leHBvcnQgY2xhc3MgTW9MaWJzU2hhcmVkRHJhZ0Ryb3BTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpdGVtc0NsaWNrID0gbmV3IEFycmF5PEhUTUxFbGVtZW50PigpO1xuICBwcml2YXRlIG9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwgPSBuZXcgU3ViamVjdDxJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGw+KCk7XG4gIHByaXZhdGUgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbiAgcHJpdmF0ZSBjb250YWluZXIgPSBzaWduYWwobmV3IE1hcDxzdHJpbmcsIHsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCB9PigpKTtcbiAgcHJpdmF0ZSB0YXJnZXRJdGVtRHJhZ0ZsYWcgPSAnaXRlbS1kcmFnLXRhcmdldCc7XG4gIHByaXZhdGUgY2xhc3NDb250YWluZXJEZWZpbmUgPSAnbGlicy11aS1kcmFnLWRyb3AtY29udGFpbmVyJztcbiAgcHJpdmF0ZSBjbGFzc0l0ZW1EZWZpbmUgPSAnbGlicy11aS1kcmFnLWRyb3AtaXRlbSc7XG4gIHByaXZhdGUgb25EcmFnZ2luZyA9IG5ldyBTdWJqZWN0PElEcmFnZ2luZz4oKTtcbiAgcHJpdmF0ZSBvbkRyYWdTdGFydCA9IG5ldyBTdWJqZWN0PElEcmFnU3RhcnQ+KCk7XG4gIHByaXZhdGUgb25EcmFnRW5kID0gbmV3IFN1YmplY3Q8SURyYWdFbmQ+KCk7XG4gIHByaXZhdGUgb25EcmFnT3ZlciA9IG5ldyBTdWJqZWN0PElEcmFnT3Zlcj4oKTtcbiAgcHJpdmF0ZSBvbkRyYWdMZWF2ZSA9IG5ldyBTdWJqZWN0PElEcmFnTGVhdmU+KCk7XG4gIHByaXZhdGUgb25Ecm9wID0gbmV3IFN1YmplY3Q8SURyb3A+KCk7XG4gIHByaXZhdGUgb25Ecm9wQ29udGFpbmVyID0gbmV3IFN1YmplY3Q8SURyb3A+KCk7XG4gIHByaXZhdGUgb25JdGVtSW5pdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwdWJsaWMgZ2V0IE9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKTogU3ViamVjdDxJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGw+IHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsO1xuICB9XG5cbiAgcHVibGljIHNldCBJdGVtRHJhZ0luZm8oZGF0YTogSUl0ZW1EcmFnSW5mbyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuaXRlbURyYWdJbmZvID0gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSXRlbURyYWdJbmZvKCk6IElJdGVtRHJhZ0luZm8gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLml0ZW1EcmFnSW5mbztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ29udGFpbmVyKCk6IFdyaXRhYmxlU2lnbmFsPE1hcDxzdHJpbmcsIHsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCB9Pj4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgVGFyZ2V0SXRlbURyYWdGbGFnKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldEl0ZW1EcmFnRmxhZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ2xhc3NDb250YWluZXJEZWZpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NDb250YWluZXJEZWZpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENsYXNzSXRlbURlZmluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0l0ZW1EZWZpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJhZ2dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMub25EcmFnZ2luZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgT25EcmFnT3ZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdPdmVyO1xuICB9XG5cbiAgcHVibGljIGdldCBPbkRyYWdMZWF2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdMZWF2ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgT25EcmFnU3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub25EcmFnU3RhcnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJhZ0VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdFbmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJvcENvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyb3BDb250YWluZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyb3A7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uSXRlbUluaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub25JdGVtSW5pdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSXRlbUNsaWNrKCk6IEFycmF5PEhUTUxFbGVtZW50PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zQ2xpY2tdO1xuICB9XG5cbiAgcHVibGljIHNldCBJdGVtQ2xpY2soaXRlbTogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLml0ZW1zQ2xpY2sucHVzaChpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEl0ZW1DbGljaygpIHtcbiAgICB0aGlzLml0ZW1zQ2xpY2subGVuZ3RoID0gMDtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0VsZW1lbnRPdmVyQWNjZXB0RWxlbWVudERyYWcoZ3JvdXBOYW1lT2ZDb250YWluZXI6IHN0cmluZyB8IG51bGwsIGdyb3VwTmFtZU9mRWxlbWVudERyYWc6IHN0cmluZyB8IG51bGwsIGdyb3VwTmFtZU9mRHJvcFRvOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKGdyb3VwTmFtZU9mQ29udGFpbmVyICE9PSBncm91cE5hbWVPZkVsZW1lbnREcmFnICYmICFncm91cE5hbWVPZkRyb3BUbykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChncm91cE5hbWVPZkRyb3BUbyAhPT0gbnVsbCAmJiAhZ3JvdXBOYW1lT2ZEcm9wVG8udG9TdHJpbmcoKS5zcGxpdCgnOycpLmluY2x1ZGVzKGdyb3VwTmFtZU9mQ29udGFpbmVyIHx8ICd1bmRlZmluZWROYW1lJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSJdfQ==
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kcmFnLWRyb3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLL0IsTUFBTSxPQUFPLDJCQUEyQjtJQUM5QixVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQztJQUN0QyxrQ0FBa0MsR0FBRyxJQUFJLE9BQU8sRUFBcUMsQ0FBQztJQUN0RixZQUFZLENBQWlCO0lBQzdCLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQWlFLENBQUMsQ0FBQztJQUM3RixrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUN4QyxvQkFBb0IsR0FBRyw2QkFBNkIsQ0FBQztJQUNyRCxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFDM0MsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDeEMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7SUFDdEMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7SUFDeEMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDOUIsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFTLENBQUM7SUFDdkMsVUFBVSxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7SUFFM0MsSUFBVyxrQ0FBa0M7UUFDM0MsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQVcsWUFBWSxDQUFDLElBQStCO1FBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsSUFBaUI7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxpQ0FBaUMsQ0FBQyxvQkFBbUMsRUFBRSxzQkFBcUMsRUFBRSxpQkFBZ0M7UUFDbkosSUFBSSxvQkFBb0IsS0FBSyxzQkFBc0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDMUUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFDRSxpQkFBaUIsS0FBSyxJQUFJO1lBQzFCLENBQUMsaUJBQWlCO2lCQUNmLFFBQVEsRUFBRTtpQkFDVixLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLFFBQVEsQ0FBQyxvQkFBb0IsSUFBSSxlQUFlLENBQUMsRUFDcEQsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0F6R1UsMkJBQTJCOzRHQUEzQiwyQkFBMkIsY0FGMUIsS0FBSzs7NEZBRU4sMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFdyaXRhYmxlU2lnbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElEcmFnRW5kLCBJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwsIElEcmFnTGVhdmUsIElEcmFnT3ZlciwgSURyYWdTdGFydCwgSURyYWdnaW5nLCBJRHJvcCwgSUl0ZW1EcmFnSW5mbyB9IGZyb20gJy4vaW50ZXJmYWNlcy9ldmVudC5pbnRlcmZhY2UnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgTW9MaWJzU2hhcmVkRHJhZ0Ryb3BTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBpdGVtc0NsaWNrID0gbmV3IEFycmF5PEhUTUxFbGVtZW50PigpO1xuICBwcml2YXRlIG9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwgPSBuZXcgU3ViamVjdDxJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGw+KCk7XG4gIHByaXZhdGUgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbiAgcHJpdmF0ZSBjb250YWluZXIgPSBzaWduYWwobmV3IE1hcDxzdHJpbmcsIHsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCB9PigpKTtcbiAgcHJpdmF0ZSB0YXJnZXRJdGVtRHJhZ0ZsYWcgPSAnaXRlbS1kcmFnLXRhcmdldCc7XG4gIHByaXZhdGUgY2xhc3NDb250YWluZXJEZWZpbmUgPSAnbGlicy11aS1kcmFnLWRyb3AtY29udGFpbmVyJztcbiAgcHJpdmF0ZSBjbGFzc0l0ZW1EZWZpbmUgPSAnbGlicy11aS1kcmFnLWRyb3AtaXRlbSc7XG4gIHByaXZhdGUgb25EcmFnZ2luZyA9IG5ldyBTdWJqZWN0PElEcmFnZ2luZz4oKTtcbiAgcHJpdmF0ZSBvbkRyYWdTdGFydCA9IG5ldyBTdWJqZWN0PElEcmFnU3RhcnQ+KCk7XG4gIHByaXZhdGUgb25EcmFnRW5kID0gbmV3IFN1YmplY3Q8SURyYWdFbmQ+KCk7XG4gIHByaXZhdGUgb25EcmFnT3ZlciA9IG5ldyBTdWJqZWN0PElEcmFnT3Zlcj4oKTtcbiAgcHJpdmF0ZSBvbkRyYWdMZWF2ZSA9IG5ldyBTdWJqZWN0PElEcmFnTGVhdmU+KCk7XG4gIHByaXZhdGUgb25Ecm9wID0gbmV3IFN1YmplY3Q8SURyb3A+KCk7XG4gIHByaXZhdGUgb25Ecm9wQ29udGFpbmVyID0gbmV3IFN1YmplY3Q8SURyb3A+KCk7XG4gIHByaXZhdGUgb25JdGVtSW5pdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwdWJsaWMgZ2V0IE9uRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwoKTogU3ViamVjdDxJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGw+IHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsO1xuICB9XG5cbiAgcHVibGljIHNldCBJdGVtRHJhZ0luZm8oZGF0YTogSUl0ZW1EcmFnSW5mbyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuaXRlbURyYWdJbmZvID0gZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSXRlbURyYWdJbmZvKCk6IElJdGVtRHJhZ0luZm8gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLml0ZW1EcmFnSW5mbztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ29udGFpbmVyKCk6IFdyaXRhYmxlU2lnbmFsPE1hcDxzdHJpbmcsIHsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IGVsZW1lbnRTY3JvbGw/OiBIVE1MRWxlbWVudCB9Pj4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgVGFyZ2V0SXRlbURyYWdGbGFnKCkge1xuICAgIHJldHVybiB0aGlzLnRhcmdldEl0ZW1EcmFnRmxhZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQ2xhc3NDb250YWluZXJEZWZpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NDb250YWluZXJEZWZpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENsYXNzSXRlbURlZmluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0l0ZW1EZWZpbmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJhZ2dpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMub25EcmFnZ2luZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgT25EcmFnT3ZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdPdmVyO1xuICB9XG5cbiAgcHVibGljIGdldCBPbkRyYWdMZWF2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdMZWF2ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgT25EcmFnU3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub25EcmFnU3RhcnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJhZ0VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyYWdFbmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJvcENvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyb3BDb250YWluZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uRHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkRyb3A7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE9uSXRlbUluaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub25JdGVtSW5pdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSXRlbUNsaWNrKCk6IEFycmF5PEhUTUxFbGVtZW50PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zQ2xpY2tdO1xuICB9XG5cbiAgcHVibGljIHNldCBJdGVtQ2xpY2soaXRlbTogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLml0ZW1zQ2xpY2sucHVzaChpdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEl0ZW1DbGljaygpIHtcbiAgICB0aGlzLml0ZW1zQ2xpY2subGVuZ3RoID0gMDtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0VsZW1lbnRPdmVyQWNjZXB0RWxlbWVudERyYWcoZ3JvdXBOYW1lT2ZDb250YWluZXI6IHN0cmluZyB8IG51bGwsIGdyb3VwTmFtZU9mRWxlbWVudERyYWc6IHN0cmluZyB8IG51bGwsIGdyb3VwTmFtZU9mRHJvcFRvOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKGdyb3VwTmFtZU9mQ29udGFpbmVyICE9PSBncm91cE5hbWVPZkVsZW1lbnREcmFnICYmICFncm91cE5hbWVPZkRyb3BUbykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGdyb3VwTmFtZU9mRHJvcFRvICE9PSBudWxsICYmXG4gICAgICAhZ3JvdXBOYW1lT2ZEcm9wVG9cbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgLmluY2x1ZGVzKGdyb3VwTmFtZU9mQ29udGFpbmVyIHx8ICd1bmRlZmluZWROYW1lJylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19