@projectcor/maia-components 2.11.11-0 → 2.11.11-1

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,4 +1,7 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
1
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
5
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
3
6
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
7
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -18,7 +21,7 @@ import { Attach } from '@projectcor/icons/lib/components/Attach';
18
21
  import { Globe } from '@projectcor/icons/lib/components/Globe';
19
22
  import { Trash } from '@projectcor/icons/lib/components/Trash';
20
23
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
21
- import { SCMIAttachment, SCMIAttachmentDeleteIcon, SCMIWrapperAttachmentButton, SCMIWrapperWebSearchButton, SCMIWrapperDeepSearchButton, StyledMAIAInput, StyledMAIAInputButtons, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
24
+ import { SCMIAttachment, SCMIAttachmentDeleteIcon, SCMIContextDropdown, SCMIContextDropdownTitle, SCMIContextMainList, SCMISubContextDropdown, SCMISubContextSearch, SCMISubContextOption, SCMISubContextLoader, SCMIInlineContextClear, SCMIInlineContextPreview, SCMIInlineContextText, SCMIInlineTaskLink, SCMIContextOption, SCMIContextOptionSubtitle, SCMIContextOptionTitle, SCMIWrapperAttachmentButton, SCMIWrapperWebSearchButton, SCMIWrapperDeepSearchButton, StyledMAIAInput, StyledMAIAInputButtons, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
22
25
  import { useGlobalContext } from '../../../context/global-context';
23
26
  import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
24
27
  import { useT } from '../../../hooks/useT';
@@ -26,6 +29,8 @@ import { validateIsMaia } from '../../../services/utils/validateIsMaia';
26
29
  import { TelescopeIcon } from '../icons/TelescopeIcon';
27
30
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
28
31
  import { allowedFileTypes, fileTypes } from '../../../constants/formatExtensions';
32
+ import { getProjectTasks } from '../../../services/cor/getProjectTasks';
33
+ import { useFrequentlyUsedActions } from '../../../hooks/useFrequentlyUsedActions';
29
34
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
30
35
  export var MAIAInput = function MAIAInput(_ref) {
31
36
  var onSendMessage = _ref.onSendMessage,
@@ -45,7 +50,8 @@ export var MAIAInput = function MAIAInput(_ref) {
45
50
  chatId = _ref.chatId,
46
51
  newChatKey = _ref.newChatKey;
47
52
  var _useT = useT(),
48
- t = _useT.t;
53
+ t = _useT.t,
54
+ i18n = _useT.i18n;
49
55
  var inputRef = useRef(null);
50
56
  var fileInputRef = useRef(null);
51
57
  var wrapperRef = useRef(null);
@@ -61,22 +67,68 @@ export var MAIAInput = function MAIAInput(_ref) {
61
67
  _useState6 = _slicedToArray(_useState5, 2),
62
68
  isFocused = _useState6[0],
63
69
  setIsFocused = _useState6[1];
64
- var _useState7 = useState({
70
+ var _useState7 = useState(null),
71
+ _useState8 = _slicedToArray(_useState7, 2),
72
+ contextPrompt = _useState8[0],
73
+ setContextPrompt = _useState8[1];
74
+ var _useState9 = useState(null),
75
+ _useState0 = _slicedToArray(_useState9, 2),
76
+ selectedContextTask = _useState0[0],
77
+ setSelectedContextTask = _useState0[1];
78
+ var _useState1 = useState(false),
79
+ _useState10 = _slicedToArray(_useState1, 2),
80
+ showSlashDropdown = _useState10[0],
81
+ setShowSlashDropdown = _useState10[1];
82
+ var _useState11 = useState({
65
83
  isOpen: false,
66
84
  excludedFiles: [],
67
85
  exceededFiles: [],
68
86
  fileSizes: {}
69
87
  }),
70
- _useState8 = _slicedToArray(_useState7, 2),
71
- modalProps = _useState8[0],
72
- setModalProps = _useState8[1];
88
+ _useState12 = _slicedToArray(_useState11, 2),
89
+ modalProps = _useState12[0],
90
+ setModalProps = _useState12[1];
91
+ var _useState13 = useState(null),
92
+ _useState14 = _slicedToArray(_useState13, 2),
93
+ hoveredAction = _useState14[0],
94
+ setHoveredAction = _useState14[1];
95
+ var _useState15 = useState([]),
96
+ _useState16 = _slicedToArray(_useState15, 2),
97
+ subTasks = _useState16[0],
98
+ setSubTasks = _useState16[1];
99
+ var _useState17 = useState(false),
100
+ _useState18 = _slicedToArray(_useState17, 2),
101
+ subHasMore = _useState18[0],
102
+ setSubHasMore = _useState18[1];
103
+ var _useState19 = useState(false),
104
+ _useState20 = _slicedToArray(_useState19, 2),
105
+ subLoading = _useState20[0],
106
+ setSubLoading = _useState20[1];
107
+ var _useState21 = useState(''),
108
+ _useState22 = _slicedToArray(_useState21, 2),
109
+ subSearch = _useState22[0],
110
+ setSubSearch = _useState22[1];
111
+ var _useState23 = useState(0),
112
+ _useState24 = _slicedToArray(_useState23, 2),
113
+ subOffset = _useState24[0],
114
+ setSubOffset = _useState24[1];
115
+ var hideSubTimerRef = useRef(null);
116
+ var loadSubTimerRef = useRef(null);
117
+ var searchDebounceRef = useRef(null);
118
+ var abortControllerRef = useRef(null);
119
+ var subTasksCacheRef = useRef({});
73
120
  var eventAmplitude = useEvent();
121
+ var _useFrequentlyUsedAct = useFrequentlyUsedActions(),
122
+ slashActions = _useFrequentlyUsedAct.actions,
123
+ handleGetFrequentlyUsedActions = _useFrequentlyUsedAct.handleGetFrequentlyUsedActions;
74
124
  var _useGlobalContext = useGlobalContext(),
75
125
  toggleWebSearch = _useGlobalContext.toggleWebSearch,
76
126
  isWebSearchActive = _useGlobalContext.isWebSearchActive,
77
127
  toggleDeepSearch = _useGlobalContext.toggleDeepSearch,
78
128
  isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
79
- agent = _useGlobalContext.agent;
129
+ agent = _useGlobalContext.agent,
130
+ project = _useGlobalContext.project,
131
+ chipsProject = _useGlobalContext.chipsProject;
80
132
  // Inicializar las referencias como undefined para detectar el primer cambio correctamente
81
133
  var previousAgentIdRef = useRef(undefined);
82
134
  var previousChatIdRef = useRef(undefined);
@@ -202,6 +254,31 @@ export var MAIAInput = function MAIAInput(_ref) {
202
254
  textarea.style.maxHeight = previousMaxHeight || '122.1px';
203
255
  textarea.style.height = "".concat(newHeight, "px");
204
256
  };
257
+ var updateTextareaValue = function updateTextareaValue(nextValue) {
258
+ if (inputRef.current) {
259
+ inputRef.current.value = nextValue;
260
+ }
261
+ setValueTextarea(nextValue);
262
+ setIsDisabled(nextValue.trim().length === 0 && attachments.length === 0);
263
+ handleResize();
264
+ };
265
+ var buildContextMessage = function buildContextMessage(task, prompt) {
266
+ var resolvedPrompt = prompt || contextPrompt || '';
267
+ return "".concat(resolvedPrompt, " de la tarea ").concat(task.id, " - ").concat(task.title);
268
+ };
269
+ var canUseSlashCommands = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone';
270
+ var lang = i18n.language === 'br' ? 'pt' : i18n.language;
271
+ var actionNeedsSubgroup = function actionNeedsSubgroup(action) {
272
+ return !/^(crear|create|criar|créer)\b/i.test(action.title);
273
+ };
274
+ useEffect(function () {
275
+ if (agent !== null && agent !== void 0 && agent.id && canUseSlashCommands) {
276
+ handleGetFrequentlyUsedActions({
277
+ agentId: agent.id,
278
+ lang: lang
279
+ });
280
+ }
281
+ }, [agent === null || agent === void 0 ? void 0 : agent.id, canUseSlashCommands, handleGetFrequentlyUsedActions, lang]);
205
282
  useEffect(function () {
206
283
  if (inputRef.current && !disabled) {
207
284
  inputRef.current.focus();
@@ -243,6 +320,9 @@ export var MAIAInput = function MAIAInput(_ref) {
243
320
  var handleSessionChange = function handleSessionChange() {
244
321
  setValueTextarea('');
245
322
  setIsDisabled(true);
323
+ setContextPrompt(null);
324
+ setSelectedContextTask(null);
325
+ setShowSlashDropdown(false);
246
326
  if (inputRef.current) {
247
327
  inputRef.current.value = '';
248
328
  }
@@ -261,24 +341,43 @@ export var MAIAInput = function MAIAInput(_ref) {
261
341
  return cancelAnimationFrame(animationFrameId);
262
342
  };
263
343
  }, [valueTextarea]);
344
+ useEffect(function () {
345
+ return function () {
346
+ if (loadSubTimerRef.current) clearTimeout(loadSubTimerRef.current);
347
+ if (hideSubTimerRef.current) clearTimeout(hideSubTimerRef.current);
348
+ if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);
349
+ if (abortControllerRef.current) abortControllerRef.current.abort();
350
+ };
351
+ }, []);
264
352
  useEffect(function () {
265
353
  var hasText = valueTextarea.trim().length > 0;
266
354
  var hasAttachments = attachments.length > 0;
267
- setIsDisabled(!hasText && !hasAttachments);
268
- }, [attachments, valueTextarea]);
355
+ var hasOnlySlashCommandTrigger = canUseSlashCommands && valueTextarea.trim() === '/';
356
+ setIsDisabled(!hasText && !hasAttachments && !selectedContextTask || hasOnlySlashCommandTrigger);
357
+ }, [attachments, canUseSlashCommands, selectedContextTask, valueTextarea]);
269
358
  var handleSendMessage = function handleSendMessage() {
359
+ var _inputRef$current;
360
+ var composedContextMessage = selectedContextTask ? buildContextMessage(selectedContextTask) : '';
361
+ var textValue = ((_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.value) || '';
362
+ var finalMessage = composedContextMessage || textValue;
270
363
  if (inputRef.current) {
271
- onSendMessage(inputRef.current.value, attachments);
364
+ onSendMessage(finalMessage, attachments);
272
365
  inputRef.current.value = '';
273
366
  setValueTextarea('');
274
367
  setIsDisabled(true);
368
+ setContextPrompt(null);
369
+ setSelectedContextTask(null);
370
+ setShowSlashDropdown(false);
275
371
  handleResize();
276
372
  return;
277
373
  }
278
374
  if (attachments.length) {
279
- onSendMessage('', attachments);
375
+ onSendMessage(finalMessage, attachments);
280
376
  setValueTextarea('');
281
377
  setIsDisabled(true);
378
+ setContextPrompt(null);
379
+ setSelectedContextTask(null);
380
+ setShowSlashDropdown(false);
282
381
  }
283
382
  };
284
383
  var handleKeyDown = function handleKeyDown(e) {
@@ -292,19 +391,25 @@ export var MAIAInput = function MAIAInput(_ref) {
292
391
  var handleChange = function handleChange(e) {
293
392
  var hasText = e.target.value.trim().length > 0;
294
393
  var hasAttachments = attachments.length > 0;
295
- setIsDisabled(!hasText && !hasAttachments);
394
+ setIsDisabled(!hasText && !hasAttachments && !selectedContextTask);
296
395
  setValueTextarea(e.target.value);
396
+ if (canUseSlashCommands && e.target.value.trim() === '/') {
397
+ setShowSlashDropdown(true);
398
+ } else {
399
+ if (showSlashDropdown) subTasksCacheRef.current = {};
400
+ setShowSlashDropdown(false);
401
+ }
297
402
  onChange === null || onChange === void 0 || onChange();
298
403
  };
299
404
  var handlePaste = function handlePaste() {
300
405
  setTimeout(function () {
301
- var _inputRef$current$val, _inputRef$current;
406
+ var _inputRef$current$val, _inputRef$current2;
302
407
  handleResize();
303
- var currentValue = (_inputRef$current$val = (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.value) !== null && _inputRef$current$val !== void 0 ? _inputRef$current$val : '';
408
+ var currentValue = (_inputRef$current$val = (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.value) !== null && _inputRef$current$val !== void 0 ? _inputRef$current$val : '';
304
409
  var hasText = currentValue.trim().length > 0;
305
410
  var hasAttachments = attachments.length > 0;
306
411
  setValueTextarea(currentValue);
307
- setIsDisabled(!hasText && !hasAttachments);
412
+ setIsDisabled(!hasText && !hasAttachments && !selectedContextTask);
308
413
  }, 10);
309
414
  };
310
415
  var handleFileSelect = function handleFileSelect(e) {
@@ -403,7 +508,7 @@ export var MAIAInput = function MAIAInput(_ref) {
403
508
  var handleBlur = function handleBlur() {
404
509
  var hasText = valueTextarea.trim().length > 0;
405
510
  var hasAttachments = attachments.length > 0;
406
- setIsDisabled(!hasText && !hasAttachments);
511
+ setIsDisabled(!hasText && !hasAttachments && !selectedContextTask);
407
512
  };
408
513
  var handleWrapperFocus = function handleWrapperFocus() {
409
514
  return setIsFocused(true);
@@ -413,6 +518,8 @@ export var MAIAInput = function MAIAInput(_ref) {
413
518
  var _wrapperRef$current;
414
519
  if (!((_wrapperRef$current = wrapperRef.current) !== null && _wrapperRef$current !== void 0 && _wrapperRef$current.contains(document.activeElement))) {
415
520
  setIsFocused(false);
521
+ setShowSlashDropdown(false);
522
+ subTasksCacheRef.current = {};
416
523
  }
417
524
  }, 0);
418
525
  };
@@ -420,6 +527,180 @@ export var MAIAInput = function MAIAInput(_ref) {
420
527
  eventAmplitude(EVENTS.aiChatStopResponse);
421
528
  onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
422
529
  };
530
+ var loadSubTasks = /*#__PURE__*/function () {
531
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(projectId, signal, actionId, title) {
532
+ var offset,
533
+ result,
534
+ _args = arguments,
535
+ _t;
536
+ return _regeneratorRuntime.wrap(function (_context) {
537
+ while (1) switch (_context.prev = _context.next) {
538
+ case 0:
539
+ offset = _args.length > 4 && _args[4] !== undefined ? _args[4] : 0;
540
+ setSubLoading(true);
541
+ _context.prev = 1;
542
+ _context.next = 2;
543
+ return getProjectTasks(projectId, signal, title, offset);
544
+ case 2:
545
+ result = _context.sent;
546
+ if (actionId && !title && offset === 0) {
547
+ subTasksCacheRef.current[actionId] = {
548
+ tasks: result.tasks,
549
+ hasMore: result.hasMore
550
+ };
551
+ }
552
+ if (offset > 0) {
553
+ setSubTasks(function (prev) {
554
+ return [].concat(_toConsumableArray(prev), _toConsumableArray(result.tasks));
555
+ });
556
+ } else {
557
+ setSubTasks(result.tasks);
558
+ }
559
+ setSubHasMore(result.hasMore);
560
+ setSubOffset(offset + result.tasks.length);
561
+ _context.next = 5;
562
+ break;
563
+ case 3:
564
+ _context.prev = 3;
565
+ _t = _context["catch"](1);
566
+ if (!(_t instanceof Error && _t.name === 'AbortError')) {
567
+ _context.next = 4;
568
+ break;
569
+ }
570
+ return _context.abrupt("return");
571
+ case 4:
572
+ if (offset === 0) setSubTasks([]);
573
+ case 5:
574
+ _context.prev = 5;
575
+ setSubLoading(false);
576
+ return _context.finish(5);
577
+ case 6:
578
+ case "end":
579
+ return _context.stop();
580
+ }
581
+ }, _callee, null, [[1, 3, 5, 6]]);
582
+ }));
583
+ return function loadSubTasks(_x, _x2, _x3, _x4) {
584
+ return _ref2.apply(this, arguments);
585
+ };
586
+ }();
587
+ var handleActionMouseEnter = function handleActionMouseEnter(action) {
588
+ if (hideSubTimerRef.current) clearTimeout(hideSubTimerRef.current);
589
+ if (loadSubTimerRef.current) clearTimeout(loadSubTimerRef.current);
590
+ if (abortControllerRef.current) abortControllerRef.current.abort();
591
+ if (!actionNeedsSubgroup(action)) {
592
+ setHoveredAction(null);
593
+ setSubTasks([]);
594
+ setSubSearch('');
595
+ return;
596
+ }
597
+ setHoveredAction(action);
598
+ setSubSearch('');
599
+ setSubOffset(0);
600
+ var cached = subTasksCacheRef.current[action.id];
601
+ if (cached) {
602
+ setSubTasks(cached.tasks);
603
+ setSubHasMore(cached.hasMore);
604
+ setSubOffset(cached.tasks.length);
605
+ return;
606
+ }
607
+
608
+ // Keep previous tasks visible while loading to avoid layout shifts (flickering).
609
+ // loadSubTasks (offset=0) will replace them when new results arrive.
610
+ setSubHasMore(false);
611
+ loadSubTimerRef.current = setTimeout(function () {
612
+ var _chipsProject$project;
613
+ var projectId = (project === null || project === void 0 ? void 0 : project.id) != null ? String(project.id) : (_chipsProject$project = chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId) !== null && _chipsProject$project !== void 0 ? _chipsProject$project : '';
614
+ if (!projectId) return;
615
+ var controller = new AbortController();
616
+ abortControllerRef.current = controller;
617
+ void loadSubTasks(projectId, controller.signal, action.id);
618
+ }, 300);
619
+ };
620
+ var handleActionMouseLeave = function handleActionMouseLeave() {
621
+ if (loadSubTimerRef.current) clearTimeout(loadSubTimerRef.current);
622
+ if (abortControllerRef.current) abortControllerRef.current.abort();
623
+ hideSubTimerRef.current = setTimeout(function () {
624
+ setHoveredAction(null);
625
+ setSubTasks([]);
626
+ }, 150);
627
+ };
628
+ var handleSubMouseEnter = function handleSubMouseEnter() {
629
+ if (hideSubTimerRef.current) clearTimeout(hideSubTimerRef.current);
630
+ };
631
+ var handleSubMouseLeave = function handleSubMouseLeave() {
632
+ hideSubTimerRef.current = setTimeout(function () {
633
+ setHoveredAction(null);
634
+ setSubTasks([]);
635
+ }, 150);
636
+ };
637
+ var handleSubScroll = function handleSubScroll(e) {
638
+ if (subLoading || !subHasMore) return;
639
+ var _e$currentTarget = e.currentTarget,
640
+ scrollTop = _e$currentTarget.scrollTop,
641
+ scrollHeight = _e$currentTarget.scrollHeight,
642
+ clientHeight = _e$currentTarget.clientHeight;
643
+ if (scrollHeight - scrollTop - clientHeight < 50) {
644
+ var _chipsProject$project2;
645
+ var projectId = (project === null || project === void 0 ? void 0 : project.id) != null ? String(project.id) : (_chipsProject$project2 = chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId) !== null && _chipsProject$project2 !== void 0 ? _chipsProject$project2 : '';
646
+ if (!projectId) return;
647
+ var controller = new AbortController();
648
+ abortControllerRef.current = controller;
649
+ void loadSubTasks(projectId, controller.signal, undefined, subSearch.trim() || undefined, subOffset);
650
+ }
651
+ };
652
+ var handleSubSearchChange = function handleSubSearchChange(e) {
653
+ var value = e.target.value;
654
+ setSubSearch(value);
655
+ if (searchDebounceRef.current) clearTimeout(searchDebounceRef.current);
656
+ if (abortControllerRef.current) abortControllerRef.current.abort();
657
+ setSubOffset(0);
658
+ if (!value.trim() && hoveredAction) {
659
+ var cached = subTasksCacheRef.current[hoveredAction.id];
660
+ if (cached) {
661
+ setSubTasks(cached.tasks);
662
+ setSubHasMore(cached.hasMore);
663
+ setSubOffset(cached.tasks.length);
664
+ return;
665
+ }
666
+ }
667
+ searchDebounceRef.current = setTimeout(function () {
668
+ var _chipsProject$project3;
669
+ var projectId = (project === null || project === void 0 ? void 0 : project.id) != null ? String(project.id) : (_chipsProject$project3 = chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId) !== null && _chipsProject$project3 !== void 0 ? _chipsProject$project3 : '';
670
+ if (!projectId) return;
671
+ var controller = new AbortController();
672
+ abortControllerRef.current = controller;
673
+ void loadSubTasks(projectId, controller.signal, undefined, value.trim() || undefined, 0);
674
+ }, 500);
675
+ };
676
+ var handleClearContextTask = function handleClearContextTask() {
677
+ setSelectedContextTask(null);
678
+ setContextPrompt(null);
679
+ setIsDisabled(valueTextarea.trim().length === 0 && attachments.length === 0);
680
+ if (inputRef.current && !disabled) {
681
+ inputRef.current.focus();
682
+ }
683
+ };
684
+ var handleSubTaskSelect = function handleSubTaskSelect(task) {
685
+ if (!hoveredAction) return;
686
+ setContextPrompt(hoveredAction.prompt);
687
+ setSelectedContextTask(task);
688
+ setShowSlashDropdown(false);
689
+ setHoveredAction(null);
690
+ setSubTasks([]);
691
+ updateTextareaValue('');
692
+ setIsDisabled(false);
693
+ if (inputRef.current && !disabled) {
694
+ inputRef.current.focus();
695
+ }
696
+ };
697
+ var handleSlashActionSelect = function handleSlashActionSelect(action) {
698
+ updateTextareaValue(action.prompt);
699
+ setShowSlashDropdown(false);
700
+ if (inputRef.current && !disabled) {
701
+ inputRef.current.focus();
702
+ }
703
+ };
423
704
  var isMAIA = validateIsMaia(agent);
424
705
  var hasHeaderButtons = !isMAIA;
425
706
  var iconColorInactive = isFocused ? '#666666' : '#999';
@@ -431,7 +712,59 @@ export var MAIAInput = function MAIAInput(_ref) {
431
712
  hasAttachments: !!attachments.length,
432
713
  onFocus: handleWrapperFocus,
433
714
  onBlur: handleWrapperBlur,
434
- children: [!!attachments.length && /*#__PURE__*/_jsx("div", {
715
+ children: [showSlashDropdown && /*#__PURE__*/_jsxs(SCMIContextDropdown, {
716
+ $hasSubgroup: !!hoveredAction,
717
+ children: [/*#__PURE__*/_jsxs(SCMIContextMainList, {
718
+ children: [/*#__PURE__*/_jsx(SCMIContextDropdownTitle, {
719
+ children: "/"
720
+ }), slashActions.map(function (action) {
721
+ return /*#__PURE__*/_jsxs(SCMIContextOption, {
722
+ type: "button",
723
+ onClick: function onClick() {
724
+ return handleSlashActionSelect(action);
725
+ },
726
+ onMouseEnter: function onMouseEnter() {
727
+ return handleActionMouseEnter(action);
728
+ },
729
+ onMouseLeave: handleActionMouseLeave,
730
+ children: [/*#__PURE__*/_jsx(SCMIContextOptionTitle, {
731
+ children: action.title
732
+ }), /*#__PURE__*/_jsx(SCMIContextOptionSubtitle, {
733
+ children: action.subtitle || action.prompt
734
+ })]
735
+ }, action.id);
736
+ })]
737
+ }), !!hoveredAction && /*#__PURE__*/_jsxs(SCMISubContextDropdown, {
738
+ onMouseEnter: handleSubMouseEnter,
739
+ onMouseLeave: handleSubMouseLeave,
740
+ onScroll: handleSubScroll,
741
+ children: [/*#__PURE__*/_jsx(SCMIContextDropdownTitle, {
742
+ children: t('chat.slashCommands.selectTask')
743
+ }), /*#__PURE__*/_jsx(SCMISubContextSearch, {
744
+ type: "text",
745
+ placeholder: t('chat.slashCommands.searchPlaceholder'),
746
+ value: subSearch,
747
+ onChange: handleSubSearchChange,
748
+ autoComplete: "off"
749
+ }), subTasks.map(function (task) {
750
+ return /*#__PURE__*/_jsxs(SCMISubContextOption, {
751
+ type: "button",
752
+ onClick: function onClick() {
753
+ return handleSubTaskSelect(task);
754
+ },
755
+ children: [/*#__PURE__*/_jsx(SCMIContextOptionTitle, {
756
+ children: task.title
757
+ }), /*#__PURE__*/_jsx(SCMIContextOptionSubtitle, {
758
+ children: task.id
759
+ })]
760
+ }, task.id);
761
+ }), subLoading && /*#__PURE__*/_jsx(SCMISubContextLoader, {
762
+ children: t('chat.slashCommands.loading')
763
+ }), !subLoading && subTasks.length === 0 && /*#__PURE__*/_jsx(SCMISubContextLoader, {
764
+ children: t('chat.slashCommands.noActiveTasks')
765
+ })]
766
+ })]
767
+ }), !!attachments.length && /*#__PURE__*/_jsx("div", {
435
768
  style: {
436
769
  display: 'flex',
437
770
  gap: '12px',
@@ -461,6 +794,18 @@ export var MAIAInput = function MAIAInput(_ref) {
461
794
  })
462
795
  }, "".concat(index, "-").concat(attachment.name));
463
796
  })
797
+ }), !!selectedContextTask && !!contextPrompt && /*#__PURE__*/_jsxs(SCMIInlineContextPreview, {
798
+ children: [/*#__PURE__*/_jsxs(SCMIInlineContextText, {
799
+ children: [contextPrompt, " de la tarea"]
800
+ }), /*#__PURE__*/_jsxs(SCMIInlineTaskLink, {
801
+ href: "".concat(window.location.origin, "/tasks/").concat(selectedContextTask.id, "/detail"),
802
+ children: [selectedContextTask.id, " ", selectedContextTask.title]
803
+ }), /*#__PURE__*/_jsx(SCMIInlineContextClear, {
804
+ type: "button",
805
+ "aria-label": t('chat.slashCommands.clearTask'),
806
+ onClick: handleClearContextTask,
807
+ children: "\u2715"
808
+ })]
464
809
  }), /*#__PURE__*/_jsx(StyledMAIAInput, {
465
810
  ref: inputRef,
466
811
  disabled: disabled,
@@ -562,4 +907,4 @@ export var MAIAInput = function MAIAInput(_ref) {
562
907
  })]
563
908
  });
564
909
  };
565
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlBhcGVyUGxhbmUiLCJBdHRhY2giLCJHbG9iZSIsIlRyYXNoIiwiVG9vbHRpcCIsIlNDTUlBdHRhY2htZW50IiwiU0NNSUF0dGFjaG1lbnREZWxldGVJY29uIiwiU0NNSVdyYXBwZXJBdHRhY2htZW50QnV0dG9uIiwiU0NNSVdyYXBwZXJXZWJTZWFyY2hCdXR0b24iLCJTQ01JV3JhcHBlckRlZXBTZWFyY2hCdXR0b24iLCJTdHlsZWRNQUlBSW5wdXQiLCJTdHlsZWRNQUlBSW5wdXRCdXR0b25zIiwiU3R5bGVkTUFJQUlucHV0V3JhcHBlciIsIlN0eWxlZE1BSUFTZW5kQnV0dG9uIiwiU3R5bGVkTUFJQVN0b3BCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEljb24iLCJ1c2VHbG9iYWxDb250ZXh0IiwiTW9kYWxGaWxlRXhjZWVkcyIsInVzZVQiLCJ2YWxpZGF0ZUlzTWFpYSIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZXMiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJNQUlBSW5wdXQiLCJfcmVmIiwib25TZW5kTWVzc2FnZSIsImNsYXNzTmFtZSIsImRpc2FibGVkIiwiaXNTdHJlYW1pbmciLCJpc1dyaXRpbmciLCJvblN0b3BHZW5lcmF0aW9uIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIl9yZWYkYWxpZ25CdXR0b25zIiwiYWxpZ25CdXR0b25zIiwib25GaWxlQXR0YWNoIiwib25EZWxldGVBdHRhY2htZW50IiwiX3JlZiRhdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwiY2hhdElkIiwibmV3Q2hhdEtleSIsIl91c2VUIiwidCIsImlucHV0UmVmIiwiZmlsZUlucHV0UmVmIiwid3JhcHBlclJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlVGV4dGFyZWEiLCJzZXRWYWx1ZVRleHRhcmVhIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0Rpc2FibGVkIiwic2V0SXNEaXNhYmxlZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNGb2N1c2VkIiwic2V0SXNGb2N1c2VkIiwiX3VzZVN0YXRlNyIsImlzT3BlbiIsImV4Y2x1ZGVkRmlsZXMiLCJleGNlZWRlZEZpbGVzIiwiZmlsZVNpemVzIiwiX3VzZVN0YXRlOCIsIm1vZGFsUHJvcHMiLCJzZXRNb2RhbFByb3BzIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwidG9nZ2xlRGVlcFNlYXJjaCIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwicHJldmlvdXNBZ2VudElkUmVmIiwidW5kZWZpbmVkIiwicHJldmlvdXNDaGF0SWRSZWYiLCJwcmV2aW91c05ld0NoYXRLZXlSZWYiLCJoYW5kbGVXZWJTZWFyY2hUb2dnbGUiLCJhaUNoYXRUb29scyIsIm9wdGlvbiIsImhhbmRsZURlZXBTZWFyY2hUb2dnbGUiLCJoYW5kbGVSZXNpemUiLCJ0ZXh0YXJlYSIsImN1cnJlbnQiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJwcmV2aW91c01pbkhlaWdodCIsInN0eWxlIiwicHJldmlvdXNNYXhIZWlnaHQiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJjb21wdXRlZFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImxpbmVIZWlnaHQiLCJwYXJzZUZsb2F0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJib3JkZXJUb3AiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbSIsImJvcmRlckJvdHRvbVdpZHRoIiwic2luZ2xlTGluZUhlaWdodCIsImlzRW1wdHkiLCJ2YWx1ZSIsInRyaW0iLCJoYXNNdWx0aXBsZVZpc3VhbExpbmVzIiwiY2FudmFzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29udGV4dCIsImdldENvbnRleHQiLCJ0ZXh0YXJlYVN0eWxlcyIsImZvbnQiLCJjb25jYXQiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJmb250RmFtaWx5IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwidGV4dGFyZWFXaWR0aCIsIm9mZnNldFdpZHRoIiwidGV4dCIsImxpbmVzIiwic3BsaXQiLCJsZW5ndGgiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwibGluZSIsInRleHRXaWR0aCIsIm1lYXN1cmVUZXh0Iiwid2lkdGgiLCJlcnIiLCJlIiwiZiIsIm5ld0hlaWdodCIsIk1hdGgiLCJtaW4iLCJtYXgiLCJmb2N1cyIsImFnZW50Q2hhbmdlZCIsImlkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJzZXRUaW1lb3V0IiwiaGFuZGxlU2Vzc2lvbkNoYW5nZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYW5pbWF0aW9uRnJhbWVJZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaGFzVGV4dCIsImhhc0F0dGFjaG1lbnRzIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJoYW5kbGVLZXlEb3duIiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZUNoYW5nZSIsInRhcmdldCIsImhhbmRsZVBhc3RlIiwiX2lucHV0UmVmJGN1cnJlbnQkdmFsIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJjdXJyZW50VmFsdWUiLCJoYW5kbGVGaWxlU2VsZWN0IiwiZmlsZXMiLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpbmNsdWRlcyIsImlzT2xkRm9ybWF0IiwiaXNBdWRpb0Zvcm1hdCIsIkFycmF5IiwiZnJvbSIsImZvckVhY2giLCJmaWxlIiwiX2ZpbGVOYW1lUGFydHMkcG9wIiwiZXhjbHVkZWRGaWxlIiwiZmlsZU5hbWVQYXJ0cyIsIm5hbWUiLCJmaWxlRXh0ZW5zaW9uIiwicG9wIiwidG9Mb3dlckNhc2UiLCJzaXplIiwicHVzaCIsInR5cGVGaWxlIiwidHlwZSIsInBhcnNlZEZpbGUiLCJGaWxlIiwiaGFuZGxlQXR0YWNoQ2xpY2siLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVCbHVyIiwiaGFuZGxlV3JhcHBlckZvY3VzIiwiaGFuZGxlV3JhcHBlckJsdXIiLCJfd3JhcHBlclJlZiRjdXJyZW50IiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJpc01BSUEiLCJoYXNIZWFkZXJCdXR0b25zIiwiaWNvbkNvbG9ySW5hY3RpdmUiLCJjaGlsZHJlbiIsInJlZiIsIm9uRm9jdXMiLCJvbkJsdXIiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwidGl0bGUiLCJpY29uIiwib25DbGljayIsImNvbG9yIiwib25LZXlEb3duIiwib25QYXN0ZSIsImlzTWF4aW1pemVkIiwiJGlzRm9jdXNlZCIsImlzQWN0aXZlIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJvbkNsb3NlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWxvbmVseS1pZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEtleWJvYXJkRXZlbnQsIFJlYWN0Tm9kZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBQYXBlclBsYW5lIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGFwZXJQbGFuZSdcbmltcG9ydCB7IEF0dGFjaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0F0dGFjaCdcbmltcG9ydCB7IEdsb2JlIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvR2xvYmUnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuXG5pbXBvcnQge1xuICBTQ01JQXR0YWNobWVudCxcbiAgU0NNSUF0dGFjaG1lbnREZWxldGVJY29uLFxuICBTQ01JV3JhcHBlckF0dGFjaG1lbnRCdXR0b24sXG4gIFNDTUlXcmFwcGVyV2ViU2VhcmNoQnV0dG9uLFxuICBTQ01JV3JhcHBlckRlZXBTZWFyY2hCdXR0b24sXG4gIFN0eWxlZE1BSUFJbnB1dCxcbiAgU3R5bGVkTUFJQUlucHV0QnV0dG9ucyxcbiAgU3R5bGVkTUFJQUlucHV0V3JhcHBlcixcbiAgU3R5bGVkTUFJQVNlbmRCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wQnV0dG9uLFxuICBTdHlsZWRNQUlBU3RvcEljb24sXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBNb2RhbEZpbGVFeGNlZWRzIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL01vZGFsRmlsZUV4Y2VlZHMnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgVGVsZXNjb3BlSWNvbiB9IGZyb20gJy4uL2ljb25zL1RlbGVzY29wZUljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBhbGxvd2VkRmlsZVR5cGVzLCBmaWxlVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcblxudHlwZSBBdHRhY2htZW50RmlsZSA9IHtcbiAgZmlsZTogRmlsZVxuICBvcmlnaW5hbEZpbGU/OiBGaWxlXG4gIGlkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNpemU6IG51bWJlclxuICB0eXBlOiBzdHJpbmdcbiAgaWNvbj86IFJlYWN0Tm9kZVxufVxuXG50eXBlIE1BSUFJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2VuZE1lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcsIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCkgPT4gdm9pZFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3Qgd3JhcHBlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW3ZhbHVlVGV4dGFyZWEsIHNldFZhbHVlVGV4dGFyZWFdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc0Rpc2FibGVkLCBzZXRJc0Rpc2FibGVkXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsUHJvcHMsIHNldE1vZGFsUHJvcHNdID0gdXNlU3RhdGUoe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXhjbHVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZXhjZWVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZmlsZVNpemVzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICB9KVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyB0b2dnbGVXZWJTZWFyY2gsIGlzV2ViU2VhcmNoQWN0aXZlLCB0b2dnbGVEZWVwU2VhcmNoLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgLy8gSW5pY2lhbGl6YXIgbGFzIHJlZmVyZW5jaWFzIGNvbW8gdW5kZWZpbmVkIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGNhbWJpbyBjb3JyZWN0YW1lbnRlXG4gIGNvbnN0IHByZXZpb3VzQWdlbnRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTmV3Q2hhdEtleVJlZiA9IHVzZVJlZjxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBjb25zdCBoYW5kbGVXZWJTZWFyY2hUb2dnbGUgPSAoKSA9PiB7XG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7IG9wdGlvbjogJ3NlYXJjaCcgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWVwU2VhcmNoVG9nZ2xlID0gKCkgPT4ge1xuICAgIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgaWYgKCFpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywgeyBvcHRpb246ICdkZWVwX3NlYXJjaCcgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSBpbnB1dFJlZi5jdXJyZW50XG4gICAgaWYgKCF0ZXh0YXJlYSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQWx0dXJhIG3DrW5pbWEgZXF1aXZhbGVudGUgYSB1bmEgbMOtbmVhXG4gICAgY29uc3QgbWluSGVpZ2h0ID0gMjIuMVxuICAgIGNvbnN0IG1heEhlaWdodCA9IDEyMi4xXG5cbiAgICAvLyBQYXJhIG1lZGlyIGNvcnJlY3RhbWVudGUgZWwgc2Nyb2xsSGVpZ2h0LCBuZWNlc2l0YW1vcyBxdWl0YXIgdGVtcG9yYWxtZW50ZSBsYXMgcmVzdHJpY2Npb25lc1xuICAgIGNvbnN0IHByZXZpb3VzTWluSGVpZ2h0ID0gdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0XG4gICAgY29uc3QgcHJldmlvdXNNYXhIZWlnaHQgPSB0ZXh0YXJlYS5zdHlsZS5tYXhIZWlnaHRcblxuICAgIC8vIEVzdGFibGVjZXIgYWx0dXJhIGEgJ2F1dG8nIHkgcXVpdGFyIHRlbXBvcmFsbWVudGUgbWluLWhlaWdodCB5IG1heC1oZWlnaHQgcGFyYSBtZWRpciBjb3JyZWN0YW1lbnRlXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gJzBweCdcbiAgICB0ZXh0YXJlYS5zdHlsZS5tYXhIZWlnaHQgPSAnbm9uZSdcblxuICAgIC8vIEZvcnphciByZWZsb3cgcGFyYSBxdWUgZWwgbmF2ZWdhZG9yIHJlY2FsY3VsZVxuICAgIHZvaWQgdGV4dGFyZWEub2Zmc2V0SGVpZ2h0XG5cbiAgICAvLyBBaG9yYSBtZWRpciBlbCBzY3JvbGxIZWlnaHQgcmVhbCBzaW4gcmVzdHJpY2Npb25lc1xuICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IHRleHRhcmVhLnNjcm9sbEhlaWdodFxuXG4gICAgLy8gQ2FsY3VsYXIgbGEgYWx0dXJhIGRlIHVuYSBsw61uZWEgdXNhbmRvIGxvcyBlc3RpbG9zIGNvbXB1dGFkb3NcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGV4dGFyZWEpXG4gICAgY29uc3QgbGluZUhlaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5saW5lSGVpZ2h0KSB8fCAyMCAvLyBGYWxsYmFjayBhIDIwcHggc2kgbm8gZXN0w6EgZGVmaW5pZG9cbiAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdUb3ApIHx8IDBcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdCb3R0b20pIHx8IDBcbiAgICBjb25zdCBib3JkZXJUb3AgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGgpIHx8IDBcbiAgICBjb25zdCBib3JkZXJCb3R0b20gPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpIHx8IDBcblxuICAgIC8vIEFsdHVyYSBkZSB1bmEgbMOtbmVhIGNvbXBsZXRhIChsaW5lLWhlaWdodCArIHBhZGRpbmcgKyBib3JkZXIpXG4gICAgY29uc3Qgc2luZ2xlTGluZUhlaWdodCA9IGxpbmVIZWlnaHQgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlclRvcCArIGJvcmRlckJvdHRvbVxuXG4gICAgY29uc3QgaXNFbXB0eSA9IHRleHRhcmVhLnZhbHVlLnRyaW0oKSA9PT0gJydcblxuICAgIC8vIE1lZGlyIGVsIGFuY2hvIGRlbCB0ZXh0byB1c2FuZG8gQ2FudmFzIHBhcmEgZGV0ZXJtaW5hciBzaSBzZSBlbnZ1ZWx2ZSBhIG3Dumx0aXBsZXMgbMOtbmVhc1xuICAgIGxldCBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gZmFsc2VcblxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXG5cbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIC8vIEZhbGxiYWNrIHNpIENhbnZhcyBubyBlc3TDoSBkaXNwb25pYmxlOiB1c2FyIHNjcm9sbEhlaWdodFxuICAgICAgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IHNjcm9sbEhlaWdodCA+IHNpbmdsZUxpbmVIZWlnaHQgKiAxLjVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGV4dGFyZWFTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICAgIGNvbnRleHQuZm9udCA9IGAke3RleHRhcmVhU3R5bGVzLmZvbnRXZWlnaHR9ICR7dGV4dGFyZWFTdHlsZXMuZm9udFNpemV9ICR7dGV4dGFyZWFTdHlsZXMuZm9udEZhbWlseX1gXG5cbiAgICAgIC8vIENhbGN1bGFyIGVsIGFuY2hvIGRpc3BvbmlibGUgKGFuY2hvIHRvdGFsIG1lbm9zIHBhZGRpbmcgaXpxdWllcmRvL2RlcmVjaG8geSBib3JkZXIgaXpxdWllcmRvL2RlcmVjaG8pXG4gICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nTGVmdCkgfHwgMFxuICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdSaWdodCkgfHwgMFxuICAgICAgY29uc3QgYm9yZGVyTGVmdCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGgpIHx8IDBcbiAgICAgIGNvbnN0IGJvcmRlclJpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpIHx8IDBcbiAgICAgIGNvbnN0IHRleHRhcmVhV2lkdGggPSB0ZXh0YXJlYS5vZmZzZXRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0IC0gYm9yZGVyTGVmdCAtIGJvcmRlclJpZ2h0XG4gICAgICBjb25zdCB0ZXh0ID0gdGV4dGFyZWEudmFsdWUgfHwgJydcbiAgICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJylcblxuICAgICAgLy8gU2kgaGF5IG3Dumx0aXBsZXMgbMOtbmVhcyBwb3Igc2FsdG9zIGRlIGzDrW5lYSBleHBsw61jaXRvc1xuICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCB0ZXh0byBzZSBlbnZ1ZWx2ZSBtaWRpZW5kbyBlbCBhbmNobyBkZSBjYWRhIGzDrW5lYVxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGNvbnRleHQubWVhc3VyZVRleHQobGluZSkud2lkdGhcbiAgICAgICAgICAvLyBTaSBhbGd1bmEgbMOtbmVhIGVzIG3DoXMgYW5jaGEgcXVlIGVsIHRleHRhcmVhIGRpc3BvbmlibGUsIHNlIGVudnVlbHZlXG4gICAgICAgICAgaWYgKHRleHRXaWR0aCA+IHRleHRhcmVhV2lkdGgpIHtcbiAgICAgICAgICAgIGhhc011bHRpcGxlVmlzdWFsTGluZXMgPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBuZXdIZWlnaHQ6IG51bWJlclxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAvLyBDdWFuZG8gZXN0w6EgdmFjw61vLCB1c2FyIGFsdHVyYSBtw61uaW1hXG4gICAgICBuZXdIZWlnaHQgPSBtaW5IZWlnaHRcbiAgICB9IGVsc2UgaWYgKCFoYXNNdWx0aXBsZVZpc3VhbExpbmVzKSB7XG4gICAgICAvLyBDdWFuZG8gaGF5IGNvbnRlbmlkbyBwZXJvIHNvbG8gdW5hIGzDrW5lYSB2aXN1YWwsIHVzYXIgYWx0dXJhIG3DrW5pbWFcbiAgICAgIG5ld0hlaWdodCA9IG1pbkhlaWdodFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQYXJhIG3Dumx0aXBsZXMgbMOtbmVhcyB2aXN1YWxlcywgdXNhciBlbCBzY3JvbGxIZWlnaHRcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKE1hdGgubWF4KHNjcm9sbEhlaWdodCwgbWluSGVpZ2h0KSwgbWF4SGVpZ2h0KVxuICAgIH1cblxuICAgIC8vIFJlc3RhdXJhciBlc3RpbG9zIGFudGVzIGRlIGFwbGljYXIgbGEgbnVldmEgYWx0dXJhXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gcHJldmlvdXNNaW5IZWlnaHQgfHwgJzIyLjFweCdcbiAgICB0ZXh0YXJlYS5zdHlsZS5tYXhIZWlnaHQgPSBwcmV2aW91c01heEhlaWdodCB8fCAnMTIyLjFweCdcblxuICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGBcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgIWRpc2FibGVkKSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKClcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIC8vIEF1dG8tZm9jdXMgY3VhbmRvIGNhbWJpYSBlbCBhZ2VudGUgbyBsYSBjb252ZXJzYWNpw7NuLCBvIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gQ29tcGFyYWNpw7NuIHF1ZSBtYW5lamEgY29ycmVjdGFtZW50ZSB1bmRlZmluZWQvbnVsbFxuICAgIGNvbnN0IGFnZW50Q2hhbmdlZCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ICE9PSBhZ2VudD8uaWRcbiAgICAvLyBDb21wYXJhY2nDs24gZXN0cmljdGEgcXVlIGRldGVjdGEgY2FtYmlvcyBpbmNsdXNvIGN1YW5kbyB1bm8gZXMgdW5kZWZpbmVkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICAvLyBEZXRlY3RhciBjYW1iaW8gZXNwZWPDrWZpY28gZGUgdW5kZWZpbmVkL251bGwgYSB1biB2YWxvciAobnVldm8gY2hhdCAtPiBjb252ZXJzYWNpw7NuIHZpZWphKVxuICAgIGNvbnN0IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA9XG4gICAgICAocHJldmlvdXNDaGF0SWQgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0NoYXRJZCA9PT0gbnVsbCkgJiYgY3VycmVudENoYXRJZCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnRDaGF0SWQgIT09IG51bGxcbiAgICBjb25zdCBuZXdDaGF0U3RhcnRlZCA9IHByZXZpb3VzTmV3Q2hhdEtleVJlZi5jdXJyZW50ICE9PSBuZXdDaGF0S2V5XG4gICAgY29uc3QgaXNJbml0aWFsTW91bnQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkICYmIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZFxuXG4gICAgaWYgKFxuICAgICAgKGFnZW50Q2hhbmdlZCB8fCBjaGF0Q2hhbmdlZCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgfHwgbmV3Q2hhdFN0YXJ0ZWQgfHwgaXNJbml0aWFsTW91bnQpICYmXG4gICAgICBpbnB1dFJlZi5jdXJyZW50ICYmXG4gICAgICAhZGlzYWJsZWRcbiAgICApIHtcbiAgICAgIC8vIFVzYXIgc2V0VGltZW91dCBwYXJhIGFzZWd1cmFyIHF1ZSBlbCBET00gZXN0w6kgbGlzdG9cbiAgICAgIC8vIEF1bWVudGFyIGVsIGRlbGF5IHBhcmEgY2Fzb3MgZG9uZGUgZWwgY29tcG9uZW50ZSBzZSBlc3TDoSBtb250YW5kb1xuICAgICAgY29uc3QgZGVsYXkgPSBpc0luaXRpYWxNb3VudCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPyAyMDAgOiAxMDBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKClcbiAgICAgICAgfVxuICAgICAgfSwgZGVsYXkpXG4gICAgfVxuXG4gICAgLy8gQWN0dWFsaXphciBsYXMgcmVmZXJlbmNpYXMgREVTUFXDiVMgZGUgbGEgY29tcGFyYWNpw7NuXG4gICAgcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPSBhZ2VudD8uaWRcbiAgICBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID0gY2hhdElkXG4gICAgcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgPSBuZXdDaGF0S2V5XG4gIH0sIFthZ2VudD8uaWQsIGNoYXRJZCwgbmV3Q2hhdEtleSwgZGlzYWJsZWRdKVxuXG4gIC8vIENsZWFyIGlucHV0IHdoZW4gc2Vzc2lvbiBjaGFuZ2VzICh1c2VyIHN3aXRjaGVzIHRvIGEgZGlmZmVyZW50IGNoYXQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2Vzc2lvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIHNldFZhbHVlVGV4dGFyZWEoJycpXG4gICAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uRnJhbWVJZClcbiAgfSwgW3ZhbHVlVGV4dGFyZWFdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzVGV4dCA9IHZhbHVlVGV4dGFyZWEudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBjb25zdCBoYXNBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICBzZXRJc0Rpc2FibGVkKCFoYXNUZXh0ICYmICFoYXNBdHRhY2htZW50cylcbiAgfSwgW2F0dGFjaG1lbnRzLCB2YWx1ZVRleHRhcmVhXSlcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZSA9ICgpID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZShpbnB1dFJlZi5jdXJyZW50LnZhbHVlLCBhdHRhY2htZW50cylcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgICAgc2V0VmFsdWVUZXh0YXJlYSgnJylcbiAgICAgIHNldElzRGlzYWJsZWQodHJ1ZSlcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgb25TZW5kTWVzc2FnZSgnJywgYXR0YWNobWVudHMpXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKCcnKVxuICAgICAgc2V0SXNEaXNhYmxlZCh0cnVlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBpZiAoIWlzRGlzYWJsZWQgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBoYXNUZXh0ID0gZS50YXJnZXQudmFsdWUudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBjb25zdCBoYXNBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICBzZXRJc0Rpc2FibGVkKCFoYXNUZXh0ICYmICFoYXNBdHRhY2htZW50cylcbiAgICBzZXRWYWx1ZVRleHRhcmVhKGUudGFyZ2V0LnZhbHVlKVxuICAgIG9uQ2hhbmdlPy4oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGFzdGUgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaW5wdXRSZWYuY3VycmVudD8udmFsdWUgPz8gJydcbiAgICAgIGNvbnN0IGhhc1RleHQgPSBjdXJyZW50VmFsdWUudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgICAgc2V0VmFsdWVUZXh0YXJlYShjdXJyZW50VmFsdWUpXG4gICAgICBzZXRJc0Rpc2FibGVkKCFoYXNUZXh0ICYmICFoYXNBdHRhY2htZW50cylcbiAgICB9LCAxMClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG5cbiAgICBjb25zdCBleGNlZWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZXhjbHVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGZpbGVTaXplczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9XG4gICAgbGV0IGZpbGVzSW5zZXJ0ZWQgPSBhdHRhY2htZW50cy5sZW5ndGhcblxuICAgIC8vIERlZmluaXIgbMOtbWl0ZXMgcGFyYSBkaWZlcmVudGVzIHRpcG9zIGRlIGFyY2hpdm9zXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcueGxzeCcsICcueGxzJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuICAgIGNvbnN0IGlzQXVkaW9Gb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuXG4gICAgQXJyYXkuZnJvbShmaWxlcykuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIC8vIFZhbGlkYWNpb25lcyBlc3BlY8OtZmljYXMgc2Vnw7puIGVsIHRpcG8gZGUgYXJjaGl2b1xuICAgICAgaWYgKGlzTmV3Rm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgbnVldm9zIGZvcm1hdG9zOiBoYXN0YSAxNU1CIHBvciBhcmNoaXZvLCBoYXN0YSA1IGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiAxNSAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiA1KSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPbGRGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBmb3JtYXRvcyBhbnRlcmlvcmVzOiBoYXN0YSAxTUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDEgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQXVkaW9Gb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBkZSBhdWRpbzogaGFzdGEgMTBNQiBwb3IgYXJjaGl2bywgaGFzdGEgNSBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gMTAgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldElzRGlzYWJsZWQoZmFsc2UpXG4gICAgaWYgKGV4Y2x1ZGVkRmlsZXMubGVuZ3RoIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiB0cnVlLCBleGNsdWRlZEZpbGVzLCBleGNlZWRlZEZpbGVzLCBmaWxlU2l6ZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2hDbGljayA9ICgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHsgb3B0aW9uOiAnZmlsZXMnIH0pXG4gICAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA+PSA1KSByZXR1cm5cbiAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIG9uRGVsZXRlQXR0YWNobWVudD8uKGZpbGVJZClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgY29uc3QgaGFzVGV4dCA9IHZhbHVlVGV4dGFyZWEudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBjb25zdCBoYXNBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICBzZXRJc0Rpc2FibGVkKCFoYXNUZXh0ICYmICFoYXNBdHRhY2htZW50cylcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJGb2N1cyA9ICgpID0+IHNldElzRm9jdXNlZCh0cnVlKVxuICBjb25zdCBoYW5kbGVXcmFwcGVyQmx1ciA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghd3JhcHBlclJlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpXG4gICAgICB9XG4gICAgfSwgMClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN0b3BHZW5lcmF0aW9uID0gKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRTdG9wUmVzcG9uc2UpXG4gICAgb25TdG9wR2VuZXJhdGlvbj8uKClcbiAgfVxuXG4gIGNvbnN0IGlzTUFJQSA9IHZhbGlkYXRlSXNNYWlhKGFnZW50IGFzIEFnZW50KVxuICBjb25zdCBoYXNIZWFkZXJCdXR0b25zID0gIWlzTUFJQVxuXG4gIGNvbnN0IGljb25Db2xvckluYWN0aXZlID0gaXNGb2N1c2VkID8gJyM2NjY2NjYnIDogJyM5OTknXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN0eWxlZE1BSUFJbnB1dFdyYXBwZXJcbiAgICAgICAgcmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgIGFsaWduQnV0dG9ucz17YWxpZ25CdXR0b25zfVxuICAgICAgICBoYXNBdHRhY2htZW50cz17ISFhdHRhY2htZW50cy5sZW5ndGh9XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZVdyYXBwZXJGb2N1c31cbiAgICAgICAgb25CbHVyPXtoYW5kbGVXcmFwcGVyQmx1cn1cbiAgICAgID5cbiAgICAgICAgeyEhYXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTJweCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGF0dGFjaG1lbnQubmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5RXh0ZW5zaW9uID0gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnXS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlQnlNaW1lID0gYXR0YWNobWVudC50eXBlPy5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID0gaXNJbWFnZUJ5TWltZSAmJiBpc0ltYWdlQnlFeHRlbnNpb25cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudC5uYW1lfSBrZXk9e2Ake2luZGV4fS0ke2F0dGFjaG1lbnQubmFtZX1gfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudCBpc0ltYWdlPXtpc0ltYWdlfT5cbiAgICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggY29sb3I9XCJyZ2JhKDE5MSwgMTkxLCAxOTEsIDEpXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZE1BSUFJbnB1dFxuICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgIG9uUGFzdGU9e2hhbmRsZVBhc3RlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgICBvbkJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgICAgIC8+XG4gICAgICAgIDxTdHlsZWRNQUlBSW5wdXRCdXR0b25zIGhhc0hlYWRlckJ1dHRvbnM9e2hhc0hlYWRlckJ1dHRvbnN9PlxuICAgICAgICAgIHtoYXNIZWFkZXJCdXR0b25zID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEwcHgnIH19PlxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudHMubGVuZ3RoID49IDUgPyB0KCdjaGF0LmxpbWl0RmlsZXMnKSA6IHQoJ2NoYXQuYXR0YWNoRmlsZScpfT5cbiAgICAgICAgICAgICAgICA8U0NNSVdyYXBwZXJBdHRhY2htZW50QnV0dG9uXG4gICAgICAgICAgICAgICAgICBoYXNBdHRhY2htZW50cz17ISFhdHRhY2htZW50cy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICBpc01heGltaXplZD17YXR0YWNobWVudHMubGVuZ3RoID49IDV9XG4gICAgICAgICAgICAgICAgICAkaXNGb2N1c2VkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVBdHRhY2hDbGlja31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8QXR0YWNoXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXshYXR0YWNobWVudHMubGVuZ3RoID8gaWNvbkNvbG9ySW5hY3RpdmUgOiAncmdiYSgxMzUsIDY0LCAxOTEsIDEpJ31cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1NDTUlXcmFwcGVyQXR0YWNobWVudEJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zZWFyY2hXZWInKX0+XG4gICAgICAgICAgICAgICAgPFNDTUlXcmFwcGVyV2ViU2VhcmNoQnV0dG9uXG4gICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17ISFpc1dlYlNlYXJjaEFjdGl2ZX1cbiAgICAgICAgICAgICAgICAgICRpc0ZvY3VzZWQ9e2lzRm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVdlYlNlYXJjaFRvZ2dsZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8R2xvYmVcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e2lzV2ViU2VhcmNoQWN0aXZlID8gJ3JnYmEoMTM1LCA2NCwgMTkxLCAxKScgOiBpY29uQ29sb3JJbmFjdGl2ZX1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1NDTUlXcmFwcGVyV2ViU2VhcmNoQnV0dG9uPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LmRlZXBTZWFyY2gnKX0+XG4gICAgICAgICAgICAgICAgPFNDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvblxuICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9eyEhaXNEZWVwU2VhcmNoQWN0aXZlfVxuICAgICAgICAgICAgICAgICAgJGlzRm9jdXNlZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVlcFNlYXJjaFRvZ2dsZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8VGVsZXNjb3BlSWNvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNEZWVwU2VhcmNoQWN0aXZlID8gJ3JnYmEoMTM1LCA2NCwgMTkxLCAxKScgOiBpY29uQ29sb3JJbmFjdGl2ZX1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1NDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aXNXcml0aW5nID8gKFxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc3RvcCcpfT5cbiAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BJY29uIC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVN0b3BCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtpc1N0cmVhbWluZyA/IHQoJ2NoYXQuc2VuZCcpIDogdCgnY2hhdC5zZW5kJyl9PlxuICAgICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZCB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBoYXNWYWx1ZXM9eyEhdmFsdWVUZXh0YXJlYS5sZW5ndGh9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGFwZXJQbGFuZSBjb2xvcj1cIiNCRkJGQkZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdHlsZWRNQUlBSW5wdXRCdXR0b25zPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnREEsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQzFGLFNBQVNDLFVBQVUsUUFBUSw2Q0FBNkM7QUFDeEUsU0FBU0MsTUFBTSxRQUFRLHlDQUF5QztBQUNoRSxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUV0RSxTQUNFQyxjQUFjLEVBQ2RDLHdCQUF3QixFQUN4QkMsMkJBQTJCLEVBQzNCQywwQkFBMEIsRUFDMUJDLDJCQUEyQixFQUMzQkMsZUFBZSxFQUNmQyxzQkFBc0IsRUFD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
910
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlBhcGVyUGxhbmUiLCJBdHRhY2giLCJHbG9iZSIsIlRyYXNoIiwiVG9vbHRpcCIsIlNDTUlBdHRhY2htZW50IiwiU0NNSUF0dGFjaG1lbnREZWxldGVJY29uIiwiU0NNSUNvbnRleHREcm9wZG93biIsIlNDTUlDb250ZXh0RHJvcGRvd25UaXRsZSIsIlNDTUlDb250ZXh0TWFpbkxpc3QiLCJTQ01JU3ViQ29udGV4dERyb3Bkb3duIiwiU0NNSVN1YkNvbnRleHRTZWFyY2giLCJTQ01JU3ViQ29udGV4dE9wdGlvbiIsIlNDTUlTdWJDb250ZXh0TG9hZGVyIiwiU0NNSUlubGluZUNvbnRleHRDbGVhciIsIlNDTUlJbmxpbmVDb250ZXh0UHJldmlldyIsIlNDTUlJbmxpbmVDb250ZXh0VGV4dCIsIlNDTUlJbmxpbmVUYXNrTGluayIsIlNDTUlDb250ZXh0T3B0aW9uIiwiU0NNSUNvbnRleHRPcHRpb25TdWJ0aXRsZSIsIlNDTUlDb250ZXh0T3B0aW9uVGl0bGUiLCJTQ01JV3JhcHBlckF0dGFjaG1lbnRCdXR0b24iLCJTQ01JV3JhcHBlcldlYlNlYXJjaEJ1dHRvbiIsIlNDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvbiIsIlN0eWxlZE1BSUFJbnB1dCIsIlN0eWxlZE1BSUFJbnB1dEJ1dHRvbnMiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwidXNlVCIsInZhbGlkYXRlSXNNYWlhIiwiVGVsZXNjb3BlSWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiYWxsb3dlZEZpbGVUeXBlcyIsImZpbGVUeXBlcyIsImdldFByb2plY3RUYXNrcyIsInVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIk1BSUFJbnB1dCIsIl9yZWYiLCJvblNlbmRNZXNzYWdlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJpc1N0cmVhbWluZyIsImlzV3JpdGluZyIsIm9uU3RvcEdlbmVyYXRpb24iLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiX3JlZiRhbGlnbkJ1dHRvbnMiLCJhbGlnbkJ1dHRvbnMiLCJvbkZpbGVBdHRhY2giLCJvbkRlbGV0ZUF0dGFjaG1lbnQiLCJfcmVmJGF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJjaGF0SWQiLCJuZXdDaGF0S2V5IiwiX3VzZVQiLCJ0IiwiaTE4biIsImlucHV0UmVmIiwiZmlsZUlucHV0UmVmIiwid3JhcHBlclJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlVGV4dGFyZWEiLCJzZXRWYWx1ZVRleHRhcmVhIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0Rpc2FibGVkIiwic2V0SXNEaXNhYmxlZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNGb2N1c2VkIiwic2V0SXNGb2N1c2VkIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJjb250ZXh0UHJvbXB0Iiwic2V0Q29udGV4dFByb21wdCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VsZWN0ZWRDb250ZXh0VGFzayIsInNldFNlbGVjdGVkQ29udGV4dFRhc2siLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzaG93U2xhc2hEcm9wZG93biIsInNldFNob3dTbGFzaERyb3Bkb3duIiwiX3VzZVN0YXRlMTEiLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImZpbGVTaXplcyIsIl91c2VTdGF0ZTEyIiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaG92ZXJlZEFjdGlvbiIsInNldEhvdmVyZWRBY3Rpb24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2Iiwic3ViVGFza3MiLCJzZXRTdWJUYXNrcyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJzdWJIYXNNb3JlIiwic2V0U3ViSGFzTW9yZSIsIl91c2VTdGF0ZTE5IiwiX3VzZVN0YXRlMjAiLCJzdWJMb2FkaW5nIiwic2V0U3ViTG9hZGluZyIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJzdWJTZWFyY2giLCJzZXRTdWJTZWFyY2giLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0Iiwic3ViT2Zmc2V0Iiwic2V0U3ViT2Zmc2V0IiwiaGlkZVN1YlRpbWVyUmVmIiwibG9hZFN1YlRpbWVyUmVmIiwic2VhcmNoRGVib3VuY2VSZWYiLCJhYm9ydENvbnRyb2xsZXJSZWYiLCJzdWJUYXNrc0NhY2hlUmVmIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QiLCJzbGFzaEFjdGlvbnMiLCJhY3Rpb25zIiwiaGFuZGxlR2V0RnJlcXVlbnRseVVzZWRBY3Rpb25zIiwiX3VzZUdsb2JhbENvbnRleHQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsInByb2plY3QiLCJjaGlwc1Byb2plY3QiLCJwcmV2aW91c0FnZW50SWRSZWYiLCJ1bmRlZmluZWQiLCJwcmV2aW91c0NoYXRJZFJlZiIsInByZXZpb3VzTmV3Q2hhdEtleVJlZiIsImhhbmRsZVdlYlNlYXJjaFRvZ2dsZSIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwiaGFuZGxlRGVlcFNlYXJjaFRvZ2dsZSIsImhhbmRsZVJlc2l6ZSIsInRleHRhcmVhIiwiY3VycmVudCIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsInByZXZpb3VzTWluSGVpZ2h0Iiwic3R5bGUiLCJwcmV2aW91c01heEhlaWdodCIsImhlaWdodCIsIm9mZnNldEhlaWdodCIsInNjcm9sbEhlaWdodCIsImNvbXB1dGVkU3R5bGUiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwibGluZUhlaWdodCIsInBhcnNlRmxvYXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsImJvcmRlclRvcCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyQm90dG9tIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJzaW5nbGVMaW5lSGVpZ2h0IiwiaXNFbXB0eSIsInZhbHVlIiwidHJpbSIsImhhc011bHRpcGxlVmlzdWFsTGluZXMiLCJjYW52YXMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInRleHRhcmVhU3R5bGVzIiwiZm9udCIsImNvbmNhdCIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImJvcmRlckxlZnQiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodCIsImJvcmRlclJpZ2h0V2lkdGgiLCJ0ZXh0YXJlYVdpZHRoIiwib2Zmc2V0V2lkdGgiLCJ0ZXh0IiwibGluZXMiLCJzcGxpdCIsImxlbmd0aCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJsaW5lIiwidGV4dFdpZHRoIiwibWVhc3VyZVRleHQiLCJ3aWR0aCIsImVyciIsImUiLCJmIiwibmV3SGVpZ2h0IiwiTWF0aCIsIm1pbiIsIm1heCIsInVwZGF0ZVRleHRhcmVhVmFsdWUiLCJuZXh0VmFsdWUiLCJidWlsZENvbnRleHRNZXNzYWdlIiwidGFzayIsInByb21wdCIsInJlc29sdmVkUHJvbXB0IiwiaWQiLCJ0aXRsZSIsImNhblVzZVNsYXNoQ29tbWFuZHMiLCJ0eXBlIiwibGFuZyIsImxhbmd1YWdlIiwiYWN0aW9uTmVlZHNTdWJncm91cCIsImFjdGlvbiIsInRlc3QiLCJhZ2VudElkIiwiZm9jdXMiLCJhZ2VudENoYW5nZWQiLCJwcmV2aW91c0NoYXRJZCIsImN1cnJlbnRDaGF0SWQiLCJjaGF0Q2hhbmdlZCIsImNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCIsIm5ld0NoYXRTdGFydGVkIiwiaXNJbml0aWFsTW91bnQiLCJkZWxheSIsInNldFRpbWVvdXQiLCJoYW5kbGVTZXNzaW9uQ2hhbmdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhbmltYXRpb25GcmFtZUlkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJjbGVhclRpbWVvdXQiLCJhYm9ydCIsImhhc1RleHQiLCJoYXNBdHRhY2htZW50cyIsImhhc09ubHlTbGFzaENvbW1hbmRUcmlnZ2VyIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJfaW5wdXRSZWYkY3VycmVudCIsImNvbXBvc2VkQ29udGV4dE1lc3NhZ2UiLCJ0ZXh0VmFsdWUiLCJmaW5hbE1lc3NhZ2UiLCJoYW5kbGVLZXlEb3duIiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZUNoYW5nZSIsInRhcmdldCIsImhhbmRsZVBhc3RlIiwiX2lucHV0UmVmJGN1cnJlbnQkdmFsIiwiX2lucHV0UmVmJGN1cnJlbnQyIiwiY3VycmVudFZhbHVlIiwiaGFuZGxlRmlsZVNlbGVjdCIsImZpbGVzIiwiZmlsZXNJbnNlcnRlZCIsImlzTmV3Rm9ybWF0IiwiZXh0ZW5zaW9uIiwiaW5jbHVkZXMiLCJpc09sZEZvcm1hdCIsImlzQXVkaW9Gb3JtYXQiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImV4Y2x1ZGVkRmlsZSIsImZpbGVOYW1lUGFydHMiLCJuYW1lIiwiZmlsZUV4dGVuc2lvbiIsInBvcCIsInRvTG93ZXJDYXNlIiwic2l6ZSIsInB1c2giLCJ0eXBlRmlsZSIsInBhcnNlZEZpbGUiLCJGaWxlIiwiaGFuZGxlQXR0YWNoQ2xpY2siLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVCbHVyIiwiaGFuZGxlV3JhcHBlckZvY3VzIiwiaGFuZGxlV3JhcHBlckJsdXIiLCJfd3JhcHBlclJlZiRjdXJyZW50IiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJsb2FkU3ViVGFza3MiLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicHJvamVjdElkIiwic2lnbmFsIiwiYWN0aW9uSWQiLCJvZmZzZXQiLCJyZXN1bHQiLCJfYXJncyIsImFyZ3VtZW50cyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJzZW50IiwidGFza3MiLCJoYXNNb3JlIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiRXJyb3IiLCJhYnJ1cHQiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJhcHBseSIsImhhbmRsZUFjdGlvbk1vdXNlRW50ZXIiLCJjYWNoZWQiLCJfY2hpcHNQcm9qZWN0JHByb2plY3QiLCJTdHJpbmciLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiaGFuZGxlQWN0aW9uTW91c2VMZWF2ZSIsImhhbmRsZVN1Yk1vdXNlRW50ZXIiLCJoYW5kbGVTdWJNb3VzZUxlYXZlIiwiaGFuZGxlU3ViU2Nyb2xsIiwiX2UkY3VycmVudFRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJfY2hpcHNQcm9qZWN0JHByb2plY3QyIiwiaGFuZGxlU3ViU2VhcmNoQ2hhbmdlIiwiX2NoaXBzUHJvamVjdCRwcm9qZWN0MyIsImhhbmRsZUNsZWFyQ29udGV4dFRhc2siLCJoYW5kbGVTdWJUYXNrU2VsZWN0IiwiaGFuZGxlU2xhc2hBY3Rpb25TZWxlY3QiLCJpc01BSUEiLCJoYXNIZWFkZXJCdXR0b25zIiwiaWNvbkNvbG9ySW5hY3RpdmUiLCJjaGlsZHJlbiIsInJlZiIsIm9uRm9jdXMiLCJvbkJsdXIiLCIkaGFzU3ViZ3JvdXAiLCJtYXAiLCJvbkNsaWNrIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwic3VidGl0bGUiLCJvblNjcm9sbCIsImF1dG9Db21wbGV0ZSIsImRpc3BsYXkiLCJnYXAiLCJhbGlnbkl0ZW1zIiwiYXR0YWNobWVudCIsImluZGV4IiwiX2ZpbGVOYW1lUGFydHMkcG9wMiIsIl9hdHRhY2htZW50JHR5cGUiLCJpc0ltYWdlQnlFeHRlbnNpb24iLCJpc0ltYWdlQnlNaW1lIiwic3RhcnRzV2l0aCIsImlzSW1hZ2UiLCJpY29uIiwiY29sb3IiLCJocmVmIiwibG9jYXRpb24iLCJvcmlnaW4iLCJvbktleURvd24iLCJvblBhc3RlIiwiaXNNYXhpbWl6ZWQiLCIkaXNGb2N1c2VkIiwiaXNBY3RpdmUiLCJoYXNWYWx1ZXMiLCJtdWx0aXBsZSIsImFjY2VwdCIsIm9uQ2xvc2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgUmVhY3ROb2RlLCBVSUV2ZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBhcGVyUGxhbmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QYXBlclBsYW5lJ1xuaW1wb3J0IHsgQXR0YWNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXR0YWNoJ1xuaW1wb3J0IHsgR2xvYmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9HbG9iZSdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7XG4gIFNDTUlBdHRhY2htZW50LFxuICBTQ01JQXR0YWNobWVudERlbGV0ZUljb24sXG4gIFNDTUlDb250ZXh0RHJvcGRvd24sXG4gIFNDTUlDb250ZXh0RHJvcGRvd25UaXRsZSxcbiAgU0NNSUNvbnRleHRNYWluTGlzdCxcbiAgU0NNSVN1YkNvbnRleHREcm9wZG93bixcbiAgU0NNSVN1YkNvbnRleHRTZWFyY2gsXG4gIFNDTUlTdWJDb250ZXh0T3B0aW9uLFxuICBTQ01JU3ViQ29udGV4dExvYWRlcixcbiAgU0NNSUlubGluZUNvbnRleHRDbGVhcixcbiAgU0NNSUlubGluZUNvbnRleHRQcmV2aWV3LFxuICBTQ01JSW5saW5lQ29udGV4dFRleHQsXG4gIFNDTUlJbmxpbmVUYXNrTGluayxcbiAgU0NNSUNvbnRleHRPcHRpb24sXG4gIFNDTUlDb250ZXh0T3B0aW9uU3VidGl0bGUsXG4gIFNDTUlDb250ZXh0T3B0aW9uVGl0bGUsXG4gIFNDTUlXcmFwcGVyQXR0YWNobWVudEJ1dHRvbixcbiAgU0NNSVdyYXBwZXJXZWJTZWFyY2hCdXR0b24sXG4gIFNDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvbixcbiAgU3R5bGVkTUFJQUlucHV0LFxuICBTdHlsZWRNQUlBSW5wdXRCdXR0b25zLFxuICBTdHlsZWRNQUlBSW5wdXRXcmFwcGVyLFxuICBTdHlsZWRNQUlBU2VuZEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wSWNvbixcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBUZWxlc2NvcGVJY29uIH0gZnJvbSAnLi4vaWNvbnMvVGVsZXNjb3BlSWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGFsbG93ZWRGaWxlVHlwZXMsIGZpbGVUeXBlcyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9mb3JtYXRFeHRlbnNpb25zJ1xuaW1wb3J0IHsgZ2V0UHJvamVjdFRhc2tzLCBQcm9qZWN0VGFza0l0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb3IvZ2V0UHJvamVjdFRhc2tzJ1xuaW1wb3J0IHsgdXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBGcmVxdWVudGx5VXNlZEFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0ZyZXF1ZW50bHlVc2VkQWN0aW9uJ1xuXG50eXBlIEF0dGFjaG1lbnRGaWxlID0ge1xuICBmaWxlOiBGaWxlXG4gIG9yaWdpbmFsRmlsZT86IEZpbGVcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG4gIHR5cGU6IHN0cmluZ1xuICBpY29uPzogUmVhY3ROb2RlXG59XG5cbnR5cGUgTUFJQUlucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZywgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdKSA9PiB2b2lkXG4gIG9uU3RvcEdlbmVyYXRpb24/OiAoKSA9PiB2b2lkXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc1dyaXRpbmc/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIG9uQ2hhbmdlPzogKCkgPT4gdm9pZFxuICBhbGlnbkJ1dHRvbnM/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG4gIG9uRmlsZUF0dGFjaD86IChmaWxlOiBGaWxlKSA9PiB2b2lkXG4gIG9uRGVsZXRlQXR0YWNobWVudD86IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IE1BSUFJbnB1dCA9ICh7XG4gIG9uU2VuZE1lc3NhZ2UsXG4gIGNsYXNzTmFtZSxcbiAgZGlzYWJsZWQsXG4gIGlzU3RyZWFtaW5nLFxuICBpc1dyaXRpbmcsXG4gIG9uU3RvcEdlbmVyYXRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBvbkNoYW5nZSxcbiAgYWxpZ25CdXR0b25zID0gJ3ZlcnRpY2FsJyxcbiAgb25GaWxlQXR0YWNoLFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQsXG4gIGF0dGFjaG1lbnRzID0gW10sXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbn06IE1BSUFJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbdmFsdWVUZXh0YXJlYSwgc2V0VmFsdWVUZXh0YXJlYV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW2lzRGlzYWJsZWQsIHNldElzRGlzYWJsZWRdID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2lzRm9jdXNlZCwgc2V0SXNGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY29udGV4dFByb21wdCwgc2V0Q29udGV4dFByb21wdF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VsZWN0ZWRDb250ZXh0VGFzaywgc2V0U2VsZWN0ZWRDb250ZXh0VGFza10gPSB1c2VTdGF0ZTxQcm9qZWN0VGFza0l0ZW0gfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1NsYXNoRHJvcGRvd24sIHNldFNob3dTbGFzaERyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBmaWxlU2l6ZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gIH0pXG4gIGNvbnN0IFtob3ZlcmVkQWN0aW9uLCBzZXRIb3ZlcmVkQWN0aW9uXSA9IHVzZVN0YXRlPEZyZXF1ZW50bHlVc2VkQWN0aW9uIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3N1YlRhc2tzLCBzZXRTdWJUYXNrc10gPSB1c2VTdGF0ZTxQcm9qZWN0VGFza0l0ZW1bXT4oW10pXG4gIGNvbnN0IFtzdWJIYXNNb3JlLCBzZXRTdWJIYXNNb3JlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc3ViTG9hZGluZywgc2V0U3ViTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3N1YlNlYXJjaCwgc2V0U3ViU2VhcmNoXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbc3ViT2Zmc2V0LCBzZXRTdWJPZmZzZXRdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgaGlkZVN1YlRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3QgbG9hZFN1YlRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc2VhcmNoRGVib3VuY2VSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICBjb25zdCBhYm9ydENvbnRyb2xsZXJSZWYgPSB1c2VSZWY8QWJvcnRDb250cm9sbGVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3ViVGFza3NDYWNoZVJlZiA9IHVzZVJlZjxSZWNvcmQ8c3RyaW5nLCB7IHRhc2tzOiBQcm9qZWN0VGFza0l0ZW1bXTsgaGFzTW9yZTogYm9vbGVhbiB9Pj4oe30pXG5cbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgYWN0aW9uczogc2xhc2hBY3Rpb25zLCBoYW5kbGVHZXRGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucygpXG4gIGNvbnN0IHsgdG9nZ2xlV2ViU2VhcmNoLCBpc1dlYlNlYXJjaEFjdGl2ZSwgdG9nZ2xlRGVlcFNlYXJjaCwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCwgcHJvamVjdCwgY2hpcHNQcm9qZWN0IH0gPVxuICAgIHVzZUdsb2JhbENvbnRleHQoKVxuICAvLyBJbmljaWFsaXphciBsYXMgcmVmZXJlbmNpYXMgY29tbyB1bmRlZmluZWQgcGFyYSBkZXRlY3RhciBlbCBwcmltZXIgY2FtYmlvIGNvcnJlY3RhbWVudGVcbiAgY29uc3QgcHJldmlvdXNBZ2VudElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c0NoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNOZXdDaGF0S2V5UmVmID0gdXNlUmVmPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gIGNvbnN0IGhhbmRsZVdlYlNlYXJjaFRvZ2dsZSA9ICgpID0+IHtcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBpZiAoIWlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHsgb3B0aW9uOiAnc2VhcmNoJyB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlZXBTZWFyY2hUb2dnbGUgPSAoKSA9PiB7XG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVXZWJTZWFyY2goKVxuICAgIH1cbiAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICBpZiAoIWlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7IG9wdGlvbjogJ2RlZXBfc2VhcmNoJyB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGlucHV0UmVmLmN1cnJlbnRcbiAgICBpZiAoIXRleHRhcmVhKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBBbHR1cmEgbcOtbmltYSBlcXVpdmFsZW50ZSBhIHVuYSBsw61uZWFcbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMi4xXG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gMTIyLjFcblxuICAgIC8vIFBhcmEgbWVkaXIgY29ycmVjdGFtZW50ZSBlbCBzY3JvbGxIZWlnaHQsIG5lY2VzaXRhbW9zIHF1aXRhciB0ZW1wb3JhbG1lbnRlIGxhcyByZXN0cmljY2lvbmVzXG4gICAgY29uc3QgcHJldmlvdXNNaW5IZWlnaHQgPSB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHRcbiAgICBjb25zdCBwcmV2aW91c01heEhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1heEhlaWdodFxuXG4gICAgLy8gRXN0YWJsZWNlciBhbHR1cmEgYSAnYXV0bycgeSBxdWl0YXIgdGVtcG9yYWxtZW50ZSBtaW4taGVpZ2h0IHkgbWF4LWhlaWdodCBwYXJhIG1lZGlyIGNvcnJlY3RhbWVudGVcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0bydcbiAgICB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHQgPSAnMHB4J1xuICAgIHRleHRhcmVhLnN0eWxlLm1heEhlaWdodCA9ICdub25lJ1xuXG4gICAgLy8gRm9yemFyIHJlZmxvdyBwYXJhIHF1ZSBlbCBuYXZlZ2Fkb3IgcmVjYWxjdWxlXG4gICAgdm9pZCB0ZXh0YXJlYS5vZmZzZXRIZWlnaHRcblxuICAgIC8vIEFob3JhIG1lZGlyIGVsIHNjcm9sbEhlaWdodCByZWFsIHNpbiByZXN0cmljY2lvbmVzXG4gICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGV4dGFyZWEuc2Nyb2xsSGVpZ2h0XG5cbiAgICAvLyBDYWxjdWxhciBsYSBhbHR1cmEgZGUgdW5hIGzDrW5lYSB1c2FuZG8gbG9zIGVzdGlsb3MgY29tcHV0YWRvc1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmxpbmVIZWlnaHQpIHx8IDIwIC8vIEZhbGxiYWNrIGEgMjBweCBzaSBubyBlc3TDoSBkZWZpbmlkb1xuICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1RvcCkgfHwgMFxuICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0JvdHRvbSkgfHwgMFxuICAgIGNvbnN0IGJvcmRlclRvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCkgfHwgMFxuICAgIGNvbnN0IGJvcmRlckJvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkgfHwgMFxuXG4gICAgLy8gQWx0dXJhIGRlIHVuYSBsw61uZWEgY29tcGxldGEgKGxpbmUtaGVpZ2h0ICsgcGFkZGluZyArIGJvcmRlcilcbiAgICBjb25zdCBzaW5nbGVMaW5lSGVpZ2h0ID0gbGluZUhlaWdodCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyVG9wICsgYm9yZGVyQm90dG9tXG5cbiAgICBjb25zdCBpc0VtcHR5ID0gdGV4dGFyZWEudmFsdWUudHJpbSgpID09PSAnJ1xuXG4gICAgLy8gTWVkaXIgZWwgYW5jaG8gZGVsIHRleHRvIHVzYW5kbyBDYW52YXMgcGFyYSBkZXRlcm1pbmFyIHNpIHNlIGVudnVlbHZlIGEgbcO6bHRpcGxlcyBsw61uZWFzXG4gICAgbGV0IGhhc011bHRpcGxlVmlzdWFsTGluZXMgPSBmYWxzZVxuXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJylcblxuICAgIGlmICghY29udGV4dCkge1xuICAgICAgLy8gRmFsbGJhY2sgc2kgQ2FudmFzIG5vIGVzdMOhIGRpc3BvbmlibGU6IHVzYXIgc2Nyb2xsSGVpZ2h0XG4gICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gc2Nyb2xsSGVpZ2h0ID4gc2luZ2xlTGluZUhlaWdodCAqIDEuNVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZXh0YXJlYVN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRleHRhcmVhKVxuICAgICAgY29udGV4dC5mb250ID0gYCR7dGV4dGFyZWFTdHlsZXMuZm9udFdlaWdodH0gJHt0ZXh0YXJlYVN0eWxlcy5mb250U2l6ZX0gJHt0ZXh0YXJlYVN0eWxlcy5mb250RmFtaWx5fWBcblxuICAgICAgLy8gQ2FsY3VsYXIgZWwgYW5jaG8gZGlzcG9uaWJsZSAoYW5jaG8gdG90YWwgbWVub3MgcGFkZGluZyBpenF1aWVyZG8vZGVyZWNobyB5IGJvcmRlciBpenF1aWVyZG8vZGVyZWNobylcbiAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdMZWZ0KSB8fCAwXG4gICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1JpZ2h0KSB8fCAwXG4gICAgICBjb25zdCBib3JkZXJMZWZ0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgfHwgMFxuICAgICAgY29uc3QgYm9yZGVyUmlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyUmlnaHRXaWR0aCkgfHwgMFxuICAgICAgY29uc3QgdGV4dGFyZWFXaWR0aCA9IHRleHRhcmVhLm9mZnNldFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQgLSBib3JkZXJMZWZ0IC0gYm9yZGVyUmlnaHRcbiAgICAgIGNvbnN0IHRleHQgPSB0ZXh0YXJlYS52YWx1ZSB8fCAnJ1xuICAgICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKVxuXG4gICAgICAvLyBTaSBoYXkgbcO6bHRpcGxlcyBsw61uZWFzIHBvciBzYWx0b3MgZGUgbMOtbmVhIGV4cGzDrWNpdG9zXG4gICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIHRleHRvIHNlIGVudnVlbHZlIG1pZGllbmRvIGVsIGFuY2hvIGRlIGNhZGEgbMOtbmVhXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG4gICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChsaW5lKS53aWR0aFxuICAgICAgICAgIC8vIFNpIGFsZ3VuYSBsw61uZWEgZXMgbcOhcyBhbmNoYSBxdWUgZWwgdGV4dGFyZWEgZGlzcG9uaWJsZSwgc2UgZW52dWVsdmVcbiAgICAgICAgICBpZiAodGV4dFdpZHRoID4gdGV4dGFyZWFXaWR0aCkge1xuICAgICAgICAgICAgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IHRydWVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld0hlaWdodDogbnVtYmVyXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIC8vIEN1YW5kbyBlc3TDoSB2YWPDrW8sIHVzYXIgYWx0dXJhIG3DrW5pbWFcbiAgICAgIG5ld0hlaWdodCA9IG1pbkhlaWdodFxuICAgIH0gZWxzZSBpZiAoIWhhc011bHRpcGxlVmlzdWFsTGluZXMpIHtcbiAgICAgIC8vIEN1YW5kbyBoYXkgY29udGVuaWRvIHBlcm8gc29sbyB1bmEgbMOtbmVhIHZpc3VhbCwgdXNhciBhbHR1cmEgbcOtbmltYVxuICAgICAgbmV3SGVpZ2h0ID0gbWluSGVpZ2h0XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcmEgbcO6bHRpcGxlcyBsw61uZWFzIHZpc3VhbGVzLCB1c2FyIGVsIHNjcm9sbEhlaWdodFxuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5tYXgoc2Nyb2xsSGVpZ2h0LCBtaW5IZWlnaHQpLCBtYXhIZWlnaHQpXG4gICAgfVxuXG4gICAgLy8gUmVzdGF1cmFyIGVzdGlsb3MgYW50ZXMgZGUgYXBsaWNhciBsYSBudWV2YSBhbHR1cmFcbiAgICB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHQgPSBwcmV2aW91c01pbkhlaWdodCB8fCAnMjIuMXB4J1xuICAgIHRleHRhcmVhLnN0eWxlLm1heEhlaWdodCA9IHByZXZpb3VzTWF4SGVpZ2h0IHx8ICcxMjIuMXB4J1xuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YFxuICB9XG5cbiAgY29uc3QgdXBkYXRlVGV4dGFyZWFWYWx1ZSA9IChuZXh0VmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gbmV4dFZhbHVlXG4gICAgfVxuICAgIHNldFZhbHVlVGV4dGFyZWEobmV4dFZhbHVlKVxuICAgIHNldElzRGlzYWJsZWQobmV4dFZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDAgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKVxuICAgIGhhbmRsZVJlc2l6ZSgpXG4gIH1cblxuICBjb25zdCBidWlsZENvbnRleHRNZXNzYWdlID0gKHRhc2s6IFByb2plY3RUYXNrSXRlbSwgcHJvbXB0Pzogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkUHJvbXB0ID0gcHJvbXB0IHx8IGNvbnRleHRQcm9tcHQgfHwgJydcbiAgICByZXR1cm4gYCR7cmVzb2x2ZWRQcm9tcHR9IGRlIGxhIHRhcmVhICR7dGFzay5pZH0gLSAke3Rhc2sudGl0bGV9YFxuICB9XG5cbiAgY29uc3QgY2FuVXNlU2xhc2hDb21tYW5kcyA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0JyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBjb25zdCBhY3Rpb25OZWVkc1N1Ymdyb3VwID0gKGFjdGlvbjogRnJlcXVlbnRseVVzZWRBY3Rpb24pID0+ICEvXihjcmVhcnxjcmVhdGV8Y3JpYXJ8Y3LDqWVyKVxcYi9pLnRlc3QoYWN0aW9uLnRpdGxlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFnZW50Py5pZCAmJiBjYW5Vc2VTbGFzaENvbW1hbmRzKSB7XG4gICAgICBoYW5kbGVHZXRGcmVxdWVudGx5VXNlZEFjdGlvbnMoeyBhZ2VudElkOiBhZ2VudC5pZCwgbGFuZyB9KVxuICAgIH1cbiAgfSwgW2FnZW50Py5pZCwgY2FuVXNlU2xhc2hDb21tYW5kcywgaGFuZGxlR2V0RnJlcXVlbnRseVVzZWRBY3Rpb25zLCBsYW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpXG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgIH1cbiAgfSwgW2Rpc2FibGVkXSlcblxuICAvLyBBdXRvLWZvY3VzIGN1YW5kbyBjYW1iaWEgZWwgYWdlbnRlIG8gbGEgY29udmVyc2FjacOzbiwgbyBhbCBtb250YXIgZWwgY29tcG9uZW50ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIENvbXBhcmFjacOzbiBxdWUgbWFuZWphIGNvcnJlY3RhbWVudGUgdW5kZWZpbmVkL251bGxcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgLy8gQ29tcGFyYWNpw7NuIGVzdHJpY3RhIHF1ZSBkZXRlY3RhIGNhbWJpb3MgaW5jbHVzbyBjdWFuZG8gdW5vIGVzIHVuZGVmaW5lZFxuICAgIGNvbnN0IHByZXZpb3VzQ2hhdElkID0gcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudFxuICAgIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSBjaGF0SWRcbiAgICBjb25zdCBjaGF0Q2hhbmdlZCA9IHByZXZpb3VzQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkXG4gICAgLy8gRGV0ZWN0YXIgY2FtYmlvIGVzcGVjw61maWNvIGRlIHVuZGVmaW5lZC9udWxsIGEgdW4gdmFsb3IgKG51ZXZvIGNoYXQgLT4gY29udmVyc2FjacOzbiB2aWVqYSlcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmIChcbiAgICAgIChhZ2VudENoYW5nZWQgfHwgY2hhdENoYW5nZWQgfHwgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0IHx8IG5ld0NoYXRTdGFydGVkIHx8IGlzSW5pdGlhbE1vdW50KSAmJlxuICAgICAgaW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgIWRpc2FibGVkXG4gICAgKSB7XG4gICAgICAvLyBVc2FyIHNldFRpbWVvdXQgcGFyYSBhc2VndXJhciBxdWUgZWwgRE9NIGVzdMOpIGxpc3RvXG4gICAgICAvLyBBdW1lbnRhciBlbCBkZWxheSBwYXJhIGNhc29zIGRvbmRlIGVsIGNvbXBvbmVudGUgc2UgZXN0w6EgbW9udGFuZG9cbiAgICAgIGNvbnN0IGRlbGF5ID0gaXNJbml0aWFsTW91bnQgfHwgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID8gMjAwIDogMTAwXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgIWRpc2FibGVkKSB7XG4gICAgICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpXG4gICAgICAgIH1cbiAgICAgIH0sIGRlbGF5KVxuICAgIH1cblxuICAgIC8vIEFjdHVhbGl6YXIgbGFzIHJlZmVyZW5jaWFzIERFU1BVw4lTIGRlIGxhIGNvbXBhcmFjacOzblxuICAgIHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID0gYWdlbnQ/LmlkXG4gICAgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9IGNoYXRJZFxuICAgIHByZXZpb3VzTmV3Q2hhdEtleVJlZi5jdXJyZW50ID0gbmV3Q2hhdEtleVxuICB9LCBbYWdlbnQ/LmlkLCBjaGF0SWQsIG5ld0NoYXRLZXksIGRpc2FibGVkXSlcblxuICAvLyBDbGVhciBpbnB1dCB3aGVuIHNlc3Npb24gY2hhbmdlcyAodXNlciBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBjaGF0KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKCcnKVxuICAgICAgc2V0SXNEaXNhYmxlZCh0cnVlKVxuICAgICAgc2V0Q29udGV4dFByb21wdChudWxsKVxuICAgICAgc2V0U2VsZWN0ZWRDb250ZXh0VGFzayhudWxsKVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uRnJhbWVJZClcbiAgfSwgW3ZhbHVlVGV4dGFyZWFdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChsb2FkU3ViVGltZXJSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KGxvYWRTdWJUaW1lclJlZi5jdXJyZW50KVxuICAgICAgaWYgKGhpZGVTdWJUaW1lclJlZi5jdXJyZW50KSBjbGVhclRpbWVvdXQoaGlkZVN1YlRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICBpZiAoc2VhcmNoRGVib3VuY2VSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KHNlYXJjaERlYm91bmNlUmVmLmN1cnJlbnQpXG4gICAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzVGV4dCA9IHZhbHVlVGV4dGFyZWEudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBjb25zdCBoYXNBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICBjb25zdCBoYXNPbmx5U2xhc2hDb21tYW5kVHJpZ2dlciA9IGNhblVzZVNsYXNoQ29tbWFuZHMgJiYgdmFsdWVUZXh0YXJlYS50cmltKCkgPT09ICcvJ1xuICAgIHNldElzRGlzYWJsZWQoKCFoYXNUZXh0ICYmICFoYXNBdHRhY2htZW50cyAmJiAhc2VsZWN0ZWRDb250ZXh0VGFzaykgfHwgaGFzT25seVNsYXNoQ29tbWFuZFRyaWdnZXIpXG4gIH0sIFthdHRhY2htZW50cywgY2FuVXNlU2xhc2hDb21tYW5kcywgc2VsZWN0ZWRDb250ZXh0VGFzaywgdmFsdWVUZXh0YXJlYV0pXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgY29tcG9zZWRDb250ZXh0TWVzc2FnZSA9IHNlbGVjdGVkQ29udGV4dFRhc2sgPyBidWlsZENvbnRleHRNZXNzYWdlKHNlbGVjdGVkQ29udGV4dFRhc2spIDogJydcbiAgICBjb25zdCB0ZXh0VmFsdWUgPSBpbnB1dFJlZi5jdXJyZW50Py52YWx1ZSB8fCAnJ1xuICAgIGNvbnN0IGZpbmFsTWVzc2FnZSA9IGNvbXBvc2VkQ29udGV4dE1lc3NhZ2UgfHwgdGV4dFZhbHVlXG5cbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZShmaW5hbE1lc3NhZ2UsIGF0dGFjaG1lbnRzKVxuICAgICAgaW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKCcnKVxuICAgICAgc2V0SXNEaXNhYmxlZCh0cnVlKVxuICAgICAgc2V0Q29udGV4dFByb21wdChudWxsKVxuICAgICAgc2V0U2VsZWN0ZWRDb250ZXh0VGFzayhudWxsKVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2UoZmluYWxNZXNzYWdlLCBhdHRhY2htZW50cylcbiAgICAgIHNldFZhbHVlVGV4dGFyZWEoJycpXG4gICAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gICAgICBzZXRDb250ZXh0UHJvbXB0KG51bGwpXG4gICAgICBzZXRTZWxlY3RlZENvbnRleHRUYXNrKG51bGwpXG4gICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgaWYgKCFpc0Rpc2FibGVkICYmICFkaXNhYmxlZCkge1xuICAgICAgICBoYW5kbGVTZW5kTWVzc2FnZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IENoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgaGFzVGV4dCA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgY29uc3QgaGFzQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgc2V0SXNEaXNhYmxlZCghaGFzVGV4dCAmJiAhaGFzQXR0YWNobWVudHMgJiYgIXNlbGVjdGVkQ29udGV4dFRhc2spXG4gICAgc2V0VmFsdWVUZXh0YXJlYShlLnRhcmdldC52YWx1ZSlcbiAgICBpZiAoY2FuVXNlU2xhc2hDb21tYW5kcyAmJiBlLnRhcmdldC52YWx1ZS50cmltKCkgPT09ICcvJykge1xuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24odHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNob3dTbGFzaERyb3Bkb3duKSBzdWJUYXNrc0NhY2hlUmVmLmN1cnJlbnQgPSB7fVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgfVxuICAgIG9uQ2hhbmdlPy4oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGFzdGUgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaW5wdXRSZWYuY3VycmVudD8udmFsdWUgPz8gJydcbiAgICAgIGNvbnN0IGhhc1RleHQgPSBjdXJyZW50VmFsdWUudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgICAgc2V0VmFsdWVUZXh0YXJlYShjdXJyZW50VmFsdWUpXG4gICAgICBzZXRJc0Rpc2FibGVkKCFoYXNUZXh0ICYmICFoYXNBdHRhY2htZW50cyAmJiAhc2VsZWN0ZWRDb250ZXh0VGFzaylcbiAgICB9LCAxMClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG5cbiAgICBjb25zdCBleGNlZWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZXhjbHVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGZpbGVTaXplczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9XG4gICAgbGV0IGZpbGVzSW5zZXJ0ZWQgPSBhdHRhY2htZW50cy5sZW5ndGhcblxuICAgIC8vIERlZmluaXIgbMOtbWl0ZXMgcGFyYSBkaWZlcmVudGVzIHRpcG9zIGRlIGFyY2hpdm9zXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcueGxzeCcsICcueGxzJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuICAgIGNvbnN0IGlzQXVkaW9Gb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuXG4gICAgQXJyYXkuZnJvbShmaWxlcykuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIC8vIFZhbGlkYWNpb25lcyBlc3BlY8OtZmljYXMgc2Vnw7puIGVsIHRpcG8gZGUgYXJjaGl2b1xuICAgICAgaWYgKGlzTmV3Rm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgbnVldm9zIGZvcm1hdG9zOiBoYXN0YSAxNU1CIHBvciBhcmNoaXZvLCBoYXN0YSA1IGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiAxNSAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiA1KSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPbGRGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBmb3JtYXRvcyBhbnRlcmlvcmVzOiBoYXN0YSAxTUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDEgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQXVkaW9Gb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBkZSBhdWRpbzogaGFzdGEgMTBNQiBwb3IgYXJjaGl2bywgaGFzdGEgNSBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gMTAgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldElzRGlzYWJsZWQoZmFsc2UpXG4gICAgaWYgKGV4Y2x1ZGVkRmlsZXMubGVuZ3RoIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiB0cnVlLCBleGNsdWRlZEZpbGVzLCBleGNlZWRlZEZpbGVzLCBmaWxlU2l6ZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2hDbGljayA9ICgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHsgb3B0aW9uOiAnZmlsZXMnIH0pXG4gICAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA+PSA1KSByZXR1cm5cbiAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIG9uRGVsZXRlQXR0YWNobWVudD8uKGZpbGVJZClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgY29uc3QgaGFzVGV4dCA9IHZhbHVlVGV4dGFyZWEudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBjb25zdCBoYXNBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICBzZXRJc0Rpc2FibGVkKCFoYXNUZXh0ICYmICFoYXNBdHRhY2htZW50cyAmJiAhc2VsZWN0ZWRDb250ZXh0VGFzaylcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJGb2N1cyA9ICgpID0+IHNldElzRm9jdXNlZCh0cnVlKVxuICBjb25zdCBoYW5kbGVXcmFwcGVyQmx1ciA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghd3JhcHBlclJlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzdWJUYXNrc0NhY2hlUmVmLmN1cnJlbnQgPSB7fVxuICAgICAgfVxuICAgIH0sIDApXG4gIH1cblxuICBjb25zdCBoYW5kbGVTdG9wR2VuZXJhdGlvbiA9ICgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U3RvcFJlc3BvbnNlKVxuICAgIG9uU3RvcEdlbmVyYXRpb24/LigpXG4gIH1cblxuICBjb25zdCBsb2FkU3ViVGFza3MgPSBhc3luYyAoXG4gICAgcHJvamVjdElkOiBzdHJpbmcsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICAgYWN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgb2Zmc2V0ID0gMFxuICApID0+IHtcbiAgICBzZXRTdWJMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFByb2plY3RUYXNrcyhwcm9qZWN0SWQsIHNpZ25hbCwgdGl0bGUsIG9mZnNldClcbiAgICAgIGlmIChhY3Rpb25JZCAmJiAhdGl0bGUgJiYgb2Zmc2V0ID09PSAwKSB7XG4gICAgICAgIHN1YlRhc2tzQ2FjaGVSZWYuY3VycmVudFthY3Rpb25JZF0gPSB7IHRhc2tzOiByZXN1bHQudGFza3MsIGhhc01vcmU6IHJlc3VsdC5oYXNNb3JlIH1cbiAgICAgIH1cbiAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgIHNldFN1YlRhc2tzKHByZXYgPT4gWy4uLnByZXYsIC4uLnJlc3VsdC50YXNrc10pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTdWJUYXNrcyhyZXN1bHQudGFza3MpXG4gICAgICB9XG4gICAgICBzZXRTdWJIYXNNb3JlKHJlc3VsdC5oYXNNb3JlKVxuICAgICAgc2V0U3ViT2Zmc2V0KG9mZnNldCArIHJlc3VsdC50YXNrcy5sZW5ndGgpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykgcmV0dXJuXG4gICAgICBpZiAob2Zmc2V0ID09PSAwKSBzZXRTdWJUYXNrcyhbXSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3ViTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVBY3Rpb25Nb3VzZUVudGVyID0gKGFjdGlvbjogRnJlcXVlbnRseVVzZWRBY3Rpb24pID0+IHtcbiAgICBpZiAoaGlkZVN1YlRpbWVyUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChoaWRlU3ViVGltZXJSZWYuY3VycmVudClcbiAgICBpZiAobG9hZFN1YlRpbWVyUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChsb2FkU3ViVGltZXJSZWYuY3VycmVudClcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcblxuICAgIGlmICghYWN0aW9uTmVlZHNTdWJncm91cChhY3Rpb24pKSB7XG4gICAgICBzZXRIb3ZlcmVkQWN0aW9uKG51bGwpXG4gICAgICBzZXRTdWJUYXNrcyhbXSlcbiAgICAgIHNldFN1YlNlYXJjaCgnJylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldEhvdmVyZWRBY3Rpb24oYWN0aW9uKVxuICAgIHNldFN1YlNlYXJjaCgnJylcbiAgICBzZXRTdWJPZmZzZXQoMClcblxuICAgIGNvbnN0IGNhY2hlZCA9IHN1YlRhc2tzQ2FjaGVSZWYuY3VycmVudFthY3Rpb24uaWRdXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgc2V0U3ViVGFza3MoY2FjaGVkLnRhc2tzKVxuICAgICAgc2V0U3ViSGFzTW9yZShjYWNoZWQuaGFzTW9yZSlcbiAgICAgIHNldFN1Yk9mZnNldChjYWNoZWQudGFza3MubGVuZ3RoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gS2VlcCBwcmV2aW91cyB0YXNrcyB2aXNpYmxlIHdoaWxlIGxvYWRpbmcgdG8gYXZvaWQgbGF5b3V0IHNoaWZ0cyAoZmxpY2tlcmluZykuXG4gICAgLy8gbG9hZFN1YlRhc2tzIChvZmZzZXQ9MCkgd2lsbCByZXBsYWNlIHRoZW0gd2hlbiBuZXcgcmVzdWx0cyBhcnJpdmUuXG4gICAgc2V0U3ViSGFzTW9yZShmYWxzZSlcblxuICAgIGxvYWRTdWJUaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBwcm9qZWN0SWQgPSBwcm9qZWN0Py5pZCAhPSBudWxsID8gU3RyaW5nKHByb2plY3QuaWQpIDogKGNoaXBzUHJvamVjdD8ucHJvamVjdElkID8/ICcnKVxuICAgICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBjb250cm9sbGVyXG4gICAgICB2b2lkIGxvYWRTdWJUYXNrcyhwcm9qZWN0SWQsIGNvbnRyb2xsZXIuc2lnbmFsLCBhY3Rpb24uaWQpXG4gICAgfSwgMzAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQWN0aW9uTW91c2VMZWF2ZSA9ICgpID0+IHtcbiAgICBpZiAobG9hZFN1YlRpbWVyUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChsb2FkU3ViVGltZXJSZWYuY3VycmVudClcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICBoaWRlU3ViVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0SG92ZXJlZEFjdGlvbihudWxsKVxuICAgICAgc2V0U3ViVGFza3MoW10pXG4gICAgfSwgMTUwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3ViTW91c2VFbnRlciA9ICgpID0+IHtcbiAgICBpZiAoaGlkZVN1YlRpbWVyUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChoaWRlU3ViVGltZXJSZWYuY3VycmVudClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN1Yk1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgaGlkZVN1YlRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldEhvdmVyZWRBY3Rpb24obnVsbClcbiAgICAgIHNldFN1YlRhc2tzKFtdKVxuICAgIH0sIDE1MClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN1YlNjcm9sbCA9IChlOiBVSUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmIChzdWJMb2FkaW5nIHx8ICFzdWJIYXNNb3JlKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGUuY3VycmVudFRhcmdldFxuICAgIGlmIChzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPCA1MCkge1xuICAgICAgY29uc3QgcHJvamVjdElkID0gcHJvamVjdD8uaWQgIT0gbnVsbCA/IFN0cmluZyhwcm9qZWN0LmlkKSA6IChjaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyAnJylcbiAgICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gY29udHJvbGxlclxuICAgICAgdm9pZCBsb2FkU3ViVGFza3MocHJvamVjdElkLCBjb250cm9sbGVyLnNpZ25hbCwgdW5kZWZpbmVkLCBzdWJTZWFyY2gudHJpbSgpIHx8IHVuZGVmaW5lZCwgc3ViT2Zmc2V0KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN1YlNlYXJjaENoYW5nZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICBzZXRTdWJTZWFyY2godmFsdWUpXG5cbiAgICBpZiAoc2VhcmNoRGVib3VuY2VSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KHNlYXJjaERlYm91bmNlUmVmLmN1cnJlbnQpXG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG5cbiAgICBzZXRTdWJPZmZzZXQoMClcblxuICAgIGlmICghdmFsdWUudHJpbSgpICYmIGhvdmVyZWRBY3Rpb24pIHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IHN1YlRhc2tzQ2FjaGVSZWYuY3VycmVudFtob3ZlcmVkQWN0aW9uLmlkXVxuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICBzZXRTdWJUYXNrcyhjYWNoZWQudGFza3MpXG4gICAgICAgIHNldFN1Ykhhc01vcmUoY2FjaGVkLmhhc01vcmUpXG4gICAgICAgIHNldFN1Yk9mZnNldChjYWNoZWQudGFza3MubGVuZ3RoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWFyY2hEZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBwcm9qZWN0SWQgPSBwcm9qZWN0Py5pZCAhPSBudWxsID8gU3RyaW5nKHByb2plY3QuaWQpIDogKGNoaXBzUHJvamVjdD8ucHJvamVjdElkID8/ICcnKVxuICAgICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBjb250cm9sbGVyXG4gICAgICB2b2lkIGxvYWRTdWJUYXNrcyhwcm9qZWN0SWQsIGNvbnRyb2xsZXIuc2lnbmFsLCB1bmRlZmluZWQsIHZhbHVlLnRyaW0oKSB8fCB1bmRlZmluZWQsIDApXG4gICAgfSwgNTAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXJDb250ZXh0VGFzayA9ICgpID0+IHtcbiAgICBzZXRTZWxlY3RlZENvbnRleHRUYXNrKG51bGwpXG4gICAgc2V0Q29udGV4dFByb21wdChudWxsKVxuICAgIHNldElzRGlzYWJsZWQodmFsdWVUZXh0YXJlYS50cmltKCkubGVuZ3RoID09PSAwICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN1YlRhc2tTZWxlY3QgPSAodGFzazogUHJvamVjdFRhc2tJdGVtKSA9PiB7XG4gICAgaWYgKCFob3ZlcmVkQWN0aW9uKSByZXR1cm5cbiAgICBzZXRDb250ZXh0UHJvbXB0KGhvdmVyZWRBY3Rpb24ucHJvbXB0KVxuICAgIHNldFNlbGVjdGVkQ29udGV4dFRhc2sodGFzaylcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzZXRIb3ZlcmVkQWN0aW9uKG51bGwpXG4gICAgc2V0U3ViVGFza3MoW10pXG4gICAgdXBkYXRlVGV4dGFyZWFWYWx1ZSgnJylcbiAgICBzZXRJc0Rpc2FibGVkKGZhbHNlKVxuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU2xhc2hBY3Rpb25TZWxlY3QgPSAoYWN0aW9uOiBGcmVxdWVudGx5VXNlZEFjdGlvbikgPT4ge1xuICAgIHVwZGF0ZVRleHRhcmVhVmFsdWUoYWN0aW9uLnByb21wdClcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcblxuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG4gIGNvbnN0IGhhc0hlYWRlckJ1dHRvbnMgPSAhaXNNQUlBXG5cbiAgY29uc3QgaWNvbkNvbG9ySW5hY3RpdmUgPSBpc0ZvY3VzZWQgPyAnIzY2NjY2NicgOiAnIzk5OSdcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3R5bGVkTUFJQUlucHV0V3JhcHBlclxuICAgICAgICByZWY9e3dyYXBwZXJSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgb25Gb2N1cz17aGFuZGxlV3JhcHBlckZvY3VzfVxuICAgICAgICBvbkJsdXI9e2hhbmRsZVdyYXBwZXJCbHVyfVxuICAgICAgPlxuICAgICAgICB7c2hvd1NsYXNoRHJvcGRvd24gJiYgKFxuICAgICAgICAgIDxTQ01JQ29udGV4dERyb3Bkb3duICRoYXNTdWJncm91cD17ISFob3ZlcmVkQWN0aW9ufT5cbiAgICAgICAgICAgIDxTQ01JQ29udGV4dE1haW5MaXN0PlxuICAgICAgICAgICAgICA8U0NNSUNvbnRleHREcm9wZG93blRpdGxlPi88L1NDTUlDb250ZXh0RHJvcGRvd25UaXRsZT5cbiAgICAgICAgICAgICAge3NsYXNoQWN0aW9ucy5tYXAoYWN0aW9uID0+IChcbiAgICAgICAgICAgICAgICA8U0NNSUNvbnRleHRPcHRpb25cbiAgICAgICAgICAgICAgICAgIGtleT17YWN0aW9uLmlkfVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTbGFzaEFjdGlvblNlbGVjdChhY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBoYW5kbGVBY3Rpb25Nb3VzZUVudGVyKGFjdGlvbil9XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9e2hhbmRsZUFjdGlvbk1vdXNlTGVhdmV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFNDTUlDb250ZXh0T3B0aW9uVGl0bGU+e2FjdGlvbi50aXRsZX08L1NDTUlDb250ZXh0T3B0aW9uVGl0bGU+XG4gICAgICAgICAgICAgICAgICA8U0NNSUNvbnRleHRPcHRpb25TdWJ0aXRsZT57YWN0aW9uLnN1YnRpdGxlIHx8IGFjdGlvbi5wcm9tcHR9PC9TQ01JQ29udGV4dE9wdGlvblN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvU0NNSUNvbnRleHRPcHRpb24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TQ01JQ29udGV4dE1haW5MaXN0PlxuICAgICAgICAgICAgeyEhaG92ZXJlZEFjdGlvbiAmJiAoXG4gICAgICAgICAgICAgIDxTQ01JU3ViQ29udGV4dERyb3Bkb3duXG4gICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXtoYW5kbGVTdWJNb3VzZUVudGVyfVxuICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17aGFuZGxlU3ViTW91c2VMZWF2ZX1cbiAgICAgICAgICAgICAgICBvblNjcm9sbD17aGFuZGxlU3ViU2Nyb2xsfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDTUlDb250ZXh0RHJvcGRvd25UaXRsZT57dCgnY2hhdC5zbGFzaENvbW1hbmRzLnNlbGVjdFRhc2snKX08L1NDTUlDb250ZXh0RHJvcGRvd25UaXRsZT5cbiAgICAgICAgICAgICAgICA8U0NNSVN1YkNvbnRleHRTZWFyY2hcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdjaGF0LnNsYXNoQ29tbWFuZHMuc2VhcmNoUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtzdWJTZWFyY2h9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlU3ViU2VhcmNoQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtzdWJUYXNrcy5tYXAodGFzayA9PiAoXG4gICAgICAgICAgICAgICAgICA8U0NNSVN1YkNvbnRleHRPcHRpb24ga2V5PXt0YXNrLmlkfSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gaGFuZGxlU3ViVGFza1NlbGVjdCh0YXNrKX0+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQ29udGV4dE9wdGlvblRpdGxlPnt0YXNrLnRpdGxlfTwvU0NNSUNvbnRleHRPcHRpb25UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlDb250ZXh0T3B0aW9uU3VidGl0bGU+e3Rhc2suaWR9PC9TQ01JQ29udGV4dE9wdGlvblN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9TQ01JU3ViQ29udGV4dE9wdGlvbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICB7c3ViTG9hZGluZyAmJiA8U0NNSVN1YkNvbnRleHRMb2FkZXI+e3QoJ2NoYXQuc2xhc2hDb21tYW5kcy5sb2FkaW5nJyl9PC9TQ01JU3ViQ29udGV4dExvYWRlcj59XG4gICAgICAgICAgICAgICAgeyFzdWJMb2FkaW5nICYmIHN1YlRhc2tzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8U0NNSVN1YkNvbnRleHRMb2FkZXI+e3QoJ2NoYXQuc2xhc2hDb21tYW5kcy5ub0FjdGl2ZVRhc2tzJyl9PC9TQ01JU3ViQ29udGV4dExvYWRlcj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1NDTUlTdWJDb250ZXh0RHJvcGRvd24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU0NNSUNvbnRleHREcm9wZG93bj5cbiAgICAgICAgKX1cbiAgICAgICAgeyEhYXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTJweCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGF0dGFjaG1lbnQubmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5RXh0ZW5zaW9uID0gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnXS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlQnlNaW1lID0gYXR0YWNobWVudC50eXBlPy5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID0gaXNJbWFnZUJ5TWltZSAmJiBpc0ltYWdlQnlFeHRlbnNpb25cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudC5uYW1lfSBrZXk9e2Ake2luZGV4fS0ke2F0dGFjaG1lbnQubmFtZX1gfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudCBpc0ltYWdlPXtpc0ltYWdlfT5cbiAgICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggY29sb3I9XCJyZ2JhKDE5MSwgMTkxLCAxOTEsIDEpXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgeyEhc2VsZWN0ZWRDb250ZXh0VGFzayAmJiAhIWNvbnRleHRQcm9tcHQgJiYgKFxuICAgICAgICAgIDxTQ01JSW5saW5lQ29udGV4dFByZXZpZXc+XG4gICAgICAgICAgICA8U0NNSUlubGluZUNvbnRleHRUZXh0Pntjb250ZXh0UHJvbXB0fSBkZSBsYSB0YXJlYTwvU0NNSUlubGluZUNvbnRleHRUZXh0PlxuICAgICAgICAgICAgPFNDTUlJbmxpbmVUYXNrTGluayBocmVmPXtgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS90YXNrcy8ke3NlbGVjdGVkQ29udGV4dFRhc2suaWR9L2RldGFpbGB9PlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRDb250ZXh0VGFzay5pZH0ge3NlbGVjdGVkQ29udGV4dFRhc2sudGl0bGV9XG4gICAgICAgICAgICA8L1NDTUlJbmxpbmVUYXNrTGluaz5cbiAgICAgICAgICAgIDxTQ01JSW5saW5lQ29udGV4dENsZWFyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0LnNsYXNoQ29tbWFuZHMuY2xlYXJUYXNrJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyQ29udGV4dFRhc2t9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIOKclVxuICAgICAgICAgICAgPC9TQ01JSW5saW5lQ29udGV4dENsZWFyPlxuICAgICAgICAgIDwvU0NNSUlubGluZUNvbnRleHRQcmV2aWV3PlxuICAgICAgICApfVxuICAgICAgICA8U3R5bGVkTUFJQUlucHV0XG4gICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgb25QYXN0ZT17aGFuZGxlUGFzdGV9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIGFsaWduQnV0dG9ucz17YWxpZ25CdXR0b25zfVxuICAgICAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgICAgLz5cbiAgICAgICAgPFN0eWxlZE1BSUFJbnB1dEJ1dHRvbnMgaGFzSGVhZGVyQnV0dG9ucz17aGFzSGVhZGVyQnV0dG9uc30+XG4gICAgICAgICAge2hhc0hlYWRlckJ1dHRvbnMgPyAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTBweCcgfX0+XG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXthdHRhY2htZW50cy5sZW5ndGggPj0gNSA/IHQoJ2NoYXQubGltaXRGaWxlcycpIDogdCgnY2hhdC5hdHRhY2hGaWxlJyl9PlxuICAgICAgICAgICAgICAgIDxTQ01JV3JhcHBlckF0dGFjaG1lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgIGlzTWF4aW1pemVkPXthdHRhY2htZW50cy5sZW5ndGggPj0gNX1cbiAgICAgICAgICAgICAgICAgICRpc0ZvY3VzZWQ9e2lzRm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUF0dGFjaENsaWNrfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxBdHRhY2hcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9eyFhdHRhY2htZW50cy5sZW5ndGggPyBpY29uQ29sb3JJbmFjdGl2ZSA6ICdyZ2JhKDEzNSwgNjQsIDE5MSwgMSknfVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU0NNSVdyYXBwZXJBdHRhY2htZW50QnV0dG9uPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnNlYXJjaFdlYicpfT5cbiAgICAgICAgICAgICAgICA8U0NNSVdyYXBwZXJXZWJTZWFyY2hCdXR0b25cbiAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXshIWlzV2ViU2VhcmNoQWN0aXZlfVxuICAgICAgICAgICAgICAgICAgJGlzRm9jdXNlZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlV2ViU2VhcmNoVG9nZ2xlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxHbG9iZVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNXZWJTZWFyY2hBY3RpdmUgPyAncmdiYSgxMzUsIDY0LCAxOTEsIDEpJyA6IGljb25Db2xvckluYWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU0NNSVdyYXBwZXJXZWJTZWFyY2hCdXR0b24+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuZGVlcFNlYXJjaCcpfT5cbiAgICAgICAgICAgICAgICA8U0NNSVdyYXBwZXJEZWVwU2VhcmNoQnV0dG9uXG4gICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17ISFpc0RlZXBTZWFyY2hBY3RpdmV9XG4gICAgICAgICAgICAgICAgICAkaXNGb2N1c2VkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVEZWVwU2VhcmNoVG9nZ2xlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUZWxlc2NvcGVJY29uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc0RlZXBTZWFyY2hBY3RpdmUgPyAncmdiYSgxMzUsIDY0LCAxOTEsIDEpJyA6IGljb25Db2xvckluYWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU0NNSVdyYXBwZXJEZWVwU2VhcmNoQnV0dG9uPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHtpc1dyaXRpbmcgPyAoXG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zdG9wJyl9PlxuICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BCdXR0b24gZGlzYWJsZWQ9e2ZhbHNlfSBvbkNsaWNrPXtoYW5kbGVTdG9wR2VuZXJhdGlvbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEljb24gLz5cbiAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU3RvcEJ1dHRvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzU3RyZWFtaW5nID8gdCgnY2hhdC5zZW5kJykgOiB0KCdjaGF0LnNlbmQnKX0+XG4gICAgICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZEJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkIHx8IGRpc2FibGVkfVxuICAgICAgICAgICAgICAgIGhhc1ZhbHVlcz17ISF2YWx1ZVRleHRhcmVhLmxlbmd0aH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQYXBlclBsYW5lIGNvbG9yPVwiI0JGQkZCRlwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZEJ1dHRvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICApfVxuICAgICAgICA8L1N0eWxlZE1BSUFJbnB1dEJ1dHRvbnM+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGFjY2VwdD1cIi50eHQsLm1kLC5jc3YsLmRvYywuZG9jeCwucG5nLC5qcGcsLmpwZWcsLnBkZiwueGxzeCwueGxzLC5mbGFjLC5tNGEsLm1wMywubXA0LC5vZ2EsLm9nZywud2F2LC53ZWJtXCJcbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdH1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkTUFJQUlucHV0V3JhcHBlcj5cbiAgICAgIHttb2RhbFByb3BzLmlzT3BlbiAmJiAoXG4gICAgICAgIDxNb2RhbEZpbGVFeGNlZWRzXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogZmFsc2UsIGV4Y2x1ZGVkRmlsZXM6IFtdLCBleGNlZWRlZEZpbGVzOiBbXSwgZmlsZVNpemVzOiB7fSB9KX1cbiAgICAgICAgICBleGNsdWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2x1ZGVkRmlsZXN9XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNlZWRlZEZpbGVzfVxuICAgICAgICAgIGZpbGVTaXplcz17bW9kYWxQcm9wcy5maWxlU2l6ZXN9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQXlEQSxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDbkcsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdD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