@1money/component-ui 0.0.43 → 0.0.44

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.
Files changed (59) hide show
  1. package/es/components/Dropdown/Dropdown.js +11 -3
  2. package/es/components/Input/FieldShell/FieldShell.css +1 -1
  3. package/es/components/Input/FieldShell/FieldShell.js +2 -3
  4. package/es/components/Select/Select.js +130 -91
  5. package/es/components/Select/SelectCustom.d.ts +6 -0
  6. package/es/components/Select/SelectCustom.js +232 -0
  7. package/es/components/Select/SelectFieldShell.d.ts +2 -0
  8. package/es/components/Select/SelectFieldShell.js +12 -4
  9. package/es/components/Select/SelectOptionContent.d.ts +8 -0
  10. package/es/components/Select/SelectOptionContent.js +20 -11
  11. package/es/components/Select/SelectSearchControl.d.ts +3 -0
  12. package/es/components/Select/SelectSearchControl.js +9 -4
  13. package/es/components/Select/index.d.ts +5 -2
  14. package/es/components/Select/index.js +8 -3
  15. package/es/components/Select/interface.d.ts +147 -1
  16. package/es/components/Select/interface.js +1 -1
  17. package/es/components/Select/style/Select.css +1 -1
  18. package/es/components/Select/useSelectShell.d.ts +34 -0
  19. package/es/components/Select/useSelectShell.js +106 -0
  20. package/es/components/Trigger/Trigger.js +33 -8
  21. package/es/components/Trigger/interface.d.ts +25 -2
  22. package/es/hooks/index.d.ts +2 -0
  23. package/es/hooks/index.js +2 -0
  24. package/es/hooks/useFloatingAnimation.d.ts +24 -0
  25. package/es/hooks/useFloatingAnimation.js +45 -0
  26. package/es/index.css +1 -1
  27. package/es/index.d.ts +1 -1
  28. package/es/index.js +1 -1
  29. package/lib/components/Dropdown/Dropdown.js +11 -3
  30. package/lib/components/Input/FieldShell/FieldShell.css +1 -1
  31. package/lib/components/Input/FieldShell/FieldShell.js +2 -3
  32. package/lib/components/Select/Select.js +129 -90
  33. package/lib/components/Select/SelectCustom.d.ts +6 -0
  34. package/lib/components/Select/SelectCustom.js +242 -0
  35. package/lib/components/Select/SelectFieldShell.d.ts +2 -0
  36. package/lib/components/Select/SelectFieldShell.js +12 -4
  37. package/lib/components/Select/SelectOptionContent.d.ts +8 -0
  38. package/lib/components/Select/SelectOptionContent.js +21 -12
  39. package/lib/components/Select/SelectSearchControl.d.ts +3 -0
  40. package/lib/components/Select/SelectSearchControl.js +9 -4
  41. package/lib/components/Select/index.d.ts +5 -2
  42. package/lib/components/Select/index.js +9 -17
  43. package/lib/components/Select/interface.d.ts +147 -1
  44. package/lib/components/Select/interface.js +1 -1
  45. package/lib/components/Select/style/Select.css +1 -1
  46. package/lib/components/Select/useSelectShell.d.ts +34 -0
  47. package/lib/components/Select/useSelectShell.js +114 -0
  48. package/lib/components/Trigger/Trigger.js +32 -7
  49. package/lib/components/Trigger/interface.d.ts +25 -2
  50. package/lib/hooks/index.d.ts +2 -0
  51. package/lib/hooks/index.js +13 -0
  52. package/lib/hooks/useFloatingAnimation.d.ts +24 -0
  53. package/lib/hooks/useFloatingAnimation.js +51 -0
  54. package/lib/index.css +1 -1
  55. package/lib/index.d.ts +1 -1
  56. package/lib/index.js +1 -1
  57. package/package.json +1 -1
  58. package/scripts/mcp-server/examples.generated.json +42 -0
  59. package/scripts/mcp-server/index.generated.json +259 -10
@@ -1,15 +1,18 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
1
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { autoUpdate, flip, FloatingFocusManager, FloatingPortal, offset, shift, size as floatingSize, useClick, useDismiss, useFloating, useInteractions, useListNavigation, useRole, useTypeahead } from '@floating-ui/react';
4
+ import { FloatingFocusManager, FloatingPortal, useInteractions, useListNavigation, useTypeahead } from '@floating-ui/react';
4
5
  import { memo, useEffect, useId, useMemo, useRef, useState } from 'react';
5
6
  import { useControlledState, useEventCallback } from '@1money/hooks';
6
7
  import { Icons } from '../Icons';
8
+ import { Spinner } from '../Spinner';
7
9
  import { TypographyBody, TypographyLabel } from '../Typography';
8
10
  import { joinCls, default as rootClassnames } from '../../utils/classnames';
9
11
  import SelectFieldShell from './SelectFieldShell';
10
12
  import SelectOptionContent from './SelectOptionContent';
11
13
  import SelectSearchControl from './SelectSearchControl';
12
14
  import SelectValueContent from './SelectValueContent';
15
+ import { useSelectShell } from './useSelectShell';
13
16
  import { KEYBOARD, SELECT_TYPOGRAPHY } from './constants';
14
17
  import { extractOptionText, filterOptionGroups, flattenOptionGroups, getMultipleValue, getOptionsByValues, getSelectedOptions, isOptionSelected, normalizeSize, normalizeOptionGroups, removeMultipleValue, toggleMultipleValue } from './utils';
15
18
  import './style';
@@ -37,7 +40,11 @@ export var Select = function Select(props) {
37
40
  _props$variant = props.variant,
38
41
  variant = _props$variant === void 0 ? 'fill' : _props$variant,
39
42
  _props$disabled = props.disabled,
40
- disabled = _props$disabled === void 0 ? false : _props$disabled,
43
+ disabledProp = _props$disabled === void 0 ? false : _props$disabled,
44
+ _props$readOnly = props.readOnly,
45
+ readOnly = _props$readOnly === void 0 ? false : _props$readOnly,
46
+ _props$loading = props.loading,
47
+ loading = _props$loading === void 0 ? false : _props$loading,
41
48
  _props$multiple = props.multiple,
42
49
  multiple = _props$multiple === void 0 ? false : _props$multiple,
43
50
  maxVisibleValues = props.maxVisibleValues,
@@ -48,6 +55,8 @@ export var Select = function Select(props) {
48
55
  searchValue = props.searchValue,
49
56
  _props$defaultSearchV = props.defaultSearchValue,
50
57
  defaultSearchValue = _props$defaultSearchV === void 0 ? '' : _props$defaultSearchV,
58
+ _props$filterInputAut = props.filterInputAutoFocus,
59
+ filterInputAutoFocus = _props$filterInputAut === void 0 ? true : _props$filterInputAut,
51
60
  label = props.label,
52
61
  info = props.info,
53
62
  description = props.description,
@@ -61,34 +70,42 @@ export var Select = function Select(props) {
61
70
  open = props.open,
62
71
  _props$defaultOpen = props.defaultOpen,
63
72
  defaultOpen = _props$defaultOpen === void 0 ? false : _props$defaultOpen,
73
+ _props$portal = props.portal,
74
+ portal = _props$portal === void 0 ? true : _props$portal,
75
+ _props$allowDeselect = props.allowDeselect,
76
+ allowDeselect = _props$allowDeselect === void 0 ? false : _props$allowDeselect,
77
+ panelClassName = props.panelClassName,
78
+ optionClassName = props.optionClassName,
64
79
  _props$listMaxHeight = props.listMaxHeight,
65
80
  listMaxHeight = _props$listMaxHeight === void 0 ? DEFAULT_MAX_HEIGHT : _props$listMaxHeight,
81
+ offset = props.offset,
82
+ animation = props.animation,
66
83
  onChange = props.onChange,
67
84
  onOpenChange = props.onOpenChange,
68
85
  onSearchChange = props.onSearchChange,
69
86
  onBlur = props.onBlur,
70
87
  filterOption = props.filterOption,
71
88
  renderOption = props.renderOption,
89
+ renderOptionContent = props.renderOptionContent,
72
90
  renderValue = props.renderValue,
73
91
  ref = props.ref;
92
+ var disabled = disabledProp || loading;
93
+ var interactive = !disabled && !readOnly;
74
94
  var classes = rootClassnames(prefixCls);
75
95
  var autoId = useId();
76
96
  var triggerId = id !== null && id !== void 0 ? id : autoId;
77
97
  var labelId = useId();
78
98
  var descriptionId = useId();
79
99
  var feedbackId = useId();
100
+ var optionIdPrefix = useId();
80
101
  var _useControlledState = useControlledState(defaultValue !== null && defaultValue !== void 0 ? defaultValue : multiple ? [] : undefined, value),
81
102
  _useControlledState2 = _slicedToArray(_useControlledState, 2),
82
103
  innerValue = _useControlledState2[0],
83
104
  setInnerValue = _useControlledState2[1];
84
- var _useControlledState3 = useControlledState(defaultOpen, open),
105
+ var _useControlledState3 = useControlledState(defaultSearchValue, searchValue),
85
106
  _useControlledState4 = _slicedToArray(_useControlledState3, 2),
86
- innerOpen = _useControlledState4[0],
87
- setInnerOpen = _useControlledState4[1];
88
- var _useControlledState5 = useControlledState(defaultSearchValue, searchValue),
89
- _useControlledState6 = _slicedToArray(_useControlledState5, 2),
90
- innerSearchValue = _useControlledState6[0],
91
- setInnerSearchValue = _useControlledState6[1];
107
+ innerSearchValue = _useControlledState4[0],
108
+ setInnerSearchValue = _useControlledState4[1];
92
109
  var _useState = useState(null),
93
110
  _useState2 = _slicedToArray(_useState, 2),
94
111
  activeIndex = _useState2[0],
@@ -130,35 +147,24 @@ export var Select = function Select(props) {
130
147
  ref.current = node;
131
148
  }
132
149
  });
133
- var handleOpenChange = useEventCallback(function (nextOpen) {
134
- setInnerOpen(nextOpen);
135
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(nextOpen);
136
- });
137
- var _useFloating = useFloating({
138
- open: innerOpen,
139
- onOpenChange: handleOpenChange,
140
- placement: 'bottom-start',
141
- whileElementsMounted: autoUpdate,
142
- middleware: [offset(0), flip({
143
- padding: 8
144
- }), shift({
145
- padding: 8
146
- }), floatingSize({
147
- apply: function apply(_ref) {
148
- var rects = _ref.rects,
149
- elements = _ref.elements,
150
- availableHeight = _ref.availableHeight;
151
- var nextMaxHeight = Math.max(120, Math.min(listMaxHeight, availableHeight));
152
- Object.assign(elements.floating.style, {
153
- width: "".concat(rects.reference.width, "px"),
154
- maxHeight: "".concat(nextMaxHeight, "px")
155
- });
156
- }
157
- })]
150
+ var _useSelectShell = useSelectShell({
151
+ open: open,
152
+ defaultOpen: defaultOpen,
153
+ onOpenChange: onOpenChange,
154
+ disabled: disabled,
155
+ readOnly: readOnly,
156
+ listMaxHeight: listMaxHeight,
157
+ animation: animation,
158
+ offset: offset
158
159
  }),
159
- refs = _useFloating.refs,
160
- floatingStyles = _useFloating.floatingStyles,
161
- context = _useFloating.context;
160
+ innerOpen = _useSelectShell.isOpen,
161
+ handleOpenChange = _useSelectShell.setOpen,
162
+ refs = _useSelectShell.refs,
163
+ context = _useSelectShell.context,
164
+ floatingStyles = _useSelectShell.floatingStyles,
165
+ transitionStyles = _useSelectShell.transitionStyles,
166
+ isMounted = _useSelectShell.isMounted,
167
+ baseInteractions = _useSelectShell.baseInteractions;
162
168
  var setReference = useEventCallback(function (node) {
163
169
  refs.setReference(node);
164
170
  handleTriggerRef(node);
@@ -167,23 +173,14 @@ export var Select = function Select(props) {
167
173
  refs.setFloating(node);
168
174
  floatingRef.current = node;
169
175
  });
170
- var click = useClick(context, {
171
- enabled: !disabled
172
- });
173
- var dismiss = useDismiss(context, {
174
- enabled: !disabled,
175
- outsidePressEvent: 'mousedown'
176
- });
177
- var role = useRole(context, {
178
- role: 'select'
179
- });
180
176
  var listNavigation = useListNavigation(context, {
181
177
  listRef: listRef,
182
178
  activeIndex: activeIndex,
183
179
  selectedIndex: selectedIndex,
184
180
  onNavigate: setActiveIndex,
185
181
  enabled: innerOpen,
186
- loop: true
182
+ loop: true,
183
+ virtual: searchable
187
184
  });
188
185
  var typeahead = useTypeahead(context, {
189
186
  listRef: listContentRef,
@@ -192,7 +189,7 @@ export var Select = function Select(props) {
192
189
  enabled: innerOpen && !searchable,
193
190
  onMatch: setActiveIndex
194
191
  });
195
- var _useInteractions = useInteractions([click, dismiss, role, listNavigation, typeahead]),
192
+ var _useInteractions = useInteractions([].concat(_toConsumableArray(baseInteractions), [listNavigation, typeahead])),
196
193
  getReferenceProps = _useInteractions.getReferenceProps,
197
194
  getFloatingProps = _useInteractions.getFloatingProps,
198
195
  getItemProps = _useInteractions.getItemProps;
@@ -201,15 +198,6 @@ export var Select = function Select(props) {
201
198
  return !option.disabled;
202
199
  });
203
200
  }, [visibleFlatOptions]);
204
- var lastEnabledIndex = useMemo(function () {
205
- var _a;
206
- for (var index = visibleFlatOptions.length - 1; index >= 0; index -= 1) {
207
- if (!((_a = visibleFlatOptions[index]) === null || _a === void 0 ? void 0 : _a.disabled)) {
208
- return index;
209
- }
210
- }
211
- return null;
212
- }, [visibleFlatOptions]);
213
201
  useEffect(function () {
214
202
  if (!innerOpen) {
215
203
  setActiveIndex(selectedIndex);
@@ -238,14 +226,14 @@ export var Select = function Select(props) {
238
226
  listRef.current = listRef.current.slice(0, visibleFlatOptions.length);
239
227
  listContentRef.current = listContentRef.current.slice(0, visibleFlatOptions.length);
240
228
  }, [visibleFlatOptions.length]);
241
- useEffect(function () {
242
- var _a;
243
- if (innerOpen && searchable) {
244
- (_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus({
229
+ var setSearchInputRef = useEventCallback(function (node) {
230
+ searchInputRef.current = node;
231
+ if (node && innerOpen && filterInputAutoFocus) {
232
+ node.focus({
245
233
  preventScroll: true
246
234
  });
247
235
  }
248
- }, [innerOpen, searchable]);
236
+ });
249
237
  var notifyBlurIfOutside = useEventCallback(function (relatedTarget, event) {
250
238
  var _a, _b;
251
239
  var nextTarget = relatedTarget;
@@ -263,10 +251,10 @@ export var Select = function Select(props) {
263
251
  });
264
252
  var commitChange = useEventCallback(function (nextValue, nextOption) {
265
253
  setInnerValue(nextValue);
266
- onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, nextOption);
254
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, nextOption, name);
267
255
  });
268
256
  var handleSelectOption = useEventCallback(function (option) {
269
- var _a;
257
+ var _a, _b;
270
258
  if (option.disabled) {
271
259
  return;
272
260
  }
@@ -276,10 +264,19 @@ export var Select = function Select(props) {
276
264
  commitChange(nextValue, nextOptions);
277
265
  return;
278
266
  }
267
+ if (allowDeselect && innerValue === option.value) {
268
+ commitChange(undefined, undefined);
269
+ handleOpenChange(false);
270
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur();
271
+ (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus({
272
+ preventScroll: true
273
+ });
274
+ return;
275
+ }
279
276
  commitChange(option.value, option);
280
277
  handleOpenChange(false);
281
278
  onBlur === null || onBlur === void 0 ? void 0 : onBlur();
282
- (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus({
279
+ (_b = triggerRef.current) === null || _b === void 0 ? void 0 : _b.focus({
283
280
  preventScroll: true
284
281
  });
285
282
  });
@@ -295,10 +292,15 @@ export var Select = function Select(props) {
295
292
  commitChange(nextValue, nextOptions);
296
293
  });
297
294
  var handleTriggerKeyDown = useEventCallback(function (event) {
298
- if (disabled) {
295
+ if (!interactive) {
299
296
  return;
300
297
  }
301
298
  if (event.key === KEYBOARD.ENTER || event.key === KEYBOARD.SPACE) {
299
+ if (innerOpen && activeIndex !== null && visibleFlatOptions[activeIndex] && !visibleFlatOptions[activeIndex].disabled) {
300
+ event.preventDefault();
301
+ handleSelectOption(visibleFlatOptions[activeIndex]);
302
+ return;
303
+ }
302
304
  event.preventDefault();
303
305
  handleOpenChange(!innerOpen);
304
306
  return;
@@ -331,34 +333,57 @@ export var Select = function Select(props) {
331
333
  setInnerSearchValue(nextValue);
332
334
  onSearchChange === null || onSearchChange === void 0 ? void 0 : onSearchChange(nextValue);
333
335
  });
336
+ var findEnabledIndex = useEventCallback(function (current, direction) {
337
+ var _a;
338
+ var length = visibleFlatOptions.length;
339
+ if (length === 0) {
340
+ return null;
341
+ }
342
+ var start = current !== null && current !== void 0 ? current : direction === 1 ? -1 : length;
343
+ for (var step = 1; step <= length; step += 1) {
344
+ var candidate = ((start + direction * step) % length + length) % length;
345
+ if (!((_a = visibleFlatOptions[candidate]) === null || _a === void 0 ? void 0 : _a.disabled)) {
346
+ return candidate;
347
+ }
348
+ }
349
+ return null;
350
+ });
334
351
  var handleSearchKeyDown = useEventCallback(function (event) {
335
- var _a, _b, _c;
336
- if (event.key === KEYBOARD.ARROW_DOWN && firstEnabledIndex >= 0) {
352
+ var _a;
353
+ if (event.key === KEYBOARD.ARROW_DOWN) {
337
354
  event.preventDefault();
338
- setActiveIndex(firstEnabledIndex);
339
- (_a = listRef.current[firstEnabledIndex]) === null || _a === void 0 ? void 0 : _a.focus({
340
- preventScroll: true
341
- });
355
+ var next = findEnabledIndex(activeIndex, 1);
356
+ if (next !== null) {
357
+ setActiveIndex(next);
358
+ }
342
359
  return;
343
360
  }
344
- if (event.key === KEYBOARD.ARROW_UP && lastEnabledIndex !== null) {
361
+ if (event.key === KEYBOARD.ARROW_UP) {
345
362
  event.preventDefault();
346
- setActiveIndex(lastEnabledIndex);
347
- (_b = listRef.current[lastEnabledIndex]) === null || _b === void 0 ? void 0 : _b.focus({
348
- preventScroll: true
349
- });
363
+ var prev = findEnabledIndex(activeIndex, -1);
364
+ if (prev !== null) {
365
+ setActiveIndex(prev);
366
+ }
367
+ return;
368
+ }
369
+ if (event.key === KEYBOARD.ENTER) {
370
+ if (activeIndex !== null && visibleFlatOptions[activeIndex] && !visibleFlatOptions[activeIndex].disabled) {
371
+ event.preventDefault();
372
+ handleSelectOption(visibleFlatOptions[activeIndex]);
373
+ }
350
374
  return;
351
375
  }
352
376
  if (event.key === KEYBOARD.ESCAPE) {
353
377
  event.preventDefault();
354
378
  handleOpenChange(false);
355
- (_c = triggerRef.current) === null || _c === void 0 ? void 0 : _c.focus({
379
+ (_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus({
356
380
  preventScroll: true
357
381
  });
358
382
  }
359
383
  });
360
384
  var renderValueMeta = {
361
385
  disabled: disabled,
386
+ readOnly: readOnly,
362
387
  multiple: multiple,
363
388
  maxVisibleValues: maxVisibleValues,
364
389
  open: innerOpen,
@@ -367,8 +392,9 @@ export var Select = function Select(props) {
367
392
  };
368
393
  var valueLabelClass = hasSelection ? 'value' : 'placeholder';
369
394
  var isMultipleValueFilled = multiple && hasSelection && maxVisibleValues === undefined;
370
- var triggerClassName = classes('trigger', joinCls(classes("trigger-".concat(normalizedSize)), classes("trigger-".concat(variant)), innerOpen && classes('trigger-open'), isMultipleValueFilled && classes('trigger-multiple-filled'), hasSelection ? classes('trigger-filled') : classes('trigger-placeholder'), status !== 'default' && classes("trigger-".concat(status)), disabled && classes('trigger-disabled')));
395
+ var triggerClassName = classes('trigger', joinCls(classes("trigger-".concat(normalizedSize)), classes("trigger-".concat(variant)), innerOpen && classes('trigger-open'), isMultipleValueFilled && classes('trigger-multiple-filled'), hasSelection ? classes('trigger-filled') : classes('trigger-placeholder'), status !== 'default' && classes("trigger-".concat(status)), disabled && classes('trigger-disabled'), readOnly && !disabled && classes('trigger-readonly')));
371
396
  var iconSize = normalizedSize === 'small' ? 16 : 20;
397
+ var activeOptionId = searchable && innerOpen && activeIndex !== null ? "".concat(optionIdPrefix, "-").concat(activeIndex) : undefined;
372
398
  var floatingAriaLabelledBy = ariaLabelledBy !== null && ariaLabelledBy !== void 0 ? ariaLabelledBy : label ? labelId : undefined;
373
399
  var describedByIds = [description ? descriptionId : null, feedback ? feedbackId : null].filter(Boolean).join(' ') || undefined;
374
400
  return _jsxs(SelectFieldShell, {
@@ -378,6 +404,8 @@ export var Select = function Select(props) {
378
404
  variant: variant,
379
405
  status: status,
380
406
  disabled: disabled,
407
+ readOnly: readOnly,
408
+ loading: loading,
381
409
  label: label,
382
410
  info: info,
383
411
  description: description,
@@ -392,6 +420,7 @@ export var Select = function Select(props) {
392
420
  type: 'button',
393
421
  name: name,
394
422
  disabled: disabled,
423
+ 'aria-readonly': readOnly || undefined,
395
424
  className: triggerClassName,
396
425
  onKeyDown: handleTriggerKeyDown,
397
426
  onBlur: handleTriggerBlur,
@@ -422,28 +451,33 @@ export var Select = function Select(props) {
422
451
  })]
423
452
  }), _jsx("span", {
424
453
  className: classes('icon'),
425
- children: _jsx(Icons, {
454
+ children: loading ? _jsx(Spinner, {
455
+ size: iconSize,
456
+ strokeWidth: 2
457
+ }) : _jsx(Icons, {
426
458
  name: innerOpen ? 'chevronUp' : 'chevronDown',
427
459
  size: iconSize,
428
460
  color: "currentColor"
429
461
  })
430
462
  })]
431
- })), innerOpen && !disabled && _jsx(FloatingPortal, {
432
- children: _jsx(FloatingFocusManager, {
463
+ })), isMounted && interactive && function () {
464
+ var panelNode = _jsx(FloatingFocusManager, {
433
465
  context: context,
434
466
  modal: false,
435
467
  initialFocus: -1,
436
468
  returnFocus: false,
437
469
  children: _jsxs("div", Object.assign({}, getFloatingProps({
438
470
  ref: setFloating,
439
- className: classes('panel'),
440
- style: floatingStyles
471
+ className: joinCls(classes('panel'), panelClassName),
472
+ style: Object.assign(Object.assign({}, floatingStyles), transitionStyles)
441
473
  }), {
442
474
  children: [searchable && _jsx(SelectSearchControl, {
443
- ref: searchInputRef,
475
+ ref: setSearchInputRef,
444
476
  classes: classes,
477
+ size: normalizedSize,
445
478
  placeholder: searchPlaceholder,
446
479
  value: innerSearchValue,
480
+ activeDescendant: activeOptionId,
447
481
  onBlur: handleSearchBlur,
448
482
  onChange: handleSearchChange,
449
483
  onKeyDown: handleSearchKeyDown
@@ -486,9 +520,10 @@ export var Select = function Select(props) {
486
520
  ref: function ref(node) {
487
521
  listRef.current[optionFlatIndex] = node;
488
522
  },
523
+ id: "".concat(optionIdPrefix, "-").concat(optionFlatIndex),
489
524
  type: 'button',
490
525
  role: 'option',
491
- className: classes('option', joinCls(active && classes('option-active'), selected && classes('option-selected'), option.disabled && classes('option-disabled'))),
526
+ className: classes('option', joinCls(active && classes('option-active'), selected && classes('option-selected'), option.disabled && classes('option-disabled'), optionClassName)),
492
527
  disabled: option.disabled,
493
528
  'aria-selected': selected,
494
529
  onClick: function onClick(event) {
@@ -503,7 +538,8 @@ export var Select = function Select(props) {
503
538
  children: renderOption ? renderOption(option, optionMeta) : _jsx(SelectOptionContent, {
504
539
  classes: classes,
505
540
  option: option,
506
- selected: selected
541
+ selected: selected,
542
+ content: renderOptionContent === null || renderOptionContent === void 0 ? void 0 : renderOptionContent(option, optionMeta)
507
543
  })
508
544
  }), "".concat(group.key, "-").concat(option.value));
509
545
  })]
@@ -515,10 +551,13 @@ export var Select = function Select(props) {
515
551
  children: panelFooter
516
552
  })]
517
553
  }))
518
- })
519
- })]
554
+ });
555
+ return portal ? _jsx(FloatingPortal, {
556
+ children: panelNode
557
+ }) : panelNode;
558
+ }()]
520
559
  });
521
560
  };
522
561
  Select.displayName = 'Select';
523
562
  export default /*#__PURE__*/memo(Select);
524
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC50c3giXSwibmFtZXMiOlsianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsImF1dG9VcGRhdGUiLCJmbGlwIiwiRmxvYXRpbmdGb2N1c01hbmFnZXIiLCJGbG9hdGluZ1BvcnRhbCIsIm9mZnNldCIsInNoaWZ0Iiwic2l6ZSIsImZsb2F0aW5nU2l6ZSIsInVzZUNsaWNrIiwidXNlRGlzbWlzcyIsInVzZUZsb2F0aW5nIiwidXNlSW50ZXJhY3Rpb25zIiwidXNlTGlzdE5hdmlnYXRpb24iLCJ1c2VSb2xlIiwidXNlVHlwZWFoZWFkIiwibWVtbyIsInVzZUVmZmVjdCIsInVzZUlkIiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwidXNlQ29udHJvbGxlZFN0YXRlIiwidXNlRXZlbnRDYWxsYmFjayIsIkljb25zIiwiVHlwb2dyYXBoeUJvZHkiLCJUeXBvZ3JhcGh5TGFiZWwiLCJqb2luQ2xzIiwiZGVmYXVsdCIsInJvb3RDbGFzc25hbWVzIiwiU2VsZWN0RmllbGRTaGVsbCIsIlNlbGVjdE9wdGlvbkNvbnRlbnQiLCJTZWxlY3RTZWFyY2hDb250cm9sIiwiU2VsZWN0VmFsdWVDb250ZW50IiwiS0VZQk9BUkQiLCJTRUxFQ1RfVFlQT0dSQVBIWSIsImV4dHJhY3RPcHRpb25UZXh0IiwiZmlsdGVyT3B0aW9uR3JvdXBzIiwiZmxhdHRlbk9wdGlvbkdyb3VwcyIsImdldE11bHRpcGxlVmFsdWUiLCJnZXRPcHRpb25zQnlWYWx1ZXMiLCJnZXRTZWxlY3RlZE9wdGlvbnMiLCJpc09wdGlvblNlbGVjdGVkIiwibm9ybWFsaXplU2l6ZSIsIm5vcm1hbGl6ZU9wdGlvbkdyb3VwcyIsInJlbW92ZU11bHRpcGxlVmFsdWUiLCJ0b2dnbGVNdWx0aXBsZVZhbHVlIiwiREVGQVVMVF9NQVhfSEVJR0hUIiwiU2VsZWN0IiwicHJvcHMiLCJfcHJvcHMkY2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwiX3Byb3BzJHByZWZpeENscyIsInByZWZpeENscyIsInN0eWxlIiwiaWQiLCJuYW1lIiwiYXJpYUxhYmVsIiwiYXJpYUxhYmVsbGVkQnkiLCJfcHJvcHMkcGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciIsIl9wcm9wcyRvcHRpb25zIiwib3B0aW9ucyIsInZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiX3Byb3BzJHNpemUiLCJfcHJvcHMkc3RhdHVzIiwic3RhdHVzIiwiX3Byb3BzJHZhcmlhbnQiLCJ2YXJpYW50IiwiX3Byb3BzJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfcHJvcHMkbXVsdGlwbGUiLCJtdWx0aXBsZSIsIm1heFZpc2libGVWYWx1ZXMiLCJfcHJvcHMkc2VhcmNoYWJsZSIsInNlYXJjaGFibGUiLCJfcHJvcHMkc2VhcmNoUGxhY2Vob2wiLCJzZWFyY2hQbGFjZWhvbGRlciIsInNlYXJjaFZhbHVlIiwiX3Byb3BzJGRlZmF1bHRTZWFyY2hWIiwiZGVmYXVsdFNlYXJjaFZhbHVlIiwibGFiZWwiLCJpbmZvIiwiZGVzY3JpcHRpb24iLCJmZWVkYmFjayIsIl9wcm9wcyRyZXF1aXJlZCIsInJlcXVpcmVkIiwicHJlZml4IiwiX3Byb3BzJGVtcHR5Q29udGVudCIsImVtcHR5Q29udGVudCIsInBhbmVsRm9vdGVyIiwib3BlbiIsIl9wcm9wcyRkZWZhdWx0T3BlbiIsImRlZmF1bHRPcGVuIiwiX3Byb3BzJGxpc3RNYXhIZWlnaHQiLCJsaXN0TWF4SGVpZ2h0Iiwib25DaGFuZ2UiLCJvbk9wZW5DaGFuZ2UiLCJvblNlYXJjaENoYW5nZSIsIm9uQmx1ciIsImZpbHRlck9wdGlvbiIsInJlbmRlck9wdGlvbiIsInJlbmRlclZhbHVlIiwicmVmIiwiY2xhc3NlcyIsImF1dG9JZCIsInRyaWdnZXJJZCIsImxhYmVsSWQiLCJkZXNjcmlwdGlvbklkIiwiZmVlZGJhY2tJZCIsIl91c2VDb250cm9sbGVkU3RhdGUiLCJ1bmRlZmluZWQiLCJfdXNlQ29udHJvbGxlZFN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaW5uZXJWYWx1ZSIsInNldElubmVyVmFsdWUiLCJfdXNlQ29udHJvbGxlZFN0YXRlMyIsIl91c2VDb250cm9sbGVkU3RhdGU0IiwiaW5uZXJPcGVuIiwic2V0SW5uZXJPcGVuIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTUiLCJfdXNlQ29udHJvbGxlZFN0YXRlNiIsImlubmVyU2VhcmNoVmFsdWUiLCJzZXRJbm5lclNlYXJjaFZhbHVlIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUluZGV4Iiwic2V0QWN0aXZlSW5kZXgiLCJub3JtYWxpemVkU2l6ZSIsImFsbE9wdGlvbkdyb3VwcyIsImFsbEZsYXRPcHRpb25zIiwidmlzaWJsZU9wdGlvbkdyb3VwcyIsInZpc2libGVGbGF0T3B0aW9ucyIsInNlbGVjdGVkT3B0aW9ucyIsInNlbGVjdGVkSW5kZXgiLCJsZW5ndGgiLCJtYXRjaGVkSW5kZXgiLCJmaW5kSW5kZXgiLCJvcHRpb24iLCJoYXNTZWxlY3Rpb24iLCJsaXN0UmVmIiwibGlzdENvbnRlbnRSZWYiLCJmbG9hdGluZ1JlZiIsInRyaWdnZXJSZWYiLCJzZWFyY2hJbnB1dFJlZiIsImhhbmRsZVRyaWdnZXJSZWYiLCJub2RlIiwiY3VycmVudCIsImhhbmRsZU9wZW5DaGFuZ2UiLCJuZXh0T3BlbiIsIl91c2VGbG9hdGluZyIsInBsYWNlbWVudCIsIndoaWxlRWxlbWVudHNNb3VudGVkIiwibWlkZGxld2FyZSIsInBhZGRpbmciLCJhcHBseSIsIl9yZWYiLCJyZWN0cyIsImVsZW1lbnRzIiwiYXZhaWxhYmxlSGVpZ2h0IiwibmV4dE1heEhlaWdodCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJmbG9hdGluZyIsIndpZHRoIiwiY29uY2F0IiwicmVmZXJlbmNlIiwibWF4SGVpZ2h0IiwicmVmcyIsImZsb2F0aW5nU3R5bGVzIiwiY29udGV4dCIsInNldFJlZmVyZW5jZSIsInNldEZsb2F0aW5nIiwiY2xpY2siLCJlbmFibGVkIiwiZGlzbWlzcyIsIm91dHNpZGVQcmVzc0V2ZW50Iiwicm9sZSIsImxpc3ROYXZpZ2F0aW9uIiwib25OYXZpZ2F0ZSIsImxvb3AiLCJ0eXBlYWhlYWQiLCJvbk1hdGNoIiwiX3VzZUludGVyYWN0aW9ucyIsImdldFJlZmVyZW5jZVByb3BzIiwiZ2V0RmxvYXRpbmdQcm9wcyIsImdldEl0ZW1Qcm9wcyIsImZpcnN0RW5hYmxlZEluZGV4IiwibGFzdEVuYWJsZWRJbmRleCIsIl9hIiwiaW5kZXgiLCJwcmV2IiwiZm9jdXMiLCJwcmV2ZW50U2Nyb2xsIiwic2xpY2UiLCJub3RpZnlCbHVySWZPdXRzaWRlIiwicmVsYXRlZFRhcmdldCIsImV2ZW50IiwiX2IiLCJuZXh0VGFyZ2V0Iiwid2l0aGluVHJpZ2dlciIsImNvbnRhaW5zIiwid2l0aGluRmxvYXRpbmciLCJoYW5kbGVUcmlnZ2VyQmx1ciIsImhhbmRsZU9wdGlvbkJsdXIiLCJjb21taXRDaGFuZ2UiLCJuZXh0VmFsdWUiLCJuZXh0T3B0aW9uIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwibmV4dE9wdGlvbnMiLCJoYW5kbGVSZW1vdmVTZWxlY3RlZFZhbHVlIiwib3B0aW9uVmFsdWUiLCJpbmNsdWRlcyIsImhhbmRsZVRyaWdnZXJLZXlEb3duIiwia2V5IiwiRU5URVIiLCJTUEFDRSIsInByZXZlbnREZWZhdWx0IiwiQVJST1dfRE9XTiIsIkFSUk9XX1VQIiwiaGFuZGxlSXRlbU1vdXNlRW50ZXIiLCJoYW5kbGVUYWdSZW1vdmVNb3VzZURvd24iLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVUYWdSZW1vdmVDbGljayIsImhhbmRsZVNlYXJjaEJsdXIiLCJoYW5kbGVTZWFyY2hDaGFuZ2UiLCJfZXZlbnQiLCJoYW5kbGVTZWFyY2hLZXlEb3duIiwiX2MiLCJFU0NBUEUiLCJyZW5kZXJWYWx1ZU1ldGEiLCJ2YWx1ZUxhYmVsQ2xhc3MiLCJpc011bHRpcGxlVmFsdWVGaWxsZWQiLCJ0cmlnZ2VyQ2xhc3NOYW1lIiwiaWNvblNpemUiLCJmbG9hdGluZ0FyaWFMYWJlbGxlZEJ5IiwiZGVzY3JpYmVkQnlJZHMiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsImNoaWxkcmVuIiwidHlwZSIsIm9uS2V5RG93biIsIm9uUmVtb3ZlIiwib25SZW1vdmVDbGljayIsIm9uUmVtb3ZlTW91c2VEb3duIiwiY29sb3IiLCJtb2RhbCIsImluaXRpYWxGb2N1cyIsInJldHVybkZvY3VzIiwiZW1wdHkiLCJmbGF0SW5kZXgiLCJtYXAiLCJncm91cCIsImdyb3VwTGFiZWwiLCJzdHJvbmciLCJvcHRpb25GbGF0SW5kZXgiLCJzZWxlY3RlZCIsImFjdGl2ZSIsIm9wdGlvbk1ldGEiLCJvbkNsaWNrIiwib25Nb3VzZUVudGVyIiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxHQUFHLElBQUlDLElBQUksRUFBRUMsSUFBSSxJQUFJQyxLQUFLLFFBQVEsbUJBQW1CO0FDQTlELFNBQ0VDLFVBQVUsRUFDVkMsSUFBSSxFQUNKQyxvQkFBb0IsRUFDcEJDLGNBQWMsRUFDZEMsTUFBTSxFQUNOQyxLQUFLLEVBQ0xDLElBQUksSUFBSUMsWUFBWSxFQUNwQkMsUUFBUSxFQUNSQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLE9BQU8sRUFDUEMsWUFBWSxRQUNQLG9CQUFvQjtBQUMzQixTQUFTQyxJQUFJLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDekUsU0FBU0Msa0JBQWtCLEVBQUVDLGdCQUFnQixRQUFRLGVBQWU7QUFDcEUsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUFDaEMsU0FBU0MsY0FBYyxFQUFFQyxlQUFlLFFBQVEsZUFBZTtBQUMvRCxTQUFTQyxPQUFPLEVBQUVDLE9BQU8sSUFBSUMsY0FBYyxRQUFRLHdCQUF3QjtBQWdCM0UsT0FBT0MsZ0JBQWdCLE1BQU0sb0JBQW9CO0FBQ2pELE9BQU9DLG1CQUFtQixNQUFNLHVCQUF1QjtB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QUEySSxRQUFBLEVBQUd6SjtVQUFXLENBQUEsQ0FDdEQ7UUFBQSxDQUFBLENBQUE7TUFDRyxDQUFBO0lBQ2UsQ0FBQSxDQUUxQjtFQUFBLENBQUEsQ0FDZ0I7QUFFdkIsQ0FBQztBQUVEM0MsTUFBTSxDQUFDME4sV0FBVyxHQUFHLFFBQVE7QUFFN0IsNEJBQWUxUCxJQUFJLENBQUNnQyxNQUFNLENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGF1dG9VcGRhdGUsIGZsaXAsIEZsb2F0aW5nRm9jdXNNYW5hZ2VyLCBGbG9hdGluZ1BvcnRhbCwgb2Zmc2V0LCBzaGlmdCwgc2l6ZSBhcyBmbG9hdGluZ1NpemUsIHVzZUNsaWNrLCB1c2VEaXNtaXNzLCB1c2VGbG9hdGluZywgdXNlSW50ZXJhY3Rpb25zLCB1c2VMaXN0TmF2aWdhdGlvbiwgdXNlUm9sZSwgdXNlVHlwZWFoZWFkLCB9IGZyb20gJ0BmbG9hdGluZy11aS9yZWFjdCc7XG5pbXBvcnQgeyBtZW1vLCB1c2VFZmZlY3QsIHVzZUlkLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlZFN0YXRlLCB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gJy4uL0ljb25zJztcbmltcG9ydCB7IFR5cG9ncmFwaHlCb2R5LCBUeXBvZ3JhcGh5TGFiZWwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCB7IGpvaW5DbHMsIGRlZmF1bHQgYXMgcm9vdENsYXNzbmFtZXMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmltcG9ydCBTZWxlY3RGaWVsZFNoZWxsIGZyb20gJy4vU2VsZWN0RmllbGRTaGVsbCc7XG5pbXBvcnQgU2VsZWN0T3B0aW9uQ29udGVudCBmcm9tICcuL1NlbGVjdE9wdGlvbkNvbnRlbnQnO1xuaW1wb3J0IFNlbGVjdFNlYXJjaENvbnRyb2wgZnJvbSAnLi9TZWxlY3RTZWFyY2hDb250cm9sJztcbmltcG9ydCBTZWxlY3RWYWx1ZUNvbnRlbnQgZnJvbSAnLi9TZWxlY3RWYWx1ZUNvbnRlbnQnO1xuaW1wb3J0IHsgS0VZQk9BUkQsIFNFTEVDVF9UWVBPR1JBUEhZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZXh0cmFjdE9wdGlvblRleHQsIGZpbHRlck9wdGlvbkdyb3VwcywgZmxhdHRlbk9wdGlvbkdyb3VwcywgZ2V0TXVsdGlwbGVWYWx1ZSwgZ2V0T3B0aW9uc0J5VmFsdWVzLCBnZXRTZWxlY3RlZE9wdGlvbnMsIGlzT3B0aW9uU2VsZWN0ZWQsIG5vcm1hbGl6ZVNpemUsIG5vcm1hbGl6ZU9wdGlvbkdyb3VwcywgcmVtb3ZlTXVsdGlwbGVWYWx1ZSwgdG9nZ2xlTXVsdGlwbGVWYWx1ZSwgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCAnLi9zdHlsZSc7XG5jb25zdCBERUZBVUxUX01BWF9IRUlHSFQgPSAzMjA7XG5leHBvcnQgY29uc3QgU2VsZWN0ID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjbGFzc05hbWUgPSAnJywgcHJlZml4Q2xzID0gJ3NlbGVjdCcsIHN0eWxlLCBpZCwgbmFtZSwgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsICdhcmlhLWxhYmVsbGVkYnknOiBhcmlhTGFiZWxsZWRCeSwgcGxhY2Vob2xkZXIgPSAnVmFsdWUnLCBvcHRpb25zID0gW10sIHZhbHVlLCBkZWZhdWx0VmFsdWUsIHNpemUgPSAnbGFyZ2UnLCBzdGF0dXMgPSAnZGVmYXVsdCcsIHZhcmlhbnQgPSAnZmlsbCcsIGRpc2FibGVkID0gZmFsc2UsIG11bHRpcGxlID0gZmFsc2UsIG1heFZpc2libGVWYWx1ZXMsIHNlYXJjaGFibGUgPSBmYWxzZSwgc2VhcmNoUGxhY2Vob2xkZXIgPSAnU2VhcmNoJywgc2VhcmNoVmFsdWUsIGRlZmF1bHRTZWFyY2hWYWx1ZSA9ICcnLCBsYWJlbCwgaW5mbywgZGVzY3JpcHRpb24sIGZlZWRiYWNrLCByZXF1aXJlZCA9IGZhbHNlLCBwcmVmaXgsIGVtcHR5Q29udGVudCA9ICdObyBvcHRpb25zJywgcGFuZWxGb290ZXIsIG9wZW4sIGRlZmF1bHRPcGVuID0gZmFsc2UsIGxpc3RNYXhIZWlnaHQgPSBERUZBVUxUX01BWF9IRUlHSFQsIG9uQ2hhbmdlLCBvbk9wZW5DaGFuZ2UsIG9uU2VhcmNoQ2hhbmdlLCBvbkJsdXIsIGZpbHRlck9wdGlvbiwgcmVuZGVyT3B0aW9uLCByZW5kZXJWYWx1ZSwgcmVmLCB9ID0gcHJvcHM7XG4gICAgY29uc3QgY2xhc3NlcyA9IHJvb3RDbGFzc25hbWVzKHByZWZpeENscyk7XG4gICAgY29uc3QgYXV0b0lkID0gdXNlSWQoKTtcbiAgICBjb25zdCB0cmlnZ2VySWQgPSBpZCAhPT0gbnVsbCAmJiBpZCAhPT0gdm9pZCAwID8gaWQgOiBhdXRvSWQ7XG4gICAgY29uc3QgbGFiZWxJZCA9IHVzZUlkKCk7XG4gICAgY29uc3QgZGVzY3JpcHRpb25JZCA9IHVzZUlkKCk7XG4gICAgY29uc3QgZmVlZGJhY2tJZCA9IHVzZUlkKCk7XG4gICAgY29uc3QgW2lubmVyVmFsdWUsIHNldElubmVyVmFsdWVdID0gdXNlQ29udHJvbGxlZFN0YXRlKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IGRlZmF1bHRWYWx1ZSA6IChtdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkKSwgdmFsdWUpO1xuICAgIGNvbnN0IFtpbm5lck9wZW4sIHNldElubmVyT3Blbl0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdE9wZW4sIG9wZW4pO1xuICAgIGNvbnN0IFtpbm5lclNlYXJjaFZhbHVlLCBzZXRJbm5lclNlYXJjaFZhbHVlXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShkZWZhdWx0U2VhcmNoVmFsdWUsIHNlYXJjaFZhbHVlKTtcbiAgICBjb25zdCBbYWN0aXZlSW5kZXgsIHNldEFjdGl2ZUluZGV4XSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTaXplID0gbm9ybWFsaXplU2l6ZShzaXplKTtcbiAgICBjb25zdCBhbGxPcHRpb25Hcm91cHMgPSB1c2VNZW1vKCgpID0+IG5vcm1hbGl6ZU9wdGlvbkdyb3VwcyhvcHRpb25zKSwgW29wdGlvbnNdKTtcbiAgICBjb25zdCBhbGxGbGF0T3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gZmxhdHRlbk9wdGlvbkdyb3VwcyhhbGxPcHRpb25Hcm91cHMpLCBbYWxsT3B0aW9uR3JvdXBzXSk7XG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbkdyb3VwcyA9IHVzZU1lbW8oKCkgPT4gKHNlYXJjaGFibGVcbiAgICAgICAgPyBmaWx0ZXJPcHRpb25Hcm91cHMoYWxsT3B0aW9uR3JvdXBzLCBpbm5lclNlYXJjaFZhbHVlLCBmaWx0ZXJPcHRpb24pXG4gICAgICAgIDogYWxsT3B0aW9uR3JvdXBzKSwgW2FsbE9wdGlvbkdyb3VwcywgZmlsdGVyT3B0aW9uLCBpbm5lclNlYXJjaFZhbHVlLCBzZWFyY2hhYmxlXSk7XG4gICAgY29uc3QgdmlzaWJsZUZsYXRPcHRpb25zID0gdXNlTWVtbygoKSA9PiBmbGF0dGVuT3B0aW9uR3JvdXBzKHZpc2libGVPcHRpb25Hcm91cHMpLCBbdmlzaWJsZU9wdGlvbkdyb3Vwc10pO1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gZ2V0U2VsZWN0ZWRPcHRpb25zKGFsbEZsYXRPcHRpb25zLCBpbm5lclZhbHVlLCBtdWx0aXBsZSksIFthbGxGbGF0T3B0aW9ucywgaW5uZXJWYWx1ZSwgbXVsdGlwbGVdKTtcbiAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXRjaGVkSW5kZXggPSB2aXNpYmxlRmxhdE9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRJbmRleCA+PSAwID8gbWF0Y2hlZEluZGV4IDogbnVsbDtcbiAgICB9LCBbc2VsZWN0ZWRPcHRpb25zLCB2aXNpYmxlRmxhdE9wdGlvbnNdKTtcbiAgICBjb25zdCBoYXNTZWxlY3Rpb24gPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBsaXN0UmVmID0gdXNlUmVmKFtdKTtcbiAgICBjb25zdCBsaXN0Q29udGVudFJlZiA9IHVzZVJlZihbXSk7XG4gICAgY29uc3QgZmxvYXRpbmdSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBoYW5kbGVUcmlnZ2VyUmVmID0gdXNlRXZlbnRDYWxsYmFjaygobm9kZSkgPT4ge1xuICAgICAgICB0cmlnZ2VyUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVPcGVuQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygobmV4dE9wZW4pID0+IHtcbiAgICAgICAgc2V0SW5uZXJPcGVuKG5leHRPcGVuKTtcbiAgICAgICAgb25PcGVuQ2hhbmdlID09PSBudWxsIHx8IG9uT3BlbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25PcGVuQ2hhbmdlKG5leHRPcGVuKTtcbiAgICB9KTtcbiAgICBjb25zdCB7IHJlZnMsIGZsb2F0aW5nU3R5bGVzLCBjb250ZXh0LCB9ID0gdXNlRmxvYXRpbmcoe1xuICAgICAgICBvcGVuOiBpbm5lck9wZW4sXG4gICAgICAgIG9uT3BlbkNoYW5nZTogaGFuZGxlT3BlbkNoYW5nZSxcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcbiAgICAgICAgd2hpbGVFbGVtZW50c01vdW50ZWQ6IGF1dG9VcGRhdGUsXG4gICAgICAgIG1pZGRsZXdhcmU6IFtcbiAgICAgICAgICAgIG9mZnNldCgwKSxcbiAgICAgICAgICAgIGZsaXAoeyBwYWRkaW5nOiA4IH0pLFxuICAgICAgICAgICAgc2hpZnQoeyBwYWRkaW5nOiA4IH0pLFxuICAgICAgICAgICAgZmxvYXRpbmdTaXplKHtcbiAgICAgICAgICAgICAgICBhcHBseSh7IHJlY3RzLCBlbGVtZW50cywgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dE1heEhlaWdodCA9IE1hdGgubWF4KDEyMCwgTWF0aC5taW4obGlzdE1heEhlaWdodCwgYXZhaWxhYmxlSGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudHMuZmxvYXRpbmcuc3R5bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHtyZWN0cy5yZWZlcmVuY2Uud2lkdGh9cHhgLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBgJHtuZXh0TWF4SGVpZ2h0fXB4YCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IHNldFJlZmVyZW5jZSA9IHVzZUV2ZW50Q2FsbGJhY2soKG5vZGUpID0+IHtcbiAgICAgICAgcmVmcy5zZXRSZWZlcmVuY2Uobm9kZSk7XG4gICAgICAgIGhhbmRsZVRyaWdnZXJSZWYobm9kZSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmxvYXRpbmcgPSB1c2VFdmVudENhbGxiYWNrKChub2RlKSA9PiB7XG4gICAgICAgIHJlZnMuc2V0RmxvYXRpbmcobm9kZSk7XG4gICAgICAgIGZsb2F0aW5nUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIH0pO1xuICAgIGNvbnN0IGNsaWNrID0gdXNlQ2xpY2soY29udGV4dCwgeyBlbmFibGVkOiAhZGlzYWJsZWQgfSk7XG4gICAgY29uc3QgZGlzbWlzcyA9IHVzZURpc21pc3MoY29udGV4dCwgeyBlbmFibGVkOiAhZGlzYWJsZWQsIG91dHNpZGVQcmVzc0V2ZW50OiAnbW91c2Vkb3duJyB9KTtcbiAgICBjb25zdCByb2xlID0gdXNlUm9sZShjb250ZXh0LCB7IHJvbGU6ICdzZWxlY3QnIH0pO1xuICAgIGNvbnN0IGxpc3ROYXZpZ2F0aW9uID0gdXNlTGlzdE5hdmlnYXRpb24oY29udGV4dCwge1xuICAgICAgICBsaXN0UmVmLFxuICAgICAgICBhY3RpdmVJbmRleCxcbiAgICAgICAgc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgb25OYXZpZ2F0ZTogc2V0QWN0aXZlSW5kZXgsXG4gICAgICAgIGVuYWJsZWQ6IGlubmVyT3BlbixcbiAgICAgICAgbG9vcDogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB0eXBlYWhlYWQgPSB1c2VUeXBlYWhlYWQoY29udGV4dCwge1xuICAgICAgICBsaXN0UmVmOiBsaXN0Q29udGVudFJlZixcbiAgICAgICAgYWN0aXZlSW5kZXgsXG4gICAgICAgIHNlbGVjdGVkSW5kZXgsXG4gICAgICAgIGVuYWJsZWQ6IGlubmVyT3BlbiAmJiAhc2VhcmNoYWJsZSxcbiAgICAgICAgb25NYXRjaDogc2V0QWN0aXZlSW5kZXgsXG4gICAgfSk7XG4gICAgY29uc3QgeyBnZXRSZWZlcmVuY2VQcm9wcywgZ2V0RmxvYXRpbmdQcm9wcywgZ2V0SXRlbVByb3BzIH0gPSB1c2VJbnRlcmFjdGlvbnMoW1xuICAgICAgICBjbGljayxcbiAgICAgICAgZGlzbWlzcyxcbiAgICAgICAgcm9sZSxcbiAgICAgICAgbGlzdE5hdmlnYXRpb24sXG4gICAgICAgIHR5cGVhaGVhZCxcbiAgICBdKTtcbiAgICBjb25zdCBmaXJzdEVuYWJsZWRJbmRleCA9IHVzZU1lbW8oKCkgPT4gdmlzaWJsZUZsYXRPcHRpb25zLmZpbmRJbmRleCgob3B0aW9uKSA9PiAhb3B0aW9uLmRpc2FibGVkKSwgW3Zpc2libGVGbGF0T3B0aW9uc10pO1xuICAgIGNvbnN0IGxhc3RFbmFibGVkSW5kZXggPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IHZpc2libGVGbGF0T3B0aW9ucy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgICAgICAgICBpZiAoISgoX2EgPSB2aXNpYmxlRmxhdE9wdGlvbnNbaW5kZXhdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sIFt2aXNpYmxlRmxhdE9wdGlvbnNdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlubmVyT3Blbikge1xuICAgICAgICAgICAgc2V0QWN0aXZlSW5kZXgoc2VsZWN0ZWRJbmRleCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2V0QWN0aXZlSW5kZXgoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsICYmIHZpc2libGVGbGF0T3B0aW9uc1twcmV2XSAmJiAhdmlzaWJsZUZsYXRPcHRpb25zW3ByZXZdLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHZpc2libGVGbGF0T3B0aW9uc1tzZWxlY3RlZEluZGV4XSAmJlxuICAgICAgICAgICAgICAgICF2aXNpYmxlRmxhdE9wdGlvbnNbc2VsZWN0ZWRJbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaXJzdEVuYWJsZWRJbmRleCA+PSAwID8gZmlyc3RFbmFibGVkSW5kZXggOiBudWxsO1xuICAgICAgICB9KTtcbiAgICB9LCBbZmlyc3RFbmFibGVkSW5kZXgsIGlubmVyT3Blbiwgc2VsZWN0ZWRJbmRleCwgdmlzaWJsZUZsYXRPcHRpb25zXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWlubmVyT3BlbiB8fCBhY3RpdmVJbmRleCA9PT0gbnVsbCB8fCBzZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gbGlzdFJlZi5jdXJyZW50W2FjdGl2ZUluZGV4XSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICB9LCBbYWN0aXZlSW5kZXgsIGlubmVyT3Blbiwgc2VhcmNoYWJsZV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudCA9IGxpc3RSZWYuY3VycmVudC5zbGljZSgwLCB2aXNpYmxlRmxhdE9wdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgbGlzdENvbnRlbnRSZWYuY3VycmVudCA9IGxpc3RDb250ZW50UmVmLmN1cnJlbnQuc2xpY2UoMCwgdmlzaWJsZUZsYXRPcHRpb25zLmxlbmd0aCk7XG4gICAgfSwgW3Zpc2libGVGbGF0T3B0aW9ucy5sZW5ndGhdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChpbm5lck9wZW4gJiYgc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgKF9hID0gc2VhcmNoSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtpbm5lck9wZW4sIHNlYXJjaGFibGVdKTtcbiAgICBjb25zdCBub3RpZnlCbHVySWZPdXRzaWRlID0gdXNlRXZlbnRDYWxsYmFjaygocmVsYXRlZFRhcmdldCwgZXZlbnQpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7XG4gICAgICAgIGNvbnN0IHdpdGhpblRyaWdnZXIgPSAhIShuZXh0VGFyZ2V0ICYmICgoX2EgPSB0cmlnZ2VyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb250YWlucyhuZXh0VGFyZ2V0KSkpO1xuICAgICAgICBjb25zdCB3aXRoaW5GbG9hdGluZyA9ICEhKG5leHRUYXJnZXQgJiYgKChfYiA9IGZsb2F0aW5nUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jb250YWlucyhuZXh0VGFyZ2V0KSkpO1xuICAgICAgICBpZiAoIXdpdGhpblRyaWdnZXIgJiYgIXdpdGhpbkZsb2F0aW5nKSB7XG4gICAgICAgICAgICBvbkJsdXIgPT09IG51bGwgfHwgb25CbHVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlVHJpZ2dlckJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChldmVudCkgPT4ge1xuICAgICAgICBub3RpZnlCbHVySWZPdXRzaWRlKGV2ZW50LnJlbGF0ZWRUYXJnZXQsIGV2ZW50KTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVPcHRpb25CbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoZXZlbnQpID0+IHtcbiAgICAgICAgbm90aWZ5Qmx1cklmT3V0c2lkZShldmVudC5yZWxhdGVkVGFyZ2V0LCBldmVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgY29tbWl0Q2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygobmV4dFZhbHVlLCBuZXh0T3B0aW9uKSA9PiB7XG4gICAgICAgIHNldElubmVyVmFsdWUobmV4dFZhbHVlKTtcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRWYWx1ZSwgbmV4dE9wdGlvbik7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlRXZlbnRDYWxsYmFjaygob3B0aW9uKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gdG9nZ2xlTXVsdGlwbGVWYWx1ZShpbm5lclZhbHVlLCBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgbmV4dE9wdGlvbnMgPSBnZXRPcHRpb25zQnlWYWx1ZXMoYWxsRmxhdE9wdGlvbnMsIG5leHRWYWx1ZSk7XG4gICAgICAgICAgICBjb21taXRDaGFuZ2UobmV4dFZhbHVlLCBuZXh0T3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0Q2hhbmdlKG9wdGlvbi52YWx1ZSwgb3B0aW9uKTtcbiAgICAgICAgaGFuZGxlT3BlbkNoYW5nZShmYWxzZSk7XG4gICAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cigpO1xuICAgICAgICAoX2EgPSB0cmlnZ2VyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlUmVtb3ZlU2VsZWN0ZWRWYWx1ZSA9IHVzZUV2ZW50Q2FsbGJhY2soKG9wdGlvblZhbHVlKSA9PiB7XG4gICAgICAgIGlmICghbXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdldE11bHRpcGxlVmFsdWUoaW5uZXJWYWx1ZSkuaW5jbHVkZXMob3B0aW9uVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gcmVtb3ZlTXVsdGlwbGVWYWx1ZShpbm5lclZhbHVlLCBvcHRpb25WYWx1ZSk7XG4gICAgICAgIGNvbnN0IG5leHRPcHRpb25zID0gZ2V0T3B0aW9uc0J5VmFsdWVzKGFsbEZsYXRPcHRpb25zLCBuZXh0VmFsdWUpO1xuICAgICAgICBjb21taXRDaGFuZ2UobmV4dFZhbHVlLCBuZXh0T3B0aW9ucyk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlVHJpZ2dlcktleURvd24gPSB1c2VFdmVudENhbGxiYWNrKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlCT0FSRC5FTlRFUiB8fCBldmVudC5rZXkgPT09IEtFWUJPQVJELlNQQUNFKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT3BlbkNoYW5nZSghaW5uZXJPcGVuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlCT0FSRC5BUlJPV19ET1dOIHx8IGV2ZW50LmtleSA9PT0gS0VZQk9BUkQuQVJST1dfVVApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoIWlubmVyT3Blbikge1xuICAgICAgICAgICAgICAgIGhhbmRsZU9wZW5DaGFuZ2UodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVJdGVtTW91c2VFbnRlciA9IHVzZUV2ZW50Q2FsbGJhY2soKGluZGV4KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCEoKF9hID0gdmlzaWJsZUZsYXRPcHRpb25zW2luZGV4XSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRpc2FibGVkKSkge1xuICAgICAgICAgICAgc2V0QWN0aXZlSW5kZXgoaW5kZXgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlVGFnUmVtb3ZlTW91c2VEb3duID0gdXNlRXZlbnRDYWxsYmFjaygoZXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlVGFnUmVtb3ZlQ2xpY2sgPSB1c2VFdmVudENhbGxiYWNrKChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTZWFyY2hCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoZXZlbnQpID0+IHtcbiAgICAgICAgbm90aWZ5Qmx1cklmT3V0c2lkZShldmVudC5yZWxhdGVkVGFyZ2V0LCBldmVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU2VhcmNoQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygobmV4dFZhbHVlLCBfZXZlbnQpID0+IHtcbiAgICAgICAgc2V0SW5uZXJTZWFyY2hWYWx1ZShuZXh0VmFsdWUpO1xuICAgICAgICBvblNlYXJjaENoYW5nZSA9PT0gbnVsbCB8fCBvblNlYXJjaENoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25TZWFyY2hDaGFuZ2UobmV4dFZhbHVlKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTZWFyY2hLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjaygoZXZlbnQpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWUJPQVJELkFSUk9XX0RPV04gJiYgZmlyc3RFbmFibGVkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUluZGV4KGZpcnN0RW5hYmxlZEluZGV4KTtcbiAgICAgICAgICAgIChfYSA9IGxpc3RSZWYuY3VycmVudFtmaXJzdEVuYWJsZWRJbmRleF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZQk9BUkQuQVJST1dfVVAgJiYgbGFzdEVuYWJsZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUluZGV4KGxhc3RFbmFibGVkSW5kZXgpO1xuICAgICAgICAgICAgKF9iID0gbGlzdFJlZi5jdXJyZW50W2xhc3RFbmFibGVkSW5kZXhdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWUJPQVJELkVTQ0FQRSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9wZW5DaGFuZ2UoZmFsc2UpO1xuICAgICAgICAgICAgKF9jID0gdHJpZ2dlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyVmFsdWVNZXRhID0ge1xuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgbXVsdGlwbGUsXG4gICAgICAgIG1heFZpc2libGVWYWx1ZXMsXG4gICAgICAgIG9wZW46IGlubmVyT3BlbixcbiAgICAgICAgcGxhY2Vob2xkZXI6ICFoYXNTZWxlY3Rpb24sXG4gICAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICB9O1xuICAgIGNvbnN0IHZhbHVlTGFiZWxDbGFzcyA9IGhhc1NlbGVjdGlvbiA/ICd2YWx1ZScgOiAncGxhY2Vob2xkZXInO1xuICAgIGNvbnN0IGlzTXVsdGlwbGVWYWx1ZUZpbGxlZCA9IChtdWx0aXBsZSAmJlxuICAgICAgICBoYXNTZWxlY3Rpb24gJiZcbiAgICAgICAgbWF4VmlzaWJsZVZhbHVlcyA9PT0gdW5kZWZpbmVkKTtcbiAgICBjb25zdCB0cmlnZ2VyQ2xhc3NOYW1lID0gY2xhc3NlcygndHJpZ2dlcicsIGpvaW5DbHMoY2xhc3NlcyhgdHJpZ2dlci0ke25vcm1hbGl6ZWRTaXplfWApLCBjbGFzc2VzKGB0cmlnZ2VyLSR7dmFyaWFudH1gKSwgaW5uZXJPcGVuICYmIGNsYXNzZXMoJ3RyaWdnZXItb3BlbicpLCBpc011bHRpcGxlVmFsdWVGaWxsZWQgJiYgY2xhc3NlcygndHJpZ2dlci1tdWx0aXBsZS1maWxsZWQnKSwgaGFzU2VsZWN0aW9uID8gY2xhc3NlcygndHJpZ2dlci1maWxsZWQnKSA6IGNsYXNzZXMoJ3RyaWdnZXItcGxhY2Vob2xkZXInKSwgc3RhdHVzICE9PSAnZGVmYXVsdCcgJiYgY2xhc3NlcyhgdHJpZ2dlci0ke3N0YXR1c31gKSwgZGlzYWJsZWQgJiYgY2xhc3NlcygndHJpZ2dlci1kaXNhYmxlZCcpKSk7XG4gICAgY29uc3QgaWNvblNpemUgPSBub3JtYWxpemVkU2l6ZSA9PT0gJ3NtYWxsJyA/IDE2IDogMjA7XG4gICAgY29uc3QgZmxvYXRpbmdBcmlhTGFiZWxsZWRCeSA9IGFyaWFMYWJlbGxlZEJ5ICE9PSBudWxsICYmIGFyaWFMYWJlbGxlZEJ5ICE9PSB2b2lkIDAgPyBhcmlhTGFiZWxsZWRCeSA6IChsYWJlbCA/IGxhYmVsSWQgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGRlc2NyaWJlZEJ5SWRzID0gW1xuICAgICAgICBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uSWQgOiBudWxsLFxuICAgICAgICBmZWVkYmFjayA/IGZlZWRiYWNrSWQgOiBudWxsLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChfanN4cyhTZWxlY3RGaWVsZFNoZWxsLCB7IGNsYXNzZXM6IGNsYXNzZXMsIGNsYXNzTmFtZTogY2xhc3NOYW1lLCBzaXplOiBub3JtYWxpemVkU2l6ZSwgdmFyaWFudDogdmFyaWFudCwgc3RhdHVzOiBzdGF0dXMsIGRpc2FibGVkOiBkaXNhYmxlZCwgbGFiZWw6IGxhYmVsLCBpbmZvOiBpbmZvLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sIGZlZWRiYWNrOiBmZWVkYmFjaywgcmVxdWlyZWQ6IHJlcXVpcmVkLCBsYWJlbElkOiBsYWJlbElkLCBkZXNjcmlwdGlvbklkOiBkZXNjcmlwdGlvbklkLCBmZWVkYmFja0lkOiBmZWVkYmFja0lkLCBjaGlsZHJlbjogW19qc3hzKFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oe30sIGdldFJlZmVyZW5jZVByb3BzKHtcbiAgICAgICAgICAgICAgICByZWY6IHNldFJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICBpZDogdHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0cmlnZ2VyQ2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogaGFuZGxlVHJpZ2dlcktleURvd24sXG4gICAgICAgICAgICAgICAgb25CbHVyOiBoYW5kbGVUcmlnZ2VyQmx1cixcbiAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogZmxvYXRpbmdBcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGRlc2NyaWJlZEJ5SWRzLFxuICAgICAgICAgICAgfSksIHsgY2hpbGRyZW46IFtfanN4cyhcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2NvbnRlbnQnKSwgY2hpbGRyZW46IFtwcmVmaXggJiYgX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3ByZWZpeCcpLCBjaGlsZHJlbjogcHJlZml4IH0pLCBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcyh2YWx1ZUxhYmVsQ2xhc3MsIGpvaW5DbHMoY2xhc3NlcyhgJHt2YWx1ZUxhYmVsQ2xhc3N9LSR7bm9ybWFsaXplZFNpemV9YCksIGlzTXVsdGlwbGVWYWx1ZUZpbGxlZCAmJiBjbGFzc2VzKGAke3ZhbHVlTGFiZWxDbGFzc30tbXVsdGlwbGVgKSwgZGlzYWJsZWQgJiYgY2xhc3NlcyhgJHt2YWx1ZUxhYmVsQ2xhc3N9LWRpc2FibGVkYCkpKSwgY2hpbGRyZW46IF9qc3goU2VsZWN0VmFsdWVDb250ZW50LCB7IGNsYXNzZXM6IGNsYXNzZXMsIGhhc1NlbGVjdGlvbjogaGFzU2VsZWN0aW9uLCBtdWx0aXBsZTogbXVsdGlwbGUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgcmVuZGVyVmFsdWU6IHJlbmRlclZhbHVlLCByZW5kZXJWYWx1ZU1ldGE6IHJlbmRlclZhbHVlTWV0YSwgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsIG1heFZpc2libGVWYWx1ZXM6IG1heFZpc2libGVWYWx1ZXMsIG9uUmVtb3ZlOiBoYW5kbGVSZW1vdmVTZWxlY3RlZFZhbHVlLCBvblJlbW92ZUNsaWNrOiBoYW5kbGVUYWdSZW1vdmVDbGljaywgb25SZW1vdmVNb3VzZURvd246IGhhbmRsZVRhZ1JlbW92ZU1vdXNlRG93biB9KSB9KV0gfSksIF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdpY29uJyksIGNoaWxkcmVuOiBfanN4KEljb25zLCB7IG5hbWU6IGlubmVyT3BlbiA/ICdjaGV2cm9uVXAnIDogJ2NoZXZyb25Eb3duJywgc2l6ZTogaWNvblNpemUsIGNvbG9yOiBcImN1cnJlbnRDb2xvclwiIH0pIH0pXSB9KSksIGlubmVyT3BlbiAmJiAhZGlzYWJsZWQgJiYgKF9qc3goRmxvYXRpbmdQb3J0YWwsIHsgY2hpbGRyZW46IF9qc3goRmxvYXRpbmdGb2N1c01hbmFnZXIsIHsgY29udGV4dDogY29udGV4dCwgbW9kYWw6IGZhbHNlLCBpbml0aWFsRm9jdXM6IC0xLCByZXR1cm5Gb2N1czogZmFsc2UsIGNoaWxkcmVuOiBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHt9LCBnZXRGbG9hdGluZ1Byb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogc2V0RmxvYXRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogZmxvYXRpbmdTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgIH0pLCB7IGNoaWxkcmVuOiBbc2VhcmNoYWJsZSAmJiAoX2pzeChTZWxlY3RTZWFyY2hDb250cm9sLCB7IHJlZjogc2VhcmNoSW5wdXRSZWYsIGNsYXNzZXM6IGNsYXNzZXMsIHBsYWNlaG9sZGVyOiBzZWFyY2hQbGFjZWhvbGRlciwgdmFsdWU6IGlubmVyU2VhcmNoVmFsdWUsIG9uQmx1cjogaGFuZGxlU2VhcmNoQmx1ciwgb25DaGFuZ2U6IGhhbmRsZVNlYXJjaENoYW5nZSwgb25LZXlEb3duOiBoYW5kbGVTZWFyY2hLZXlEb3duIH0pKSwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtYm9keScpLCBjaGlsZHJlbjogdmlzaWJsZUZsYXRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdlbXB0eScpLCBjaGlsZHJlbjogX2pzeChUeXBvZ3JhcGh5Qm9keSwgeyBzaXplOiBTRUxFQ1RfVFlQT0dSQVBIWS5lbXB0eS5zaXplLCBjb2xvcjogU0VMRUNUX1RZUE9HUkFQSFkuZW1wdHkuY29sb3IsIGNoaWxkcmVuOiBlbXB0eUNvbnRlbnQgfSkgfSkpIDogKCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmxhdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpYmxlT3B0aW9uR3JvdXBzLm1hcCgoZ3JvdXApID0+IChfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZ3JvdXAnKSwgY2hpbGRyZW46IFtncm91cC5sYWJlbCAmJiAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZ3JvdXAtbGFiZWwnKSwgY2hpbGRyZW46IF9qc3goVHlwb2dyYXBoeUxhYmVsLCB7IHNpemU6IFNFTEVDVF9UWVBPR1JBUEhZLmdyb3VwTGFiZWwuc2l6ZSwgc3Ryb25nOiB0cnVlLCBjaGlsZHJlbjogZ3JvdXAubGFiZWwgfSkgfSkpLCBncm91cC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25GbGF0SW5kZXggPSBmbGF0SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0SW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gaXNPcHRpb25TZWxlY3RlZChpbm5lclZhbHVlLCBtdWx0aXBsZSwgb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZUluZGV4ID09PSBvcHRpb25GbGF0SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25NZXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogISFvcHRpb24uZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IG9wdGlvbkZsYXRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuOiBpbm5lck9wZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbnRlbnRSZWYuY3VycmVudFtvcHRpb25GbGF0SW5kZXhdID0gZXh0cmFjdE9wdGlvblRleHQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHt9LCBnZXRJdGVtUHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZihub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RSZWYuY3VycmVudFtvcHRpb25GbGF0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcygnb3B0aW9uJywgam9pbkNscyhhY3RpdmUgJiYgY2xhc3Nlcygnb3B0aW9uLWFjdGl2ZScpLCBzZWxlY3RlZCAmJiBjbGFzc2VzKCdvcHRpb24tc2VsZWN0ZWQnKSwgb3B0aW9uLmRpc2FibGVkICYmIGNsYXNzZXMoJ29wdGlvbi1kaXNhYmxlZCcpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IG9wdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcjogKCkgPT4gaGFuZGxlSXRlbU1vdXNlRW50ZXIob3B0aW9uRmxhdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkJsdXI6IGhhbmRsZU9wdGlvbkJsdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgeyBjaGlsZHJlbjogcmVuZGVyT3B0aW9uID8gKHJlbmRlck9wdGlvbihvcHRpb24sIG9wdGlvbk1ldGEpKSA6IChfanN4KFNlbGVjdE9wdGlvbkNvbnRlbnQsIHsgY2xhc3NlczogY2xhc3Nlcywgb3B0aW9uOiBvcHRpb24sIHNlbGVjdGVkOiBzZWxlY3RlZCB9KSkgfSksIGAke2dyb3VwLmtleX0tJHtvcHRpb24udmFsdWV9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV0gfSwgZ3JvdXAua2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpKSB9KSwgcGFuZWxGb290ZXIgIT0gbnVsbCAmJiAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtZm9vdGVyJyksIGNoaWxkcmVuOiBwYW5lbEZvb3RlciB9KSldIH0pKSB9KSB9KSldIH0pKTtcbn07XG5TZWxlY3QuZGlzcGxheU5hbWUgPSAnU2VsZWN0JztcbmV4cG9ydCBkZWZhdWx0IG1lbW8oU2VsZWN0KTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
563
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC50c3giXSwibmFtZXMiOlsianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZsb2F0aW5nRm9jdXNNYW5hZ2VyIiwiRmxvYXRpbmdQb3J0YWwiLCJ1c2VJbnRlcmFjdGlvbnMiLCJ1c2VMaXN0TmF2aWdhdGlvbiIsInVzZVR5cGVhaGVhZCIsIm1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VJZCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNvbnRyb2xsZWRTdGF0ZSIsInVzZUV2ZW50Q2FsbGJhY2siLCJJY29ucyIsIlNwaW5uZXIiLCJUeXBvZ3JhcGh5Qm9keSIsIlR5cG9ncmFwaHlMYWJlbCIsImpvaW5DbHMiLCJkZWZhdWx0Iiwicm9vdENsYXNzbmFtZXMiLCJTZWxlY3RGaWVsZFNoZWxsIiwiU2VsZWN0T3B0aW9uQ29udGVudCIsIlNlbGVjdFNlYXJjaENvbnRyb2wiLCJTZWxlY3RWYWx1ZUNvbnRlbnQiLCJ1c2VTZWxlY3RTaGVsbCIsIktFWUJPQVJEIiwiU0VMRUNUX1RZUE9HUkFQSFkiLCJleHRyYWN0T3B0aW9uVGV4dCIsImZpbHRlck9wdGlvbkdyb3VwcyIsImZsYXR0ZW5PcHRpb25Hcm91cHMiLCJnZXRNdWx0aXBsZVZhbHVlIiwiZ2V0T3B0aW9uc0J5VmFsdWVzIiwiZ2V0U2VsZWN0ZWRPcHRpb25zIiwiaXNPcHRpb25TZWxlY3RlZCIsIm5vcm1hbGl6ZVNpemUiLCJub3JtYWxpemVPcHRpb25Hcm91cHMiLCJyZW1vdmVNdWx0aXBsZVZhbHVlIiwidG9nZ2xlTXVsdGlwbGVWYWx1ZSIsIkRFRkFVTFRfTUFYX0hFSUdIVCIsIlNlbGVjdCIsInByb3BzIiwiX3Byb3BzJGNsYXNzTmFtZSIsImNsYXNzTmFtZSIsIl9wcm9wcyRwcmVmaXhDbHMiLCJwcmVmaXhDbHMiLCJzdHlsZSIsImlkIiwibmFtZSIsImFyaWFMYWJlbCIsImFyaWFMYWJlbGxlZEJ5IiwiX3Byb3BzJHBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiLCJfcHJvcHMkb3B0aW9ucyIsIm9wdGlvbnMiLCJ2YWx1ZSIsImRlZmF1bHRWYWx1ZSIsIl9wcm9wcyRzaXplIiwic2l6ZSIsIl9wcm9wcyRzdGF0dXMiLCJzdGF0dXMiLCJfcHJvcHMkdmFyaWFudCIsInZhcmlhbnQiLCJfcHJvcHMkZGlzYWJsZWQiLCJkaXNhYmxlZCIsImRpc2FibGVkUHJvcCIsIl9wcm9wcyRyZWFkT25seSIsInJlYWRPbmx5IiwiX3Byb3BzJGxvYWRpbmciLCJsb2FkaW5nIiwiX3Byb3BzJG11bHRpcGxlIiwibXVsdGlwbGUiLCJtYXhWaXNpYmxlVmFsdWVzIiwiX3Byb3BzJHNlYXJjaGFibGUiLCJzZWFyY2hhYmxlIiwiX3Byb3BzJHNlYXJjaFBsYWNlaG9sIiwic2VhcmNoUGxhY2Vob2xkZXIiLCJzZWFyY2hWYWx1ZSIsIl9wcm9wcyRkZWZhdWx0U2VhcmNoViIsImRlZmF1bHRTZWFyY2hWYWx1ZSIsIl9wcm9wcyRmaWx0ZXJJbnB1dEF1dCIsImZpbHRlcklucHV0QXV0b0ZvY3VzIiwibGFiZWwiLCJpbmZvIiwiZGVzY3JpcHRpb24iLCJmZWVkYmFjayIsIl9wcm9wcyRyZXF1aXJlZCIsInJlcXVpcmVkIiwicHJlZml4IiwiX3Byb3BzJGVtcHR5Q29udGVudCIsImVtcHR5Q29udGVudCIsInBhbmVsRm9vdGVyIiwib3BlbiIsIl9wcm9wcyRkZWZhdWx0T3BlbiIsImRlZmF1bHRPcGVuIiwiX3Byb3BzJHBvcnRhbCIsInBvcnRhbCIsIl9wcm9wcyRhbGxvd0Rlc2VsZWN0IiwiYWxsb3dEZXNlbGVjdCIsInBhbmVsQ2xhc3NOYW1lIiwib3B0aW9uQ2xhc3NOYW1lIiwiX3Byb3BzJGxpc3RNYXhIZWlnaHQiLCJsaXN0TWF4SGVpZ2h0Iiwib2Zmc2V0IiwiYW5pbWF0aW9uIiwib25DaGFuZ2UiLCJvbk9wZW5DaGFuZ2UiLCJvblNlYXJjaENoYW5nZSIsIm9uQmx1ciIsImZpbHRlck9wdGlvbiIsInJlbmRlck9wdGlvbiIsInJlbmRlck9wdGlvbkNvbnRlbnQiLCJyZW5kZXJWYWx1ZSIsInJlZiIsImludGVyYWN0aXZlIiwiY2xhc3NlcyIsImF1dG9JZCIsInRyaWdnZXJJZCIsImxhYmVsSWQiLCJkZXNjcmlwdGlvbklkIiwiZmVlZGJhY2tJZCIsIm9wdGlvbklkUHJlZml4IiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsInVuZGVmaW5lZCIsIl91c2VDb250cm9sbGVkU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpbm5lclZhbHVlIiwic2V0SW5uZXJWYWx1ZSIsIl91c2VDb250cm9sbGVkU3RhdGUzIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTQiLCJpbm5lclNlYXJjaFZhbHVlIiwic2V0SW5uZXJTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJhY3RpdmVJbmRleCIsInNldEFjdGl2ZUluZGV4Iiwibm9ybWFsaXplZFNpemUiLCJhbGxPcHRpb25Hcm91cHMiLCJhbGxGbGF0T3B0aW9ucyIsInZpc2libGVPcHRpb25Hcm91cHMiLCJ2aXNpYmxlRmxhdE9wdGlvbnMiLCJzZWxlY3RlZE9wdGlvbnMiLCJzZWxlY3RlZEluZGV4IiwibGVuZ3RoIiwibWF0Y2hlZEluZGV4IiwiZmluZEluZGV4Iiwib3B0aW9uIiwiaGFzU2VsZWN0aW9uIiwibGlzdFJlZiIsImxpc3RDb250ZW50UmVmIiwiZmxvYXRpbmdSZWYiLCJ0cmlnZ2VyUmVmIiwic2VhcmNoSW5wdXRSZWYiLCJoYW5kbGVUcmlnZ2VyUmVmIiwibm9kZSIsImN1cnJlbnQiLCJfdXNlU2VsZWN0U2hlbGwiLCJpbm5lck9wZW4iLCJpc09wZW4iLCJoYW5kbGVPcGVuQ2hhbmdlIiwic2V0T3BlbiIsInJlZnMiLCJjb250ZXh0IiwiZmxvYXRpbmdTdHlsZXMiLCJ0cmFuc2l0aW9uU3R5bGVzIiwiaXNNb3VudGVkIiwiYmFzZUludGVyYWN0aW9ucyIsInNldFJlZmVyZW5jZSIsInNldEZsb2F0aW5nIiwibGlzdE5hdmlnYXRpb24iLCJvbk5hdmlnYXRlIiwiZW5hYmxlZCIsImxvb3AiLCJ2aXJ0dWFsIiwidHlwZWFoZWFkIiwib25NYXRjaCIsIl91c2VJbnRlcmFjdGlvbnMiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnZXRSZWZlcmVuY2VQcm9wcyIsImdldEZsb2F0aW5nUHJvcHMiLCJnZXRJdGVtUHJvcHMiLCJmaXJzdEVuYWJsZWRJbmRleCIsInByZXYiLCJfYSIsImZvY3VzIiwicHJldmVudFNjcm9sbCIsInNsaWNlIiwic2V0U2VhcmNoSW5wdXRSZWYiLCJub3RpZnlCbHVySWZPdXRzaWRlIiwicmVsYXRlZFRhcmdldCIsImV2ZW50IiwiX2IiLCJuZXh0VGFyZ2V0Iiwid2l0aGluVHJpZ2dlciIsImNvbnRhaW5zIiwid2l0aGluRmxvYXRpbmciLCJoYW5kbGVUcmlnZ2VyQmx1ciIsImhhbmRsZU9wdGlvbkJsdXIiLCJjb21taXRDaGFuZ2UiLCJuZXh0VmFsdWUiLCJuZXh0T3B0aW9uIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwibmV4dE9wdGlvbnMiLCJoYW5kbGVSZW1vdmVTZWxlY3RlZFZhbHVlIiwib3B0aW9uVmFsdWUiLCJpbmNsdWRlcyIsImhhbmRsZVRyaWdnZXJLZXlEb3duIiwia2V5IiwiRU5URVIiLCJTUEFDRSIsInByZXZlbnREZWZhdWx0IiwiQVJST1dfRE9XTiIsIkFSUk9XX1VQIiwiaGFuZGxlSXRlbU1vdXNlRW50ZXIiLCJpbmRleCIsImhhbmRsZVRhZ1JlbW92ZU1vdXNlRG93biIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRhZ1JlbW92ZUNsaWNrIiwiaGFuZGxlU2VhcmNoQmx1ciIsImhhbmRsZVNlYXJjaENoYW5nZSIsIl9ldmVudCIsImZpbmRFbmFibGVkSW5kZXgiLCJkaXJlY3Rpb24iLCJzdGFydCIsInN0ZXAiLCJjYW5kaWRhdGUiLCJoYW5kbGVTZWFyY2hLZXlEb3duIiwibmV4dCIsIkVTQ0FQRSIsInJlbmRlclZhbHVlTWV0YSIsInZhbHVlTGFiZWxDbGFzcyIsImlzTXVsdGlwbGVWYWx1ZUZpbGxlZCIsInRyaWdnZXJDbGFzc05hbWUiLCJpY29uU2l6ZSIsImFjdGl2ZU9wdGlvbklkIiwiZmxvYXRpbmdBcmlhTGFiZWxsZWRCeSIsImRlc2NyaWJlZEJ5SWRzIiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJjaGlsZHJlbiIsIk9iamVjdCIsImFzc2lnbiIsInR5cGUiLCJvbktleURvd24iLCJvblJlbW92ZSIsIm9uUmVtb3ZlQ2xpY2siLCJvblJlbW92ZU1vdXNlRG93biIsInN0cm9rZVdpZHRoIiwiY29sb3IiLCJwYW5lbE5vZGUiLCJtb2RhbCIsImluaXRpYWxGb2N1cyIsInJldHVybkZvY3VzIiwiYWN0aXZlRGVzY2VuZGFudCIsImVtcHR5IiwiZmxhdEluZGV4IiwibWFwIiwiZ3JvdXAiLCJncm91cExhYmVsIiwic3Ryb25nIiwib3B0aW9uRmxhdEluZGV4Iiwic2VsZWN0ZWQiLCJhY3RpdmUiLCJvcHRpb25NZXRhIiwicm9sZSIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJjb250ZW50IiwiZGlzcGxheU5hbWUiXSwibWFwcGluZ3MiOiI7O0FBQUEsU0FBU0EsR0FBRyxJQUFJQyxJQUFJLEVBQUVDLElBQUksSUFBSUMsS0FBSyxRQUFRLG1CQUFtQjtBQ0E5RCxTQUNFQyxvQkFBb0IsRUFDcEJDLGNBQWMsRUFDZEMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLFlBQVksUUFDUCxvQkFBb0I7QUFDM0IsU0FBU0MsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3pFLFNBQVNDLGtCQUFrQixFQUFFQyxnQkFBZ0IsUUFBUSxlQUFlO0FBQ3BFLFNBQVNDLEtBQUssUUFBUSxVQUFVO0FBQ2hDLFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGNBQWMsRUFBRUMsZUFBZSxRQUFRLGVBQWU7QUFDL0QsU0FBU0MsT0FBTyxFQUFFQyxPQUFPLElBQUlDLGNBQWMsUUFB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QUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBGbG9hdGluZ0ZvY3VzTWFuYWdlciwgRmxvYXRpbmdQb3J0YWwsIHVzZUludGVyYWN0aW9ucywgdXNlTGlzdE5hdmlnYXRpb24sIHVzZVR5cGVhaGVhZCwgfSBmcm9tICdAZmxvYXRpbmctdWkvcmVhY3QnO1xuaW1wb3J0IHsgbWVtbywgdXNlRWZmZWN0LCB1c2VJZCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRyb2xsZWRTdGF0ZSwgdXNlRXZlbnRDYWxsYmFjayB9IGZyb20gJ0AxbW9uZXkvaG9va3MnO1xuaW1wb3J0IHsgSWNvbnMgfSBmcm9tICcuLi9JY29ucyc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vU3Bpbm5lcic7XG5pbXBvcnQgeyBUeXBvZ3JhcGh5Qm9keSwgVHlwb2dyYXBoeUxhYmVsIH0gZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBqb2luQ2xzLCBkZWZhdWx0IGFzIHJvb3RDbGFzc25hbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgU2VsZWN0RmllbGRTaGVsbCBmcm9tICcuL1NlbGVjdEZpZWxkU2hlbGwnO1xuaW1wb3J0IFNlbGVjdE9wdGlvbkNvbnRlbnQgZnJvbSAnLi9TZWxlY3RPcHRpb25Db250ZW50JztcbmltcG9ydCBTZWxlY3RTZWFyY2hDb250cm9sIGZyb20gJy4vU2VsZWN0U2VhcmNoQ29udHJvbCc7XG5pbXBvcnQgU2VsZWN0VmFsdWVDb250ZW50IGZyb20gJy4vU2VsZWN0VmFsdWVDb250ZW50JztcbmltcG9ydCB7IHVzZVNlbGVjdFNoZWxsIH0gZnJvbSAnLi91c2VTZWxlY3RTaGVsbCc7XG5pbXBvcnQgeyBLRVlCT0FSRCwgU0VMRUNUX1RZUE9HUkFQSFkgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBleHRyYWN0T3B0aW9uVGV4dCwgZmlsdGVyT3B0aW9uR3JvdXBzLCBmbGF0dGVuT3B0aW9uR3JvdXBzLCBnZXRNdWx0aXBsZVZhbHVlLCBnZXRPcHRpb25zQnlWYWx1ZXMsIGdldFNlbGVjdGVkT3B0aW9ucywgaXNPcHRpb25TZWxlY3RlZCwgbm9ybWFsaXplU2l6ZSwgbm9ybWFsaXplT3B0aW9uR3JvdXBzLCByZW1vdmVNdWx0aXBsZVZhbHVlLCB0b2dnbGVNdWx0aXBsZVZhbHVlLCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICcuL3N0eWxlJztcbmNvbnN0IERFRkFVTFRfTUFYX0hFSUdIVCA9IDMyMDtcbmV4cG9ydCBjb25zdCBTZWxlY3QgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSA9ICcnLCBwcmVmaXhDbHMgPSAnc2VsZWN0Jywgc3R5bGUsIGlkLCBuYW1lLCAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCwgJ2FyaWEtbGFiZWxsZWRieSc6IGFyaWFMYWJlbGxlZEJ5LCBwbGFjZWhvbGRlciA9ICdWYWx1ZScsIG9wdGlvbnMgPSBbXSwgdmFsdWUsIGRlZmF1bHRWYWx1ZSwgc2l6ZSA9ICdsYXJnZScsIHN0YXR1cyA9ICdkZWZhdWx0JywgdmFyaWFudCA9ICdmaWxsJywgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCA9IGZhbHNlLCByZWFkT25seSA9IGZhbHNlLCBsb2FkaW5nID0gZmFsc2UsIG11bHRpcGxlID0gZmFsc2UsIG1heFZpc2libGVWYWx1ZXMsIHNlYXJjaGFibGUgPSBmYWxzZSwgc2VhcmNoUGxhY2Vob2xkZXIgPSAnU2VhcmNoJywgc2VhcmNoVmFsdWUsIGRlZmF1bHRTZWFyY2hWYWx1ZSA9ICcnLCBmaWx0ZXJJbnB1dEF1dG9Gb2N1cyA9IHRydWUsIGxhYmVsLCBpbmZvLCBkZXNjcmlwdGlvbiwgZmVlZGJhY2ssIHJlcXVpcmVkID0gZmFsc2UsIHByZWZpeCwgZW1wdHlDb250ZW50ID0gJ05vIG9wdGlvbnMnLCBwYW5lbEZvb3Rlciwgb3BlbiwgZGVmYXVsdE9wZW4gPSBmYWxzZSwgcG9ydGFsID0gdHJ1ZSwgYWxsb3dEZXNlbGVjdCA9IGZhbHNlLCBwYW5lbENsYXNzTmFtZSwgb3B0aW9uQ2xhc3NOYW1lLCBsaXN0TWF4SGVpZ2h0ID0gREVGQVVMVF9NQVhfSEVJR0hULCBvZmZzZXQsIGFuaW1hdGlvbiwgb25DaGFuZ2UsIG9uT3BlbkNoYW5nZSwgb25TZWFyY2hDaGFuZ2UsIG9uQmx1ciwgZmlsdGVyT3B0aW9uLCByZW5kZXJPcHRpb24sIHJlbmRlck9wdGlvbkNvbnRlbnQsIHJlbmRlclZhbHVlLCByZWYsIH0gPSBwcm9wcztcbiAgICBjb25zdCBkaXNhYmxlZCA9IGRpc2FibGVkUHJvcCB8fCBsb2FkaW5nO1xuICAgIGNvbnN0IGludGVyYWN0aXZlID0gIWRpc2FibGVkICYmICFyZWFkT25seTtcbiAgICBjb25zdCBjbGFzc2VzID0gcm9vdENsYXNzbmFtZXMocHJlZml4Q2xzKTtcbiAgICBjb25zdCBhdXRvSWQgPSB1c2VJZCgpO1xuICAgIGNvbnN0IHRyaWdnZXJJZCA9IGlkICE9PSBudWxsICYmIGlkICE9PSB2b2lkIDAgPyBpZCA6IGF1dG9JZDtcbiAgICBjb25zdCBsYWJlbElkID0gdXNlSWQoKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbklkID0gdXNlSWQoKTtcbiAgICBjb25zdCBmZWVkYmFja0lkID0gdXNlSWQoKTtcbiAgICBjb25zdCBvcHRpb25JZFByZWZpeCA9IHVzZUlkKCk7XG4gICAgY29uc3QgW2lubmVyVmFsdWUsIHNldElubmVyVmFsdWVdID0gdXNlQ29udHJvbGxlZFN0YXRlKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IGRlZmF1bHRWYWx1ZSA6IChtdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkKSwgdmFsdWUpO1xuICAgIGNvbnN0IFtpbm5lclNlYXJjaFZhbHVlLCBzZXRJbm5lclNlYXJjaFZhbHVlXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShkZWZhdWx0U2VhcmNoVmFsdWUsIHNlYXJjaFZhbHVlKTtcbiAgICBjb25zdCBbYWN0aXZlSW5kZXgsIHNldEFjdGl2ZUluZGV4XSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTaXplID0gbm9ybWFsaXplU2l6ZShzaXplKTtcbiAgICBjb25zdCBhbGxPcHRpb25Hcm91cHMgPSB1c2VNZW1vKCgpID0+IG5vcm1hbGl6ZU9wdGlvbkdyb3VwcyhvcHRpb25zKSwgW29wdGlvbnNdKTtcbiAgICBjb25zdCBhbGxGbGF0T3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gZmxhdHRlbk9wdGlvbkdyb3VwcyhhbGxPcHRpb25Hcm91cHMpLCBbYWxsT3B0aW9uR3JvdXBzXSk7XG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbkdyb3VwcyA9IHVzZU1lbW8oKCkgPT4gKHNlYXJjaGFibGVcbiAgICAgICAgPyBmaWx0ZXJPcHRpb25Hcm91cHMoYWxsT3B0aW9uR3JvdXBzLCBpbm5lclNlYXJjaFZhbHVlLCBmaWx0ZXJPcHRpb24pXG4gICAgICAgIDogYWxsT3B0aW9uR3JvdXBzKSwgW2FsbE9wdGlvbkdyb3VwcywgZmlsdGVyT3B0aW9uLCBpbm5lclNlYXJjaFZhbHVlLCBzZWFyY2hhYmxlXSk7XG4gICAgY29uc3QgdmlzaWJsZUZsYXRPcHRpb25zID0gdXNlTWVtbygoKSA9PiBmbGF0dGVuT3B0aW9uR3JvdXBzKHZpc2libGVPcHRpb25Hcm91cHMpLCBbdmlzaWJsZU9wdGlvbkdyb3Vwc10pO1xuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gZ2V0U2VsZWN0ZWRPcHRpb25zKGFsbEZsYXRPcHRpb25zLCBpbm5lclZhbHVlLCBtdWx0aXBsZSksIFthbGxGbGF0T3B0aW9ucywgaW5uZXJWYWx1ZSwgbXVsdGlwbGVdKTtcbiAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXRjaGVkSW5kZXggPSB2aXNpYmxlRmxhdE9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRJbmRleCA+PSAwID8gbWF0Y2hlZEluZGV4IDogbnVsbDtcbiAgICB9LCBbc2VsZWN0ZWRPcHRpb25zLCB2aXNpYmxlRmxhdE9wdGlvbnNdKTtcbiAgICBjb25zdCBoYXNTZWxlY3Rpb24gPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBsaXN0UmVmID0gdXNlUmVmKFtdKTtcbiAgICBjb25zdCBsaXN0Q29udGVudFJlZiA9IHVzZVJlZihbXSk7XG4gICAgY29uc3QgZmxvYXRpbmdSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzZWFyY2hJbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBoYW5kbGVUcmlnZ2VyUmVmID0gdXNlRXZlbnRDYWxsYmFjaygobm9kZSkgPT4ge1xuICAgICAgICB0cmlnZ2VyUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB7IGlzT3BlbjogaW5uZXJPcGVuLCBzZXRPcGVuOiBoYW5kbGVPcGVuQ2hhbmdlLCByZWZzLCBjb250ZXh0LCBmbG9hdGluZ1N0eWxlcywgdHJhbnNpdGlvblN0eWxlcywgaXNNb3VudGVkLCBiYXNlSW50ZXJhY3Rpb25zLCB9ID0gdXNlU2VsZWN0U2hlbGwoe1xuICAgICAgICBvcGVuLFxuICAgICAgICBkZWZhdWx0T3BlbixcbiAgICAgICAgb25PcGVuQ2hhbmdlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZE9ubHksXG4gICAgICAgIGxpc3RNYXhIZWlnaHQsXG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgb2Zmc2V0LFxuICAgIH0pO1xuICAgIGNvbnN0IHNldFJlZmVyZW5jZSA9IHVzZUV2ZW50Q2FsbGJhY2soKG5vZGUpID0+IHtcbiAgICAgICAgcmVmcy5zZXRSZWZlcmVuY2Uobm9kZSk7XG4gICAgICAgIGhhbmRsZVRyaWdnZXJSZWYobm9kZSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmxvYXRpbmcgPSB1c2VFdmVudENhbGxiYWNrKChub2RlKSA9PiB7XG4gICAgICAgIHJlZnMuc2V0RmxvYXRpbmcobm9kZSk7XG4gICAgICAgIGZsb2F0aW5nUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIH0pO1xuICAgIGNvbnN0IGxpc3ROYXZpZ2F0aW9uID0gdXNlTGlzdE5hdmlnYXRpb24oY29udGV4dCwge1xuICAgICAgICBsaXN0UmVmLFxuICAgICAgICBhY3RpdmVJbmRleCxcbiAgICAgICAgc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgb25OYXZpZ2F0ZTogc2V0QWN0aXZlSW5kZXgsXG4gICAgICAgIGVuYWJsZWQ6IGlubmVyT3BlbixcbiAgICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgICAgdmlydHVhbDogc2VhcmNoYWJsZSxcbiAgICB9KTtcbiAgICBjb25zdCB0eXBlYWhlYWQgPSB1c2VUeXBlYWhlYWQoY29udGV4dCwge1xuICAgICAgICBsaXN0UmVmOiBsaXN0Q29udGVudFJlZixcbiAgICAgICAgYWN0aXZlSW5kZXgsXG4gICAgICAgIHNlbGVjdGVkSW5kZXgsXG4gICAgICAgIGVuYWJsZWQ6IGlubmVyT3BlbiAmJiAhc2VhcmNoYWJsZSxcbiAgICAgICAgb25NYXRjaDogc2V0QWN0aXZlSW5kZXgsXG4gICAgfSk7XG4gICAgY29uc3QgeyBnZXRSZWZlcmVuY2VQcm9wcywgZ2V0RmxvYXRpbmdQcm9wcywgZ2V0SXRlbVByb3BzIH0gPSB1c2VJbnRlcmFjdGlvbnMoW1xuICAgICAgICAuLi5iYXNlSW50ZXJhY3Rpb25zLFxuICAgICAgICBsaXN0TmF2aWdhdGlvbixcbiAgICAgICAgdHlwZWFoZWFkLFxuICAgIF0pO1xuICAgIGNvbnN0IGZpcnN0RW5hYmxlZEluZGV4ID0gdXNlTWVtbygoKSA9PiB2aXNpYmxlRmxhdE9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+ICFvcHRpb24uZGlzYWJsZWQpLCBbdmlzaWJsZUZsYXRPcHRpb25zXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpbm5lck9wZW4pIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUluZGV4KHNlbGVjdGVkSW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEFjdGl2ZUluZGV4KChwcmV2KSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCAmJiB2aXNpYmxlRmxhdE9wdGlvbnNbcHJldl0gJiYgIXZpc2libGVGbGF0T3B0aW9uc1twcmV2XS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICB2aXNpYmxlRmxhdE9wdGlvbnNbc2VsZWN0ZWRJbmRleF0gJiZcbiAgICAgICAgICAgICAgICAhdmlzaWJsZUZsYXRPcHRpb25zW3NlbGVjdGVkSW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlyc3RFbmFibGVkSW5kZXggPj0gMCA/IGZpcnN0RW5hYmxlZEluZGV4IDogbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSwgW2ZpcnN0RW5hYmxlZEluZGV4LCBpbm5lck9wZW4sIHNlbGVjdGVkSW5kZXgsIHZpc2libGVGbGF0T3B0aW9uc10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCFpbm5lck9wZW4gfHwgYWN0aXZlSW5kZXggPT09IG51bGwgfHwgc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIChfYSA9IGxpc3RSZWYuY3VycmVudFthY3RpdmVJbmRleF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfSwgW2FjdGl2ZUluZGV4LCBpbm5lck9wZW4sIHNlYXJjaGFibGVdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsaXN0UmVmLmN1cnJlbnQgPSBsaXN0UmVmLmN1cnJlbnQuc2xpY2UoMCwgdmlzaWJsZUZsYXRPcHRpb25zLmxlbmd0aCk7XG4gICAgICAgIGxpc3RDb250ZW50UmVmLmN1cnJlbnQgPSBsaXN0Q29udGVudFJlZi5jdXJyZW50LnNsaWNlKDAsIHZpc2libGVGbGF0T3B0aW9ucy5sZW5ndGgpO1xuICAgIH0sIFt2aXNpYmxlRmxhdE9wdGlvbnMubGVuZ3RoXSk7XG4gICAgY29uc3Qgc2V0U2VhcmNoSW5wdXRSZWYgPSB1c2VFdmVudENhbGxiYWNrKChub2RlKSA9PiB7XG4gICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgPSBub2RlO1xuICAgICAgICBpZiAobm9kZSAmJiBpbm5lck9wZW4gJiYgZmlsdGVySW5wdXRBdXRvRm9jdXMpIHtcbiAgICAgICAgICAgIG5vZGUuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgbm90aWZ5Qmx1cklmT3V0c2lkZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHJlbGF0ZWRUYXJnZXQsIGV2ZW50KSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0O1xuICAgICAgICBjb25zdCB3aXRoaW5UcmlnZ2VyID0gISEobmV4dFRhcmdldCAmJiAoKF9hID0gdHJpZ2dlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29udGFpbnMobmV4dFRhcmdldCkpKTtcbiAgICAgICAgY29uc3Qgd2l0aGluRmxvYXRpbmcgPSAhIShuZXh0VGFyZ2V0ICYmICgoX2IgPSBmbG9hdGluZ1JlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY29udGFpbnMobmV4dFRhcmdldCkpKTtcbiAgICAgICAgaWYgKCF3aXRoaW5UcmlnZ2VyICYmICF3aXRoaW5GbG9hdGluZykge1xuICAgICAgICAgICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CbHVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVRyaWdnZXJCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoZXZlbnQpID0+IHtcbiAgICAgICAgbm90aWZ5Qmx1cklmT3V0c2lkZShldmVudC5yZWxhdGVkVGFyZ2V0LCBldmVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlT3B0aW9uQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKGV2ZW50KSA9PiB7XG4gICAgICAgIG5vdGlmeUJsdXJJZk91dHNpZGUoZXZlbnQucmVsYXRlZFRhcmdldCwgZXZlbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbW1pdENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKG5leHRWYWx1ZSwgbmV4dE9wdGlvbikgPT4ge1xuICAgICAgICBzZXRJbm5lclZhbHVlKG5leHRWYWx1ZSk7XG4gICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VmFsdWUsIG5leHRPcHRpb24sIG5hbWUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUV2ZW50Q2FsbGJhY2soKG9wdGlvbikgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSB0b2dnbGVNdWx0aXBsZVZhbHVlKGlubmVyVmFsdWUsIG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXh0T3B0aW9ucyA9IGdldE9wdGlvbnNCeVZhbHVlcyhhbGxGbGF0T3B0aW9ucywgbmV4dFZhbHVlKTtcbiAgICAgICAgICAgIGNvbW1pdENoYW5nZShuZXh0VmFsdWUsIG5leHRPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dEZXNlbGVjdCAmJiBpbm5lclZhbHVlID09PSBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgIGNvbW1pdENoYW5nZSh1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBoYW5kbGVPcGVuQ2hhbmdlKGZhbHNlKTtcbiAgICAgICAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cigpO1xuICAgICAgICAgICAgKF9hID0gdHJpZ2dlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1pdENoYW5nZShvcHRpb24udmFsdWUsIG9wdGlvbik7XG4gICAgICAgIGhhbmRsZU9wZW5DaGFuZ2UoZmFsc2UpO1xuICAgICAgICBvbkJsdXIgPT09IG51bGwgfHwgb25CbHVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJsdXIoKTtcbiAgICAgICAgKF9iID0gdHJpZ2dlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVJlbW92ZVNlbGVjdGVkVmFsdWUgPSB1c2VFdmVudENhbGxiYWNrKChvcHRpb25WYWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFnZXRNdWx0aXBsZVZhbHVlKGlubmVyVmFsdWUpLmluY2x1ZGVzKG9wdGlvblZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHJlbW92ZU11bHRpcGxlVmFsdWUoaW5uZXJWYWx1ZSwgb3B0aW9uVmFsdWUpO1xuICAgICAgICBjb25zdCBuZXh0T3B0aW9ucyA9IGdldE9wdGlvbnNCeVZhbHVlcyhhbGxGbGF0T3B0aW9ucywgbmV4dFZhbHVlKTtcbiAgICAgICAgY29tbWl0Q2hhbmdlKG5leHRWYWx1ZSwgbmV4dE9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVRyaWdnZXJLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjaygoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFpbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWUJPQVJELkVOVEVSIHx8IGV2ZW50LmtleSA9PT0gS0VZQk9BUkQuU1BBQ0UpIHtcbiAgICAgICAgICAgIGlmIChpbm5lck9wZW4gJiZcbiAgICAgICAgICAgICAgICBhY3RpdmVJbmRleCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHZpc2libGVGbGF0T3B0aW9uc1thY3RpdmVJbmRleF0gJiZcbiAgICAgICAgICAgICAgICAhdmlzaWJsZUZsYXRPcHRpb25zW2FjdGl2ZUluZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uKHZpc2libGVGbGF0T3B0aW9uc1thY3RpdmVJbmRleF0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoYW5kbGVPcGVuQ2hhbmdlKCFpbm5lck9wZW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWUJPQVJELkFSUk9XX0RPV04gfHwgZXZlbnQua2V5ID09PSBLRVlCT0FSRC5BUlJPV19VUCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICghaW5uZXJPcGVuKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlT3BlbkNoYW5nZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUl0ZW1Nb3VzZUVudGVyID0gdXNlRXZlbnRDYWxsYmFjaygoaW5kZXgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoISgoX2EgPSB2aXNpYmxlRmxhdE9wdGlvbnNbaW5kZXhdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVJbmRleChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVUYWdSZW1vdmVNb3VzZURvd24gPSB1c2VFdmVudENhbGxiYWNrKChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVUYWdSZW1vdmVDbGljayA9IHVzZUV2ZW50Q2FsbGJhY2soKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVNlYXJjaEJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChldmVudCkgPT4ge1xuICAgICAgICBub3RpZnlCbHVySWZPdXRzaWRlKGV2ZW50LnJlbGF0ZWRUYXJnZXQsIGV2ZW50KTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTZWFyY2hDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKChuZXh0VmFsdWUsIF9ldmVudCkgPT4ge1xuICAgICAgICBzZXRJbm5lclNlYXJjaFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlID09PSBudWxsIHx8IG9uU2VhcmNoQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNlYXJjaENoYW5nZShuZXh0VmFsdWUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGZpbmRFbmFibGVkSW5kZXggPSB1c2VFdmVudENhbGxiYWNrKChjdXJyZW50LCBkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBsZW5ndGggPSB2aXNpYmxlRmxhdE9wdGlvbnMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydCA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudCAhPT0gdm9pZCAwID8gY3VycmVudCA6IChkaXJlY3Rpb24gPT09IDEgPyAtMSA6IGxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IHN0ZXAgPSAxOyBzdGVwIDw9IGxlbmd0aDsgc3RlcCArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSAoKHN0YXJ0ICsgZGlyZWN0aW9uICogc3RlcCkgJSBsZW5ndGggKyBsZW5ndGgpICUgbGVuZ3RoO1xuICAgICAgICAgICAgaWYgKCEoKF9hID0gdmlzaWJsZUZsYXRPcHRpb25zW2NhbmRpZGF0ZV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kaXNhYmxlZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVNlYXJjaEtleURvd24gPSB1c2VFdmVudENhbGxiYWNrKChldmVudCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWUJPQVJELkFSUk9XX0RPV04pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gZmluZEVuYWJsZWRJbmRleChhY3RpdmVJbmRleCwgMSk7XG4gICAgICAgICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldEFjdGl2ZUluZGV4KG5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWUJPQVJELkFSUk9XX1VQKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IGZpbmRFbmFibGVkSW5kZXgoYWN0aXZlSW5kZXgsIC0xKTtcbiAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlSW5kZXgocHJldik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gS0VZQk9BUkQuRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChhY3RpdmVJbmRleCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHZpc2libGVGbGF0T3B0aW9uc1thY3RpdmVJbmRleF0gJiZcbiAgICAgICAgICAgICAgICAhdmlzaWJsZUZsYXRPcHRpb25zW2FjdGl2ZUluZGV4XS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uKHZpc2libGVGbGF0T3B0aW9uc1thY3RpdmVJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IEtFWUJPQVJELkVTQ0FQRSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9wZW5DaGFuZ2UoZmFsc2UpO1xuICAgICAgICAgICAgKF9hID0gdHJpZ2dlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVuZGVyVmFsdWVNZXRhID0ge1xuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZE9ubHksXG4gICAgICAgIG11bHRpcGxlLFxuICAgICAgICBtYXhWaXNpYmxlVmFsdWVzLFxuICAgICAgICBvcGVuOiBpbm5lck9wZW4sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAhaGFzU2VsZWN0aW9uLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZUxhYmVsQ2xhc3MgPSBoYXNTZWxlY3Rpb24gPyAndmFsdWUnIDogJ3BsYWNlaG9sZGVyJztcbiAgICBjb25zdCBpc011bHRpcGxlVmFsdWVGaWxsZWQgPSAobXVsdGlwbGUgJiZcbiAgICAgICAgaGFzU2VsZWN0aW9uICYmXG4gICAgICAgIG1heFZpc2libGVWYWx1ZXMgPT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgdHJpZ2dlckNsYXNzTmFtZSA9IGNsYXNzZXMoJ3RyaWdnZXInLCBqb2luQ2xzKGNsYXNzZXMoYHRyaWdnZXItJHtub3JtYWxpemVkU2l6ZX1gKSwgY2xhc3NlcyhgdHJpZ2dlci0ke3ZhcmlhbnR9YCksIGlubmVyT3BlbiAmJiBjbGFzc2VzKCd0cmlnZ2VyLW9wZW4nKSwgaXNNdWx0aXBsZVZhbHVlRmlsbGVkICYmIGNsYXNzZXMoJ3RyaWdnZXItbXVsdGlwbGUtZmlsbGVkJyksIGhhc1NlbGVjdGlvbiA/IGNsYXNzZXMoJ3RyaWdnZXItZmlsbGVkJykgOiBjbGFzc2VzKCd0cmlnZ2VyLXBsYWNlaG9sZGVyJyksIHN0YXR1cyAhPT0gJ2RlZmF1bHQnICYmIGNsYXNzZXMoYHRyaWdnZXItJHtzdGF0dXN9YCksIGRpc2FibGVkICYmIGNsYXNzZXMoJ3RyaWdnZXItZGlzYWJsZWQnKSwgcmVhZE9ubHkgJiYgIWRpc2FibGVkICYmIGNsYXNzZXMoJ3RyaWdnZXItcmVhZG9ubHknKSkpO1xuICAgIGNvbnN0IGljb25TaXplID0gbm9ybWFsaXplZFNpemUgPT09ICdzbWFsbCcgPyAxNiA6IDIwO1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbklkID0gc2VhcmNoYWJsZSAmJiBpbm5lck9wZW4gJiYgYWN0aXZlSW5kZXggIT09IG51bGxcbiAgICAgICAgPyBgJHtvcHRpb25JZFByZWZpeH0tJHthY3RpdmVJbmRleH1gXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZsb2F0aW5nQXJpYUxhYmVsbGVkQnkgPSBhcmlhTGFiZWxsZWRCeSAhPT0gbnVsbCAmJiBhcmlhTGFiZWxsZWRCeSAhPT0gdm9pZCAwID8gYXJpYUxhYmVsbGVkQnkgOiAobGFiZWwgPyBsYWJlbElkIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkZXNjcmliZWRCeUlkcyA9IFtcbiAgICAgICAgZGVzY3JpcHRpb24gPyBkZXNjcmlwdGlvbklkIDogbnVsbCxcbiAgICAgICAgZmVlZGJhY2sgPyBmZWVkYmFja0lkIDogbnVsbCxcbiAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiAoX2pzeHMoU2VsZWN0RmllbGRTaGVsbCwgeyBjbGFzc2VzOiBjbGFzc2VzLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgc2l6ZTogbm9ybWFsaXplZFNpemUsIHZhcmlhbnQ6IHZhcmlhbnQsIHN0YXR1czogc3RhdHVzLCBkaXNhYmxlZDogZGlzYWJsZWQsIHJlYWRPbmx5OiByZWFkT25seSwgbG9hZGluZzogbG9hZGluZywgbGFiZWw6IGxhYmVsLCBpbmZvOiBpbmZvLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sIGZlZWRiYWNrOiBmZWVkYmFjaywgcmVxdWlyZWQ6IHJlcXVpcmVkLCBsYWJlbElkOiBsYWJlbElkLCBkZXNjcmlwdGlvbklkOiBkZXNjcmlwdGlvbklkLCBmZWVkYmFja0lkOiBmZWVkYmFja0lkLCBjaGlsZHJlbjogW19qc3hzKFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oe30sIGdldFJlZmVyZW5jZVByb3BzKHtcbiAgICAgICAgICAgICAgICByZWY6IHNldFJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICBpZDogdHJpZ2dlcklkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgJ2FyaWEtcmVhZG9ubHknOiByZWFkT25seSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0cmlnZ2VyQ2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgIG9uS2V5RG93bjogaGFuZGxlVHJpZ2dlcktleURvd24sXG4gICAgICAgICAgICAgICAgb25CbHVyOiBoYW5kbGVUcmlnZ2VyQmx1cixcbiAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogZmxvYXRpbmdBcmlhTGFiZWxsZWRCeSxcbiAgICAgICAgICAgICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGRlc2NyaWJlZEJ5SWRzLFxuICAgICAgICAgICAgfSksIHsgY2hpbGRyZW46IFtfanN4cyhcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2NvbnRlbnQnKSwgY2hpbGRyZW46IFtwcmVmaXggJiYgX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3ByZWZpeCcpLCBjaGlsZHJlbjogcHJlZml4IH0pLCBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcyh2YWx1ZUxhYmVsQ2xhc3MsIGpvaW5DbHMoY2xhc3NlcyhgJHt2YWx1ZUxhYmVsQ2xhc3N9LSR7bm9ybWFsaXplZFNpemV9YCksIGlzTXVsdGlwbGVWYWx1ZUZpbGxlZCAmJiBjbGFzc2VzKGAke3ZhbHVlTGFiZWxDbGFzc30tbXVsdGlwbGVgKSwgZGlzYWJsZWQgJiYgY2xhc3NlcyhgJHt2YWx1ZUxhYmVsQ2xhc3N9LWRpc2FibGVkYCkpKSwgY2hpbGRyZW46IF9qc3goU2VsZWN0VmFsdWVDb250ZW50LCB7IGNsYXNzZXM6IGNsYXNzZXMsIGhhc1NlbGVjdGlvbjogaGFzU2VsZWN0aW9uLCBtdWx0aXBsZTogbXVsdGlwbGUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgcmVuZGVyVmFsdWU6IHJlbmRlclZhbHVlLCByZW5kZXJWYWx1ZU1ldGE6IHJlbmRlclZhbHVlTWV0YSwgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsIG1heFZpc2libGVWYWx1ZXM6IG1heFZpc2libGVWYWx1ZXMsIG9uUmVtb3ZlOiBoYW5kbGVSZW1vdmVTZWxlY3RlZFZhbHVlLCBvblJlbW92ZUNsaWNrOiBoYW5kbGVUYWdSZW1vdmVDbGljaywgb25SZW1vdmVNb3VzZURvd246IGhhbmRsZVRhZ1JlbW92ZU1vdXNlRG93biB9KSB9KV0gfSksIF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdpY29uJyksIGNoaWxkcmVuOiBsb2FkaW5nID8gKF9qc3goU3Bpbm5lciwgeyBzaXplOiBpY29uU2l6ZSwgc3Ryb2tlV2lkdGg6IDIgfSkpIDogKF9qc3goSWNvbnMsIHsgbmFtZTogaW5uZXJPcGVuID8gJ2NoZXZyb25VcCcgOiAnY2hldnJvbkRvd24nLCBzaXplOiBpY29uU2l6ZSwgY29sb3I6IFwiY3VycmVudENvbG9yXCIgfSkpIH0pXSB9KSksIGlzTW91bnRlZCAmJiBpbnRlcmFjdGl2ZSAmJiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhbmVsTm9kZSA9IChfanN4KEZsb2F0aW5nRm9jdXNNYW5hZ2VyLCB7IGNvbnRleHQ6IGNvbnRleHQsIG1vZGFsOiBmYWxzZSwgaW5pdGlhbEZvY3VzOiAtMSwgcmV0dXJuRm9jdXM6IGZhbHNlLCBjaGlsZHJlbjogX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7fSwgZ2V0RmxvYXRpbmdQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY6IHNldEZsb2F0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBqb2luQ2xzKGNsYXNzZXMoJ3BhbmVsJyksIHBhbmVsQ2xhc3NOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZsb2F0aW5nU3R5bGVzKSwgdHJhbnNpdGlvblN0eWxlcyksXG4gICAgICAgICAgICAgICAgICAgIH0pLCB7IGNoaWxkcmVuOiBbc2VhcmNoYWJsZSAmJiAoX2pzeChTZWxlY3RTZWFyY2hDb250cm9sLCB7IHJlZjogc2V0U2VhcmNoSW5wdXRSZWYsIGNsYXNzZXM6IGNsYXNzZXMsIHNpemU6IG5vcm1hbGl6ZWRTaXplLCBwbGFjZWhvbGRlcjogc2VhcmNoUGxhY2Vob2xkZXIsIHZhbHVlOiBpbm5lclNlYXJjaFZhbHVlLCBhY3RpdmVEZXNjZW5kYW50OiBhY3RpdmVPcHRpb25JZCwgb25CbHVyOiBoYW5kbGVTZWFyY2hCbHVyLCBvbkNoYW5nZTogaGFuZGxlU2VhcmNoQ2hhbmdlLCBvbktleURvd246IGhhbmRsZVNlYXJjaEtleURvd24gfSkpLCBfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1ib2R5JyksIGNoaWxkcmVuOiB2aXNpYmxlRmxhdE9wdGlvbnMubGVuZ3RoID09PSAwID8gKF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2VtcHR5JyksIGNoaWxkcmVuOiBfanN4KFR5cG9ncmFwaHlCb2R5LCB7IHNpemU6IFNFTEVDVF9UWVBPR1JBUEhZLmVtcHR5LnNpemUsIGNvbG9yOiBTRUxFQ1RfVFlQT0dSQVBIWS5lbXB0eS5jb2xvciwgY2hpbGRyZW46IGVtcHR5Q29udGVudCB9KSB9KSkgOiAoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmbGF0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpc2libGVPcHRpb25Hcm91cHMubWFwKChncm91cCkgPT4gKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdncm91cCcpLCBjaGlsZHJlbjogW2dyb3VwLmxhYmVsICYmIChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdncm91cC1sYWJlbCcpLCBjaGlsZHJlbjogX2pzeChUeXBvZ3JhcGh5TGFiZWwsIHsgc2l6ZTogU0VMRUNUX1RZUE9HUkFQSFkuZ3JvdXBMYWJlbC5zaXplLCBzdHJvbmc6IHRydWUsIGNoaWxkcmVuOiBncm91cC5sYWJlbCB9KSB9KSksIGdyb3VwLm9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkZsYXRJbmRleCA9IGZsYXRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBpc09wdGlvblNlbGVjdGVkKGlubmVyVmFsdWUsIG11bHRpcGxlLCBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gYWN0aXZlSW5kZXggPT09IG9wdGlvbkZsYXRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbk1ldGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhIW9wdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogb3B0aW9uRmxhdEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW46IGlubmVyT3BlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0Q29udGVudFJlZi5jdXJyZW50W29wdGlvbkZsYXRJbmRleF0gPSBleHRyYWN0T3B0aW9uVGV4dChvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oe30sIGdldEl0ZW1Qcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFJlZi5jdXJyZW50W29wdGlvbkZsYXRJbmRleF0gPSBub2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGAke29wdGlvbklkUHJlZml4fS0ke29wdGlvbkZsYXRJbmRleH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6ICdvcHRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcygnb3B0aW9uJywgam9pbkNscyhhY3RpdmUgJiYgY2xhc3Nlcygnb3B0aW9uLWFjdGl2ZScpLCBzZWxlY3RlZCAmJiBjbGFzc2VzKCdvcHRpb24tc2VsZWN0ZWQnKSwgb3B0aW9uLmRpc2FibGVkICYmIGNsYXNzZXMoJ29wdGlvbi1kaXNhYmxlZCcpLCBvcHRpb25DbGFzc05hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogb3B0aW9uLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyOiAoKSA9PiBoYW5kbGVJdGVtTW91c2VFbnRlcihvcHRpb25GbGF0SW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQmx1cjogaGFuZGxlT3B0aW9uQmx1cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB7IGNoaWxkcmVuOiByZW5kZXJPcHRpb24gPyAocmVuZGVyT3B0aW9uKG9wdGlvbiwgb3B0aW9uTWV0YSkpIDogKF9qc3goU2VsZWN0T3B0aW9uQ29udGVudCwgeyBjbGFzc2VzOiBjbGFzc2VzLCBvcHRpb246IG9wdGlvbiwgc2VsZWN0ZWQ6IHNlbGVjdGVkLCBjb250ZW50OiByZW5kZXJPcHRpb25Db250ZW50ID09PSBudWxsIHx8IHJlbmRlck9wdGlvbkNvbnRlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlbmRlck9wdGlvbkNvbnRlbnQob3B0aW9uLCBvcHRpb25NZXRhKSB9KSkgfSksIGAke2dyb3VwLmtleX0tJHtvcHRpb24udmFsdWV9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV0gfSwgZ3JvdXAua2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpKSB9KSwgcGFuZWxGb290ZXIgIT0gbnVsbCAmJiAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtZm9vdGVyJyksIGNoaWxkcmVuOiBwYW5lbEZvb3RlciB9KSldIH0pKSB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvcnRhbCA/IF9qc3goRmxvYXRpbmdQb3J0YWwsIHsgY2hpbGRyZW46IHBhbmVsTm9kZSB9KSA6IHBhbmVsTm9kZTtcbiAgICAgICAgICAgIH0pKCldIH0pKTtcbn07XG5TZWxlY3QuZGlzcGxheU5hbWUgPSAnU2VsZWN0JztcbmV4cG9ydCBkZWZhdWx0IG1lbW8oU2VsZWN0KTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=