@projectcor/maia-components 2.30.3-1 → 2.31.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/App.js +4 -2
  3. package/lib/components/atoms/MAIAInput/MAIAInput.js +73 -14
  4. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +121 -0
  5. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +197 -0
  6. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +157 -0
  7. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +123 -0
  8. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +115 -0
  9. package/lib/components/atoms/ReasoningBlock/index.js +3 -0
  10. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +54 -0
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +391 -120
  12. package/lib/components/molecules/ChatAIMessages/newStyles.js +50 -18
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +42 -21
  14. package/lib/components/molecules/MessageFeedback/styles.js +6 -2
  15. package/lib/context/global-context.js +1 -1
  16. package/lib/dev/DevReasoningTimeline.js +235 -0
  17. package/lib/dev/reasoningTraceMock.js +556 -0
  18. package/lib/hooks/useChatManager/useChatManager.js +97 -59
  19. package/lib/hooks/useChatMessages/useChatMessages.js +28 -27
  20. package/lib/hooks/useEvent.js +2 -1
  21. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  22. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -3
  23. package/lib/hooks/useProjectSummaryConfig.js +36 -17
  24. package/lib/hooks/useReasoningTrace/index.js +3 -0
  25. package/lib/hooks/useReasoningTrace/reasoningStore.js +142 -0
  26. package/lib/hooks/useReasoningTrace/useReasoningTrace.js +14 -0
  27. package/lib/lang/br/index.js +237 -31
  28. package/lib/lang/en/index.js +237 -31
  29. package/lib/lang/es/index.js +237 -31
  30. package/lib/lang/fr/index.js +237 -31
  31. package/lib/services/maia/Orchestrator/orchestrator.js +9 -7
  32. package/lib/services/utils/mapChatMessages.js +21 -18
  33. package/lib/store/sessions/sessionStreamManager.js +98 -51
  34. package/lib/store/sessions/sessions.types.js +1 -1
  35. package/lib/types/Chat.js +1 -1
  36. package/lib/types/reasoning.js +2 -0
  37. package/lib/utils/autoApproveStorage.js +26 -0
  38. package/lib/utils/hitlAnalytics.js +4 -3
  39. package/lib/utils/reasoningMappers.js +62 -0
  40. package/lib/utils/streamActivityMessages.js +106 -41
  41. package/package.json +1 -1
@@ -19,7 +19,6 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
19
19
  /* eslint-disable jsx-a11y/click-events-have-key-events */
20
20
  /* eslint-disable jsx-a11y/no-static-element-interactions */
21
21
  import React, { memo, useCallback, useEffect, useLayoutEffect, useRef, useState, createElement as _createElement } from 'react';
22
- import { ArrowSmallDown } from '@projectcor/icons/lib/components/ArrowSmallDown';
23
22
  import { AttachmentCard } from '../../atoms/AttachmentCard/AttachmentCard';
24
23
  import { ApprovalBox } from '../../atoms/ApprovalBox/ApprovalBox';
25
24
  import { AttachmentPreviewModal } from '../../atoms/AttachmentPreviewModal';
@@ -35,14 +34,19 @@ import { useSmoothStreamText } from '../../../hooks/useSmoothStreamText';
35
34
  import { useStreamingMessage } from '../../../hooks/useStreamingMessage';
36
35
  import { LoadingText } from '../../atoms/LoadingText';
37
36
  import { AgentActivityIndicator } from '../../atoms/AgentActivityIndicator';
37
+ import { ReasoningBlock } from '../../atoms/ReasoningBlock/ReasoningBlock';
38
+ import { shouldStreamNarrationInTimeline } from '../../atoms/ReasoningBlock/reasoningLiveNarration';
39
+ import { ReasoningTimeline } from '../../atoms/ReasoningBlock/ReasoningTimeline';
40
+ import { SCTimelineIndicator } from '../../atoms/ReasoningBlock/ReasoningBlock.styles';
38
41
  import { isStreamingPlaceholderMessageId, resolveStreamLoadingDisplay } from '../../../utils/streamActivityMessages';
39
42
  import { resolveRetryTurnId, findUserMessageForRetry } from '../../../utils/retryCompletion';
43
+ import { useReasoningTrace } from '../../../hooks/useReasoningTrace';
40
44
  import { Loader } from '../../atoms/Loader';
41
45
  import { Fade } from '../../atoms/Fade';
42
46
  import { patchMaiaPanelSession, readMaiaPanelSession } from '../../../store/maiaPanelSessionPersistence';
43
47
  import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
44
48
  import { MessageFeedback } from '../MessageFeedback';
45
- import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCLoadingMessagesColumn, SCOptionsList, SCOptionItem, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn } from './newStyles';
49
+ import { SCCAIMessageWrapper, ScrollToBottomButton, SCScrollIconSwap, SCWritingDots, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCTurnSpacer, SCOptionsList, SCOptionItem, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn, SCLoadingMessagesColumn, SCMessagesGradientTop, SCMessagesGradientBottom } from './newStyles';
46
50
  import { Feedback } from '../MessageFeedback/MessageFeedback';
47
51
  import { useGlobalContext } from '../../../context/global-context';
48
52
  import { EntityLinkCustomLink, getEntityLinkWrapperClassName } from '../../../utils/entityLinkRender';
@@ -51,6 +55,24 @@ import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
51
55
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
52
56
  import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
53
57
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
58
+ /**
59
+ * Al anclar el turno, la pregunta no se pega al borde superior: dejamos asomar
60
+ * la cola del mensaje anterior para no perder el hilo de la conversación.
61
+ * Relativo al viewport porque un valor fijo se come demasiado en pantallas cortas.
62
+ */
63
+ var turnAnchorOffset = function turnAnchorOffset(viewportHeight) {
64
+ return Math.min(viewportHeight * 0.18, 200);
65
+ };
66
+
67
+ /**
68
+ * Duración del scroll animado: base y tope para recorridos largos, para que un
69
+ * salto de varias pantallas no se sienta un latigazo.
70
+ */
71
+ var TURN_SCROLL_DURATION_MS = 600;
72
+ var TURN_SCROLL_MAX_DURATION_MS = 800;
73
+
74
+ /** Distancia a partir de la cual la duración ya está en su tope. */
75
+ var TURN_SCROLL_LONG_DISTANCE_PX = 1200;
54
76
  var MessageWrapper = function MessageWrapper(_ref) {
55
77
  var isCurrentUser = _ref.isCurrentUser,
56
78
  children = _ref.children,
@@ -178,7 +200,7 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
178
200
  });
179
201
  });
180
202
  var MessageItem = /*#__PURE__*/memo(function (props) {
181
- var _props$projectMetadat;
203
+ var _props$reasoning, _props$projectMetadat;
182
204
  var id = props.id,
183
205
  user = props.user,
184
206
  message = props.message,
@@ -201,22 +223,22 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
201
223
  suggestions = props.suggestions,
202
224
  createAgentFollowUp = props.createAgentFollowUp,
203
225
  hasSelectedSuggestion = props.hasSelectedSuggestion,
204
- isLastMessage = props.isLastMessage;
226
+ isLastMessage = props.isLastMessage,
227
+ streamActivity = props.streamActivity;
205
228
  var _useState3 = useState(null),
206
229
  _useState4 = _slicedToArray(_useState3, 2),
207
230
  previewAttachment = _useState4[0],
208
231
  setPreviewAttachment = _useState4[1];
209
232
  var isCurrentUser = role === ChatHistoryRole.USER || user.id === authUser.id.toString();
210
233
  var isAssistant = role === ChatHistoryRole.ASSISTANT || user.id === 'assistant';
211
- // Mientras el agente "piensa" (streaming sin texto) no montamos el MessageItem:
212
- // un placeholder vacío sumaría otro gap de 36px encima del indicador de actividad.
213
234
  var isStreamingPlaceholder = isStreamingPlaceholderMessageId(id);
214
235
  var streamingText = useStreamingMessage(isStreaming || isStreamingPlaceholder ? id : null);
215
236
  var isActiveStreaming = !!isStreaming || isStreamingPlaceholder;
216
- var isThinking = isActiveStreaming && !streamingText;
217
- if (isThinking) {
218
- return null;
219
- }
237
+ var hasStreamText = Boolean(streamingText);
238
+ var reasoningTrace = useReasoningTrace(isAssistant && isActiveStreaming ? id : '');
239
+ var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText);
240
+ var showStreamingBody = isActiveStreaming && hasStreamText && !streamNarrationInTimeline;
241
+ var showActivityIndicator = isAssistant && isActiveStreaming && !!streamActivity;
220
242
  var messageAttachments = attachments && attachments.length > 0 ? attachments : !isAssistant && Array.isArray(sources) ? sources : [];
221
243
  var handleAttachmentClick = function handleAttachmentClick(attachment) {
222
244
  // Permitir previsualización si tiene archivo local o URLs del backend
@@ -314,8 +336,16 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
314
336
  };
315
337
  return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
316
338
  $isAssistant: isAssistant,
339
+ "data-message-id": id,
317
340
  children: [/*#__PURE__*/_jsxs(SCMessageItemInner, {
318
- children: [!!messageAttachments.length && /*#__PURE__*/_jsx(SCAttachmentsRow, {
341
+ children: [isAssistant && (isActiveStreaming ? /*#__PURE__*/_jsx(ReasoningTimeline, {
342
+ messageId: id,
343
+ streamActivity: streamActivity,
344
+ streamingText: streamingText
345
+ }) : /*#__PURE__*/_jsx(ReasoningBlock, {
346
+ messageId: id,
347
+ trace: (_props$reasoning = props.reasoning) !== null && _props$reasoning !== void 0 ? _props$reasoning : null
348
+ })), !!messageAttachments.length && /*#__PURE__*/_jsx(SCAttachmentsRow, {
319
349
  $isAssistant: isAssistant,
320
350
  children: messageAttachments.map(function (attachment, index) {
321
351
  var _attachment$type, _attachment$name;
@@ -341,9 +371,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
341
371
  }
342
372
  }, "".concat(attachment.id, "-").concat(attachment.name));
343
373
  })
344
- }), (!!message || isActiveStreaming) && !(isAssistant && !!messageAttachments.length) && /*#__PURE__*/_jsx(StreamingMessageBody, {
374
+ }), (!!message || showStreamingBody) && !(isAssistant && !!messageAttachments.length) && /*#__PURE__*/_jsx(StreamingMessageBody, {
345
375
  message: message !== null && message !== void 0 ? message : '',
346
- isStreaming: isActiveStreaming,
376
+ isStreaming: showStreamingBody,
347
377
  isCurrentUser: isCurrentUser,
348
378
  isAssistant: isAssistant,
349
379
  isFrontendCancelled: props.isFrontendCancelled,
@@ -359,6 +389,11 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
359
389
  suggestionsDisabled: isActiveStreaming || !!hasSelectedSuggestion,
360
390
  messageId: id,
361
391
  isLastMessage: isLastMessage
392
+ }), showActivityIndicator && /*#__PURE__*/_jsx(SCTimelineIndicator, {
393
+ children: /*#__PURE__*/_jsx(AgentActivityIndicator, {
394
+ activity: streamActivity,
395
+ compact: true
396
+ })
362
397
  }), approval && approval.pending_actions && /*#__PURE__*/_jsx(SCApprovalActionsColumn, {
363
398
  children: /*#__PURE__*/_jsx(ApprovalBox, {
364
399
  actions: approval.pending_actions,
@@ -407,7 +442,18 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
407
442
  var scrollThresholdRef = useRef(39);
408
443
  var lastScrollTopRef = useRef(0);
409
444
  var showScrollToBottomRef = useRef(false);
445
+ var showTopGradientRef = useRef(false);
446
+ var showBottomGradientRef = useRef(false);
410
447
  var scrollRafRef = useRef(null);
448
+ /**
449
+ * Turno con el scroll bajo control del usuario: desde que envía el mensaje y
450
+ * hasta el próximo envío no movemos el scroll por ningún motivo. Es
451
+ * independiente de la altura del spacer, que puede llegar a 0 sin desanclar.
452
+ */
453
+ var anchoredTurnIdRef = useRef(null);
454
+ var spacerElRef = useRef(null);
455
+ var spacerHeightRef = useRef(0);
456
+ var turnScrollRafRef = useRef(null);
411
457
  var wasLoadingMessagesRef = useRef(false);
412
458
  var lastScrolledSessionRef = useRef(null);
413
459
  var pendingScrollRestoreRef = useRef(null);
@@ -416,10 +462,18 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
416
462
  _useState6 = _slicedToArray(_useState5, 2),
417
463
  showScrollToBottom = _useState6[0],
418
464
  setShowScrollToBottom = _useState6[1];
419
- var _useState7 = useState({}),
465
+ var _useState7 = useState(false),
420
466
  _useState8 = _slicedToArray(_useState7, 2),
421
- selectedSuggestionMessageIds = _useState8[0],
422
- setSelectedSuggestionMessageIds = _useState8[1];
467
+ showTopGradient = _useState8[0],
468
+ setShowTopGradient = _useState8[1];
469
+ var _useState9 = useState(false),
470
+ _useState0 = _slicedToArray(_useState9, 2),
471
+ showBottomGradient = _useState0[0],
472
+ setShowBottomGradient = _useState0[1];
473
+ var _useState1 = useState({}),
474
+ _useState10 = _slicedToArray(_useState1, 2),
475
+ selectedSuggestionMessageIds = _useState10[0],
476
+ setSelectedSuggestionMessageIds = _useState10[1];
423
477
  var _useChatManager = useChatManager({
424
478
  chatId: initialChatId || undefined,
425
479
  userInitialMessage: userInitialMessage,
@@ -446,50 +500,36 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
446
500
  var handleSelectOption = useCallback(function (option) {
447
501
  changeProject(option);
448
502
  }, [changeProject]);
449
- var handleSuggestionClick = useCallback(function (messageId, suggestion) {
450
- if (!(suggestion !== null && suggestion !== void 0 && suggestion.trim())) return;
451
- if (selectedSuggestionMessageIds[messageId]) return;
452
- var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
453
- event(EVENTS.aiChatSuggestedAnswer, {
454
- agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
455
- });
456
- setSelectedSuggestionMessageIds(function (prev) {
457
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
458
- });
459
- var targetMessage = messages.find(function (msg) {
460
- return msg.id === messageId;
461
- });
462
- var isRetrySuggestion = !!(targetMessage !== null && targetMessage !== void 0 && targetMessage.isError) && suggestion === t('chat.retry');
463
- if (isRetrySuggestion) {
464
- var _lastUserMessage = messages.filter(function (msg) {
465
- return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
466
- }).at(-1);
467
- if (_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message) {
468
- var retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
469
- sendMessage(_lastUserMessage.message, retryAttachments);
470
- return;
471
- }
472
- }
473
- sendMessage(suggestion);
474
- }, [sendMessage, selectedSuggestionMessageIds, event, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type, messages, t, authUser.id]);
475
503
 
476
504
  /**
477
- * Actualiza el estado del botón "scroll to bottom" comparando la posición
478
- * actual del scroll con el fondo. Usa un ref para evitar `setState` cuando
479
- * el valor no cambia.
505
+ * Recalcula el botón "scroll to bottom" y los gradientes de borde a partir de
506
+ * la posición del scroll. Los refs evitan `setState` cuando el valor no cambia:
507
+ * esto corre en cada frame del stream.
480
508
  */
481
- var updateScrollBottomVisibility = useCallback(function () {
509
+ var updateScrollAffordances = useCallback(function () {
482
510
  var el = messagesRef.current;
483
511
  if (!el) return;
484
512
  var scrollTop = el.scrollTop,
485
513
  scrollHeight = el.scrollHeight,
486
514
  clientHeight = el.clientHeight;
487
- var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
515
+ // El spacer del turno es alto reservado, no contenido: si no lo descontamos
516
+ // la flecha y el gradiente de abajo quedan encendidos durante todo el turno.
517
+ var distanceFromBottom = scrollHeight - spacerHeightRef.current - scrollTop - clientHeight;
488
518
  var shouldShow = distanceFromBottom > 50;
489
519
  if (showScrollToBottomRef.current !== shouldShow) {
490
520
  showScrollToBottomRef.current = shouldShow;
491
521
  setShowScrollToBottom(shouldShow);
492
522
  }
523
+ var nextTopGradient = scrollTop > 1;
524
+ if (showTopGradientRef.current !== nextTopGradient) {
525
+ showTopGradientRef.current = nextTopGradient;
526
+ setShowTopGradient(nextTopGradient);
527
+ }
528
+ var nextBottomGradient = distanceFromBottom > 1;
529
+ if (showBottomGradientRef.current !== nextBottomGradient) {
530
+ showBottomGradientRef.current = nextBottomGradient;
531
+ setShowBottomGradient(nextBottomGradient);
532
+ }
493
533
  }, []);
494
534
 
495
535
  /**
@@ -509,33 +549,149 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
509
549
  if (!el) return;
510
550
  if (skipIfUserScrolling && userScrollingRef.current) return;
511
551
  el.scrollTop = el.scrollHeight;
512
- updateScrollBottomVisibility();
552
+ updateScrollAffordances();
513
553
  });
514
554
  };
515
555
  if (delayMs > 0) setTimeout(run, delayMs);else run();
516
- }, [updateScrollBottomVisibility]);
556
+ }, [updateScrollAffordances]);
557
+ var cancelTurnScroll = useCallback(function () {
558
+ if (turnScrollRafRef.current === null) return;
559
+ cancelAnimationFrame(turnScrollRafRef.current);
560
+ turnScrollRafRef.current = null;
561
+ }, []);
562
+
563
+ /**
564
+ * Scroll animado con easing propio: `behavior: 'smooth'` no permite regular la
565
+ * duración y el salto al anclar el turno queda demasiado seco.
566
+ */
567
+ var animateScrollTo = useCallback(function (top) {
568
+ cancelTurnScroll();
569
+ var el = messagesRef.current;
570
+ if (!el) return;
571
+ var from = el.scrollTop;
572
+ var distance = top - from;
573
+ if (Math.abs(distance) < 1) return;
574
+ var duration = TURN_SCROLL_DURATION_MS + (TURN_SCROLL_MAX_DURATION_MS - TURN_SCROLL_DURATION_MS) * Math.min(1, Math.abs(distance) / TURN_SCROLL_LONG_DISTANCE_PX);
575
+ var startedAt = performance.now();
576
+ var _step = function step(now) {
577
+ var progress = Math.min(1, (now - startedAt) / duration);
578
+ // easeOutExpo (~cubic-bezier(0.16, 1, 0.3, 1)): empieza a frenar mucho
579
+ // antes que el quint y aterriza sin corte perceptible.
580
+ var eased = progress === 1 ? 1 : 1 - Math.pow(2, -12 * progress);
581
+ el.scrollTop = from + distance * eased;
582
+ updateScrollAffordances();
583
+ turnScrollRafRef.current = progress < 1 ? requestAnimationFrame(_step) : null;
584
+ };
585
+ turnScrollRafRef.current = requestAnimationFrame(_step);
586
+ }, [cancelTurnScroll, updateScrollAffordances]);
587
+ useEffect(function () {
588
+ return cancelTurnScroll;
589
+ }, [cancelTurnScroll]);
590
+ var setSpacerHeight = useCallback(function (next) {
591
+ if (Math.abs(spacerHeightRef.current - next) < 1) return;
592
+ spacerHeightRef.current = next;
593
+ if (spacerElRef.current) {
594
+ spacerElRef.current.style.height = "".concat(next, "px");
595
+ }
596
+ }, []);
597
+ var clearTurnSpace = useCallback(function () {
598
+ anchoredTurnIdRef.current = null;
599
+ setSpacerHeight(0);
600
+ }, [setSpacerHeight]);
601
+
602
+ /**
603
+ * Devuelve el alto reservado que se puede sacar sin mover la vista: todo lo
604
+ * que quede por debajo del scroll actual. Si el usuario está en el fondo, se
605
+ * saca entero; si está a mitad de camino, se va drenando a medida que baja.
606
+ */
607
+ var drainTurnSpace = useCallback(function () {
608
+ var el = messagesRef.current;
609
+ if (!el || spacerHeightRef.current <= 0) return;
610
+ var removable = Math.max(0, el.scrollHeight - el.clientHeight - el.scrollTop);
611
+ setSpacerHeight(Math.max(0, spacerHeightRef.current - removable));
612
+ }, [setSpacerHeight]);
613
+
614
+ /**
615
+ * El usuario tomó el control del scroll: el turno deja de estar anclado y el
616
+ * espacio reservado empieza a devolverse. Sin ancla y con spacer > 0, el
617
+ * handler de scroll sigue drenando hasta que llega al fondo y no queda hueco.
618
+ */
619
+ var releaseTurnSpace = useCallback(function () {
620
+ if (!anchoredTurnIdRef.current && spacerHeightRef.current <= 0) return;
621
+ anchoredTurnIdRef.current = null;
622
+ drainTurnSpace();
623
+ }, [drainTurnSpace]);
624
+ var handleUserScrollIntent = useCallback(function () {
625
+ cancelTurnScroll();
626
+ releaseTurnSpace();
627
+ }, [cancelTurnScroll, releaseTurnSpace]);
628
+ var measureTurn = useCallback(function (questionId) {
629
+ var el = messagesRef.current;
630
+ var spacerEl = spacerElRef.current;
631
+ if (!el || !spacerEl) return null;
632
+ var questionEl = el.querySelector("[data-message-id=\"".concat(questionId, "\"]"));
633
+ if (!questionEl) return null;
634
+ var containerTop = el.getBoundingClientRect().top;
635
+ var questionTop = questionEl.getBoundingClientRect().top - containerTop + el.scrollTop;
636
+ var contentBottom = spacerEl.getBoundingClientRect().top - containerTop + el.scrollTop;
637
+ return {
638
+ el: el,
639
+ questionTop: questionTop,
640
+ turnHeight: contentBottom - questionTop
641
+ };
642
+ }, []);
643
+ var reserveTurnSpace = useCallback(function (questionId) {
644
+ var measured = measureTurn(questionId);
645
+ if (!measured) return;
646
+ var el = measured.el,
647
+ questionTop = measured.questionTop,
648
+ turnHeight = measured.turnHeight;
649
+
650
+ // Anclamos siempre, incluso cuando no haga falta reservar: durante el
651
+ // turno el scroll no se mueve solo en ningún caso.
652
+ anchoredTurnIdRef.current = questionId;
653
+ var offset = turnAnchorOffset(el.clientHeight);
654
+ var targetScrollTop = Math.max(0, questionTop - offset);
655
+ // Chat recién iniciado o conversación que aún entra en pantalla: la
656
+ // pregunta ya está arriba, no hay nada que subir ni que reservar.
657
+ if (targetScrollTop <= el.scrollTop) {
658
+ setSpacerHeight(0);
659
+ updateScrollAffordances();
660
+ return;
661
+ }
662
+
663
+ // Reservamos lo mínimo para que `targetScrollTop` sea alcanzable. El
664
+ // spacer se inserta de una (es alto reservado, no contenido visible);
665
+ // lo único que se percibe es el desplazamiento animado.
666
+ setSpacerHeight(Math.max(0, el.clientHeight - turnHeight - offset));
667
+ animateScrollTo(targetScrollTop);
668
+ }, [measureTurn, setSpacerHeight, updateScrollAffordances, animateScrollTo]);
669
+
670
+ /**
671
+ * Encoge el spacer a medida que crece la respuesta: el alto total del scroll
672
+ * queda constante y la vista no se mueve sola. Solo achica, nunca agranda,
673
+ * para no inyectar espacio en turnos que arrancaron sin reserva.
674
+ * Devuelve si el turno sigue anclado (aunque el spacer ya sea 0).
675
+ */
676
+ var syncTurnSpace = useCallback(function () {
677
+ if (!anchoredTurnIdRef.current) return false;
678
+ if (spacerHeightRef.current > 0) {
679
+ var measured = measureTurn(anchoredTurnIdRef.current);
680
+ if (measured) {
681
+ var offset = turnAnchorOffset(measured.el.clientHeight);
682
+ var reserved = Math.max(0, measured.el.clientHeight - measured.turnHeight - offset);
683
+ setSpacerHeight(Math.min(spacerHeightRef.current, reserved));
684
+ }
685
+ }
686
+ return true;
687
+ }, [measureTurn, setSpacerHeight]);
517
688
  var handleClickScrollToBottom = useCallback(function () {
518
- if (!messagesRef.current) return;
519
- messagesRef.current.scrollTo({
520
- top: messagesRef.current.scrollHeight,
521
- behavior: 'smooth'
522
- });
523
- // Dar tiempo al smooth-scroll antes de recalcular la visibilidad del botón.
524
- setTimeout(updateScrollBottomVisibility, 500);
525
- }, [updateScrollBottomVisibility]);
526
-
527
- // Al decidir en el ApprovalBox: el box colapsa (botones -> badge) y el stream
528
- // continúa abajo. Reactivar el auto-scroll y seguir el fondo para que la vista
529
- // no quede atrás (evita que aparezca la flecha de scroll-to-bottom).
530
- var handleApprovalDecisionWithScroll = useCallback(function () {
531
- userScrollingRef.current = false;
532
- scrollThresholdRef.current = 39;
533
- handleApprovalDecision.apply(void 0, arguments);
534
- scrollToBottomRaf();
535
- scrollToBottomRaf({
536
- delayMs: 100
537
- });
538
- }, [handleApprovalDecision, scrollToBottomRaf]);
689
+ var el = messagesRef.current;
690
+ if (!el) return;
691
+ clearTurnSpace();
692
+ // Misma curva y duración que el anclaje del turno: el `smooth` nativo frena seco.
693
+ animateScrollTo(el.scrollHeight - el.clientHeight);
694
+ }, [clearTurnSpace, animateScrollTo]);
539
695
  var handleScrollToBottom = useCallback(function (e) {
540
696
  var container = e.currentTarget;
541
697
  if (scrollRafRef.current !== null) {
@@ -556,7 +712,12 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
556
712
  }
557
713
  userScrollingRef.current = !isNearBottom;
558
714
  lastScrollTopRef.current = scrollTop;
559
- updateScrollBottomVisibility();
715
+
716
+ // Turno ya liberado por el usuario: seguimos devolviendo el alto
717
+ // reservado mientras baja, para que al llegar al último mensaje no
718
+ // quede hueco debajo.
719
+ if (!anchoredTurnIdRef.current) drainTurnSpace();
720
+ updateScrollAffordances();
560
721
  if (initialChatId && scrollTop > 0) {
561
722
  if (scrollPersistTimerRef.current != null) {
562
723
  window.clearTimeout(scrollPersistTimerRef.current);
@@ -573,7 +734,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
573
734
  }
574
735
  handleScroll(container);
575
736
  });
576
- }, [authUser.id, handleScroll, initialChatId, onScrollToBottom, updateScrollBottomVisibility]);
737
+ }, [authUser.id, drainTurnSpace, handleScroll, initialChatId, onScrollToBottom, updateScrollAffordances]);
577
738
 
578
739
  // refs to stabilize functions and avoid unnecessary re-renders
579
740
  var sendMessageRef = useRef(sendMessage);
@@ -590,6 +751,45 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
590
751
  sendMessageRef.current = sendMessage;
591
752
  stopGenerationRef.current = stopGeneration;
592
753
  onSendMessageReadyRef.current = onSendMessageReady;
754
+
755
+ /**
756
+ * `handleSuggestionClick` se pasa a TODOS los MessageItem, así que su identidad
757
+ * decide si el `memo` de la lista sostiene. Leemos por ref lo que cambia en cada
758
+ * update (`messages`, `sendMessage`, las sugerencias ya elegidas) para que el
759
+ * callback sea estable: si no, al terminar el stream se repinta el chat entero
760
+ * y cada MaiaStreamdown vuelve a parsear su markdown.
761
+ */
762
+ var messagesDataRef = useRef(messages);
763
+ messagesDataRef.current = messages;
764
+ var selectedSuggestionMessageIdsRef = useRef(selectedSuggestionMessageIds);
765
+ selectedSuggestionMessageIdsRef.current = selectedSuggestionMessageIds;
766
+ var handleSuggestionClick = useCallback(function (messageId, suggestion) {
767
+ if (!(suggestion !== null && suggestion !== void 0 && suggestion.trim())) return;
768
+ if (selectedSuggestionMessageIdsRef.current[messageId]) return;
769
+ var currentMessages = messagesDataRef.current;
770
+ var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
771
+ event(EVENTS.aiChatSuggestedAnswer, {
772
+ agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
773
+ });
774
+ setSelectedSuggestionMessageIds(function (prev) {
775
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
776
+ });
777
+ var targetMessage = currentMessages.find(function (msg) {
778
+ return msg.id === messageId;
779
+ });
780
+ var isRetrySuggestion = !!(targetMessage !== null && targetMessage !== void 0 && targetMessage.isError) && suggestion === t('chat.retry');
781
+ if (isRetrySuggestion) {
782
+ var _lastUserMessage = currentMessages.filter(function (msg) {
783
+ return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
784
+ }).at(-1);
785
+ if (_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message) {
786
+ var retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
787
+ sendMessageRef.current(_lastUserMessage.message, retryAttachments);
788
+ return;
789
+ }
790
+ }
791
+ sendMessageRef.current(suggestion);
792
+ }, [event, agent, t, authUser.id]);
593
793
  useEffect(function () {
594
794
  if (onSendMessageReadyRef.current) {
595
795
  onSendMessageReadyRef.current(sendMessageProxyRef.current, stopGenerationProxyRef.current, waitingResponse, isWriting);
@@ -619,6 +819,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
619
819
  // contra el último valor observado y ajusta solo cuando cambia. Así el
620
820
  // scroll queda perfectamente sincronizado con la animación del texto sin
621
821
  // depender de la cadencia del streamingStore.
822
+ // Con el turno anclado este loop solo encoge el spacer: no toca el scroll.
622
823
  useEffect(function () {
623
824
  if (!waitingResponse && !isWriting) return undefined;
624
825
  if (!messagesRef.current) return undefined;
@@ -630,13 +831,20 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
630
831
  rafId = null;
631
832
  return;
632
833
  }
834
+ if (syncTurnSpace()) {
835
+ // El scroll no se mueve, pero el contenido crece: la flecha y el
836
+ // gradiente de abajo tienen que encenderse apenas se pasa del viewport.
837
+ updateScrollAffordances();
838
+ rafId = requestAnimationFrame(_tick);
839
+ return;
840
+ }
633
841
  var currentHeight = el.scrollHeight;
634
842
  if (currentHeight !== lastHeight) {
635
843
  lastHeight = currentHeight;
636
844
  if (!userScrollingRef.current) {
637
845
  el.scrollTop = currentHeight;
638
846
  }
639
- updateScrollBottomVisibility();
847
+ updateScrollAffordances();
640
848
  }
641
849
  rafId = requestAnimationFrame(_tick);
642
850
  };
@@ -644,16 +852,43 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
644
852
  return function () {
645
853
  if (rafId != null) cancelAnimationFrame(rafId);
646
854
  };
647
- }, [waitingResponse, isWriting, updateScrollBottomVisibility]);
855
+ }, [waitingResponse, isWriting, syncTurnSpace, updateScrollAffordances]);
648
856
 
649
857
  // Al comenzar a esperar la respuesta del backend, scroll inicial al fondo.
650
858
  useEffect(function () {
651
- if (waitingResponse && messagesRef.current) {
859
+ if (waitingResponse && messagesRef.current && !anchoredTurnIdRef.current) {
652
860
  scrollToBottomRaf({
653
861
  skipIfUserScrolling: true
654
862
  });
655
863
  }
656
864
  }, [waitingResponse, scrollToBottomRaf]);
865
+ var lastReservedQuestionRef = useRef(null);
866
+
867
+ // Cambio de chat: el ancla y el spacer del turno anterior dejan de aplicar.
868
+ useEffect(function () {
869
+ if (!loadingMessages) return;
870
+ lastReservedQuestionRef.current = null;
871
+ clearTurnSpace();
872
+ }, [loadingMessages, clearTurnSpace]);
873
+
874
+ // Al enviar un mensaje: anclamos el turno y hacemos el único scroll del ciclo.
875
+ useEffect(function () {
876
+ if (loadingMessages || isLoadingMoreMessages) return;
877
+ var questionId = null;
878
+ for (var index = messages.length - 1; index >= 0; index -= 1) {
879
+ var _messages$index;
880
+ if ((_messages$index = messages[index]) !== null && _messages$index !== void 0 && (_messages$index = _messages$index.id) !== null && _messages$index !== void 0 && _messages$index.startsWith('question-')) {
881
+ questionId = messages[index].id;
882
+ break;
883
+ }
884
+ }
885
+ if (!questionId || questionId === lastReservedQuestionRef.current) return;
886
+ lastReservedQuestionRef.current = questionId;
887
+ userScrollingRef.current = false;
888
+ requestAnimationFrame(function () {
889
+ return reserveTurnSpace(questionId);
890
+ });
891
+ }, [messages, loadingMessages, isLoadingMoreMessages, reserveTurnSpace]);
657
892
 
658
893
  // Scroll cuando cambian los mensajes: distingue "nuevo mensaje" (agregado)
659
894
  // de "reemplazo" (mismo id/length, ej. feedback o approvalStatus). En
@@ -700,7 +935,14 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
700
935
  lastMessagesLengthRef.current = messages.length;
701
936
  var isNewMessage = lastId !== prevId || messages.length !== prevLen;
702
937
  if (!isNewMessage) {
703
- updateScrollBottomVisibility();
938
+ updateScrollAffordances();
939
+ return;
940
+ }
941
+
942
+ // Turno anclado: ni el reemplazo del placeholder por el mensaje final, ni la
943
+ // aparición del ApprovalBox mueven el scroll. Solo se ajusta el spacer.
944
+ if (anchoredTurnIdRef.current) {
945
+ requestAnimationFrame(syncTurnSpace);
704
946
  return;
705
947
  }
706
948
  var container = messagesRef.current;
@@ -711,18 +953,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
711
953
  var isApproval = !!lastMessage && (lastMessage.id.startsWith('approval-') || !!lastMessage.approval);
712
954
  var isAnswerOrQuestion = !!lastMessage && (lastMessage.id.startsWith('answer-') || lastMessage.id.startsWith('question-'));
713
955
 
714
- // Approval: secuencia de scrolls con delay porque el ApprovalBox necesita
715
- // un tick para medirse. Scrollea aunque el usuario no esté al fondo si no
716
- // está scrolleando manualmente.
717
- if (isApproval && (isAtBottom || !userScrollingRef.current)) {
718
- scrollToBottomRaf();
719
- scrollToBottomRaf();
720
- scrollToBottomRaf({
721
- delayMs: 100
722
- });
723
- return;
724
- }
725
-
726
956
  // Nuevos answer/question: scroll si el usuario ya estaba al fondo.
727
957
  if (isAnswerOrQuestion && isAtBottom) {
728
958
  scrollToBottomRaf();
@@ -735,8 +965,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
735
965
  scrollToBottomRaf();
736
966
  return;
737
967
  }
738
- updateScrollBottomVisibility();
739
- }, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf, updateScrollBottomVisibility]);
968
+ updateScrollAffordances();
969
+ }, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf, syncTurnSpace, updateScrollAffordances]);
740
970
 
741
971
  // Al abrir/cargar una conversación el contenedor se remonta (Loader → lista) con
742
972
  // scrollTop=0. Forzamos ir al fondo al terminar loadMessages, sin afectar paginación hacia arriba.
@@ -755,6 +985,13 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
755
985
  });
756
986
  }, [loadingMessages, messages.length, scrollToBottomRaf]);
757
987
 
988
+ // Estado inicial del botón scroll-to-bottom al terminar loadingMessages.
989
+ useEffect(function () {
990
+ if (!loadingMessages) {
991
+ updateScrollAffordances();
992
+ }
993
+ }, [loadingMessages, messages.length, updateScrollAffordances]);
994
+
758
995
  // Obtener el último mensaje del usuario para verificar si tiene attachments
759
996
  var lastUserMessage = messages.filter(function (msg) {
760
997
  return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
@@ -772,7 +1009,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
772
1009
  t: t
773
1010
  });
774
1011
  var isScrollOnParent = !!expanded;
775
- var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
776
1012
  useEffect(function () {
777
1013
  if (!initialChatId) {
778
1014
  pendingScrollRestoreRef.current = null;
@@ -808,6 +1044,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
808
1044
  children: /*#__PURE__*/_jsx(Loader, {})
809
1045
  });
810
1046
  }
1047
+ var lastMessage = messages[messages.length - 1];
1048
+ var hasMessageLevelIndicator = !!lastMessage && isStreamingPlaceholderMessageId(lastMessage.id) && (waitingResponse || isWriting);
811
1049
  var messagesContent = /*#__PURE__*/_jsxs(_Fragment, {
812
1050
  children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
813
1051
  text: t('chat.loadingMore')
@@ -834,7 +1072,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
834
1072
  authUser: authUser,
835
1073
  handleSelectOption: handleSelectOption,
836
1074
  handleFeedback: handleFeedback,
837
- handleApprovalDecision: handleApprovalDecisionWithScroll,
1075
+ handleApprovalDecision: handleApprovalDecision,
838
1076
  handleSuggestionClick: handleSuggestionClick,
839
1077
  handleRetry: canRetry ? function () {
840
1078
  return retryMessage(message);
@@ -843,41 +1081,74 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
843
1081
  disableFeedback: messageFeedback,
844
1082
  isStreaming: isStreaming,
845
1083
  isLastMessage: isLastMessage,
846
- expanded: expanded
1084
+ expanded: expanded,
1085
+ streamActivity: isStreaming ? streamLoadingDisplay : null
847
1086
  }));
848
1087
  })
849
- }), streamLoadingDisplay && /*#__PURE__*/_jsx(SCLoadingMessagesColumn, {
1088
+ }), !hasMessageLevelIndicator && streamLoadingDisplay && /*#__PURE__*/_jsx(SCLoadingMessagesColumn, {
850
1089
  children: /*#__PURE__*/_jsx(AgentActivityIndicator, {
851
1090
  activity: streamLoadingDisplay
852
1091
  })
1092
+ }), /*#__PURE__*/_jsx(SCTurnSpacer, {
1093
+ ref: spacerElRef,
1094
+ "aria-hidden": "true"
853
1095
  })]
854
1096
  });
855
- return /*#__PURE__*/_jsxs(SCMessagesOuter, {
856
- $scrollOnParent: isScrollOnParent,
857
- children: [isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
858
- ref: messagesRef,
859
- onScroll: handleScrollToBottom,
860
- children: /*#__PURE__*/_jsx(SCMessagesInner, {
861
- $scrollOnParent: isScrollOnParent,
862
- $isMarketplaceGlobal: isMarketplaceGlobalAgent,
1097
+ return (
1098
+ /*#__PURE__*/
1099
+ // Si el usuario mueve el scroll abortamos la animación y soltamos el turno:
1100
+ // no le peleamos el control del contenedor.
1101
+ _jsxs(SCMessagesOuter, {
1102
+ $scrollOnParent: isScrollOnParent,
1103
+ onWheel: handleUserScrollIntent,
1104
+ onTouchStart: handleUserScrollIntent,
1105
+ children: [/*#__PURE__*/_jsx(SCMessagesGradientTop, {
1106
+ $show: showTopGradient,
1107
+ "aria-hidden": "true"
1108
+ }), isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
1109
+ ref: messagesRef,
1110
+ onScroll: handleScrollToBottom,
1111
+ children: /*#__PURE__*/_jsx(SCMessagesInner, {
1112
+ $scrollOnParent: isScrollOnParent,
1113
+ children: messagesContent
1114
+ })
1115
+ }) : /*#__PURE__*/_jsx(SCMessagesInner, {
1116
+ ref: messagesRef,
1117
+ onScroll: handleScrollToBottom,
1118
+ $scrollOnParent: false,
863
1119
  children: messagesContent
864
- })
865
- }) : /*#__PURE__*/_jsx(SCMessagesInner, {
866
- ref: messagesRef,
867
- onScroll: handleScrollToBottom,
868
- $scrollOnParent: false,
869
- $isMarketplaceGlobal: isMarketplaceGlobalAgent,
870
- children: messagesContent
871
- }), showScrollToBottom && /*#__PURE__*/_jsx(ScrollToBottomButton, {
872
- type: "button",
873
- onClick: handleClickScrollToBottom,
874
- children: /*#__PURE__*/_jsx(ArrowSmallDown, {
875
- color: "#666",
876
- width: "20px",
877
- height: "20px"
878
- })
879
- })]
880
- });
1120
+ }), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
1121
+ $show: showBottomGradient,
1122
+ "aria-hidden": "true"
1123
+ }), showScrollToBottom && /*#__PURE__*/_jsxs(ScrollToBottomButton, {
1124
+ type: "button",
1125
+ onClick: handleClickScrollToBottom,
1126
+ children: [/*#__PURE__*/_jsx(SCScrollIconSwap, {
1127
+ $visible: isWriting,
1128
+ "aria-hidden": true,
1129
+ children: /*#__PURE__*/_jsxs(SCWritingDots, {
1130
+ children: [/*#__PURE__*/_jsx("span", {}), /*#__PURE__*/_jsx("span", {}), /*#__PURE__*/_jsx("span", {})]
1131
+ })
1132
+ }), /*#__PURE__*/_jsx(SCScrollIconSwap, {
1133
+ $visible: !isWriting,
1134
+ "aria-hidden": true,
1135
+ children: /*#__PURE__*/_jsx("svg", {
1136
+ xmlns: "http://www.w3.org/2000/svg",
1137
+ width: 12,
1138
+ height: 12,
1139
+ fill: "none",
1140
+ children: /*#__PURE__*/_jsx("path", {
1141
+ stroke: "#202020",
1142
+ strokeLinecap: "round",
1143
+ strokeLinejoin: "round",
1144
+ strokeWidth: 1.5,
1145
+ d: "M6 .75v10.5M.75 6 6 11.25 11.25 6"
1146
+ })
1147
+ })
1148
+ })]
1149
+ })]
1150
+ })
1151
+ );
881
1152
  };
882
1153
  export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
883
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJNYWlhU3RyZWFtZG93biIsIkNoYXRIaXN0b3J5Um9sZSIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwicmVzb2x2ZVJldHJ5VHVybklkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NNZXNzYWdlc091dGVyIiwiU0NNZXNzYWdlc1Njcm9sbCIsIlNDTWVzc2FnZXNJbm5lciIsIlNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiRmVlZGJhY2siLCJ1c2VHbG9iYWxDb250ZXh0IiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwidW5kZWZpbmVkIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsImhhbmRsZVJldHJ5Iiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJpc1RoaW5raW5nIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV4dGVuc2lvbiIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiaW5jbHVkZXMiLCJjb25jYXQiLCJ0eXBlIiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImFicnVwdCIsImRvY3VtZW50IiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhc0ZlZWRiYWNrIiwiJGlzQXNzaXN0YW50IiwibWVzc2FnZUV4dHJhQ29udGVudCIsImZlZWRiYWNrIiwic2Vzc2lvbklkIiwic3BsaXQiLCJmaWx0ZXIiLCJxdWVzdGlvbklkIiwiam9pbiIsImluZGV4IiwiX2F0dGFjaG1lbnQkdHlwZSIsIl9hdHRhY2htZW50JG5hbWUiLCJhdHRhY2htZW50VHlwZSIsInRvTG93ZXJDYXNlIiwiYXR0YWNobWVudE5hbWUiLCJpc0F1ZGlvRmlsZSIsInN0YXJ0c1dpdGgiLCJzb21lIiwiZXh0IiwiZW5kc1dpdGgiLCJwb3NpdGlvbkluZGV4Iiwib25Eb3dubG9hZCIsInBlbmRpbmdfYWN0aW9ucyIsImFjdGlvbnMiLCJzdGF0dXMiLCJvbkFwcHJvdmUiLCJ0aHJlYWRJZHMiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY1IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJ1c2VyU2Nyb2xsaW5nUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNjcm9sbFJhZlJlZiIsIndhc0xvYWRpbmdNZXNzYWdlc1JlZiIsImxhc3RTY3JvbGxlZFNlc3Npb25SZWYiLCJwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiIsInNjcm9sbFBlcnNpc3RUaW1lclJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJyZXRyeU1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInRyaW0iLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJpc1JldHJ5U3VnZ2VzdGlvbiIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwicmV0cnlBdHRhY2htZW50cyIsImVudGl0eSIsInVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93Iiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkc2tpcElmVXNlclNjcm9sIiwic2tpcElmVXNlclNjcm9sbGluZyIsIl9vcHRzJGRlbGF5TXMiLCJkZWxheU1zIiwicnVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsInNjcm9sbFRvIiwidG9wIiwiYmVoYXZpb3IiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uV2l0aFNjcm9sbCIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiZSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJyYWZJZCIsImxhc3RIZWlnaHQiLCJ0aWNrIiwiY3VycmVudEhlaWdodCIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbWVzc2FnZXMkaWQiLCJfbWVzc2FnZXMiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJpc0F0Qm90dG9tIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJpc0FwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiX21lc3NhZ2VzJGlkMiIsIl9tZXNzYWdlczIiLCJqdXN0RmluaXNoZWRMb2FkaW5nIiwiYXR0YWNobWVudHNDb3VudCIsInN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiaXNTY3JvbGxPblBhcmVudCIsInNlc3Npb24iLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwiZmlsbCIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsInR1cm5JZCIsInVzZXJNZXNzYWdlRm9yUmV0cnkiLCJjYW5SZXRyeSIsImlzX2NhbmNlbGxlZCIsImtleSIsImFjdGl2aXR5IiwiJHNjcm9sbE9uUGFyZW50IiwicmVmIiwib25TY3JvbGwiLCIkaXNNYXJrZXRwbGFjZUdsb2JhbCIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJDaGF0QUlNZXNzYWdlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlNZXNzYWdlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFycm93U21hbGxEb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXJyb3dTbWFsbERvd24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCwgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcbmltcG9ydCB7IHBhdGNoTWFpYVBhbmVsU2Vzc2lvbiwgcmVhZE1haWFQYW5lbFNlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhUGFuZWxTZXNzaW9uUGVyc2lzdGVuY2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgaGFuZGxlUmV0cnk/OiAoKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIG9uUmV0cnk/OiAoKSA9PiB2b2lkXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ/OiBib29sZWFuXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgLy8gVGV4dG8gZGVsIHN0cmVhbTogc29sbyBzZSBsZWUgZGVsIHN0b3JlIGN1YW5kbyBlc3RlIG1lbnNhamUgZXMgZWxcbiAgICAvLyBxdWUgZXN0w6EgZW4gc3RyZWFtaW5nLiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBhw61zbGEgZWwgcmUtcmVuZGVyIGFcbiAgICAvLyBlc3RlIGNvbXBvbmVudGUsIHNpbiB0b2NhciBlbCByZXN0byBkZWwgw6FyYm9sLlxuICAgIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKHByb3BzLmlzU3RyZWFtaW5nID8gcHJvcHMubWVzc2FnZUlkIDogbnVsbClcbiAgICBjb25zdCByYXdUZXh0ID0gcHJvcHMuaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogcHJvcHMubWVzc2FnZVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/ICh3aW5kb3cgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgICAgICAgICAgIHN0cmVhbUJ1ZmZlck1zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1MYWdNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1XYXJtdXBNcz86IG51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIDoge31cbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwge1xuICAgICAgZW5hYmxlZDogISFwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICAgICAgc25hcFRvV29yZEJvdW5kYXJ5OiB0cnVlLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUxhZ01zICE9IG51bGwgJiYgeyB0YXJnZXRMYWdNczogd2luRmxhZ3Muc3RyZWFtTGFnTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogd2luRmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgIT0gbnVsbCAmJiB7IHRhcmdldEJ1ZmZlck1zOiB3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgIT0gbnVsbCAmJiB7IG1pbkJ1ZmZlckNoYXJzOiB3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiB3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG5cbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gICAgY29uc3QgbWVudGlvbk5vZGVzID0gaGFzTWVudGlvbnMgPyByZW5kZXJUZXh0V2l0aE1lbnRpb25zKGRpc3BsYXlUZXh0KSA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZShkaXNwbGF5VGV4dCl9XG4gICAgICAgID5cbiAgICAgICAgICB7aGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzID8gKFxuICAgICAgICAgICAgLy8gU2kgaGF5IG1lbnRpb25zLCByZW5kZXJpemFyIGRpcmVjdGFtZW50ZSAoc2luIG1hcmtkb3duIGVuIGVsIG1pc21vIHDDoXJyYWZvKVxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIC8vIFNpbiBtZW50aW9ucywgcGFzYXIgYSBTdHJlYW1kb3duIHBhcmEgbWFya2Rvd24gc3VwcG9ydFxuICAgICAgICAgICAgPE1haWFTdHJlYW1kb3duXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJjaGF0XCJcbiAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBFbnRpdHlMaW5rQ3VzdG9tTGluayB9IGFzIE1haWFTdHJlYW1kb3duUHJvcHNbJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9eyEhcHJvcHMuaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIDwvTWFpYVN0cmVhbWRvd24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICFwcm9wcy5pc1N0cmVhbWluZyAmJlxuICAgICAgICAgICghcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCB8fCAhIXByb3BzLm9uUmV0cnkpICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICAgIHNvdXJjZXM9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17cHJvcHMuZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBvblJldHJ5PXtwcm9wcy5vblJldHJ5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICghcHJvcHMuaXNFcnJvciB8fCBwcm9wcy5zdWdnZXN0aW9ucz8ubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3Byb3BzLnN1Z2dlc3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICBoYW5kbGVSZXRyeSxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAvLyBNaWVudHJhcyBlbCBhZ2VudGUgXCJwaWVuc2FcIiAoc3RyZWFtaW5nIHNpbiB0ZXh0bykgbm8gbW9udGFtb3MgZWwgTWVzc2FnZUl0ZW06XG4gIC8vIHVuIHBsYWNlaG9sZGVyIHZhY8OtbyBzdW1hcsOtYSBvdHJvIGdhcCBkZSAzNnB4IGVuY2ltYSBkZWwgaW5kaWNhZG9yIGRlIGFjdGl2aWRhZC5cbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGlzVGhpbmtpbmcgPSBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhc3RyZWFtaW5nVGV4dFxuICBpZiAoaXNUaGlua2luZykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgeyEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnQ/LnR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzQXVkaW9GaWxlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSB8fFxuICAgICAgICAgICAgICAgIFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10uaW5jbHVkZXMoYXR0YWNobWVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLnNvbWUoZXh0ID0+XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50TmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChpc0F1ZGlvRmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiA8QXR0YWNobWVudENhcmRBdWRpbyBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9IGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZD17KCkgPT4gaGFuZGxlQXR0YWNobWVudERvd25sb2FkKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBdHRhY2htZW50c1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgeyghIW1lc3NhZ2UgfHwgaXNBY3RpdmVTdHJlYW1pbmcpICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzQWN0aXZlU3RyZWFtaW5nfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH1cbiAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICBhcHByb3ZhbD17YXBwcm92YWx9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgc291cmNlcz17c291cmNlc31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA9e2NyZWF0ZUFnZW50Rm9sbG93VXB9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFja0NsaWNrPXtoYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtkaXNhYmxlRmVlZGJhY2sgPz8gbnVsbH1cbiAgICAgICAgICAgIG9uUmV0cnk9e2hhbmRsZVJldHJ5fVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXtpc0FjdGl2ZVN0cmVhbWluZyB8fCAhIWhhc1NlbGVjdGVkU3VnZ2VzdGlvbn1cbiAgICAgICAgICAgIG1lc3NhZ2VJZD17aWR9XG4gICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCB3YXNMb2FkaW5nTWVzc2FnZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGxhc3RTY3JvbGxlZFNlc3Npb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN1Z2dlc3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24/LnRyaW0oKSkgcmV0dXJuXG4gICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlSWRdKSByZXR1cm5cbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gbWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBjb25zdCBpc1JldHJ5U3VnZ2VzdGlvbiA9ICEhdGFyZ2V0TWVzc2FnZT8uaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSB0KCdjaGF0LnJldHJ5JylcbiAgICAgIGlmIChpc1JldHJ5U3VnZ2VzdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgICAgICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgICAuYXQoLTEpXG4gICAgICAgIGlmIChsYXN0VXNlck1lc3NhZ2U/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICBjb25zdCByZXRyeUF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMpXG4gICAgICAgICAgICA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzKVxuICAgICAgICAgICAgICA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzXG4gICAgICAgICAgICAgIDogW11cbiAgICAgICAgICBzZW5kTWVzc2FnZShsYXN0VXNlck1lc3NhZ2UubWVzc2FnZSwgcmV0cnlBdHRhY2htZW50cylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZW5kTWVzc2FnZShzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW1xuICAgICAgc2VuZE1lc3NhZ2UsXG4gICAgICBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLFxuICAgICAgZXZlbnQsXG4gICAgICBhZ2VudD8uZW50aXR5LFxuICAgICAgYWdlbnQ/Lm5hbWUsXG4gICAgICBhZ2VudD8udHlwZSxcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgdCxcbiAgICAgIGF1dGhVc2VyLmlkLFxuICAgIF1cbiAgKVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgZXN0YWRvIGRlbCBib3TDs24gXCJzY3JvbGwgdG8gYm90dG9tXCIgY29tcGFyYW5kbyBsYSBwb3NpY2nDs25cbiAgICogYWN0dWFsIGRlbCBzY3JvbGwgY29uIGVsIGZvbmRvLiBVc2EgdW4gcmVmIHBhcmEgZXZpdGFyIGBzZXRTdGF0ZWAgY3VhbmRvXG4gICAqIGVsIHZhbG9yIG5vIGNhbWJpYS5cbiAgICovXG4gIGNvbnN0IHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgIGlmIChzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvdykge1xuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgaW5tZWRpYXRvIGFsIGZvbmRvIChkZW50cm8gZGUgckFGIHBhcmEgY29vcmRpbmFyIGNvbiBlbCBwYWludClcbiAgICogeSBhY3R1YWxpemEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi4gUmVzcGV0YSBgc2tpcElmVXNlclNjcm9sbGluZ2AgcGFyYVxuICAgKiBubyBzb2JyZXNjcmliaXIgZWwgc2Nyb2xsIG1hbnVhbCBkZWwgdXN1YXJpbyBkdXJhbnRlIGVsIHN0cmVhbWluZy5cbiAgICovXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tUmFmID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdHM6IHsgc2tpcElmVXNlclNjcm9sbGluZz86IGJvb2xlYW47IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHNraXBJZlVzZXJTY3JvbGxpbmcgPSBmYWxzZSwgZGVsYXlNcyA9IDAgfSA9IG9wdHNcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgICAgICBpZiAoc2tpcElmVXNlclNjcm9sbGluZyAmJiB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGRlbGF5TXMgPiAwKSBzZXRUaW1lb3V0KHJ1biwgZGVsYXlNcylcbiAgICAgIGVsc2UgcnVuKClcbiAgICB9LFxuICAgIFt1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG8oe1xuICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KVxuICAgIC8vIERhciB0aWVtcG8gYWwgc21vb3RoLXNjcm9sbCBhbnRlcyBkZSByZWNhbGN1bGFyIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uXG4gICAgc2V0VGltZW91dCh1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5LCA1MDApXG4gIH0sIFt1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBBbCBkZWNpZGlyIGVuIGVsIEFwcHJvdmFsQm94OiBlbCBib3ggY29sYXBzYSAoYm90b25lcyAtPiBiYWRnZSkgeSBlbCBzdHJlYW1cbiAgLy8gY29udGluw7phIGFiYWpvLiBSZWFjdGl2YXIgZWwgYXV0by1zY3JvbGwgeSBzZWd1aXIgZWwgZm9uZG8gcGFyYSBxdWUgbGEgdmlzdGFcbiAgLy8gbm8gcXVlZGUgYXRyw6FzIChldml0YSBxdWUgYXBhcmV6Y2EgbGEgZmxlY2hhIGRlIHNjcm9sbC10by1ib3R0b20pLlxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uV2l0aFNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPikgPT4ge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24oLi4uYXJncylcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gICAgfSxcbiAgICBbaGFuZGxlQXBwcm92YWxEZWNpc2lvbiwgc2Nyb2xsVG9Cb3R0b21SYWZdXG4gIClcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5VSUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZS5jdXJyZW50VGFyZ2V0XG5cbiAgICAgIGlmIChzY3JvbGxSYWZSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShzY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICAgIH1cblxuICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcblxuICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1VwID0gc2Nyb2xsVG9wIDwgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzU2Nyb2xsaW5nVXApIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDE1XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc05lYXJCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPCBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20pIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgICAgIH1cblxuICAgICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSAhaXNOZWFyQm90dG9tXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbFRvcFxuXG4gICAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuXG4gICAgICAgIGlmIChpbml0aWFsQ2hhdElkICYmIHNjcm9sbFRvcCA+IDApIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQsIHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICBzY3JvbGxTZXNzaW9uSWQ6IGluaXRpYWxDaGF0SWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIDE1MClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20gJiYgb25TY3JvbGxUb0JvdHRvbSkge1xuICAgICAgICAgIG9uU2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlU2Nyb2xsKGNvbnRhaW5lcilcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYXV0aFVzZXIuaWQsIGhhbmRsZVNjcm9sbCwgaW5pdGlhbENoYXRJZCwgb25TY3JvbGxUb0JvdHRvbSwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG4gIGNvbnN0IHNlbmRNZXNzYWdlUHJveHlSZWYgPSB1c2VSZWYoXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gc2VuZE1lc3NhZ2VSZWYuY3VycmVudChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gIClcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25Qcm94eVJlZiA9IHVzZVJlZigoKSA9PiBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50KCkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBdXRvc2Nyb2xsIG1pZW50cmFzIGVsIHRleHRvIGRlbCBzdHJlYW0gY3JlY2UuIEVsIHRleHRvIHNlIHBpbnRhIGFsIHJpdG1vXG4gIC8vIGRlIGB1c2VTbW9vdGhTdHJlYW1UZXh0YCAofjYwZnBzKSwgbm8gYWwgcml0bW8gZGUgbGxlZ2FkYSBkZSB0b2tlbnMgZGVsXG4gIC8vIGJhY2tlbmQ6IHBvciBlc28gYWPDoSB1c2Ftb3MgdW4gbG9vcCBkZSByQUYgcXVlIGNvbXBhcmEgYHNjcm9sbEhlaWdodGBcbiAgLy8gY29udHJhIGVsIMO6bHRpbW8gdmFsb3Igb2JzZXJ2YWRvIHkgYWp1c3RhIHNvbG8gY3VhbmRvIGNhbWJpYS4gQXPDrSBlbFxuICAvLyBzY3JvbGwgcXVlZGEgcGVyZmVjdGFtZW50ZSBzaW5jcm9uaXphZG8gY29uIGxhIGFuaW1hY2nDs24gZGVsIHRleHRvIHNpblxuICAvLyBkZXBlbmRlciBkZSBsYSBjYWRlbmNpYSBkZWwgc3RyZWFtaW5nU3RvcmUuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3YWl0aW5nUmVzcG9uc2UgJiYgIWlzV3JpdGluZykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgIGxldCBsYXN0SGVpZ2h0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgIT09IGxhc3RIZWlnaHQpIHtcbiAgICAgICAgbGFzdEhlaWdodCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgaWYgKCF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICB9XG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gQWwgY29tZW56YXIgYSBlc3BlcmFyIGxhIHJlc3B1ZXN0YSBkZWwgYmFja2VuZCwgc2Nyb2xsIGluaWNpYWwgYWwgZm9uZG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IHNraXBJZlVzZXJTY3JvbGxpbmc6IHRydWUgfSlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBzZXNpw7NuLCByZXNldGVhciBlc3RhZG8gZGUgc2Nyb2xsIG1hbnVhbCBwYXJhIG5vIGhlcmVkYXIgZWwgY2hhdCBhbnRlcmlvci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IDBcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSAwXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBSZXN0YXVyYWNpw7NuIGRlc2RlIGNhY2hlIChzaW4gTG9hZGVyKTogYmFqYXIgYWwgZm9uZG8gYWwgcmVhYnJpciBzZXNpw7NuIHZpc2l0YWRhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgIWluaXRpYWxDaGF0SWQgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgICBpZiAobGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID09PSBpbml0aWFsQ2hhdElkKSByZXR1cm5cbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2luaXRpYWxDaGF0SWQsIGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBtZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgbGFzdElkID0gbGFzdE1lc3NhZ2U/LmlkID8/IG51bGxcbiAgICBjb25zdCBwcmV2SWQgPSBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwcmV2TGVuID0gbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnRcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBsYXN0SWRcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdNZXNzYWdlID0gbGFzdElkICE9PSBwcmV2SWQgfHwgbWVzc2FnZXMubGVuZ3RoICE9PSBwcmV2TGVuXG4gICAgaWYgKCFpc05ld01lc3NhZ2UpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG4gICAgY29uc3QgaXNBcHByb3ZhbCA9ICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uID1cbiAgICAgICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSlcblxuICAgIC8vIEFwcHJvdmFsOiBzZWN1ZW5jaWEgZGUgc2Nyb2xscyBjb24gZGVsYXkgcG9ycXVlIGVsIEFwcHJvdmFsQm94IG5lY2VzaXRhXG4gICAgLy8gdW4gdGljayBwYXJhIG1lZGlyc2UuIFNjcm9sbGVhIGF1bnF1ZSBlbCB1c3VhcmlvIG5vIGVzdMOpIGFsIGZvbmRvIHNpIG5vXG4gICAgLy8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUuXG4gICAgaWYgKGlzQXBwcm92YWwgJiYgKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBOdWV2b3MgYW5zd2VyL3F1ZXN0aW9uOiBzY3JvbGwgc2kgZWwgdXN1YXJpbyB5YSBlc3RhYmEgYWwgZm9uZG8uXG4gICAgaWYgKGlzQW5zd2VyT3JRdWVzdGlvbiAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXNvIGJvcmRlOiBjYW1iaW9zIGRlIG1lbnNhamVzIHNpbiBzZXIgbnVldm8gYW5zd2VyL3VzZXIvYXBwcm92YWxcbiAgICAvLyBwZXJvIHPDrSB1biBtZW5zYWplIG51ZXZvIChubyBlbCBcInVzZXItaW5pdGlhbC1tZXNzYWdlXCIpLiBTY3JvbGxlYS5cbiAgICBpZiAoIWlzQW5zd2VyT3JRdWVzdGlvbiAmJiAhaXNBcHByb3ZhbCAmJiAhaGFzSW5pdGlhbE1lc3NhZ2UgJiYgbWVzc2FnZXMubGVuZ3RoID4gcHJldkxlbikge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmLCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBBbCBhYnJpci9jYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24gZWwgY29udGVuZWRvciBzZSByZW1vbnRhIChMb2FkZXIg4oaSIGxpc3RhKSBjb25cbiAgLy8gc2Nyb2xsVG9wPTAuIEZvcnphbW9zIGlyIGFsIGZvbmRvIGFsIHRlcm1pbmFyIGxvYWRNZXNzYWdlcywgc2luIGFmZWN0YXIgcGFnaW5hY2nDs24gaGFjaWEgYXJyaWJhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGp1c3RGaW5pc2hlZExvYWRpbmcgPSB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCAmJiAhbG9hZGluZ01lc3NhZ2VzXG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBsb2FkaW5nTWVzc2FnZXNcblxuICAgIGlmICghanVzdEZpbmlzaGVkTG9hZGluZyB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluaXRpYWxDaGF0SWQpIHtcbiAgICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHJlYWRNYWlhUGFuZWxTZXNzaW9uKGF1dGhVc2VyLmlkKVxuICAgIGlmIChzZXNzaW9uPy5zY3JvbGxTZXNzaW9uSWQgPT09IGluaXRpYWxDaGF0SWQgJiYgdHlwZW9mIHNlc3Npb24uc2Nyb2xsVG9wID09PSAnbnVtYmVyJyAmJiBzZXNzaW9uLnNjcm9sbFRvcCA+IDApIHtcbiAgICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBzZXNzaW9uLnNjcm9sbFRvcFxuICAgIH1cbiAgfSwgW2F1dGhVc2VyLmlkLCBpbml0aWFsQ2hhdElkXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9PSBudWxsIHx8ICFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50XG4gICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoXSlcblxuICAvLyBBbCBleHBhbmRpci9jb250cmFlciBlbCBtb2RhbCBlbCByZWYgcGFzYSBhIG90cm8gY29udGVuZWRvciAoc2Nyb2xsVG9wIHNlIHJlc2V0ZWEgYSAwKS5cbiAgLy8gUmVzdGF1cmFyIGxhIHBvc2ljacOzbiBkZSBzY3JvbGwgYW50ZXMgZGVsIHBhaW50IHBhcmEgZXZpdGFyIHF1ZSBsYSBjb252ZXJzYWNpw7NuIHNhbHRlIGFycmliYS5cbiAgY29uc3QgZXhwYW5kZWRSZWYgPSB1c2VSZWYoZXhwYW5kZWQpXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV4cGFuZGVkUmVmLmN1cnJlbnQgIT09IGV4cGFuZGVkICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHNhdmVkU2Nyb2xsVG9wID0gbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IHNhdmVkU2Nyb2xsVG9wXG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfVxuICB9LCBbZXhwYW5kZWRdKVxuXG4gIGlmIChsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZhZGUgZmlsbD5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9GYWRlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobWVzc2FnZS5pZClcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgICAgICAgICAvLyBObyBmaWx0cmFyIGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZzogc3UgdGV4dG8gdml2ZVxuICAgICAgICAgIC8vIGVuIGVsIHN0cmVhbWluZ1N0b3JlIHkgYG1lc3NhZ2UubWVzc2FnZWAgZXMgJycgaGFzdGEgZWwgY29tcGxldGUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIGNvbnN0IHR1cm5JZCA9IHJlc29sdmVSZXRyeVR1cm5JZChtZXNzYWdlKVxuICAgICAgICAgIGNvbnN0IHVzZXJNZXNzYWdlRm9yUmV0cnkgPSBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeShtZXNzYWdlcywgbWVzc2FnZSlcbiAgICAgICAgICBjb25zdCBjYW5SZXRyeSA9XG4gICAgICAgICAgICAhIXVzZXJNZXNzYWdlRm9yUmV0cnkgJiZcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuaXNFcnJvciAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWwgJiZcbiAgICAgICAgICAgIChtZXNzYWdlLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgKCFtZXNzYWdlLmlzX2NhbmNlbGxlZCAmJiAhIXR1cm5JZCkpXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICBrZXk9e21lc3NhZ2VLZXl9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGx9XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYW5kbGVSZXRyeT17Y2FuUmV0cnkgPyAoKSA9PiByZXRyeU1lc3NhZ2UobWVzc2FnZSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICAgIHtzdHJlYW1Mb2FkaW5nRGlzcGxheSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtTG9hZGluZ0Rpc3BsYXl9IC8+XG4gICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICApfVxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlc091dGVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0gJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH0+XG4gICAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyXG4gICAgICAgICAgcmVmPXttZXNzYWdlc1JlZn1cbiAgICAgICAgICBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219XG4gICAgICAgICAgJHNjcm9sbE9uUGFyZW50PXtmYWxzZX1cbiAgICAgICAgICAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fVxuICAgICAgICA+XG4gICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5n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
1154
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwidW5kZWZpbmVkIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJoYW5kbGVSZXRyeSIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwic3RyZWFtQWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0IiwiQm9vbGVhbiIsInJlYXNvbmluZ1RyYWNlIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsImNvbXBhY3QiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNSIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzaG93VG9wR3JhZGllbnRSZWYiLCJzaG93Qm90dG9tR3JhZGllbnRSZWYiLCJzY3JvbGxSYWZSZWYiLCJhbmNob3JlZFR1cm5JZFJlZiIsInNwYWNlckVsUmVmIiwic3BhY2VySGVpZ2h0UmVmIiwidHVyblNjcm9sbFJhZlJlZiIsIndhc0xvYWRpbmdNZXNzYWdlc1JlZiIsImxhc3RTY3JvbGxlZFNlc3Npb25SZWYiLCJwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiIsInNjcm9sbFBlcnNpc3RUaW1lclJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJyZXRyeU1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzIiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsIm5leHRUb3BHcmFkaWVudCIsIm5leHRCb3R0b21HcmFkaWVudCIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImFicyIsImR1cmF0aW9uIiwic3RhcnRlZEF0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJzdGVwIiwicHJvZ3Jlc3MiLCJlYXNlZCIsInBvdyIsInNldFNwYWNlckhlaWdodCIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwiZHJhaW5UdXJuU3BhY2UiLCJyZW1vdmFibGUiLCJtYXgiLCJyZWxlYXNlVHVyblNwYWNlIiwiaGFuZGxlVXNlclNjcm9sbEludGVudCIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJtZXNzYWdlc0RhdGFSZWYiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmIiwidHJpbSIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImlzUmV0cnlTdWdnZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJyZXRyeUF0dGFjaG1lbnRzIiwicmFmSWQiLCJsYXN0SGVpZ2h0IiwidGljayIsImN1cnJlbnRIZWlnaHQiLCJsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZiIsIl9tZXNzYWdlcyRpbmRleCIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbWVzc2FnZXMkaWQiLCJfbWVzc2FnZXMiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJpc0F0Qm90dG9tIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJpc0FwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiX21lc3NhZ2VzJGlkMiIsIl9tZXNzYWdlczIiLCJqdXN0RmluaXNoZWRMb2FkaW5nIiwiYXR0YWNobWVudHNDb3VudCIsInN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiaGFzQXR0YWNobWVudHMiLCJpc1Njcm9sbE9uUGFyZW50Iiwic2Vzc2lvbiIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5IiwidHVybklkIiwidXNlck1lc3NhZ2VGb3JSZXRyeSIsImNhblJldHJ5IiwiaXNfY2FuY2VsbGVkIiwia2V5IiwicmVmIiwiJHNjcm9sbE9uUGFyZW50Iiwib25XaGVlbCIsIm9uVG91Y2hTdGFydCIsIiRzaG93Iiwib25TY3JvbGwiLCIkdmlzaWJsZSIsInhtbG5zIiwid2lkdGgiLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImQiLCJDaGF0QUlNZXNzYWdlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlNZXNzYWdlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTWFpYVN0cmVhbWRvd24gfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB0eXBlIHsgTWFpYVN0cmVhbWRvd25Qcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IHJlbmRlclRleHRXaXRoTWVudGlvbnMsIGhhc0lubGluZU1hcmtlcnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZW5kZXJDb250ZXh0TWVudGlvbnMnXG5cbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IENPUlVzZXIsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZUNoYXRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXInXG5pbXBvcnQgeyB1c2VTbW9vdGhTdHJlYW1UZXh0IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU21vb3RoU3RyZWFtVGV4dCdcbmltcG9ydCB7IHVzZVN0cmVhbWluZ01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTdHJlYW1pbmdNZXNzYWdlJ1xuXG5pbXBvcnQgeyBMb2FkaW5nVGV4dCB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRpbmdUZXh0J1xuaW1wb3J0IHsgQWdlbnRBY3Rpdml0eUluZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21zL0FnZW50QWN0aXZpdHlJbmRpY2F0b3InXG5pbXBvcnQgeyBSZWFzb25pbmdCbG9jayB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ0Jsb2NrJ1xuaW1wb3J0IHsgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL3JlYXNvbmluZ0xpdmVOYXJyYXRpb24nXG5pbXBvcnQgeyBSZWFzb25pbmdUaW1lbGluZSB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ1RpbWVsaW5lJ1xuaW1wb3J0IHsgU0NUaW1lbGluZUluZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ0Jsb2NrLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyByZXNvbHZlUmV0cnlUdXJuSWQsIGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmV0cnlDb21wbGV0aW9uJ1xuaW1wb3J0IHsgdXNlUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IEZhZGUgfSBmcm9tICcuLi8uLi9hdG9tcy9GYWRlJ1xuaW1wb3J0IHsgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uLCByZWFkTWFpYVBhbmVsU2Vzc2lvbiB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFQYW5lbFNlc3Npb25QZXJzaXN0ZW5jZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ1Njcm9sbEljb25Td2FwLFxuICBTQ1dyaXRpbmdEb3RzLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NUdXJuU3BhY2VyLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NNZXNzYWdlc0dyYWRpZW50VG9wLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgRW50aXR5TGlua0N1c3RvbUxpbmssIGdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW50aXR5TGlua1JlbmRlcidcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogQWwgYW5jbGFyIGVsIHR1cm5vLCBsYSBwcmVndW50YSBubyBzZSBwZWdhIGFsIGJvcmRlIHN1cGVyaW9yOiBkZWphbW9zIGFzb21hclxuICogbGEgY29sYSBkZWwgbWVuc2FqZSBhbnRlcmlvciBwYXJhIG5vIHBlcmRlciBlbCBoaWxvIGRlIGxhIGNvbnZlcnNhY2nDs24uXG4gKiBSZWxhdGl2byBhbCB2aWV3cG9ydCBwb3JxdWUgdW4gdmFsb3IgZmlqbyBzZSBjb21lIGRlbWFzaWFkbyBlbiBwYW50YWxsYXMgY29ydGFzLlxuICovXG5jb25zdCB0dXJuQW5jaG9yT2Zmc2V0ID0gKHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5taW4odmlld3BvcnRIZWlnaHQgKiAwLjE4LCAyMDApXG5cbi8qKlxuICogRHVyYWNpw7NuIGRlbCBzY3JvbGwgYW5pbWFkbzogYmFzZSB5IHRvcGUgcGFyYSByZWNvcnJpZG9zIGxhcmdvcywgcGFyYSBxdWUgdW5cbiAqIHNhbHRvIGRlIHZhcmlhcyBwYW50YWxsYXMgbm8gc2Ugc2llbnRhIHVuIGxhdGlnYXpvLlxuICovXG5jb25zdCBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyA9IDYwMFxuY29uc3QgVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TID0gODAwXG5cbi8qKiBEaXN0YW5jaWEgYSBwYXJ0aXIgZGUgbGEgY3VhbCBsYSBkdXJhY2nDs24geWEgZXN0w6EgZW4gc3UgdG9wZS4gKi9cbmNvbnN0IFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFggPSAxMjAwXG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKHRocmVhZElkczogc3RyaW5nW10sIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JykgPT4gdm9pZFxuICBoYW5kbGVSZXRyeT86ICgpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbiAgc3RyZWFtQWN0aXZpdHk/OiBTdHJlYW1BY3Rpdml0eSB8IG51bGxcbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgb25SZXRyeT86ICgpID0+IHZvaWRcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocHJvcHMuaXNTdHJlYW1pbmcgPyBwcm9wcy5tZXNzYWdlSWQgOiBudWxsKVxuICAgIGNvbnN0IHJhd1RleHQgPSBwcm9wcy5pc1N0cmVhbWluZyA/IHN0cmVhbWluZ1RleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgLy8gU21vb3RoIHN0cmVhbWluZzogZGVzYWNvcGxhIGxhIGNhZGVuY2lhIGRlbCBiYWNrZW5kIGRlbCByZW5kZXIuXG4gICAgLy8gRHVyYW50ZSBlbCBzdHJlYW1pbmcgbGliZXJhIGNoYXJzIGEgcml0bW8gY29uc3RhbnRlIHbDrWEgckFGOyBjdWFuZG9cbiAgICAvLyB0ZXJtaW5hLCBtdWVzdHJhIGVsIHRleHRvIGZpbmFsIGFsIGluc3RhbnRlIChzaW4gYW5pbWFjacOzbiByZXNpZHVhbCkuXG4gICAgLy8gTG9zIGRlZmF1bHRzIGRlbCBob29rIHNlIGFqdXN0YXJvbiBlbXDDrXJpY2FtZW50ZSBlbiBzdGFnaW5nOyBhdW4gYXPDrVxuICAgIC8vIHNlIGV4cG9uZW4gZmxhZ3MgZGUgcnVudGltZSAod2luZG93LiopIHBhcmEgcG9kZXIgdHVuZWFyIHNpbiByZWNvbXBpbGFyXG4gICAgLy8gc2kgYWxnw7puIGJhY2tlbmQgcHJlc2VudGEgdW5hIGNhZGVuY2lhIG11eSBkaXN0aW50YSBlbiBwcm9kdWNjacOzbi5cbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1BZGFwdCA9IGZhbHNlICAgICAgLy8gZGVzYWN0aXZhIGFkYXB0YWNpw7NuIGFsIGJhY2tlbmRcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1CdWZmZXJNcyA9IDYwMCAgICAgLy8gY29sY2jDs24gb2JqZXRpdm8gKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbUxhZ01zID0gNDUwICAgICAgICAvLyBsYWcgbcOheGltbyBiYXNlIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1NaW5CdWZmZXIgPSA3MCAgICAgLy8gcGlzbyBkZWwgY29sY2jDs24gZW4gY2hhcnNcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1XYXJtdXBNcyA9IDQwMCAgICAgLy8gd2FybXVwIGluaWNpYWwgKG1zKVxuICAgIGNvbnN0IHdpbkZsYWdzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gKHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIHN0cmVhbUFkYXB0PzogYm9vbGVhblxuICAgICAgICAgICAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbUxhZ01zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1NaW5CdWZmZXI/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7fVxuICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlU21vb3RoU3RyZWFtVGV4dChyYXdUZXh0LCB7XG4gICAgICBlbmFibGVkOiAhIXByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgbWF4Q2hhcnNQZXJGcmFtZTogMjQsXG4gICAgICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTGFnTXMgIT0gbnVsbCAmJiB7IHRhcmdldExhZ01zOiB3aW5GbGFncy5zdHJlYW1MYWdNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1BZGFwdCAhPSBudWxsICYmIHsgYWRhcHRUb0JhY2tlbmRSYXRlOiB3aW5GbGFncy5zdHJlYW1BZGFwdCB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciAhPSBudWxsICYmIHsgbWluQnVmZmVyQ2hhcnM6IHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyAhPSBudWxsICYmIHsgd2FybXVwTXM6IHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zIH0pLFxuICAgIH0pXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcblxuICAgIGlmICghZGlzcGxheVRleHQgJiYgIXByb3BzLmlzU3RyZWFtaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGhhc01lbnRpb25zID0gaGFzSW5saW5lTWFya2VycyhkaXNwbGF5VGV4dClcbiAgICBjb25zdCBtZW50aW9uTm9kZXMgPSBoYXNNZW50aW9ucyA/IHJlbmRlclRleHRXaXRoTWVudGlvbnMoZGlzcGxheVRleHQpIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2dldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lKGRpc3BsYXlUZXh0KX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoYXNNZW50aW9ucyAmJiBtZW50aW9uTm9kZXMgPyAoXG4gICAgICAgICAgICAvLyBTaSBoYXkgbWVudGlvbnMsIHJlbmRlcml6YXIgZGlyZWN0YW1lbnRlIChzaW4gbWFya2Rvd24gZW4gZWwgbWlzbW8gcMOhcnJhZm8pXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lJyB9fT57bWVudGlvbk5vZGVzfTwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgLy8gU2luIG1lbnRpb25zLCBwYXNhciBhIFN0cmVhbWRvd24gcGFyYSBtYXJrZG93biBzdXBwb3J0XG4gICAgICAgICAgICA8TWFpYVN0cmVhbWRvd25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImNoYXRcIlxuICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IGE6IEVudGl0eUxpbmtDdXN0b21MaW5rIH0gYXMgTWFpYVN0cmVhbWRvd25Qcm9wc1snY29tcG9uZW50cyddfVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgPC9NYWlhU3RyZWFtZG93bj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Vycm9yICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgIXByb3BzLmlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgKCFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkIHx8ICEhcHJvcHMub25SZXRyeSkgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgICBjb250ZW50PXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgICAgc291cmNlcz17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogcHJvcHMuaGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIG9uUmV0cnk9e3Byb3BzLm9uUmV0cnl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgKCFwcm9wcy5pc0Vycm9yIHx8IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGgpICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlTdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Vycm9yICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhIWNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgJiYgKFxuICAgICAgICAgICAgPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1xuICAgICAgICAgICAgICBhZ2VudElkPXtjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5jb25zdCBNZXNzYWdlSXRlbSA9IG1lbW8oKHByb3BzOiBNZXNzYWdlSXRlbVByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB1c2VyLFxuICAgIG1lc3NhZ2UsXG4gICAgaXNTdHJlYW1pbmcsXG4gICAgaXNFcnJvcixcbiAgICBhdXRoVXNlcixcbiAgICBvcHRpb25zLFxuICAgIGlzQ2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIGhhbmRsZVJldHJ5LFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbixcbiAgICBpc0xhc3RNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IHVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKClcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IHVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGlkKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gaWQgOiBudWxsKVxuICBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZyA9ICEhaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlclxuICBjb25zdCBoYXNTdHJlYW1UZXh0ID0gQm9vbGVhbihzdHJlYW1pbmdUZXh0KVxuICBjb25zdCByZWFzb25pbmdUcmFjZSA9IHVzZVJlYXNvbmluZ1RyYWNlKGlzQXNzaXN0YW50ICYmIGlzQWN0aXZlU3RyZWFtaW5nID8gaWQgOiAnJylcbiAgY29uc3Qgc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSA9XG4gICAgaXNBc3Npc3RhbnQgJiYgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShyZWFzb25pbmdUcmFjZS5zdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQpXG4gIGNvbnN0IHNob3dTdHJlYW1pbmdCb2R5ID0gaXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dCAmJiAhc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZVxuICBjb25zdCBzaG93QWN0aXZpdHlJbmRpY2F0b3IgPSBpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhIXN0cmVhbUFjdGl2aXR5XG5cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IHNob3dTdHJlYW1pbmdCb2R5KSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBvblJldHJ5PXtoYW5kbGVSZXRyeX1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7LyogU3Bpbm5lciBkZSBhY3RpdmlkYWQ6IHZpc2libGUgdGFtYmnDqW4gZW4gd3JpdGluZyAobmFycmFjacOzbiBlbiB0cmF6YSBvIHJlc3B1ZXN0YSBmaW5hbCkuICovfVxuICAgICAgICB7c2hvd0FjdGl2aXR5SW5kaWNhdG9yICYmIChcbiAgICAgICAgICA8U0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gY29tcGFjdCAvPlxuICAgICAgICAgIDwvU0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgdXNlclNjcm9sbGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd1RvcEdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93Qm90dG9tR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogVHVybm8gY29uIGVsIHNjcm9sbCBiYWpvIGNvbnRyb2wgZGVsIHVzdWFyaW86IGRlc2RlIHF1ZSBlbnbDrWEgZWwgbWVuc2FqZSB5XG4gICAqIGhhc3RhIGVsIHByw7N4aW1vIGVudsOtbyBubyBtb3ZlbW9zIGVsIHNjcm9sbCBwb3IgbmluZ8O6biBtb3Rpdm8uIEVzXG4gICAqIGluZGVwZW5kaWVudGUgZGUgbGEgYWx0dXJhIGRlbCBzcGFjZXIsIHF1ZSBwdWVkZSBsbGVnYXIgYSAwIHNpbiBkZXNhbmNsYXIuXG4gICAqL1xuICBjb25zdCBhbmNob3JlZFR1cm5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJFbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckhlaWdodFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCB0dXJuU2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBzY3JvbGxQZXJzaXN0VGltZXJSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGEgZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIHkgbG9zIGdyYWRpZW50ZXMgZGUgYm9yZGUgYSBwYXJ0aXIgZGVcbiAgICogbGEgcG9zaWNpw7NuIGRlbCBzY3JvbGwuIExvcyByZWZzIGV2aXRhbiBgc2V0U3RhdGVgIGN1YW5kbyBlbCB2YWxvciBubyBjYW1iaWE6XG4gICAqIGVzdG8gY29ycmUgZW4gY2FkYSBmcmFtZSBkZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIC8vIEVsIHNwYWNlciBkZWwgdHVybm8gZXMgYWx0byByZXNlcnZhZG8sIG5vIGNvbnRlbmlkbzogc2kgbm8gbG8gZGVzY29udGFtb3NcbiAgICAvLyBsYSBmbGVjaGEgeSBlbCBncmFkaWVudGUgZGUgYWJham8gcXVlZGFuIGVuY2VuZGlkb3MgZHVyYW50ZSB0b2RvIGVsIHR1cm5vLlxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG5cbiAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFRvcEdyYWRpZW50ID0gc2Nyb2xsVG9wID4gMVxuICAgIGlmIChzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dFRvcEdyYWRpZW50KSB7XG4gICAgICBzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRUb3BHcmFkaWVudFxuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KG5leHRUb3BHcmFkaWVudClcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0Qm90dG9tR3JhZGllbnQgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiAxXG4gICAgaWYgKHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0Qm90dG9tR3JhZGllbnQpIHtcbiAgICAgIHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dEJvdHRvbUdyYWRpZW50XG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQobmV4dEJvdHRvbUdyYWRpZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBSZXNwZXRhIGBza2lwSWZVc2VyU2Nyb2xsaW5nYCBwYXJhXG4gICAqIG5vIHNvYnJlc2NyaWJpciBlbCBzY3JvbGwgbWFudWFsIGRlbCB1c3VhcmlvIGR1cmFudGUgZWwgc3RyZWFtaW5nLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBza2lwSWZVc2VyU2Nyb2xsaW5nPzogYm9vbGVhbjsgZGVsYXlNcz86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpcElmVXNlclNjcm9sbGluZyA9IGZhbHNlLCBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGlmIChza2lwSWZVc2VyU2Nyb2xsaW5nICYmIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGRlbGF5TXMgPiAwKSBzZXRUaW1lb3V0KHJ1biwgZGVsYXlNcylcbiAgICAgIGVsc2UgcnVuKClcbiAgICB9LFxuICAgIFt1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIGNvbnN0IGNhbmNlbFR1cm5TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgIHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBhbmltYWRvIGNvbiBlYXNpbmcgcHJvcGlvOiBgYmVoYXZpb3I6ICdzbW9vdGgnYCBubyBwZXJtaXRlIHJlZ3VsYXIgbGFcbiAgICogZHVyYWNpw7NuIHkgZWwgc2FsdG8gYWwgYW5jbGFyIGVsIHR1cm5vIHF1ZWRhIGRlbWFzaWFkbyBzZWNvLlxuICAgKi9cbiAgY29uc3QgYW5pbWF0ZVNjcm9sbFRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRvcDogbnVtYmVyKSA9PiB7XG4gICAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICBjb25zdCBmcm9tID0gZWwuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRvcCAtIGZyb21cbiAgICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZSkgPCAxKSByZXR1cm5cblxuICAgICAgY29uc3QgZHVyYXRpb24gPVxuICAgICAgICBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyArXG4gICAgICAgIChUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMgLSBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUykgKlxuICAgICAgICAgIE1hdGgubWluKDEsIE1hdGguYWJzKGRpc3RhbmNlKSAvIFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFgpXG5cbiAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICBjb25zdCBzdGVwID0gKG5vdzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5taW4oMSwgKG5vdyAtIHN0YXJ0ZWRBdCkgLyBkdXJhdGlvbilcbiAgICAgICAgLy8gZWFzZU91dEV4cG8gKH5jdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSk6IGVtcGllemEgYSBmcmVuYXIgbXVjaG9cbiAgICAgICAgLy8gYW50ZXMgcXVlIGVsIHF1aW50IHkgYXRlcnJpemEgc2luIGNvcnRlIHBlcmNlcHRpYmxlLlxuICAgICAgICBjb25zdCBlYXNlZCA9IHByb2dyZXNzID09PSAxID8gMSA6IDEgLSAyICoqICgtMTIgKiBwcm9ncmVzcylcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gZnJvbSArIGRpc3RhbmNlICogZWFzZWRcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBwcm9ncmVzcyA8IDEgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCkgOiBudWxsXG4gICAgICB9XG4gICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbiAgICB9LFxuICAgIFtjYW5jZWxUdXJuU2Nyb2xsLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWxUdXJuU2Nyb2xsLCBbY2FuY2VsVHVyblNjcm9sbF0pXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChNYXRoLmFicyhzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIG5leHQpIDwgMSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBlbCBhbHRvIHJlc2VydmFkbyBxdWUgc2UgcHVlZGUgc2FjYXIgc2luIG1vdmVyIGxhIHZpc3RhOiB0b2RvIGxvXG4gICAqIHF1ZSBxdWVkZSBwb3IgZGViYWpvIGRlbCBzY3JvbGwgYWN0dWFsLiBTaSBlbCB1c3VhcmlvIGVzdMOhIGVuIGVsIGZvbmRvLCBzZVxuICAgKiBzYWNhIGVudGVybzsgc2kgZXN0w6EgYSBtaXRhZCBkZSBjYW1pbm8sIHNlIHZhIGRyZW5hbmRvIGEgbWVkaWRhIHF1ZSBiYWphLlxuICAgKi9cbiAgY29uc3QgZHJhaW5UdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA8PSAwKSByZXR1cm5cbiAgICBjb25zdCByZW1vdmFibGUgPSBNYXRoLm1heCgwLCBlbC5zY3JvbGxIZWlnaHQgLSBlbC5jbGllbnRIZWlnaHQgLSBlbC5zY3JvbGxUb3ApXG4gICAgc2V0U3BhY2VySGVpZ2h0KE1hdGgubWF4KDAsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gcmVtb3ZhYmxlKSlcbiAgfSwgW3NldFNwYWNlckhlaWdodF0pXG5cbiAgLyoqXG4gICAqIEVsIHVzdWFyaW8gdG9tw7MgZWwgY29udHJvbCBkZWwgc2Nyb2xsOiBlbCB0dXJubyBkZWphIGRlIGVzdGFyIGFuY2xhZG8geSBlbFxuICAgKiBlc3BhY2lvIHJlc2VydmFkbyBlbXBpZXphIGEgZGV2b2x2ZXJzZS4gU2luIGFuY2xhIHkgY29uIHNwYWNlciA+IDAsIGVsXG4gICAqIGhhbmRsZXIgZGUgc2Nyb2xsIHNpZ3VlIGRyZW5hbmRvIGhhc3RhIHF1ZSBsbGVnYSBhbCBmb25kbyB5IG5vIHF1ZWRhIGh1ZWNvLlxuICAgKi9cbiAgY29uc3QgcmVsZWFzZVR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgJiYgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBkcmFpblR1cm5TcGFjZSgpXG4gIH0sIFtkcmFpblR1cm5TcGFjZV0pXG5cbiAgY29uc3QgaGFuZGxlVXNlclNjcm9sbEludGVudCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICByZWxlYXNlVHVyblNwYWNlKClcbiAgfSwgW2NhbmNlbFR1cm5TY3JvbGwsIHJlbGVhc2VUdXJuU3BhY2VdKVxuXG4gIGNvbnN0IG1lYXN1cmVUdXJuID0gdXNlQ2FsbGJhY2soKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNwYWNlckVsID0gc3BhY2VyRWxSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgIXNwYWNlckVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcXVlc3Rpb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1tZXNzYWdlLWlkPVwiJHtxdWVzdGlvbklkfVwiXWApXG4gICAgaWYgKCFxdWVzdGlvbkVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY29udGFpbmVyVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgY29uc3QgcXVlc3Rpb25Ub3AgPSBxdWVzdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGNvbnRhaW5lclRvcCArIGVsLnNjcm9sbFRvcFxuICAgIGNvbnN0IGNvbnRlbnRCb3R0b20gPSBzcGFjZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICByZXR1cm4geyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQ6IGNvbnRlbnRCb3R0b20gLSBxdWVzdGlvblRvcCB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2VydmVUdXJuU3BhY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IG1lYXN1cmVUdXJuKHF1ZXN0aW9uSWQpXG4gICAgICBpZiAoIW1lYXN1cmVkKSByZXR1cm5cbiAgICAgIGNvbnN0IHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH0gPSBtZWFzdXJlZFxuXG4gICAgICAvLyBBbmNsYW1vcyBzaWVtcHJlLCBpbmNsdXNvIGN1YW5kbyBubyBoYWdhIGZhbHRhIHJlc2VydmFyOiBkdXJhbnRlIGVsXG4gICAgICAvLyB0dXJubyBlbCBzY3JvbGwgbm8gc2UgbXVldmUgc29sbyBlbiBuaW5nw7puIGNhc28uXG4gICAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuXG4gICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KGVsLmNsaWVudEhlaWdodClcbiAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHF1ZXN0aW9uVG9wIC0gb2Zmc2V0KVxuICAgICAgLy8gQ2hhdCByZWNpw6luIGluaWNpYWRvIG8gY29udmVyc2FjacOzbiBxdWUgYcO6biBlbnRyYSBlbiBwYW50YWxsYTogbGFcbiAgICAgIC8vIHByZWd1bnRhIHlhIGVzdMOhIGFycmliYSwgbm8gaGF5IG5hZGEgcXVlIHN1YmlyIG5pIHF1ZSByZXNlcnZhci5cbiAgICAgIGlmICh0YXJnZXRTY3JvbGxUb3AgPD0gZWwuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodCgwKVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBSZXNlcnZhbW9zIGxvIG3DrW5pbW8gcGFyYSBxdWUgYHRhcmdldFNjcm9sbFRvcGAgc2VhIGFsY2FuemFibGUuIEVsXG4gICAgICAvLyBzcGFjZXIgc2UgaW5zZXJ0YSBkZSB1bmEgKGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG8gdmlzaWJsZSk7XG4gICAgICAvLyBsbyDDum5pY28gcXVlIHNlIHBlcmNpYmUgZXMgZWwgZGVzcGxhemFtaWVudG8gYW5pbWFkby5cbiAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBlbC5jbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KSlcbiAgICAgIGFuaW1hdGVTY3JvbGxUbyh0YXJnZXRTY3JvbGxUb3ApXG4gICAgfSxcbiAgICBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIGFuaW1hdGVTY3JvbGxUb11cbiAgKVxuXG4gIC8qKlxuICAgKiBFbmNvZ2UgZWwgc3BhY2VyIGEgbWVkaWRhIHF1ZSBjcmVjZSBsYSByZXNwdWVzdGE6IGVsIGFsdG8gdG90YWwgZGVsIHNjcm9sbFxuICAgKiBxdWVkYSBjb25zdGFudGUgeSBsYSB2aXN0YSBubyBzZSBtdWV2ZSBzb2xhLiBTb2xvIGFjaGljYSwgbnVuY2EgYWdyYW5kYSxcbiAgICogcGFyYSBubyBpbnllY3RhciBlc3BhY2lvIGVuIHR1cm5vcyBxdWUgYXJyYW5jYXJvbiBzaW4gcmVzZXJ2YS5cbiAgICogRGV2dWVsdmUgc2kgZWwgdHVybm8gc2lndWUgYW5jbGFkbyAoYXVucXVlIGVsIHNwYWNlciB5YSBzZWEgMCkuXG4gICAqL1xuICBjb25zdCBzeW5jVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID4gMCkge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KVxuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQobWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0KVxuICAgICAgICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodCAtIG1lYXN1cmVkLnR1cm5IZWlnaHQgLSBvZmZzZXQpXG4gICAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1pbihzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgcmVzZXJ2ZWQpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjbGVhclR1cm5TcGFjZSgpXG4gICAgLy8gTWlzbWEgY3VydmEgeSBkdXJhY2nDs24gcXVlIGVsIGFuY2xhamUgZGVsIHR1cm5vOiBlbCBgc21vb3RoYCBuYXRpdm8gZnJlbmEgc2Vjby5cbiAgICBhbmltYXRlU2Nyb2xsVG8oZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0KVxuICB9LCBbY2xlYXJUdXJuU3BhY2UsIGFuaW1hdGVTY3JvbGxUb10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICAvLyBUdXJubyB5YSBsaWJlcmFkbyBwb3IgZWwgdXN1YXJpbzogc2VndWltb3MgZGV2b2x2aWVuZG8gZWwgYWx0b1xuICAgICAgICAvLyByZXNlcnZhZG8gbWllbnRyYXMgYmFqYSwgcGFyYSBxdWUgYWwgbGxlZ2FyIGFsIMO6bHRpbW8gbWVuc2FqZSBub1xuICAgICAgICAvLyBxdWVkZSBodWVjbyBkZWJham8uXG4gICAgICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgZHJhaW5UdXJuU3BhY2UoKVxuXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcblxuICAgICAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBzY3JvbGxUb3AgPiAwKSB7XG4gICAgICAgICAgaWYgKHNjcm9sbFBlcnNpc3RUaW1lclJlZi5jdXJyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNjcm9sbFBlcnNpc3RUaW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKGF1dGhVc2VyLmlkLCB7XG4gICAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgc2Nyb2xsU2Vzc2lvbklkOiBpbml0aWFsQ2hhdElkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LCAxNTApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLmlkLCBkcmFpblR1cm5TcGFjZSwgaGFuZGxlU2Nyb2xsLCBpbml0aWFsQ2hhdElkLCBvblNjcm9sbFRvQm90dG9tLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG4gIGNvbnN0IHNlbmRNZXNzYWdlUHJveHlSZWYgPSB1c2VSZWYoXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gc2VuZE1lc3NhZ2VSZWYuY3VycmVudChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gIClcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25Qcm94eVJlZiA9IHVzZVJlZigoKSA9PiBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50KCkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICAvKipcbiAgICogYGhhbmRsZVN1Z2dlc3Rpb25DbGlja2Agc2UgcGFzYSBhIFRPRE9TIGxvcyBNZXNzYWdlSXRlbSwgYXPDrSBxdWUgc3UgaWRlbnRpZGFkXG4gICAqIGRlY2lkZSBzaSBlbCBgbWVtb2AgZGUgbGEgbGlzdGEgc29zdGllbmUuIExlZW1vcyBwb3IgcmVmIGxvIHF1ZSBjYW1iaWEgZW4gY2FkYVxuICAgKiB1cGRhdGUgKGBtZXNzYWdlc2AsIGBzZW5kTWVzc2FnZWAsIGxhcyBzdWdlcmVuY2lhcyB5YSBlbGVnaWRhcykgcGFyYSBxdWUgZWxcbiAgICogY2FsbGJhY2sgc2VhIGVzdGFibGU6IHNpIG5vLCBhbCB0ZXJtaW5hciBlbCBzdHJlYW0gc2UgcmVwaW50YSBlbCBjaGF0IGVudGVyb1xuICAgKiB5IGNhZGEgTWFpYVN0cmVhbWRvd24gdnVlbHZlIGEgcGFyc2VhciBzdSBtYXJrZG93bi5cbiAgICovXG4gIGNvbnN0IG1lc3NhZ2VzRGF0YVJlZiA9IHVzZVJlZihtZXNzYWdlcylcbiAgbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuICBjb25zdCBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmID0gdXNlUmVmKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMpXG4gIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYuY3VycmVudCA9IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYuY3VycmVudFttZXNzYWdlSWRdKSByZXR1cm5cbiAgICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlcyA9IG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50XG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcblxuICAgICAgY29uc3QgdGFyZ2V0TWVzc2FnZSA9IGN1cnJlbnRNZXNzYWdlcy5maW5kKG1zZyA9PiBtc2cuaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGlzUmV0cnlTdWdnZXN0aW9uID0gISF0YXJnZXRNZXNzYWdlPy5pc0Vycm9yICYmIHN1Z2dlc3Rpb24gPT09IHQoJ2NoYXQucmV0cnknKVxuICAgICAgaWYgKGlzUmV0cnlTdWdnZXN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IGN1cnJlbnRNZXNzYWdlc1xuICAgICAgICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgICAuYXQoLTEpXG4gICAgICAgIGlmIChsYXN0VXNlck1lc3NhZ2U/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICBjb25zdCByZXRyeUF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMpXG4gICAgICAgICAgICA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzKVxuICAgICAgICAgICAgICA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzXG4gICAgICAgICAgICAgIDogW11cbiAgICAgICAgICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KGxhc3RVc2VyTWVzc2FnZS5tZXNzYWdlLCByZXRyeUF0dGFjaG1lbnRzKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQoc3VnZ2VzdGlvbilcbiAgICB9LFxuICAgIFtldmVudCwgYWdlbnQsIHQsIGF1dGhVc2VyLmlkXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KFxuICAgICAgICBzZW5kTWVzc2FnZVByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHN0b3BHZW5lcmF0aW9uUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBpc1dyaXRpbmdcbiAgICAgIClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgLy8gQ3VhbmRvIGVsIGFnZW50ZSBlbXBpZXphIGEgcmVzcG9uZGVyLCByZXNldGVhciBlbCBmbGFnIHkgZWwgdW1icmFsIHBhcmEgYWN0aXZhciBlbCBhdXRvLXNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQXV0b3Njcm9sbCBtaWVudHJhcyBlbCB0ZXh0byBkZWwgc3RyZWFtIGNyZWNlLiBFbCB0ZXh0byBzZSBwaW50YSBhbCByaXRtb1xuICAvLyBkZSBgdXNlU21vb3RoU3RyZWFtVGV4dGAgKH42MGZwcyksIG5vIGFsIHJpdG1vIGRlIGxsZWdhZGEgZGUgdG9rZW5zIGRlbFxuICAvLyBiYWNrZW5kOiBwb3IgZXNvIGFjw6EgdXNhbW9zIHVuIGxvb3AgZGUgckFGIHF1ZSBjb21wYXJhIGBzY3JvbGxIZWlnaHRgXG4gIC8vIGNvbnRyYSBlbCDDumx0aW1vIHZhbG9yIG9ic2VydmFkbyB5IGFqdXN0YSBzb2xvIGN1YW5kbyBjYW1iaWEuIEFzw60gZWxcbiAgLy8gc2Nyb2xsIHF1ZWRhIHBlcmZlY3RhbWVudGUgc2luY3Jvbml6YWRvIGNvbiBsYSBhbmltYWNpw7NuIGRlbCB0ZXh0byBzaW5cbiAgLy8gZGVwZW5kZXIgZGUgbGEgY2FkZW5jaWEgZGVsIHN0cmVhbWluZ1N0b3JlLlxuICAvLyBDb24gZWwgdHVybm8gYW5jbGFkbyBlc3RlIGxvb3Agc29sbyBlbmNvZ2UgZWwgc3BhY2VyOiBubyB0b2NhIGVsIHNjcm9sbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXdhaXRpbmdSZXNwb25zZSAmJiAhaXNXcml0aW5nKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgbGV0IGxhc3RIZWlnaHQgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc3luY1R1cm5TcGFjZSgpKSB7XG4gICAgICAgIC8vIEVsIHNjcm9sbCBubyBzZSBtdWV2ZSwgcGVybyBlbCBjb250ZW5pZG8gY3JlY2U6IGxhIGZsZWNoYSB5IGVsXG4gICAgICAgIC8vIGdyYWRpZW50ZSBkZSBhYmFqbyB0aWVuZW4gcXVlIGVuY2VuZGVyc2UgYXBlbmFzIHNlIHBhc2EgZGVsIHZpZXdwb3J0LlxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgIT09IGxhc3RIZWlnaHQpIHtcbiAgICAgICAgbGFzdEhlaWdodCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgaWYgKCF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgfVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICB9XG5cbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmFmSWQgIT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcsIHN5bmNUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBBbCBjb21lbnphciBhIGVzcGVyYXIgbGEgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLCBzY3JvbGwgaW5pY2lhbCBhbCBmb25kby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgc2tpcElmVXNlclNjcm9sbGluZzogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHJldHVyblxuXG4gICAgbGV0IHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChsZXQgaW5kZXggPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgICBpZiAobWVzc2FnZXNbaW5kZXhdPy5pZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgICAgcXVlc3Rpb25JZCA9IG1lc3NhZ2VzW2luZGV4XS5pZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXF1ZXN0aW9uSWQgfHwgcXVlc3Rpb25JZCA9PT0gbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlc2VydmVUdXJuU3BhY2UocXVlc3Rpb25JZCkpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHJlc2VydmVUdXJuU3BhY2VdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBBbCBjYW1iaWFyIGRlIHNlc2nDs24sIHJlc2V0ZWFyIGVzdGFkbyBkZSBzY3JvbGwgbWFudWFsIHBhcmEgbm8gaGVyZWRhciBlbCBjaGF0IGFudGVyaW9yLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gMFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IDBcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIFJlc3RhdXJhY2nDs24gZGVzZGUgY2FjaGUgKHNpbiBMb2FkZXIpOiBiYWphciBhbCBmb25kbyBhbCByZWFicmlyIHNlc2nDs24gdmlzaXRhZGEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCAhaW5pdGlhbENoYXRJZCB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGlmIChsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPT09IGluaXRpYWxDaGF0SWQpIHJldHVyblxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcblxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVHVybm8gYW5jbGFkbzogbmkgZWwgcmVlbXBsYXpvIGRlbCBwbGFjZWhvbGRlciBwb3IgZWwgbWVuc2FqZSBmaW5hbCwgbmkgbGFcbiAgICAvLyBhcGFyaWNpw7NuIGRlbCBBcHByb3ZhbEJveCBtdWV2ZW4gZWwgc2Nyb2xsLiBTb2xvIHNlIGFqdXN0YSBlbCBzcGFjZXIuXG4gICAgaWYgKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG4gICAgY29uc3QgaXNBcHByb3ZhbCA9ICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uID1cbiAgICAgICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSlcblxuICAgIC8vIE51ZXZvcyBhbnN3ZXIvcXVlc3Rpb246IHNjcm9sbCBzaSBlbCB1c3VhcmlvIHlhIGVzdGFiYSBhbCBmb25kby5cbiAgICBpZiAoaXNBbnN3ZXJPclF1ZXN0aW9uICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhc28gYm9yZGU6IGNhbWJpb3MgZGUgbWVuc2FqZXMgc2luIHNlciBudWV2byBhbnN3ZXIvdXNlci9hcHByb3ZhbFxuICAgIC8vIHBlcm8gc8OtIHVuIG1lbnNhamUgbnVldm8gKG5vIGVsIFwidXNlci1pbml0aWFsLW1lc3NhZ2VcIikuIFNjcm9sbGVhLlxuICAgIGlmICghaXNBbnN3ZXJPclF1ZXN0aW9uICYmICFpc0FwcHJvdmFsICYmICFoYXNJbml0aWFsTWVzc2FnZSAmJiBtZXNzYWdlcy5sZW5ndGggPiBwcmV2TGVuKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmLCBzeW5jVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlc1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gbG9hZGluZ01lc3NhZ2VzXG5cbiAgICBpZiAoIWp1c3RGaW5pc2hlZExvYWRpbmcgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICAvLyBFc3RhZG8gaW5pY2lhbCBkZWwgYm90w7NuIHNjcm9sbC10by1ib3R0b20gYWwgdGVybWluYXIgbG9hZGluZ01lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgYXR0YWNobWVudHNDb3VudCA9XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5hdHRhY2htZW50cykgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoIDogMCkgfHxcbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LnNvdXJjZXMpID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMubGVuZ3RoIDogMClcblxuICBjb25zdCBzdHJlYW1Mb2FkaW5nRGlzcGxheSA9IHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSh7XG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3M6IGFjdGl2ZUxvYWRpbmdzIHx8IHt9LFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHNDb3VudCksXG4gICAgYXR0YWNobWVudHNDb3VudCxcbiAgICB0LFxuICB9KVxuXG4gIGNvbnN0IGlzU2Nyb2xsT25QYXJlbnQgPSAhIWV4cGFuZGVkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluaXRpYWxDaGF0SWQpIHtcbiAgICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHJlYWRNYWlhUGFuZWxTZXNzaW9uKGF1dGhVc2VyLmlkKVxuICAgIGlmIChzZXNzaW9uPy5zY3JvbGxTZXNzaW9uSWQgPT09IGluaXRpYWxDaGF0SWQgJiYgdHlwZW9mIHNlc3Npb24uc2Nyb2xsVG9wID09PSAnbnVtYmVyJyAmJiBzZXNzaW9uLnNjcm9sbFRvcCA+IDApIHtcbiAgICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBzZXNzaW9uLnNjcm9sbFRvcFxuICAgIH1cbiAgfSwgW2F1dGhVc2VyLmlkLCBpbml0aWFsQ2hhdElkXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9PSBudWxsIHx8ICFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50XG4gICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoXSlcblxuICAvLyBBbCBleHBhbmRpci9jb250cmFlciBlbCBtb2RhbCBlbCByZWYgcGFzYSBhIG90cm8gY29udGVuZWRvciAoc2Nyb2xsVG9wIHNlIHJlc2V0ZWEgYSAwKS5cbiAgLy8gUmVzdGF1cmFyIGxhIHBvc2ljacOzbiBkZSBzY3JvbGwgYW50ZXMgZGVsIHBhaW50IHBhcmEgZXZpdGFyIHF1ZSBsYSBjb252ZXJzYWNpw7NuIHNhbHRlIGFycmliYS5cbiAgY29uc3QgZXhwYW5kZWRSZWYgPSB1c2VSZWYoZXhwYW5kZWQpXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV4cGFuZGVkUmVmLmN1cnJlbnQgIT09IGV4cGFuZGVkICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHNhdmVkU2Nyb2xsVG9wID0gbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IHNhdmVkU2Nyb2xsVG9wXG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfVxuICB9LCBbZXhwYW5kZWRdKVxuXG4gIGlmIChsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZhZGUgZmlsbD5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9GYWRlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yID1cbiAgICAhIWxhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobGFzdE1lc3NhZ2UuaWQpICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobWVzc2FnZS5pZClcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgICAgICAgICAvLyBObyBmaWx0cmFyIGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZzogc3UgdGV4dG8gdml2ZVxuICAgICAgICAgIC8vIGVuIGVsIHN0cmVhbWluZ1N0b3JlIHkgYG1lc3NhZ2UubWVzc2FnZWAgZXMgJycgaGFzdGEgZWwgY29tcGxldGUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIGNvbnN0IHR1cm5JZCA9IHJlc29sdmVSZXRyeVR1cm5JZChtZXNzYWdlKVxuICAgICAgICAgIGNvbnN0IHVzZXJNZXNzYWdlRm9yUmV0cnkgPSBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeShtZXNzYWdlcywgbWVzc2FnZSlcbiAgICAgICAgICBjb25zdCBjYW5SZXRyeSA9XG4gICAgICAgICAgICAhIXVzZXJNZXNzYWdlRm9yUmV0cnkgJiZcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuaXNFcnJvciAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWwgJiZcbiAgICAgICAgICAgIChtZXNzYWdlLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgKCFtZXNzYWdlLmlzX2NhbmNlbGxlZCAmJiAhIXR1cm5JZCkpXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICBrZXk9e21lc3NhZ2VLZXl9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbn1cbiAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgIGhhbmRsZVJldHJ5PXtjYW5SZXRyeSA/ICgpID0+IHJldHJ5TWVzc2FnZShtZXNzYWdlKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgICAgc3RyZWFtQWN0aXZpdHk9e2lzU3RyZWFtaW5nID8gc3RyZWFtTG9hZGluZ0Rpc3BsYXkgOiBudWxsfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC8+XG4gICAgICB7IWhhc01lc3NhZ2VMZXZlbEluZGljYXRvciAmJiBzdHJlYW1Mb2FkaW5nRGlzcGxheSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtTG9hZGluZ0Rpc3BsYXl9IC8+XG4gICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICApfVxuICAgICAgey8qIEVzcGFjaW8gcXVlIGxlIHBlcm1pdGUgYSBsYSBwcmVndW50YSBzdWJpciBhbCB0b3BlLiBBbHR1cmEgbWFuZWphZGFcbiAgICAgICAgICBpbXBlcmF0aXZhbWVudGUgZGVzZGUgYHNldFNwYWNlckhlaWdodGA7IGFycmFuY2EgZW4gMC4gKi99XG4gICAgICA8U0NUdXJuU3BhY2VyIHJlZj17c3BhY2VyRWxSZWZ9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIC8vIFNpIGVsIHVzdWFyaW8gbXVldmUgZWwgc2Nyb2xsIGFib3J0YW1vcyBsYSBhbmltYWNpw7NuIHkgc29sdGFtb3MgZWwgdHVybm86XG4gICAgLy8gbm8gbGUgcGVsZWFtb3MgZWwgY29udHJvbCBkZWwgY29udGVuZWRvci5cbiAgICA8U0NNZXNzYWdlc091dGVyXG4gICAgICAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9XG4gICAgICBvbldoZWVsPXtoYW5kbGVVc2VyU2Nyb2xsSW50ZW50fVxuICAgICAgb25Ub3VjaFN0YXJ0PXtoYW5kbGVVc2VyU2Nyb2xsSW50ZW50fVxuICAgID5cbiAgICAgIDxTQ01lc3NhZ2VzR3JhZGllbnRUb3AgJHNob3c9e3Nob3dUb3BHcmFkaWVudH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgIHtpc1Njcm9sbE9uUGFyZW50ID8gKFxuICAgICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT57bWVzc2FnZXNDb250ZW50fTwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0gJHNjcm9sbE9uUGFyZW50PXtmYWxzZX0+XG4gICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICApfVxuXG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tICRzaG93PXtzaG93Qm90dG9tR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG5cbiAgICAgIHtzaG93U2Nyb2xsVG9Cb3R0b20gJiYgKFxuICAgICAgICA8U2Nyb2xsVG9Cb3R0b21CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ1Njcm9sbEljb25Td2FwICR2aXNpYmxlPXtpc1dyaXRpbmd9IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPFNDV3JpdGluZ0RvdHM+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICA8L1NDV3JpdGluZ0RvdHM+XG4gICAgICAgICAgPC9TQ1Njcm9sbEljb25Td2FwPlxuICAgICAgICAgIDxTQ1Njcm9sbEljb25Td2FwICR2aXNpYmxlPXshaXNXcml0aW5nfSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPXsxMn0gaGVpZ2h0PXsxMn0gZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMjAyMDIwXCJcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoPXsxLjV9XG4gICAgICAgICAgICAgICAgZD1cIk02IC43NXYxMC41TS43NSA2IDYgMTEuMjUgMTEuMjUgNlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L1NDU2Nyb2xsSWNvblN3YXA+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUU3RyxTQUFTQyxjQUFjLFFBQVEsMkNBQTJDO0FBQzFFLFNBQVNDLFdBQVcsUUFBUSxxQ0FBcUM7QUFDakUsU0FBU0Msc0JBQXNCLFFBQVEsb0NBQW9DO0FBQzNFLFNBQVNDLG1CQUFtQixRQUFRLGdEQUFnRDtBQUNwRixTQUFTQyxjQUFjLFFBQVEsNEJBQTRCO0FBRzNELFNBQXNCQyxl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