@projectcor/maia-components 2.11.108-0 → 2.11.109-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.
- package/lib/components/atoms/IconButton.js +2 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.js +73 -14
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +121 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +55 -0
- package/lib/components/atoms/ReasoningBlock/index.js +2 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +151 -39
- package/lib/components/molecules/ChatAIMessages/newStyles.js +21 -13
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +187 -154
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +12 -2
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +26 -8
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +24 -7
- package/lib/components/molecules/MessageFeedback/MessageFeedback.js +2 -14
- package/lib/components/organisms/ChatAI/ChatAI.js +22 -3
- package/lib/components/organisms/ClientAIButton/ClientAIButton.js +4 -1
- package/lib/components/organisms/CloseWhileGeneratingModal/CloseWhileGeneratingModal.js +56 -0
- package/lib/components/organisms/CloseWhileGeneratingModal/CloseWhileGeneratingModal.styles.js +35 -0
- package/lib/components/organisms/CloseWhileGeneratingModal/index.js +2 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +4 -1
- package/lib/context/global-context.js +1 -1
- package/lib/dev/DevChatAI.js +4 -1
- package/lib/hooks/useChatManager/useChatManager.js +106 -371
- package/lib/hooks/useChatMessages/useChatMessages.js +33 -6
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -80
- package/lib/hooks/useProjectSummaryConfig.js +36 -17
- package/lib/hooks/useReasoningTrace/index.js +3 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.js +142 -0
- package/lib/hooks/useReasoningTrace/useReasoningTrace.js +14 -0
- package/lib/lang/br/index.js +242 -31
- package/lib/lang/en/index.js +242 -31
- package/lib/lang/es/index.js +242 -31
- package/lib/lang/fr/index.js +242 -31
- package/lib/services/maia/Orchestrator/index.js +3 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +23 -84
- package/lib/services/utils/mapChatMessages.js +25 -26
- package/lib/store/maiaMinimizedPersistence.js +49 -0
- package/lib/store/sessions/sessionStreamManager.js +93 -191
- package/lib/store/sessions/sessions.types.js +1 -1
- package/lib/types/Chat.js +1 -1
- package/lib/types/reasoning.js +2 -0
- package/lib/utils/autoApproveStorage.js +26 -0
- package/lib/utils/maiaHostOpen.js +10 -1
- package/lib/utils/reasoningMappers.js +62 -0
- package/lib/utils/streamActivityMessages.js +106 -41
- package/package.json +1 -1
- package/lib/components/atoms/icons/RetryIcon.js +0 -34
- package/lib/store/maiaLastChatPersistence.js +0 -35
- package/lib/utils/retryCompletion.js +0 -85
|
@@ -36,9 +36,15 @@ import { sessionStreamManager, MAX_CONCURRENT_STREAMS } from '../../store/sessio
|
|
|
36
36
|
import { activeView } from '../../store/sessions/activeView';
|
|
37
37
|
import { notifySessionFinishedInBackground } from '../../store/sessions/sessionNotifications';
|
|
38
38
|
import { buildSidebarSessionTitle, ensureSessionInSidebar } from '../../store/chatsSidebarOptimistic';
|
|
39
|
-
import { isStreamingPlaceholderMessageId } from '../../utils/streamActivityMessages';
|
|
40
|
-
import { findUserMessageForRetry, messagesWithoutRetriedTurn, resolveRetryTurnId } from '../../utils/retryCompletion';
|
|
39
|
+
import { isStreamingPlaceholderMessageId, streamingPlaceholderMessageId } from '../../utils/streamActivityMessages';
|
|
41
40
|
import { getChatsStoreState, useChatsStore } from '../../store/useChatsStore';
|
|
41
|
+
import { reasoningStore } from '../useReasoningTrace';
|
|
42
|
+
import { buildReasoningTrace, mapReasoningTrace } from '../../utils/reasoningMappers';
|
|
43
|
+
var reasoningTraceFor = function reasoningTraceFor(messageId) {
|
|
44
|
+
var snapshot = reasoningStore.getSnapshot();
|
|
45
|
+
if (snapshot.id !== messageId) return null;
|
|
46
|
+
return buildReasoningTrace(snapshot.steps, snapshot.summary);
|
|
47
|
+
};
|
|
42
48
|
var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
|
|
43
49
|
var _options$attachments;
|
|
44
50
|
if (Array.isArray(attachmentsOrOptions)) {
|
|
@@ -299,6 +305,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
299
305
|
agent = _useGlobalContext.agent,
|
|
300
306
|
isWebSearchActive = _useGlobalContext.isWebSearchActive,
|
|
301
307
|
isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
|
|
308
|
+
isAutoApproveActive = _useGlobalContext.isAutoApproveActive,
|
|
302
309
|
chipsProject = _useGlobalContext.chipsProject,
|
|
303
310
|
setChipsProject = _useGlobalContext.setChipsProject;
|
|
304
311
|
var event = useEvent();
|
|
@@ -325,8 +332,6 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
325
332
|
var lastManualApprovalRef = useRef(null);
|
|
326
333
|
/** Contexto del mensaje de aprobación previo al ejecutar continue-thread. */
|
|
327
334
|
var hitlExecutionContextRef = useRef(null);
|
|
328
|
-
/** Mensajes a restaurar si `retry_completion` falla antes de persistir el reemplazo. */
|
|
329
|
-
var retrySnapshotRef = useRef(null);
|
|
330
335
|
var isProcessingRef = useRef(false);
|
|
331
336
|
var firstTimeRef = useRef(false);
|
|
332
337
|
/** Id del placeholder del mensaje en streaming activo (si hay). */
|
|
@@ -359,6 +364,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
359
364
|
var lastHandledTerminalRef = useRef(null);
|
|
360
365
|
var isWebSearchActiveRef = useRef(isWebSearchActive);
|
|
361
366
|
var isDeepSearchActiveRef = useRef(isDeepSearchActive);
|
|
367
|
+
var isAutoApproveActiveRef = useRef(isAutoApproveActive);
|
|
362
368
|
/** Evita closures obsoletas cuando el footer conserva sendMessage entre renders. */
|
|
363
369
|
var contextRef = useRef({
|
|
364
370
|
chipsProject: chipsProject,
|
|
@@ -375,7 +381,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
375
381
|
useEffect(function () {
|
|
376
382
|
isWebSearchActiveRef.current = isWebSearchActive;
|
|
377
383
|
isDeepSearchActiveRef.current = isDeepSearchActive;
|
|
378
|
-
|
|
384
|
+
isAutoApproveActiveRef.current = isAutoApproveActive;
|
|
385
|
+
}, [isWebSearchActive, isDeepSearchActive, isAutoApproveActive]);
|
|
379
386
|
var _useChatMessages = useChatMessages({
|
|
380
387
|
chatId: initialChatId || currentChatId.current,
|
|
381
388
|
currentUser: currentUser,
|
|
@@ -389,7 +396,6 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
389
396
|
loadMessages = _useChatMessages.loadMessages,
|
|
390
397
|
addMessage = _useChatMessages.addMessage,
|
|
391
398
|
removeMessage = _useChatMessages.removeMessage,
|
|
392
|
-
replaceMessages = _useChatMessages.replaceMessages,
|
|
393
399
|
handleScroll = _useChatMessages.handleScroll;
|
|
394
400
|
messagesRef.current = messages;
|
|
395
401
|
|
|
@@ -432,19 +438,17 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
432
438
|
};
|
|
433
439
|
}, []);
|
|
434
440
|
|
|
435
|
-
// Reconciliación: si la sesión activa termina (complete/error) pero el
|
|
436
|
-
// por-sesión todavía tiene un placeholder de streaming, refrescamos desde
|
|
441
|
+
// Reconciliación: si la sesión activa termina (complete/error/cancelled) pero el
|
|
442
|
+
// store por-sesión todavía tiene un placeholder de streaming, refrescamos desde
|
|
437
443
|
// el backend. Usamos el store (no messagesRef): handleStreamFinish limpia el
|
|
438
444
|
// placeholder ahí de forma síncrona; messagesRef puede quedar stale un render
|
|
439
445
|
// porque setStatus (Zustand) y removeMessage (React) no batchan juntos.
|
|
440
|
-
// `cancelled` queda afuera: el stop ya reconcilia local (parcial + burbuja de
|
|
441
|
-
// cancelado) y recargar acá mostraba la pantalla de carga del chat entero.
|
|
442
446
|
var activeSessionMeta = useSessionMeta(activeSessionId);
|
|
443
447
|
useEffect(function () {
|
|
444
448
|
var _activeSessionMeta$fi;
|
|
445
449
|
var status = activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.status;
|
|
446
450
|
if (!status) return;
|
|
447
|
-
var isTerminal = status === 'complete' || status === 'error';
|
|
451
|
+
var isTerminal = status === 'complete' || status === 'error' || status === 'cancelled';
|
|
448
452
|
if (!isTerminal) return;
|
|
449
453
|
var key = "".concat(activeSessionId, ":").concat(status, ":").concat((_activeSessionMeta$fi = activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.finishedAt) !== null && _activeSessionMeta$fi !== void 0 ? _activeSessionMeta$fi : '');
|
|
450
454
|
if (lastHandledTerminalRef.current === key) return;
|
|
@@ -525,26 +529,6 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
525
529
|
var isActive = activeView.is(sessionId);
|
|
526
530
|
sessionStreamingText.clear(sessionId);
|
|
527
531
|
dropFromSession(sessionId, placeholderId);
|
|
528
|
-
var retrySnapshot = retrySnapshotRef.current;
|
|
529
|
-
if (retrySnapshot) {
|
|
530
|
-
retrySnapshotRef.current = null;
|
|
531
|
-
messagesRef.current = retrySnapshot;
|
|
532
|
-
replaceMessages(retrySnapshot);
|
|
533
|
-
if (isActive) {
|
|
534
|
-
clearStreamUiRef.current();
|
|
535
|
-
streamingPlaceholderIdRef.current = null;
|
|
536
|
-
activeStreamChatIdRef.current = null;
|
|
537
|
-
isProcessingRef.current = false;
|
|
538
|
-
}
|
|
539
|
-
document.dispatchEvent(new CustomEvent('snackbar-event', {
|
|
540
|
-
detail: {
|
|
541
|
-
show: true,
|
|
542
|
-
severity: 'error',
|
|
543
|
-
message: t('chat.error')
|
|
544
|
-
}
|
|
545
|
-
}));
|
|
546
|
-
return;
|
|
547
|
-
}
|
|
548
532
|
if (isActive) {
|
|
549
533
|
clearStreamUiRef.current();
|
|
550
534
|
streamingPlaceholderIdRef.current = null;
|
|
@@ -575,7 +559,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
575
559
|
getChatsStoreState().markChatAsUnread(sessionId);
|
|
576
560
|
notifySessionFinishedInBackground(sessionId, 'error');
|
|
577
561
|
}
|
|
578
|
-
}, [commitToSession, dropFromSession, clearSessionTail,
|
|
562
|
+
}, [commitToSession, dropFromSession, clearSessionTail, t]);
|
|
579
563
|
var handleStreamUpdate = useCallback(function (ctx, content) {
|
|
580
564
|
var sessionId = ctx.sessionId,
|
|
581
565
|
placeholderId = ctx.placeholderId;
|
|
@@ -606,19 +590,23 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
606
590
|
sessionStreamingText.setText(sessionId, placeholderId, content);
|
|
607
591
|
}, [commitToSession]);
|
|
608
592
|
var handleStreamFinish = useCallback(/*#__PURE__*/function () {
|
|
609
|
-
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId) {
|
|
610
|
-
var _previousMessage$appr, _window$taskPanel, _createAgentFollowUp, _editAgentFollowUp;
|
|
611
|
-
var sessionId, placeholderId, isActive, tempMessageId, attachments, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, hoursToolsFromApproval, wasHoursChargeApproved, manualHoursTool, wasHoursChargeManualApproved, tools, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, _getChatsStoreState, isChatViewVisible, markChatAsRead, customEvent;
|
|
593
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId, _resolvedContext, reasoning) {
|
|
594
|
+
var _mapReasoningTrace, _previousMessage$appr, _window$taskPanel, _createAgentFollowUp, _editAgentFollowUp;
|
|
595
|
+
var sessionId, placeholderId, isActive, tempMessageId, attachments, finishTrace, finalMessageId, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, hoursToolsFromApproval, wasHoursChargeApproved, manualHoursTool, wasHoursChargeManualApproved, tools, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, _getChatsStoreState, isChatViewVisible, markChatAsRead, customEvent;
|
|
612
596
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
613
597
|
while (1) switch (_context.prev = _context.next) {
|
|
614
598
|
case 0:
|
|
615
599
|
sessionId = ctx.sessionId, placeholderId = ctx.placeholderId;
|
|
616
600
|
isActive = activeView.is(sessionId);
|
|
617
|
-
retrySnapshotRef.current = null;
|
|
618
601
|
tempMessageId = placeholderId;
|
|
619
602
|
sessionStreamingText.clear(sessionId);
|
|
620
603
|
dropFromSession(sessionId, tempMessageId);
|
|
621
|
-
attachments = normalizeAssistantAttachments(rawAttachments);
|
|
604
|
+
attachments = normalizeAssistantAttachments(rawAttachments);
|
|
605
|
+
finishTrace = (_mapReasoningTrace = mapReasoningTrace(reasoning)) !== null && _mapReasoningTrace !== void 0 ? _mapReasoningTrace : reasoningTraceFor(tempMessageId);
|
|
606
|
+
finalMessageId = "answer-".concat(memorySessionId);
|
|
607
|
+
reasoningStore.rename(tempMessageId, finalMessageId);
|
|
608
|
+
|
|
609
|
+
// Sesión en background: cerramos lean. El backend ya persistió la
|
|
622
610
|
// respuesta, así que al volver a la sesión se carga desde ahí. Avisamos
|
|
623
611
|
// que terminó (unread + evento para toast/sonido).
|
|
624
612
|
if (isActive) {
|
|
@@ -626,7 +614,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
626
614
|
break;
|
|
627
615
|
}
|
|
628
616
|
commitToSession(sessionId, _objectSpread(_objectSpread({
|
|
629
|
-
id:
|
|
617
|
+
id: finalMessageId,
|
|
630
618
|
message: content,
|
|
631
619
|
date: new Date(),
|
|
632
620
|
user: {
|
|
@@ -639,7 +627,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
639
627
|
attachments: attachments
|
|
640
628
|
} : {}), {}, {
|
|
641
629
|
memorySessionId: memorySessionId,
|
|
642
|
-
suggestions: suggestions || []
|
|
630
|
+
suggestions: suggestions || [],
|
|
631
|
+
reasoning: finishTrace
|
|
643
632
|
}));
|
|
644
633
|
clearSessionTail(sessionId);
|
|
645
634
|
getChatsStoreState().markChatAsUnread(sessionId);
|
|
@@ -788,8 +777,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
788
777
|
(_window$taskPanel2 = window.taskPanel) === null || _window$taskPanel2 === void 0 || (_window$taskPanel2$re = _window$taskPanel2.refetchTask) === null || _window$taskPanel2$re === void 0 || _window$taskPanel2$re.call(_window$taskPanel2);
|
|
789
778
|
}
|
|
790
779
|
}
|
|
791
|
-
commitToSession(sessionId, _objectSpread(_objectSpread({
|
|
792
|
-
id:
|
|
780
|
+
commitToSession(sessionId, _objectSpread(_objectSpread(_objectSpread({
|
|
781
|
+
id: finalMessageId,
|
|
793
782
|
message: contentToAdd,
|
|
794
783
|
date: new Date(),
|
|
795
784
|
user: {
|
|
@@ -805,7 +794,9 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
805
794
|
suggestions: suggestions || []
|
|
806
795
|
}, createAgentFollowUp ? {
|
|
807
796
|
createAgentFollowUp: createAgentFollowUp
|
|
808
|
-
} : {})
|
|
797
|
+
} : {}), {}, {
|
|
798
|
+
reasoning: finishTrace
|
|
799
|
+
}));
|
|
809
800
|
clearSessionTail(sessionId);
|
|
810
801
|
if ((_createAgentFollowUp = createAgentFollowUp) !== null && _createAgentFollowUp !== void 0 && _createAgentFollowUp.agentId) {
|
|
811
802
|
fetchAgentDetail(createAgentFollowUp.agentId).then(function (chatAgent) {
|
|
@@ -830,7 +821,6 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
830
821
|
});
|
|
831
822
|
}
|
|
832
823
|
isProcessingRef.current = false;
|
|
833
|
-
retrySnapshotRef.current = null;
|
|
834
824
|
_getChatsStoreState = getChatsStoreState(), isChatViewVisible = _getChatsStoreState.isChatViewVisible, markChatAsRead = _getChatsStoreState.markChatAsRead;
|
|
835
825
|
if (!(isActive && isChatViewVisible)) {
|
|
836
826
|
_context.next = 5;
|
|
@@ -852,35 +842,19 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
852
842
|
}
|
|
853
843
|
}, _callee);
|
|
854
844
|
}));
|
|
855
|
-
return function (_x, _x2, _x3, _x4, _x5, _x6, _x7) {
|
|
845
|
+
return function (_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9) {
|
|
856
846
|
return _ref5.apply(this, arguments);
|
|
857
847
|
};
|
|
858
848
|
}(), [commitToSession, dropFromSession, clearSessionTail, project, getTabTaskDefault, event, agent]);
|
|
859
|
-
|
|
860
|
-
// `partialText` lo rescata `stopStream` antes de limpiar el store externo: el texto en vivo
|
|
861
|
-
// no vive en `messages`, así que sin esto la respuesta a medias desaparece de pantalla aunque
|
|
862
|
-
// el backend sí la haya persistido.
|
|
863
|
-
var handleStreamStop = useCallback(function (partialText) {
|
|
849
|
+
var handleStreamStop = useCallback(function () {
|
|
864
850
|
// El stop siempre aplica a la sesión activa (botón del input visible).
|
|
865
851
|
var sessionId = currentChatId.current;
|
|
866
852
|
clearStreamUiRef.current();
|
|
867
|
-
var tempMessageId =
|
|
853
|
+
var tempMessageId = streamingPlaceholderMessageId(currentMessageId.current);
|
|
868
854
|
sessionStreamingText.clear(sessionId);
|
|
869
855
|
streamingPlaceholderIdRef.current = null;
|
|
870
856
|
activeStreamChatIdRef.current = null;
|
|
871
857
|
dropFromSession(sessionId, tempMessageId);
|
|
872
|
-
if (partialText) {
|
|
873
|
-
commitToSession(sessionId, {
|
|
874
|
-
id: "answer-".concat(currentMessageId.current),
|
|
875
|
-
message: partialText,
|
|
876
|
-
date: new Date(),
|
|
877
|
-
user: {
|
|
878
|
-
id: 'assistant',
|
|
879
|
-
name: 'Assistant'
|
|
880
|
-
},
|
|
881
|
-
role: ChatHistoryRole.ASSISTANT
|
|
882
|
-
});
|
|
883
|
-
}
|
|
884
858
|
commitToSession(sessionId, {
|
|
885
859
|
id: "answer-".concat(currentMessageId.current, "-cancelled"),
|
|
886
860
|
message: t('chat.cancelled'),
|
|
@@ -894,16 +868,19 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
894
868
|
});
|
|
895
869
|
clearSessionTail(sessionId);
|
|
896
870
|
isProcessingRef.current = false;
|
|
897
|
-
|
|
871
|
+
setTimeout(function () {
|
|
872
|
+
var customEvent = new CustomEvent('refetch-session');
|
|
873
|
+
document.dispatchEvent(customEvent);
|
|
874
|
+
}, 500);
|
|
898
875
|
}, [commitToSession, dropFromSession, clearSessionTail, t]);
|
|
899
876
|
var handleApprovalRequired = useCallback(function (ctx, approval, accumulatedContent) {
|
|
900
|
-
var _approval$pending_act;
|
|
877
|
+
var _approval$pending_act, _mapReasoningTrace2;
|
|
901
878
|
var sessionId = ctx.sessionId,
|
|
902
879
|
placeholderId = ctx.placeholderId;
|
|
903
880
|
var isActive = activeView.is(sessionId);
|
|
881
|
+
var tempMessageId = placeholderId;
|
|
904
882
|
sessionStreamingText.clear(sessionId);
|
|
905
883
|
dropFromSession(sessionId, placeholderId);
|
|
906
|
-
retrySnapshotRef.current = null;
|
|
907
884
|
if (isActive) {
|
|
908
885
|
streamingPlaceholderIdRef.current = null;
|
|
909
886
|
activeStreamChatIdRef.current = null;
|
|
@@ -920,7 +897,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
920
897
|
if (isActive) {
|
|
921
898
|
hitlExecutionContextRef.current = hitlContext;
|
|
922
899
|
}
|
|
923
|
-
if (approval.manual_approval_detected) {
|
|
900
|
+
if (approval.manual_approval_detected || approval.auto_approved || approval.approval_status === 'approved') {
|
|
924
901
|
var _approval$pending_act2, _ref6, _tool_name, _tool_args;
|
|
925
902
|
var firstAction = (_approval$pending_act2 = approval.pending_actions) === null || _approval$pending_act2 === void 0 ? void 0 : _approval$pending_act2[0];
|
|
926
903
|
var toolName = (_ref6 = (_tool_name = approval.tool_name) !== null && _tool_name !== void 0 ? _tool_name : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_name) !== null && _ref6 !== void 0 ? _ref6 : '';
|
|
@@ -938,8 +915,12 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
938
915
|
}
|
|
939
916
|
|
|
940
917
|
// Add a message with the approval request
|
|
918
|
+
var approvalMessageId = "approval-".concat(approval.original_thread_id);
|
|
919
|
+
reasoningStore.finish(tempMessageId, approval.reasoning);
|
|
920
|
+
reasoningStore.rename(tempMessageId, approvalMessageId);
|
|
921
|
+
var approvalTrace = (_mapReasoningTrace2 = mapReasoningTrace(approval.reasoning)) !== null && _mapReasoningTrace2 !== void 0 ? _mapReasoningTrace2 : reasoningTraceFor(approvalMessageId);
|
|
941
922
|
commitToSession(sessionId, {
|
|
942
|
-
id:
|
|
923
|
+
id: approvalMessageId,
|
|
943
924
|
message: accumulatedContent || '',
|
|
944
925
|
date: new Date(),
|
|
945
926
|
user: {
|
|
@@ -948,7 +929,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
948
929
|
},
|
|
949
930
|
role: ChatHistoryRole.ASSISTANT,
|
|
950
931
|
approval: approval,
|
|
951
|
-
approvalStatus: 'pending'
|
|
932
|
+
approvalStatus: 'pending',
|
|
933
|
+
reasoning: approvalTrace
|
|
952
934
|
});
|
|
953
935
|
if (isActive) {
|
|
954
936
|
isProcessingRef.current = false;
|
|
@@ -967,7 +949,6 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
967
949
|
hitlExecutionContextRef: hitlExecutionContextRef
|
|
968
950
|
}),
|
|
969
951
|
askMaia = _useOrchestratorStrea.askMaia,
|
|
970
|
-
retryCompletion = _useOrchestratorStrea.retryCompletion,
|
|
971
952
|
waitingResponse = _useOrchestratorStrea.isLoading,
|
|
972
953
|
isWriting = _useOrchestratorStrea.isWriting,
|
|
973
954
|
loadingMessage = _useOrchestratorStrea.loadingMessage,
|
|
@@ -1059,7 +1040,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1059
1040
|
contextMessage: contextMessage
|
|
1060
1041
|
} : {}));
|
|
1061
1042
|
currentMessageId.current = uuidv4();
|
|
1062
|
-
streamingPlaceholderId =
|
|
1043
|
+
streamingPlaceholderId = streamingPlaceholderMessageId(currentMessageId.current);
|
|
1063
1044
|
streamingPlaceholderIdRef.current = streamingPlaceholderId;
|
|
1064
1045
|
activeStreamChatIdRef.current = sessionId;
|
|
1065
1046
|
sessionStreamingText.start(sessionId, streamingPlaceholderId);
|
|
@@ -1105,7 +1086,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1105
1086
|
agentName: (agent === null || agent === void 0 ? void 0 : agent.name) || '',
|
|
1106
1087
|
agentId: currentAgentFromMessages || (agent === null || agent === void 0 ? void 0 : agent.id),
|
|
1107
1088
|
isWebSearchActive: isWebSearchActiveRef.current,
|
|
1108
|
-
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
1089
|
+
isDeepSearchActive: isDeepSearchActiveRef.current,
|
|
1090
|
+
isAutoApproveActive: isAutoApproveActiveRef.current
|
|
1109
1091
|
}, (ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.feeId) != null ? {
|
|
1110
1092
|
feeId: Number(ctxProject.feeId)
|
|
1111
1093
|
} : {}), resolveClientPayload(ctxClient, ctxProject)), projects !== null && projects !== void 0 && projects.length ? {
|
|
@@ -1142,7 +1124,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1142
1124
|
}
|
|
1143
1125
|
}, _callee2);
|
|
1144
1126
|
}));
|
|
1145
|
-
return function (
|
|
1127
|
+
return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14) {
|
|
1146
1128
|
return _ref7.apply(this, arguments);
|
|
1147
1129
|
};
|
|
1148
1130
|
}(), [addMessage, commitToSession, event, askMaia, project, client, task, chipsProject, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
|
|
@@ -1172,7 +1154,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1172
1154
|
agentName: (agent === null || agent === void 0 ? void 0 : agent.name) || '',
|
|
1173
1155
|
agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
|
|
1174
1156
|
isWebSearchActive: isWebSearchActiveRef.current,
|
|
1175
|
-
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
1157
|
+
isDeepSearchActive: isDeepSearchActiveRef.current,
|
|
1158
|
+
isAutoApproveActive: isAutoApproveActiveRef.current
|
|
1176
1159
|
}, (option === null || option === void 0 ? void 0 : option.feeId) != null ? {
|
|
1177
1160
|
feeId: Number(option.feeId)
|
|
1178
1161
|
} : {}), (option === null || option === void 0 ? void 0 : option.clientId) != null ? {
|
|
@@ -1184,265 +1167,16 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1184
1167
|
} : {}));
|
|
1185
1168
|
}
|
|
1186
1169
|
}, [project, setProject, askMaia, authUser, isWebSearchActive, agent]);
|
|
1187
|
-
var retryMessage = useCallback(/*#__PURE__*/function () {
|
|
1188
|
-
var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(message) {
|
|
1189
|
-
var _userMessage$message, _userMessage$attachme, _userMessage$sources, _message$memorySessio, _truncated$at;
|
|
1190
|
-
var sessionId, previousMessages, userMessage, turnId, useOrchestratorFallback, truncated, newMessageId, streamingPlaceholderId, placeholder, nextMessages, _contextRef$current2, ctxChipsProject, ctxProject, ctxClient, ctxTask, lastMessageWithProject, projectToRequest, currentAgentFromMessages, attachments, replayViaOrchestrator, result;
|
|
1191
|
-
return _regeneratorRuntime.wrap(function (_context4) {
|
|
1192
|
-
while (1) switch (_context4.prev = _context4.next) {
|
|
1193
|
-
case 0:
|
|
1194
|
-
if (!(isProcessingRef.current || waitingResponse || loadingMessages)) {
|
|
1195
|
-
_context4.next = 1;
|
|
1196
|
-
break;
|
|
1197
|
-
}
|
|
1198
|
-
return _context4.abrupt("return");
|
|
1199
|
-
case 1:
|
|
1200
|
-
sessionId = currentChatId.current;
|
|
1201
|
-
if (!sessionStreamManager.isActive(sessionId)) {
|
|
1202
|
-
_context4.next = 2;
|
|
1203
|
-
break;
|
|
1204
|
-
}
|
|
1205
|
-
return _context4.abrupt("return");
|
|
1206
|
-
case 2:
|
|
1207
|
-
if (!(sessionStreamManager.getActiveCount() >= MAX_CONCURRENT_STREAMS)) {
|
|
1208
|
-
_context4.next = 3;
|
|
1209
|
-
break;
|
|
1210
|
-
}
|
|
1211
|
-
document.dispatchEvent(new CustomEvent('snackbar-event', {
|
|
1212
|
-
detail: {
|
|
1213
|
-
show: true,
|
|
1214
|
-
severity: 'info',
|
|
1215
|
-
message: t('chat.tooManyActiveSessions')
|
|
1216
|
-
}
|
|
1217
|
-
}));
|
|
1218
|
-
return _context4.abrupt("return");
|
|
1219
|
-
case 3:
|
|
1220
|
-
previousMessages = messagesRef.current;
|
|
1221
|
-
if (previousMessages.some(function (item) {
|
|
1222
|
-
return item.id === message.id;
|
|
1223
|
-
})) {
|
|
1224
|
-
_context4.next = 4;
|
|
1225
|
-
break;
|
|
1226
|
-
}
|
|
1227
|
-
return _context4.abrupt("return");
|
|
1228
|
-
case 4:
|
|
1229
|
-
userMessage = findUserMessageForRetry(previousMessages, message);
|
|
1230
|
-
if (!(!(userMessage !== null && userMessage !== void 0 && (_userMessage$message = userMessage.message) !== null && _userMessage$message !== void 0 && _userMessage$message.trim()) && !(userMessage !== null && userMessage !== void 0 && (_userMessage$attachme = userMessage.attachments) !== null && _userMessage$attachme !== void 0 && _userMessage$attachme.length) && !(userMessage !== null && userMessage !== void 0 && (_userMessage$sources = userMessage.sources) !== null && _userMessage$sources !== void 0 && _userMessage$sources.length))) {
|
|
1231
|
-
_context4.next = 5;
|
|
1232
|
-
break;
|
|
1233
|
-
}
|
|
1234
|
-
return _context4.abrupt("return");
|
|
1235
|
-
case 5:
|
|
1236
|
-
turnId = resolveRetryTurnId(message);
|
|
1237
|
-
useOrchestratorFallback = message.isFrontendCancelled && !((_message$memorySessio = message.memorySessionId) !== null && _message$memorySessio !== void 0 && _message$memorySessio.trim());
|
|
1238
|
-
if (!(!turnId && !useOrchestratorFallback)) {
|
|
1239
|
-
_context4.next = 6;
|
|
1240
|
-
break;
|
|
1241
|
-
}
|
|
1242
|
-
return _context4.abrupt("return");
|
|
1243
|
-
case 6:
|
|
1244
|
-
truncated = messagesWithoutRetriedTurn(previousMessages, message);
|
|
1245
|
-
isProcessingRef.current = true;
|
|
1246
|
-
retrySnapshotRef.current = previousMessages;
|
|
1247
|
-
setActiveChatId(sessionId);
|
|
1248
|
-
newMessageId = uuidv4();
|
|
1249
|
-
currentMessageId.current = newMessageId;
|
|
1250
|
-
currentUserQuestion.current = userMessage.message;
|
|
1251
|
-
streamingPlaceholderId = "answer-".concat(newMessageId, "-streaming");
|
|
1252
|
-
streamingPlaceholderIdRef.current = streamingPlaceholderId;
|
|
1253
|
-
activeStreamChatIdRef.current = sessionId;
|
|
1254
|
-
placeholder = {
|
|
1255
|
-
id: streamingPlaceholderId,
|
|
1256
|
-
message: '',
|
|
1257
|
-
date: new Date(),
|
|
1258
|
-
user: {
|
|
1259
|
-
id: 'assistant',
|
|
1260
|
-
name: (agent === null || agent === void 0 ? void 0 : agent.name) || 'Assistant'
|
|
1261
|
-
},
|
|
1262
|
-
role: ChatHistoryRole.ASSISTANT
|
|
1263
|
-
};
|
|
1264
|
-
nextMessages = [].concat(_toConsumableArray(truncated), [placeholder]);
|
|
1265
|
-
messagesRef.current = nextMessages;
|
|
1266
|
-
replaceMessages(nextMessages);
|
|
1267
|
-
sessionStreamingText.start(sessionId, streamingPlaceholderId);
|
|
1268
|
-
_contextRef$current2 = contextRef.current, ctxChipsProject = _contextRef$current2.chipsProject, ctxProject = _contextRef$current2.project, ctxClient = _contextRef$current2.client, ctxTask = _contextRef$current2.task;
|
|
1269
|
-
lastMessageWithProject = truncated.filter(function (msg) {
|
|
1270
|
-
return msg.projectId;
|
|
1271
|
-
}).at(-1);
|
|
1272
|
-
projectToRequest = resolveProjectToRequest(ctxChipsProject, lastMessageWithProject === null || lastMessageWithProject === void 0 ? void 0 : lastMessageWithProject.projectId);
|
|
1273
|
-
currentAgentFromMessages = ((_truncated$at = truncated.at(-1)) === null || _truncated$at === void 0 ? void 0 : _truncated$at.agentId) || message.agentId;
|
|
1274
|
-
attachments = Array.isArray(userMessage.attachments) ? userMessage.attachments : Array.isArray(userMessage.sources) ? userMessage.sources : [];
|
|
1275
|
-
replayViaOrchestrator = /*#__PURE__*/function () {
|
|
1276
|
-
var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
1277
|
-
var history, projects, result, _t;
|
|
1278
|
-
return _regeneratorRuntime.wrap(function (_context3) {
|
|
1279
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
1280
|
-
case 0:
|
|
1281
|
-
history = truncated.map(function (historyMessage) {
|
|
1282
|
-
return {
|
|
1283
|
-
content: historyMessage.message,
|
|
1284
|
-
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
1285
|
-
};
|
|
1286
|
-
});
|
|
1287
|
-
if (!projectToRequest) {
|
|
1288
|
-
_context3.next = 2;
|
|
1289
|
-
break;
|
|
1290
|
-
}
|
|
1291
|
-
_context3.next = 1;
|
|
1292
|
-
return fetchProjects([projectToRequest]);
|
|
1293
|
-
case 1:
|
|
1294
|
-
_t = _context3.sent;
|
|
1295
|
-
_context3.next = 3;
|
|
1296
|
-
break;
|
|
1297
|
-
case 2:
|
|
1298
|
-
_t = null;
|
|
1299
|
-
case 3:
|
|
1300
|
-
projects = _t;
|
|
1301
|
-
_context3.next = 4;
|
|
1302
|
-
return askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
1303
|
-
message: userMessage.message,
|
|
1304
|
-
history: history,
|
|
1305
|
-
projectId: projectToRequest,
|
|
1306
|
-
lang: authUser.lang,
|
|
1307
|
-
userId: authUser.id.toString(),
|
|
1308
|
-
firstName: authUser.firstName,
|
|
1309
|
-
lastName: authUser.lastName,
|
|
1310
|
-
companyId: authUser.company_id.toString(),
|
|
1311
|
-
chatId: sessionId,
|
|
1312
|
-
messageId: newMessageId,
|
|
1313
|
-
agentName: (agent === null || agent === void 0 ? void 0 : agent.name) || '',
|
|
1314
|
-
agentId: String(currentAgentFromMessages || (agent === null || agent === void 0 ? void 0 : agent.id) || ''),
|
|
1315
|
-
isWebSearchActive: isWebSearchActiveRef.current,
|
|
1316
|
-
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
1317
|
-
}, (ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.feeId) != null ? {
|
|
1318
|
-
feeId: Number(ctxProject.feeId)
|
|
1319
|
-
} : {}), resolveClientPayload(ctxClient, ctxProject)), projects !== null && projects !== void 0 && projects.length ? {
|
|
1320
|
-
projectName: projects[0].name
|
|
1321
|
-
} : {}), (ctxTask === null || ctxTask === void 0 ? void 0 : ctxTask.id) != null ? _objectSpread({
|
|
1322
|
-
taskId: Number(ctxTask.id)
|
|
1323
|
-
}, ctxTask.name ? {
|
|
1324
|
-
taskName: ctxTask.name
|
|
1325
|
-
} : {}) : {}), attachments.length > 0 ? {
|
|
1326
|
-
attachments: attachments
|
|
1327
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
|
|
1328
|
-
agentEntity: agent.entity
|
|
1329
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.type) != null ? {
|
|
1330
|
-
agentType: agent.type
|
|
1331
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.emoji) != null ? {
|
|
1332
|
-
agentEmoji: agent.emoji
|
|
1333
|
-
} : {}), userMessage.contextMessage ? {
|
|
1334
|
-
contextMessage: userMessage.contextMessage
|
|
1335
|
-
} : {}));
|
|
1336
|
-
case 4:
|
|
1337
|
-
result = _context3.sent;
|
|
1338
|
-
if (!result.started) {
|
|
1339
|
-
retrySnapshotRef.current = null;
|
|
1340
|
-
messagesRef.current = previousMessages;
|
|
1341
|
-
replaceMessages(previousMessages);
|
|
1342
|
-
sessionStreamingText.clear(sessionId);
|
|
1343
|
-
streamingPlaceholderIdRef.current = null;
|
|
1344
|
-
activeStreamChatIdRef.current = null;
|
|
1345
|
-
isProcessingRef.current = false;
|
|
1346
|
-
if (result.reason === 'limit') {
|
|
1347
|
-
document.dispatchEvent(new CustomEvent('snackbar-event', {
|
|
1348
|
-
detail: {
|
|
1349
|
-
show: true,
|
|
1350
|
-
severity: 'info',
|
|
1351
|
-
message: t('chat.tooManyActiveSessions')
|
|
1352
|
-
}
|
|
1353
|
-
}));
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
case 5:
|
|
1357
|
-
case "end":
|
|
1358
|
-
return _context3.stop();
|
|
1359
|
-
}
|
|
1360
|
-
}, _callee3);
|
|
1361
|
-
}));
|
|
1362
|
-
return function replayViaOrchestrator() {
|
|
1363
|
-
return _ref9.apply(this, arguments);
|
|
1364
|
-
};
|
|
1365
|
-
}();
|
|
1366
|
-
if (!(useOrchestratorFallback || !turnId)) {
|
|
1367
|
-
_context4.next = 8;
|
|
1368
|
-
break;
|
|
1369
|
-
}
|
|
1370
|
-
_context4.next = 7;
|
|
1371
|
-
return replayViaOrchestrator();
|
|
1372
|
-
case 7:
|
|
1373
|
-
return _context4.abrupt("return");
|
|
1374
|
-
case 8:
|
|
1375
|
-
_context4.next = 9;
|
|
1376
|
-
return retryCompletion(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
1377
|
-
chatId: sessionId,
|
|
1378
|
-
messageId: newMessageId,
|
|
1379
|
-
memorySessionId: turnId,
|
|
1380
|
-
lang: authUser.lang,
|
|
1381
|
-
agentId: String(currentAgentFromMessages || (agent === null || agent === void 0 ? void 0 : agent.id) || ''),
|
|
1382
|
-
agentName: (agent === null || agent === void 0 ? void 0 : agent.name) || ''
|
|
1383
|
-
}, (agent === null || agent === void 0 ? void 0 : agent.type) != null ? {
|
|
1384
|
-
agentType: agent.type
|
|
1385
|
-
} : {}), {}, {
|
|
1386
|
-
isWebSearchActive: isWebSearchActiveRef.current,
|
|
1387
|
-
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
1388
|
-
}, projectToRequest ? {
|
|
1389
|
-
projectId: projectToRequest
|
|
1390
|
-
} : {}), resolveClientPayload(ctxClient, ctxProject)), (ctxTask === null || ctxTask === void 0 ? void 0 : ctxTask.id) != null ? {
|
|
1391
|
-
taskId: Number(ctxTask.id)
|
|
1392
|
-
} : {}));
|
|
1393
|
-
case 9:
|
|
1394
|
-
result = _context4.sent;
|
|
1395
|
-
if (!result.started) {
|
|
1396
|
-
_context4.next = 10;
|
|
1397
|
-
break;
|
|
1398
|
-
}
|
|
1399
|
-
return _context4.abrupt("return");
|
|
1400
|
-
case 10:
|
|
1401
|
-
if (!(result.reason === 'turn_not_found')) {
|
|
1402
|
-
_context4.next = 12;
|
|
1403
|
-
break;
|
|
1404
|
-
}
|
|
1405
|
-
_context4.next = 11;
|
|
1406
|
-
return replayViaOrchestrator();
|
|
1407
|
-
case 11:
|
|
1408
|
-
return _context4.abrupt("return");
|
|
1409
|
-
case 12:
|
|
1410
|
-
retrySnapshotRef.current = null;
|
|
1411
|
-
messagesRef.current = previousMessages;
|
|
1412
|
-
replaceMessages(previousMessages);
|
|
1413
|
-
sessionStreamingText.clear(sessionId);
|
|
1414
|
-
streamingPlaceholderIdRef.current = null;
|
|
1415
|
-
activeStreamChatIdRef.current = null;
|
|
1416
|
-
isProcessingRef.current = false;
|
|
1417
|
-
if (result.reason === 'limit') {
|
|
1418
|
-
document.dispatchEvent(new CustomEvent('snackbar-event', {
|
|
1419
|
-
detail: {
|
|
1420
|
-
show: true,
|
|
1421
|
-
severity: 'info',
|
|
1422
|
-
message: t('chat.tooManyActiveSessions')
|
|
1423
|
-
}
|
|
1424
|
-
}));
|
|
1425
|
-
}
|
|
1426
|
-
case 13:
|
|
1427
|
-
case "end":
|
|
1428
|
-
return _context4.stop();
|
|
1429
|
-
}
|
|
1430
|
-
}, _callee4);
|
|
1431
|
-
}));
|
|
1432
|
-
return function (_x13) {
|
|
1433
|
-
return _ref8.apply(this, arguments);
|
|
1434
|
-
};
|
|
1435
|
-
}(), [waitingResponse, loadingMessages, replaceMessages, retryCompletion, askMaia, fetchProjects, authUser, agent, t, setActiveChatId]);
|
|
1436
1170
|
var handleFeedback = useCallback(/*#__PURE__*/function () {
|
|
1437
|
-
var
|
|
1171
|
+
var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(feedbackProp, chatMessageId) {
|
|
1438
1172
|
var response;
|
|
1439
|
-
return _regeneratorRuntime.wrap(function (
|
|
1440
|
-
while (1) switch (
|
|
1173
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
1174
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
1441
1175
|
case 0:
|
|
1442
|
-
|
|
1176
|
+
_context3.next = 1;
|
|
1443
1177
|
return maia.Chats.wasHelpfulChat(chatMessageId, feedbackProp === Feedback.THUMBS_UP);
|
|
1444
1178
|
case 1:
|
|
1445
|
-
response =
|
|
1179
|
+
response = _context3.sent;
|
|
1446
1180
|
if (response) {
|
|
1447
1181
|
messagesRef.current = messagesRef.current.map(function (message) {
|
|
1448
1182
|
if (message.id === chatMessageId && message.role === 'assistant') {
|
|
@@ -1455,59 +1189,59 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1455
1189
|
}
|
|
1456
1190
|
case 2:
|
|
1457
1191
|
case "end":
|
|
1458
|
-
return
|
|
1192
|
+
return _context3.stop();
|
|
1459
1193
|
}
|
|
1460
|
-
},
|
|
1194
|
+
}, _callee3);
|
|
1461
1195
|
}));
|
|
1462
|
-
return function (
|
|
1463
|
-
return
|
|
1196
|
+
return function (_x15, _x16) {
|
|
1197
|
+
return _ref8.apply(this, arguments);
|
|
1464
1198
|
};
|
|
1465
1199
|
}(), []);
|
|
1466
1200
|
var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
|
|
1467
|
-
var
|
|
1201
|
+
var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(threadIds, decision, editedActions) {
|
|
1468
1202
|
var found, messageWithApproval, foundSessionId, approval, sessionId, messageId, newStatus, hitlContext, isActiveSession, streamMessageId, hitlCtx, releaseActiveProcessing, result;
|
|
1469
|
-
return _regeneratorRuntime.wrap(function (
|
|
1470
|
-
while (1) switch (
|
|
1203
|
+
return _regeneratorRuntime.wrap(function (_context4) {
|
|
1204
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
1471
1205
|
case 0:
|
|
1472
1206
|
if (threadIds !== null && threadIds !== void 0 && threadIds.length) {
|
|
1473
|
-
|
|
1207
|
+
_context4.next = 1;
|
|
1474
1208
|
break;
|
|
1475
1209
|
}
|
|
1476
1210
|
console.error('No thread_ids provided for approval decision');
|
|
1477
|
-
return
|
|
1211
|
+
return _context4.abrupt("return");
|
|
1478
1212
|
case 1:
|
|
1479
1213
|
found = findMessageWithApprovalByThreadIds(threadIds, messagesRef.current);
|
|
1480
1214
|
if (found !== null && found !== void 0 && found.message.approval) {
|
|
1481
|
-
|
|
1215
|
+
_context4.next = 2;
|
|
1482
1216
|
break;
|
|
1483
1217
|
}
|
|
1484
1218
|
console.error('No se encontró mensaje con approval para thread_ids:', threadIds);
|
|
1485
|
-
return
|
|
1219
|
+
return _context4.abrupt("return");
|
|
1486
1220
|
case 2:
|
|
1487
1221
|
messageWithApproval = found.message, foundSessionId = found.sessionId;
|
|
1488
1222
|
approval = messageWithApproval.approval;
|
|
1489
1223
|
if (approval) {
|
|
1490
|
-
|
|
1224
|
+
_context4.next = 3;
|
|
1491
1225
|
break;
|
|
1492
1226
|
}
|
|
1493
|
-
return
|
|
1227
|
+
return _context4.abrupt("return");
|
|
1494
1228
|
case 3:
|
|
1495
1229
|
sessionId = approval.session_id || foundSessionId;
|
|
1496
1230
|
if (sessionId) {
|
|
1497
|
-
|
|
1231
|
+
_context4.next = 4;
|
|
1498
1232
|
break;
|
|
1499
1233
|
}
|
|
1500
1234
|
console.error('No session_id disponible para approval:', threadIds);
|
|
1501
|
-
return
|
|
1235
|
+
return _context4.abrupt("return");
|
|
1502
1236
|
case 4:
|
|
1503
1237
|
if (!sessionStreamManager.isActive(sessionId)) {
|
|
1504
|
-
|
|
1238
|
+
_context4.next = 5;
|
|
1505
1239
|
break;
|
|
1506
1240
|
}
|
|
1507
|
-
return
|
|
1241
|
+
return _context4.abrupt("return");
|
|
1508
1242
|
case 5:
|
|
1509
1243
|
if (!(sessionStreamManager.getActiveCount() >= MAX_CONCURRENT_STREAMS)) {
|
|
1510
|
-
|
|
1244
|
+
_context4.next = 6;
|
|
1511
1245
|
break;
|
|
1512
1246
|
}
|
|
1513
1247
|
document.dispatchEvent(new CustomEvent('snackbar-event', {
|
|
@@ -1517,7 +1251,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1517
1251
|
message: t('chat.tooManyActiveSessions')
|
|
1518
1252
|
}
|
|
1519
1253
|
}));
|
|
1520
|
-
return
|
|
1254
|
+
return _context4.abrupt("return");
|
|
1521
1255
|
case 6:
|
|
1522
1256
|
messageId = messageWithApproval.id;
|
|
1523
1257
|
newStatus = decision === 'approve' ? 'approved' : 'rejected';
|
|
@@ -1550,7 +1284,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1550
1284
|
isProcessingRef.current = false;
|
|
1551
1285
|
hitlExecutionContextRef.current = null;
|
|
1552
1286
|
};
|
|
1553
|
-
|
|
1287
|
+
_context4.next = 7;
|
|
1554
1288
|
return sessionStreamManager.startContinueStream({
|
|
1555
1289
|
sessionId: sessionId,
|
|
1556
1290
|
placeholderId: hitlCtx.placeholderId,
|
|
@@ -1560,7 +1294,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1560
1294
|
decision: editedActions ? 'edit' : decision,
|
|
1561
1295
|
editedActions: editedActions,
|
|
1562
1296
|
agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
|
|
1563
|
-
lang: authUser.lang
|
|
1297
|
+
lang: authUser.lang,
|
|
1298
|
+
isAutoApproveActive: isAutoApproveActiveRef.current
|
|
1564
1299
|
},
|
|
1565
1300
|
t: t,
|
|
1566
1301
|
hitlExecutionContext: hitlContext,
|
|
@@ -1572,7 +1307,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1572
1307
|
},
|
|
1573
1308
|
onFinishStream: function onFinishStream(finishPayload) {
|
|
1574
1309
|
releaseActiveProcessing();
|
|
1575
|
-
handleStreamFinish(hitlCtx, finishPayload.content, finishPayload.sources, finishPayload.memorySessionId, finishPayload.attachments, finishPayload.suggestions, finishPayload.completedAgentId);
|
|
1310
|
+
handleStreamFinish(hitlCtx, finishPayload.content, finishPayload.sources, finishPayload.memorySessionId, finishPayload.attachments, finishPayload.suggestions, finishPayload.completedAgentId, finishPayload.resolvedContext, finishPayload.reasoning);
|
|
1576
1311
|
},
|
|
1577
1312
|
onError: function onError() {
|
|
1578
1313
|
releaseActiveProcessing();
|
|
@@ -1585,7 +1320,7 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1585
1320
|
}
|
|
1586
1321
|
});
|
|
1587
1322
|
case 7:
|
|
1588
|
-
result =
|
|
1323
|
+
result = _context4.sent;
|
|
1589
1324
|
if (!result.started) {
|
|
1590
1325
|
releaseActiveProcessing();
|
|
1591
1326
|
if (result.reason === 'limit') {
|
|
@@ -1600,34 +1335,34 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1600
1335
|
}
|
|
1601
1336
|
case 8:
|
|
1602
1337
|
case "end":
|
|
1603
|
-
return
|
|
1338
|
+
return _context4.stop();
|
|
1604
1339
|
}
|
|
1605
|
-
},
|
|
1340
|
+
}, _callee4);
|
|
1606
1341
|
}));
|
|
1607
|
-
return function (
|
|
1608
|
-
return
|
|
1342
|
+
return function (_x17, _x18, _x19) {
|
|
1343
|
+
return _ref9.apply(this, arguments);
|
|
1609
1344
|
};
|
|
1610
1345
|
}(), [authUser, agent, commitToSession, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, t]);
|
|
1611
|
-
var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
1612
|
-
var _userInitialMessage$m, _userInitialMessage$a,
|
|
1613
|
-
return _regeneratorRuntime.wrap(function (
|
|
1614
|
-
while (1) switch (
|
|
1346
|
+
var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
1347
|
+
var _userInitialMessage$m, _userInitialMessage$a, _ref1, _resolveProjectToRequ, _ctxProject$id, _ctxClient$id, _ctxTask$id, _ctxChipsProject$proj, hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialFua, hasInitialSc, history, _contextRef$current2, ctxChipsProject, ctxProject, ctxClient, ctxTask, projectToRequest, initialDisplayMessage;
|
|
1348
|
+
return _regeneratorRuntime.wrap(function (_context5) {
|
|
1349
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
1615
1350
|
case 0:
|
|
1616
1351
|
if (!firstTimeRef.current) {
|
|
1617
1352
|
firstTimeRef.current = true;
|
|
1618
1353
|
}
|
|
1619
1354
|
if (!initialChatId) {
|
|
1620
|
-
|
|
1355
|
+
_context5.next = 2;
|
|
1621
1356
|
break;
|
|
1622
1357
|
}
|
|
1623
|
-
|
|
1358
|
+
_context5.next = 1;
|
|
1624
1359
|
return loadMessages();
|
|
1625
1360
|
case 1:
|
|
1626
|
-
|
|
1361
|
+
_context5.next = 4;
|
|
1627
1362
|
break;
|
|
1628
1363
|
case 2:
|
|
1629
1364
|
if (!userInitialMessage) {
|
|
1630
|
-
|
|
1365
|
+
_context5.next = 4;
|
|
1631
1366
|
break;
|
|
1632
1367
|
}
|
|
1633
1368
|
hasInitialMessage = Boolean((_userInitialMessage$m = userInitialMessage.message) === null || _userInitialMessage$m === void 0 ? void 0 : _userInitialMessage$m.trim());
|
|
@@ -1636,10 +1371,10 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1636
1371
|
hasInitialFua = Boolean(userInitialMessage.fuaId);
|
|
1637
1372
|
hasInitialSc = Boolean(userInitialMessage.scId);
|
|
1638
1373
|
if (!(!hasInitialMessage && !hasInitialAttachments && !hasInitialFaq && !hasInitialFua && !hasInitialSc)) {
|
|
1639
|
-
|
|
1374
|
+
_context5.next = 3;
|
|
1640
1375
|
break;
|
|
1641
1376
|
}
|
|
1642
|
-
return
|
|
1377
|
+
return _context5.abrupt("return");
|
|
1643
1378
|
case 3:
|
|
1644
1379
|
history = messagesRef.current.map(function (historyMessage) {
|
|
1645
1380
|
return {
|
|
@@ -1647,8 +1382,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1647
1382
|
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
1648
1383
|
};
|
|
1649
1384
|
});
|
|
1650
|
-
_contextRef$
|
|
1651
|
-
projectToRequest = (
|
|
1385
|
+
_contextRef$current2 = contextRef.current, ctxChipsProject = _contextRef$current2.chipsProject, ctxProject = _contextRef$current2.project, ctxClient = _contextRef$current2.client, ctxTask = _contextRef$current2.task;
|
|
1386
|
+
projectToRequest = (_ref1 = (_resolveProjectToRequ = resolveProjectToRequest(ctxChipsProject, null)) !== null && _resolveProjectToRequ !== void 0 ? _resolveProjectToRequ : ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ref1 !== void 0 ? _ref1 : null;
|
|
1652
1387
|
console.info('[useChatManager] PATH=initializeChat/userInitialMessage — contextRef resolution:', {
|
|
1653
1388
|
projectPropId: (_ctxProject$id = ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ctxProject$id !== void 0 ? _ctxProject$id : null,
|
|
1654
1389
|
clientId: (_ctxClient$id = ctxClient === null || ctxClient === void 0 ? void 0 : ctxClient.id) !== null && _ctxClient$id !== void 0 ? _ctxClient$id : null,
|
|
@@ -1684,7 +1419,8 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1684
1419
|
agentName: agent === null || agent === void 0 ? void 0 : agent.name,
|
|
1685
1420
|
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
1686
1421
|
isWebSearchActive: isWebSearchActiveRef.current,
|
|
1687
|
-
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
1422
|
+
isDeepSearchActive: isDeepSearchActiveRef.current,
|
|
1423
|
+
isAutoApproveActive: isAutoApproveActiveRef.current
|
|
1688
1424
|
}, (ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.feeId) != null ? {
|
|
1689
1425
|
feeId: Number(ctxProject.feeId)
|
|
1690
1426
|
} : {}), resolveClientPayload(ctxClient, ctxProject)), ctxProject !== null && ctxProject !== void 0 && ctxProject.name ? {
|
|
@@ -1716,9 +1452,9 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1716
1452
|
} : {}));
|
|
1717
1453
|
case 4:
|
|
1718
1454
|
case "end":
|
|
1719
|
-
return
|
|
1455
|
+
return _context5.stop();
|
|
1720
1456
|
}
|
|
1721
|
-
},
|
|
1457
|
+
}, _callee5);
|
|
1722
1458
|
})), [initialChatId, userInitialMessage, project, client, task, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
|
|
1723
1459
|
var resetChat = useCallback(function () {
|
|
1724
1460
|
var previousSessionId = currentChatId.current;
|
|
@@ -1749,7 +1485,6 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1749
1485
|
currentChatId: currentChatId.current,
|
|
1750
1486
|
currentMessageId: currentMessageId.current,
|
|
1751
1487
|
sendMessage: sendMessage,
|
|
1752
|
-
retryMessage: retryMessage,
|
|
1753
1488
|
changeProject: changeProject,
|
|
1754
1489
|
handleFeedback: handleFeedback,
|
|
1755
1490
|
handleApprovalDecision: handleApprovalDecision,
|
|
@@ -1760,4 +1495,4 @@ export var useChatManager = function useChatManager(_ref4) {
|
|
|
1760
1495
|
isDisabled: waitingResponse || loadingMessages
|
|
1761
1496
|
};
|
|
1762
1497
|
};
|
|
1763
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJpc0hvdXJzQ2hhcmdlVG9vbCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJzZXNzaW9uU3RyZWFtaW5nVGV4dCIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwibWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4iLCJyZXNvbHZlUmV0cnlUdXJuSWQiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwiY2hpcHNQcm9qZWN0IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJjaGlwc1Byb2plY3RJZCIsInByb2plY3RJZCIsIk51bWJlciIsImlzRmluaXRlIiwicGFyc2VkIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJjdHhDbGllbnQiLCJjdHhQcm9qZWN0IiwiX2N0eFByb2plY3QkY2xpZW50IiwiaWQiLCJfb2JqZWN0U3ByZWFkIiwiY2xpZW50SWQiLCJuYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwiZmlsZSIsIkZpbGUiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX2ZpbGUiLCJyb2xlIiwiZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzIiwicGVuZGluZ0FjdGlvbnMiLCJpZHMiLCJwdXNoSWQiLCJyYXciLCJuIiwicGFyc2VJbnQiLCJTdHJpbmciLCJpc05hTiIsInB1c2giLCJmb3JFYWNoIiwiYWN0aW9uIiwiX3JlYyR0YXNrX2lkIiwiYXJncyIsInRvb2xfYXJncyIsInJlYyIsInRhc2tfaWQiLCJ0YXNrX2lkcyIsInRhc2tzIiwidCIsIl90cmVjJHRhc2tfaWQiLCJ0cmVjIiwiZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQyIiwibGlzdCIsInRpZCIsImV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zIiwiX3JlYyRhZ2VudF9pZCIsImVkaXRBY3Rpb24iLCJmaW5kIiwiYSIsInRvTG93ZXJDYXNlIiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lIiwidG9vbE5hbWUiLCJfcmVmIiwiX3JlYyRhZ2VudF9pZDIiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInRocmVhZElkcyIsImFjdGl2ZU1lc3NhZ2VzIiwiZnJvbUFjdGl2ZVZpZXciLCJtZXNzYWdlIiwiX21lc3NhZ2UkYXBwcm92YWwiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNvbWUiLCJ0aHJlYWRfaWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwiZ2V0IiwiX3VzZVNlc3Npb25zU3RvcmUkZ2V0IiwiZ2V0U3RhdGUiLCJtZXNzYWdlcyIsInNlc3Npb25FbnRyeSIsIk9iamVjdCIsImVudHJpZXMiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJzZXNzaW9uTWVzc2FnZXMiLCJfbWVzc2FnZSRhcHByb3ZhbDIiLCJfc2Vzc2lvbkVudHJ5IiwiZm91bmQiLCJfbWVzc2FnZSRhcHByb3ZhbDMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWY0IiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIm9uRXJyb3IiLCJfcmVmNCRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJ0YXNrIiwic2V0VGFzayIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJzdGF0ZSIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwicmV0cnlTbmFwc2hvdFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImFjdGl2ZVNlc3Npb25JZCIsInNldEFjdGl2ZVNlc3Npb25JZCIsImlzTW91bnRlZFJlZiIsImxhc3RIYW5kbGVkVGVybWluYWxSZWYiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJyZXBsYWNlTWVzc2FnZXMiLCJoYW5kbGVTY3JvbGwiLCJjb21taXRUb1Nlc3Npb24iLCJpcyIsImRyb3BGcm9tU2Vzc2lvbiIsIm1lc3NhZ2VJZCIsImNsZWFyU2Vzc2lvblRhaWwiLCJzZXRNZXNzYWdlcyIsInNldCIsImFjdGl2ZVNlc3Npb25NZXRhIiwiX2FjdGl2ZVNlc3Npb25NZXRhJGZpIiwic3RhdHVzIiwiaXNUZXJtaW5hbCIsImtleSIsImZpbmlzaGVkQXQiLCJ0YWlsIiwiZ2V0TWVzc2FnZXMiLCJoYXNTdGFsZVBsYWNlaG9sZGVyIiwibXNnIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsIl9lcnJvclJhd01lc3NhZ2UkbWF0YyIsIl9lcnJvclJhd01lc3NhZ2UkbWF0YzIiLCJwbGFjZWhvbGRlcklkIiwiY2xlYXIiLCJyZXRyeVNuYXBzaG90Iiwic2hvdyIsInNldmVyaXR5IiwiaXNBY2Nlc3NEZW5pZWQiLCJpc1Byb21wdFRvb0xvbmciLCJ1c2VkIiwiaXNFcnJvciIsInN1Z2dlc3Rpb25zIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInN0YXJ0Iiwic2V0VGV4dCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY1IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwiY29tcGxldGVkQWdlbnRJZCIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl93aW5kb3ckdGFza1BhbmVsIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0ZW1wTWVzc2FnZUlkIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIm9wZW5UYXNrUGFuZWxJZCIsIm1hbnVhbEFwcHJvdmFsIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwiaG91cnNUb29sc0Zyb21BcHByb3ZhbCIsIndhc0hvdXJzQ2hhcmdlQXBwcm92ZWQiLCJtYW51YWxIb3Vyc1Rvb2wiLCJ3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkIiwidG9vbHMiLCJfbWFudWFsQXBwcm92YWwkdG9vbEEiLCJtYW51YWxQc2V1ZG9BY3Rpb24iLCJhZmZlY3RlZFRhc2tJZHMiLCJfd2luZG93JHRhc2tQYW5lbDIiLCJfd2luZG93JHRhc2tQYW5lbDIkcmUiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiaXNDaGF0Vmlld1Zpc2libGUiLCJtYXJrQ2hhdEFzUmVhZCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwiYWJydXB0IiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXQiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhaUNoYXRIaXRsT3B0aW9uIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwic2VudCIsInJlcGxhY2UiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiY2FsbCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJzb3VyY2UiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwidGhlbiIsImNoYXRBZ2VudCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlU3RyZWFtU3RvcCIsInBhcnRpYWxUZXh0IiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QiLCJoaXRsQ29udGV4dCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIm1lc3NhZ2VUZXh0IiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0MiIsIl9yZWY2IiwiX3Rvb2xfbmFtZSIsIl90b29sX2FyZ3MiLCJmaXJzdEFjdGlvbiIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwicmV0cnlDb21wbGV0aW9uIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmNyIsIl9jYWxsZWUyIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJ3aWxsU3RhcnROZXdTdHJlYW0iLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJwYXlsb2FkQ29udGV4dERhdGEiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50IiwiY3R4Q2hpcHNQcm9qZWN0IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJoaXN0b3J5IiwicHJvamVjdFRvUmVxdWVzdCIsInByb2plY3RzIiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDIiLCJnZXRBY3RpdmVDb3VudCIsImNvbnRleHREYXRhIiwicG1BaVR5cGVkVGV4dCIsInRpdGxlIiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsImFnZW50TmFtZSIsImZlZUlkIiwicHJvamVjdE5hbWUiLCJ0YXNrTmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiYWdlbnRUeXBlIiwiZW1vamkiLCJhZ2VudEVtb2ppIiwiX3g4IiwiX3g5IiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiY2hhbmdlUHJvamVjdCIsInJldHJ5TWVzc2FnZSIsIl9yZWY4IiwiX2NhbGxlZTQiLCJfdXNlck1lc3NhZ2UkbWVzc2FnZSIsIl91c2VyTWVzc2FnZSRhdHRhY2htZSIsIl91c2VyTWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkbWVtb3J5U2Vzc2lvIiwiX3RydW5jYXRlZCRhdCIsInByZXZpb3VzTWVzc2FnZXMiLCJ1c2VyTWVzc2FnZSIsInR1cm5JZCIsInVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIiwidHJ1bmNhdGVkIiwicGxhY2Vob2xkZXIiLCJuZXh0TWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50MiIsInJlcGxheVZpYU9yY2hlc3RyYXRvciIsInJlc3VsdCIsIl9jb250ZXh0NCIsIml0ZW0iLCJfcmVmOSIsIl9jYWxsZWUzIiwiX3QiLCJfY29udGV4dDMiLCJzdGFydGVkIiwicmVhc29uIiwiX3gxMyIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjAiLCJfY2FsbGVlNSIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJyZXNwb25zZSIsIl9jb250ZXh0NSIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxNCIsIl94MTUiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjEiLCJfY2FsbGVlNiIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJfY29udGV4dDYiLCJzdGFydENvbnRpbnVlU3RyZWFtIiwiY29udGludWVSZXF1ZXN0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHQiLCJjYWxsYmFja3MiLCJmaW5pc2hQYXlsb2FkIiwiYXBwcm92YWxQYXlsb2FkIiwiX3gxNiIsIl94MTciLCJfeDE4IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNyIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWYxMSIsIl9yZXNvbHZlUHJvamVjdFRvUmVxdSIsIl9jdHhQcm9qZWN0JGlkIiwiX2N0eENsaWVudCRpZCIsIl9jdHhUYXNrJGlkIiwiX2N0eENoaXBzUHJvamVjdCRwcm9qIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQzIiwiaW5pdGlhbERpc3BsYXlNZXNzYWdlIiwiX2NvbnRleHQ3IiwiQm9vbGVhbiIsImluZm8iLCJwcm9qZWN0UHJvcElkIiwicmVzZXRDaGF0IiwicHJldmlvdXNTZXNzaW9uSWQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVzc2FnZSwgYnVpbGRDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQsIGlzSG91cnNDaGFyZ2VUb29sIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3BsYW5uZXJTeW5jRXZlbnRzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyB0eXBlIEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1pbmdUZXh0IH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbWluZ1RleHQnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IHVzZVNlc3Npb25NZXRhIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbk1ldGEnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtTWFuYWdlciwgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyJ1xuaW1wb3J0IHsgYWN0aXZlVmlldyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL2FjdGl2ZVZpZXcnXG5pbXBvcnQgeyBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZSwgZW5zdXJlU2Vzc2lvbkluU2lkZWJhciB9IGZyb20gJy4uLy4uL3N0b3JlL2NoYXRzU2lkZWJhck9wdGltaXN0aWMnXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5LCBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiwgcmVzb2x2ZVJldHJ5VHVybklkIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmV0cnlDb21wbGV0aW9uJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1Db250ZXh0IH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuXG50eXBlIEF0dGFjaG1lbnRzT3JPcHRpb25zID0gQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9uc1xuXG5jb25zdCBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MgPSAoYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50c09yT3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhdHRhY2htZW50c09yT3B0aW9ucykpIHtcbiAgICByZXR1cm4geyBhdHRhY2htZW50czogYXR0YWNobWVudHNPck9wdGlvbnMsIG9wdGlvbnM6IHt9IGFzIFNlbmRNZXNzYWdlT3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnMgPSBhdHRhY2htZW50c09yT3B0aW9ucyA/PyB7fVxuICByZXR1cm4geyBhdHRhY2htZW50czogb3B0aW9ucy5hdHRhY2htZW50cyA/PyBbXSwgb3B0aW9ucyB9XG59XG5cbi8qKiBjaGlwc1Byb2plY3QgZXMgbGEgZnVlbnRlIGRlIHZlcmRhZCBkZWwgcGluIHZpc2libGU7IHNpIG5vIGhheSBwaW4sIHJlc3RhdXJhciBkZXNkZSBoaXN0b3JpYWwuICovXG5jb25zdCByZXNvbHZlUHJvamVjdFRvUmVxdWVzdCA9IChcbiAgY2hpcHNQcm9qZWN0OiB7IHByb2plY3RJZD86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbGFzdE1lc3NhZ2VQcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbik6IG51bWJlciB8IG51bGwgPT4ge1xuICBjb25zdCBjaGlwc1Byb2plY3RJZCA9IGNoaXBzUHJvamVjdD8ucHJvamVjdElkID8gTnVtYmVyKGNoaXBzUHJvamVjdC5wcm9qZWN0SWQpIDogbnVsbFxuICBpZiAoY2hpcHNQcm9qZWN0SWQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoY2hpcHNQcm9qZWN0SWQpKSB7XG4gICAgcmV0dXJuIGNoaXBzUHJvamVjdElkXG4gIH1cbiAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IHJlc29sdmVDbGllbnRQYXlsb2FkID0gKFxuICBjdHhDbGllbnQ6IHsgaWQ/OiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGN0eFByb2plY3Q6IFByb2plY3QgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiB7IGNsaWVudElkPzogbnVtYmVyOyBjbGllbnROYW1lPzogc3RyaW5nIH0gPT4ge1xuICBpZiAoY3R4Q2xpZW50Py5pZCkge1xuICAgIHJldHVybiB7IGNsaWVudElkOiBjdHhDbGllbnQuaWQsIC4uLihjdHhDbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY3R4Q2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gIH1cbiAgaWYgKGN0eFByb2plY3Q/LmNsaWVudElkICE9IG51bGwpIHtcbiAgICByZXR1cm4geyBjbGllbnRJZDogTnVtYmVyKGN0eFByb2plY3QuY2xpZW50SWQpIH1cbiAgfVxuICBpZiAoY3R4UHJvamVjdD8uY2xpZW50Py5pZCkge1xuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRJZDogY3R4UHJvamVjdC5jbGllbnQuaWQsXG4gICAgICAuLi4oY3R4UHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY3R4UHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge31cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIEV4dHJhZSB0YXNrX2lkcyBkZSBsb3MgdG9vbF9hcmdzIGRlIHBlbmRpbmdfYWN0aW9ucywgY3VicmllbmRvIGxhcyBmb3JtYXMgY29tdW5lczpcbiAqICAtIGB7IHRhc2tfaWQgfWAgbyBgeyBpZCB9YFxuICogIC0gYHsgdGFza19pZHM6IFtdIH1gXG4gKiAgLSBgeyB0YXNrczogW3sgdGFza19pZHxpZCB9LCAuLi5dIH1gXG4gKiAgw5p0aWwgcGFyYSB0b29scyBkZSBlZGl0L2Fzc2lnbi9kZWxldGUgY3VhbmRvIGxhIHJlc3B1ZXN0YSBkZWwgTExNIG5vIGluY2x1eWUgVVJMcyAvdGFza3MvLi4uL2RldGFpbC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgY29uc3QgcHVzaElkID0gKHJhdzogdW5rbm93bikgPT4ge1xuICAgIGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuXG4gICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgfVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgcHVzaElkKHJlYy50YXNrX2lkID8/IHJlYy5pZClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza19pZHMpKSB7XG4gICAgICByZWMudGFza19pZHMuZm9yRWFjaChwdXNoSWQpXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrcykpIHtcbiAgICAgIHJlYy50YXNrcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICBpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodCkpIHtcbiAgICAgICAgICBjb25zdCB0cmVjID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHB1c2hJZCh0cmVjLnRhc2tfaWQgPz8gdHJlYy5pZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMgPSAoXG4gIHRocmVhZElkczogc3RyaW5nW10sXG4gIGFjdGl2ZU1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdXG4pOiB7IG1lc3NhZ2U6IENoYXRNZXNzYWdlOyBzZXNzaW9uSWQ6IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGZyb21BY3RpdmVWaWV3ID0gYWN0aXZlTWVzc2FnZXMuZmluZChtZXNzYWdlID0+XG4gICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gIClcbiAgaWYgKGZyb21BY3RpdmVWaWV3Py5hcHByb3ZhbCkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiBmcm9tQWN0aXZlVmlldyxcbiAgICAgIHNlc3Npb25JZDogZnJvbUFjdGl2ZVZpZXcuYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBhY3RpdmVWaWV3LmdldCgpIHx8ICcnLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHsgbWVzc2FnZXMgfSA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKVxuICBjb25zdCBzZXNzaW9uRW50cnkgPSBPYmplY3QuZW50cmllcyhtZXNzYWdlcykuZmluZCgoWywgc2Vzc2lvbk1lc3NhZ2VzXSkgPT5cbiAgICBzZXNzaW9uTWVzc2FnZXMuc29tZShtZXNzYWdlID0+XG4gICAgICBtZXNzYWdlLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICApXG4gIClcbiAgaWYgKHNlc3Npb25FbnRyeSkge1xuICAgIGNvbnN0IFtzZXNzaW9uSWQsIHNlc3Npb25NZXNzYWdlc10gPSBzZXNzaW9uRW50cnlcbiAgICBjb25zdCBmb3VuZCA9IHNlc3Npb25NZXNzYWdlcy5maW5kKG1lc3NhZ2UgPT5cbiAgICAgIG1lc3NhZ2UuYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgIClcbiAgICBpZiAoZm91bmQ/LmFwcHJvdmFsKSB7XG4gICAgICByZXR1cm4geyBtZXNzYWdlOiBmb3VuZCwgc2Vzc2lvbklkOiBmb3VuZC5hcHByb3ZhbC5zZXNzaW9uX2lkIHx8IHNlc3Npb25JZCB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBzZXRUYXNrLFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG5cbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHNldEFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0QWN0aXZlQ2hhdElkKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgLyoqIE1lbnNhamVzIGEgcmVzdGF1cmFyIHNpIGByZXRyeV9jb21wbGV0aW9uYCBmYWxsYSBhbnRlcyBkZSBwZXJzaXN0aXIgZWwgcmVlbXBsYXpvLiAqL1xuICBjb25zdCByZXRyeVNuYXBzaG90UmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10gfCBudWxsPihudWxsKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLyoqIElkIGRlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmcgYWN0aXZvIChzaSBoYXkpLiAqL1xuICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBDaGF0IGFsIHF1ZSBwZXJ0ZW5lY2UgZWwgc3RyZWFtIGFjdHVhbG1lbnRlIGFjdGl2by4gU2kgY2FtYmlhIGVsIGNoYXRcbiAgICogbWllbnRyYXMgdW4gc3RyZWFtIGVzdMOhIGVuIHZ1ZWxvLCBkZXNjYXJ0YW1vcyBsb3MgdG9rZW5zIHJlc2lkdWFsZXNcbiAgICogcXVlIHB1ZWRhbiBsbGVnYXIgYW50ZXMgZGUgcXVlIGVsIGFib3J0IHNlIGNvbXBsZXRlLlxuICAgKi9cbiAgY29uc3QgYWN0aXZlU3RyZWFtQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuICAvKipcbiAgICogU2VzacOzbiBhY3R1YWxtZW50ZSB2aXNpYmxlLiBTZSBtYW50aWVuZSBlbiBzdGF0ZSAobm8gc29sbyBlbiByZWYpIHBhcmEgcXVlXG4gICAqIGVsIG1vdG9yIGRlIHN0cmVhbWluZyBwdWVkYSBsZWVyIHJlYWN0aXZhbWVudGUgbG9zIGZsYWdzIGRlIEVTVEEgc2VzacOzblxuICAgKiBkZXNkZSBlbCBzdG9yZSwgbWllbnRyYXMgb3RyYXMgc2lndWVuIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgY29uc3QgW2FjdGl2ZVNlc3Npb25JZCwgc2V0QWN0aXZlU2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAvKiogVHJ1ZSBtaWVudHJhcyBlc3RhIGluc3RhbmNpYSBlc3TDqSBtb250YWRhIChldml0YSBzZXRTdGF0ZSB0cmFzIGRlc21vbnRhcikuICovXG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IHVzZVJlZih0cnVlKVxuICAvKiogRXZpdGEgcmVjb25jaWxpYXIgZG9zIHZlY2VzIGVsIG1pc21vIGVzdGFkbyB0ZXJtaW5hbCBkZSB1bmEgc2VzacOzbi4gKi9cbiAgY29uc3QgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuICAvKiogRXZpdGEgY2xvc3VyZXMgb2Jzb2xldGFzIGN1YW5kbyBlbCBmb290ZXIgY29uc2VydmEgc2VuZE1lc3NhZ2UgZW50cmUgcmVuZGVycy4gKi9cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH0pXG4gIGNvbnRleHRSZWYuY3VycmVudCA9IHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIGxvYWRNZXNzYWdlcyxcbiAgICBhZGRNZXNzYWdlLFxuICAgIHJlbW92ZU1lc3NhZ2UsXG4gICAgcmVwbGFjZU1lc3NhZ2VzLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgfSA9IHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50VXNlcixcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgLyoqXG4gICAqIEVzY3JpYmUgdW4gbWVuc2FqZSBlbiBlbCBzdG9yZSBwb3Itc2VzacOzbiB5LCBzaSBsYSBzZXNpw7NuIGVzIGxhIGFjdGl2YSxcbiAgICogdGFtYmnDqW4gZW4gbGEgdmlzdGEgbG9jYWwuIFBlcm1pdGUgcXVlIHNlc2lvbmVzIGVuIGJhY2tncm91bmQgYWN1bXVsZW4gc3VcbiAgICogcmVzdWx0YWRvIHNpbiBwaXNhciBlbCBjaGF0IHF1ZSBlbCB1c3VhcmlvIGVzdMOhIG1pcmFuZG8uXG4gICAqL1xuICBjb25zdCBjb21taXRUb1Nlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuYWRkTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2UpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIGFkZE1lc3NhZ2UobWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgZHJvcEZyb21TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlSWQpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJlbW92ZU1lc3NhZ2UobWVzc2FnZUlkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlbW92ZU1lc3NhZ2VdXG4gIClcblxuICAvKiogTGltcGlhIGVsIHRhaWwgZW4gdnVlbG8gZGUgdW5hIHNlc2nDs24gKHRyYXMgdGVybWluYXI7IGVsIGJhY2tlbmQgcGFzYSBhIHNlciBmdWVudGUpLiAqL1xuICBjb25zdCBjbGVhclNlc3Npb25UYWlsID0gdXNlQ2FsbGJhY2soKHNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnNldE1lc3NhZ2VzKHNlc3Npb25JZCwgW10pXG4gIH0sIFtdKVxuXG4gIC8vIFJlZ2lzdHJhciBsYSBzZXNpw7NuIHZpc2libGUgZW4gZWwgdHJhY2tlciBnbG9iYWwgcGFyYSBxdWUgbG9zIGNhbGxiYWNrcyBkZWxcbiAgLy8gbW90b3IgKHF1ZSBwdWVkZW4gcGVydGVuZWNlciBhIHVuYSBpbnN0YW5jaWEgeWEgZGVzbW9udGFkYSkgc2VwYW4gY3XDoWwgZXMgbGFcbiAgLy8gc2VzacOzbiBhY3RpdmEgYWN0dWFsLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFjdGl2ZVZpZXcuc2V0KGFjdGl2ZVNlc3Npb25JZClcbiAgfSwgW2FjdGl2ZVNlc3Npb25JZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoY3VycmVudENoYXRJZC5jdXJyZW50KSkge1xuICAgICAgICBhY3RpdmVWaWV3LnNldChudWxsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gUmVjb25jaWxpYWNpw7NuOiBzaSBsYSBzZXNpw7NuIGFjdGl2YSB0ZXJtaW5hIChjb21wbGV0ZS9lcnJvcikgcGVybyBlbCBzdG9yZVxuICAvLyBwb3Itc2VzacOzbiB0b2RhdsOtYSB0aWVuZSB1biBwbGFjZWhvbGRlciBkZSBzdHJlYW1pbmcsIHJlZnJlc2NhbW9zIGRlc2RlXG4gIC8vIGVsIGJhY2tlbmQuIFVzYW1vcyBlbCBzdG9yZSAobm8gbWVzc2FnZXNSZWYpOiBoYW5kbGVTdHJlYW1GaW5pc2ggbGltcGlhIGVsXG4gIC8vIHBsYWNlaG9sZGVyIGFow60gZGUgZm9ybWEgc8OtbmNyb25hOyBtZXNzYWdlc1JlZiBwdWVkZSBxdWVkYXIgc3RhbGUgdW4gcmVuZGVyXG4gIC8vIHBvcnF1ZSBzZXRTdGF0dXMgKFp1c3RhbmQpIHkgcmVtb3ZlTWVzc2FnZSAoUmVhY3QpIG5vIGJhdGNoYW4ganVudG9zLlxuICAvLyBgY2FuY2VsbGVkYCBxdWVkYSBhZnVlcmE6IGVsIHN0b3AgeWEgcmVjb25jaWxpYSBsb2NhbCAocGFyY2lhbCArIGJ1cmJ1amEgZGVcbiAgLy8gY2FuY2VsYWRvKSB5IHJlY2FyZ2FyIGFjw6EgbW9zdHJhYmEgbGEgcGFudGFsbGEgZGUgY2FyZ2EgZGVsIGNoYXQgZW50ZXJvLlxuICBjb25zdCBhY3RpdmVTZXNzaW9uTWV0YSA9IHVzZVNlc3Npb25NZXRhKGFjdGl2ZVNlc3Npb25JZClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzXG4gICAgaWYgKCFzdGF0dXMpIHJldHVyblxuICAgIGNvbnN0IGlzVGVybWluYWwgPSBzdGF0dXMgPT09ICdjb21wbGV0ZScgfHwgc3RhdHVzID09PSAnZXJyb3InXG4gICAgaWYgKCFpc1Rlcm1pbmFsKSByZXR1cm5cbiAgICBjb25zdCBrZXkgPSBgJHthY3RpdmVTZXNzaW9uSWR9OiR7c3RhdHVzfToke2FjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0ID8/ICcnfWBcbiAgICBpZiAobGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID09PSBrZXkpIHJldHVyblxuICAgIGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9IGtleVxuXG4gICAgY29uc3QgdGFpbCA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5nZXRNZXNzYWdlcyhhY3RpdmVTZXNzaW9uSWQpXG4gICAgY29uc3QgaGFzU3RhbGVQbGFjZWhvbGRlciA9IHRhaWwuc29tZShtc2cgPT4gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtc2cuaWQpKVxuICAgIGlmIChoYXNTdGFsZVBsYWNlaG9sZGVyKSB7XG4gICAgICBsb2FkTWVzc2FnZXMoeyBmb3JjZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2FjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXMsIGFjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0LCBhY3RpdmVTZXNzaW9uSWQsIGxvYWRNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oaW5pdGlhbENoYXRJZClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZCA9IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50XG4gICAgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICAvLyBDaGF0IG51ZXZvIC8gaG9tZTogaW5pdGlhbENoYXRJZCBwYXNhIGEgbnVsbCwgYXPDrSBxdWUgbGEgcmFtYSBkZSBhYmFqbyBub1xuICAgIC8vIGFwbGljYS4gSGF5IHF1ZSByb3RhciBhIHVuYSBzZXNpw7NuIG51ZXZhIGlndWFsOiBzaSBzZWd1aW1vcyBhcHVudGFuZG8gYSBsYVxuICAgIC8vIGFudGVyaW9yLCBgYWN0aXZlVmlld2AgbGEgc2lndWUgbWFyY2FuZG8gY29tbyBhY3RpdmEgeSBjdWFuZG8gdGVybWluYSBubyBzZVxuICAgIC8vIG5vdGlmaWNhICh5IHN1IHJlc3B1ZXN0YSBzZSBjb21taXRlYSBzb2JyZSBsYSB2aXN0YSBudWV2YSkuIEVsIMOhcmJvbCBub1xuICAgIC8vIHJlbW9udGEgZW4gZXN0ZSBmbHVqbyAobm8gaGF5IGBrZXlgKSB5IG5hZGllIGNvbnN1bWUgYHJlc2V0Q2hhdGAuXG4gICAgaWYgKCFpbml0aWFsQ2hhdElkICYmIHByZXZpb3VzSW5pdGlhbENoYXRJZCkge1xuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBOTyBhYm9ydGFtb3MgZWwgc3RyZWFtIGFudGVyaW9yOiBwdWVkZSBzZWd1aXIgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICAvLyBTb2xvIGNhbWJpYW1vcyBkZSBzZXNpw7NuIGFjdGl2YTsgZWwgbW90b3IgcnV0ZWEgY2FkYSBzdHJlYW0gcG9yIHN1XG4gICAgICAvLyBzZXNzaW9uSWQsIGFzw60gcXVlIGxvcyB0b2tlbnMgZGUgbGEgc2VzacOzbiBwcmV2aWEgc2lndWVuIGFwbGljw6FuZG9zZSBhXG4gICAgICAvLyBFU0Egc2VzacOzbiAoc3RvcmUpLCBubyBhIGxhIG51ZXZhLlxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGluaXRpYWxDaGF0SWQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIC8vIGlzUHJvY2Vzc2luZ1JlZiByZWZsZWphIHNpIGxhIHNlc2nDs24gQUNUSVZBIGVzdMOhIG9jdXBhZGEuIFNpIGxhIHNlc2nDs25cbiAgICAgIC8vIGEgbGEgcXVlIGVudHJhbW9zIHNpZ3VlIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLCBxdWVkYSBibG9xdWVhZGE7IHNpIG5vLFxuICAgICAgLy8gc2UgaGFiaWxpdGEgZWwgZW52w61vIGF1bnF1ZSBvdHJhcyBzZXNpb25lcyBzaWdhbiBnZW5lcmFuZG8uXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGluaXRpYWxDaGF0SWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gbG9hZE1lc3NhZ2VzIGxvIGRpc3BhcmEgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhbWJpYXIgY2hhdElkIChjb24gY2FjaGUgZW4gbWVtb3JpYSkuXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFRhc2tdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0QWN0aXZlQ2hhdElkKGluaXRpYWxDaGF0SWQgfHwgbnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWQsIHNldEFjdGl2ZUNoYXRJZF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIG1lc3NhZ2VJZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCByZXRyeVNuYXBzaG90ID0gcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50XG4gICAgICBpZiAocmV0cnlTbmFwc2hvdCkge1xuICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSByZXRyeVNuYXBzaG90XG4gICAgICAgIHJlcGxhY2VNZXNzYWdlcyhyZXRyeVNuYXBzaG90KVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiB0KCdjaGF0LmVycm9yJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjY2Vzc0RlbmllZCA9IGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgICAgIGNvbnN0IGlzUHJvbXB0VG9vTG9uZyA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicgJiYgZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBpc0FjY2Vzc0RlbmllZFxuICAgICAgICA/IHQoJ2NoYXQuZXJyb3JBY2Nlc3NEZW5pZWQnKVxuICAgICAgICA6IGlzUHJvbXB0VG9vTG9uZ1xuICAgICAgICAgID8gdCgnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnLCB7IHVzZWQ6IGVycm9yUmF3TWVzc2FnZT8ubWF0Y2goLyhcXGQrKSB0b2tlbnMvKT8uWzFdID8/ICcnIH0pXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYGFuc3dlci0ke21lc3NhZ2VJZH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICAvLyBDaGlwIFwiUmVpbnRlbnRhclwiIHNvbG8gZW4gZWwgZXJyb3IgZ2Vuw6lyaWNvIChwLiBlai4gNTAwKTsgbm8gYXBsaWNhIGEgYWNjZXNzIGRlbmllZCBuaSBwcm9tcHQgdG9vIGxvbmcuXG4gICAgICAgIC4uLighaXNBY2Nlc3NEZW5pZWQgJiYgIWlzUHJvbXB0VG9vTG9uZyA/IHsgc3VnZ2VzdGlvbnM6IFt0KCdjaGF0LnJldHJ5JyldIH0gOiB7fSksXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCByZXBsYWNlTWVzc2FnZXMsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcblxuICAgICAgLy8gQXNlZ3VyYW1vcyBlbCBwbGFjZWhvbGRlciB1bmEgw7puaWNhIHZleiBwb3Igc3RyZWFtLCB0YW50byBlbiBlbCBzdG9yZVxuICAgICAgLy8gZGUgbGEgc2VzacOzbiBjb21vIGVuIGxhIHZpc3RhIHNpIGVzIGxhIGFjdGl2YS4gRWwgdGV4dG8gZW4gdml2byB2aWFqYVxuICAgICAgLy8gcG9yIHNlc3Npb25TdHJlYW1pbmdUZXh0IChleHRlcm5vKSwgc2luIHJlLXJlbmRlciBkZWwgw6FyYm9sIGNvbXBsZXRvLlxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJFeGlzdHMgPSB1c2VTZXNzaW9uc1N0b3JlXG4gICAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAgIC5nZXRNZXNzYWdlcyhzZXNzaW9uSWQpXG4gICAgICAgIC5zb21lKG1zZyA9PiBtc2cuaWQgPT09IHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGlmICghcGxhY2Vob2xkZXJFeGlzdHMpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IHBsYWNlaG9sZGVySWQsXG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHBsYWNlaG9sZGVySWRcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIH1cblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY3R4OiBTdHJlYW1Db250ZXh0LFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBwbGFjZWhvbGRlcklkXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyhyYXdBdHRhY2htZW50cylcblxuICAgICAgLy8gU2VzacOzbiBlbiBiYWNrZ3JvdW5kOiBjZXJyYW1vcyBsZWFuLiBFbCBiYWNrZW5kIHlhIHBlcnNpc3Rpw7MgbGFcbiAgICAgIC8vIHJlc3B1ZXN0YSwgYXPDrSBxdWUgYWwgdm9sdmVyIGEgbGEgc2VzacOzbiBzZSBjYXJnYSBkZXNkZSBhaMOtLiBBdmlzYW1vc1xuICAgICAgLy8gcXVlIHRlcm1pbsOzICh1bnJlYWQgKyBldmVudG8gcGFyYSB0b2FzdC9zb25pZG8pLlxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgIH0pXG4gICAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gRGV0ZWN0YXIgdG9kYXMgbGFzIFVSTHMgZGUgdGFyZWFzICguLi4vdGFza3MvMTIzL2RldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29udGVudC5tYXRjaEFsbCh0YXNrVXJsUmVnZXgpXVxuXG4gICAgICBsZXQgY29udGVudFRvQWRkID0gY29udGVudFxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobSA9PiBtLmlkICE9PSB0ZW1wTWVzc2FnZUlkKS5hdCgtMSlcbiAgICAgIGNvbnN0IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsICE9IG51bGxcbiAgICAgIGNvbnN0IFRBU0tfQ1JFQVRJT05fVE9PTFMgPSBbJ2NyZWF0ZV90YXNrJywgJ2NyZWF0ZV90YXNrc19iYXRjaCcsICdjbG9uZV90YXNrJ11cbiAgICAgIGNvbnN0IFRBU0tfRURJVF9UT09MUyA9IFtcbiAgICAgICAgJ2VkaXRfdGFzaycsXG4gICAgICAgICdlZGl0X3Rhc2tzX2JhdGNoJyxcbiAgICAgICAgJ3Rhc2tfYXNzaWduJyxcbiAgICAgICAgJ3Rhc2tfdW5hc3NpZ24nLFxuICAgICAgICAndXBkYXRlX3Rhc2tfdHlwZScsXG4gICAgICAgICd1cGRhdGVfZXN0aW1hdGVkX2hvdXJzJyxcbiAgICAgICAgJ2Fzc2lnbl90YXNrX2xhYmVsJyxcbiAgICAgIF1cbiAgICAgIGNvbnN0IFRBU0tfREVMRVRFX1RPT0xTID0gWydkZWxldGVfdGFzaycsICdkZWxldGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgcGVuZGluZ0FjdGlvbnMgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgfHwgW11cbiAgICAgIGNvbnN0IHdhc1Rhc2tDcmVhdGlvbiA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfQ1JFQVRJT05fVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRWRpdCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tEZWxldGUgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0RFTEVURV9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IGFjdGlvbi50b29sX25hbWUgPT09ICdjcmVhdGVfYWdlbnQnKVxuICAgICAgY29uc3Qgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgIGxldCBjcmVhdGVBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkpIHtcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCAmJlxuICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJlxuICAgICAgICAoY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyZWRBZ2VudElkID1cbiAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHtcbiAgICAgICAgICBhZ2VudElkOiBjb25maWd1cmVkQWdlbnRJZCBhcyBzdHJpbmcsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdEhpdGxPcHRpb24sIHtcbiAgICAgICAgICBhZ2VudF90eXBlOiBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlKGFnZW50KSxcbiAgICAgICAgICBhY3Rpb25fdHlwZTogYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIGRlY2lzaW9uOiAnYWNjZXB0JyxcbiAgICAgICAgICBvcHRpb246ICdjcmVhdGVfYWdlbnQnLFxuICAgICAgICAgIC4uLihjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgPyB7IGNyZWF0ZWRfYWdlbnRfaWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdhc0VkaXRBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuXG4gICAgICBsZXQgZWRpdEFnZW50Rm9sbG93VXA6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWRcbiAgICAgIGlmICh3YXNFZGl0QWdlbnRBcHByb3ZlZCkge1xuICAgICAgICBjb25zdCBmcm9tU3RyZWFtID0gY29tcGxldGVkQWdlbnRJZD8udHJpbSgpXG4gICAgICAgIGNvbnN0IGZyb21BcmdzID0gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG4gICAgICAgIGNvbnN0IHJlc29sdmVkQWdlbnRJZCA9IGZyb21TdHJlYW0gfHwgZnJvbUFyZ3NcbiAgICAgICAgaWYgKHJlc29sdmVkQWdlbnRJZCkge1xuICAgICAgICAgIGVkaXRBZ2VudEZvbGxvd1VwID0geyBhZ2VudElkOiByZXNvbHZlZEFnZW50SWQgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tVXJscyA9IG1hdGNoZXMubWFwKG1hdGNoID0+IHBhcnNlSW50KG1hdGNoWzFdLCAxMCkpXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsID0gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCA9XG4gICAgICAgIHdhc1Rhc2tEZWxldGUgJiYgdGFza0lkc0Zyb21VcmxzLmxlbmd0aCA9PT0gMCAmJiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KGNvbnRlbnQpXG4gICAgICAgICAgOiBbXVxuICAgICAgY29uc3QgdGFza0lkc0ZvckRhc2hib2FyZCA9XG4gICAgICAgIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0YXNrSWRzRnJvbVVybHNcbiAgICAgICAgICA6IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsXG4gICAgICAgICAgICA6IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0XG5cbiAgICAgIGNvbnN0IHNob3VsZFN5bmNEYXNoYm9hcmQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgICh3YXNUYXNrQ3JlYXRpb24gfHwgd2FzVGFza0VkaXQgfHwgd2FzVGFza0RlbGV0ZSkgJiZcbiAgICAgICAgdGFza0lkc0ZvckRhc2hib2FyZC5sZW5ndGggPiAwXG5cbiAgICAgIGlmIChzaG91bGRTeW5jRGFzaGJvYXJkKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZHMgPSB0YXNrSWRzRm9yRGFzaGJvYXJkXG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCh0YXNrSWRzWzBdKVxuICAgICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgICBjb250ZW50VG9BZGQgPSBjb250ZW50LnJlcGxhY2UodGFza1VybFJlZ2V4LCB1cmwgPT5cbiAgICAgICAgICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3RQcm9qZWN0TWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZFJhdyA9IHByb2plY3Q/LmlkIHx8IGxhc3RQcm9qZWN0TWVzc2FnZT8ucHJvamVjdElkXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBjb250ZXh0UHJvamVjdElkUmF3ID8gcGFyc2VJbnQoU3RyaW5nKGNvbnRleHRQcm9qZWN0SWRSYXcpLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IHBhdGhNYXRjaCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXlxcL3Byb2plY3RzXFwvKFxcZCspXFwvLylcbiAgICAgICAgY29uc3Qgcm91dGVQcm9qZWN0SWQgPSBwYXRoTWF0Y2ggPyBwYXJzZUludChwYXRoTWF0Y2hbMV0sIDEwKSA6IG51bGxcbiAgICAgICAgY29uc3QgaXNPblByb2plY3RSb3V0ZSA9IGNvbnRleHRQcm9qZWN0SWQgJiYgcm91dGVQcm9qZWN0SWQgJiYgY29udGV4dFByb2plY3RJZCA9PT0gcm91dGVQcm9qZWN0SWRcblxuICAgICAgICBpZiAoaXNPblByb2plY3RSb3V0ZSkge1xuICAgICAgICAgIGlmICh3YXNUYXNrQ3JlYXRpb24pIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5hZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNUYXNrRWRpdCkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNUYXNrRGVsZXRlKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZD8uKHRhc2tJZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZmV0Y2ggZGVsIHRhc2sgcGFuZWwgc2kgZXN0w6EgYWJpZXJ0byB5IGxhIHRvb2wgYXByb2JhZGEgZWRpdMOzL2JvcnLDsyBlc2EgdGFyZWEuXG4gICAgICAvLyBDdWJyZSBsb3MgZG9zIGZsdWpvcyBkZSBhcHByb3ZhbDpcbiAgICAgIC8vICAgMSkgQXBwcm92YWwgcG9yIGJvdMOzbiDihpIgYHByZXZpb3VzTWVzc2FnZS5hcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnNgICh2w61hIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UpXG4gICAgICAvLyAgIDIpIE1hbnVhbCBhcHByb3ZhbCAodXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiKSDihpIgYGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50YFxuICAgICAgY29uc3Qgb3BlblRhc2tQYW5lbElkID0gd2luZG93LnRhc2tQYW5lbD8udGFza0lkXG4gICAgICBjb25zdCBtYW51YWxBcHByb3ZhbCA9IGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50XG4gICAgICBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudCA9IG51bGwgLy8gY29uc3VtaXIgdW5hIHNvbGEgdmV6XG4gICAgICBjb25zdCBtYW51YWxXYXNUYXNrRWRpdCA9ICEhbWFudWFsQXBwcm92YWwgJiYgVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0RlbGV0ZSA9ICEhbWFudWFsQXBwcm92YWwgJiYgVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMobWFudWFsQXBwcm92YWwudG9vbE5hbWUpXG5cbiAgICAgIC8vIFN5bmMgUGxhbm5lcjogYXZpc2FyIGNhcmdhIGRlIGhvcmFzIGNvbmZpcm1hZGEgKGNyZWF0ZV9ob3VyIC8gY3JlYXRlX2hvdXJzKS5cbiAgICAgIGNvbnN0IGhvdXJzVG9vbHNGcm9tQXBwcm92YWwgPSBwZW5kaW5nQWN0aW9uc1xuICAgICAgICAubWFwKChhY3Rpb246IFBlbmRpbmdBY3Rpb24pID0+IGFjdGlvbi50b29sX25hbWUpXG4gICAgICAgIC5maWx0ZXIoKHRvb2xOYW1lKTogdG9vbE5hbWUgaXMgc3RyaW5nID0+IGlzSG91cnNDaGFyZ2VUb29sKHRvb2xOYW1lKSlcbiAgICAgIGNvbnN0IHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgaG91cnNUb29sc0Zyb21BcHByb3ZhbC5sZW5ndGggPiAwXG4gICAgICBjb25zdCBtYW51YWxIb3Vyc1Rvb2wgPSBtYW51YWxBcHByb3ZhbD8udG9vbE5hbWVcbiAgICAgIGNvbnN0IHdhc0hvdXJzQ2hhcmdlTWFudWFsQXBwcm92ZWQgPSBpc0hvdXJzQ2hhcmdlVG9vbChtYW51YWxIb3Vyc1Rvb2wpXG5cbiAgICAgIGlmICh3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkIHx8IHdhc0hvdXJzQ2hhcmdlTWFudWFsQXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgdG9vbHMgPSB3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkID8gaG91cnNUb29sc0Zyb21BcHByb3ZhbCA6IG1hbnVhbEhvdXJzVG9vbCA/IFttYW51YWxIb3Vyc1Rvb2xdIDogW11cbiAgICAgICAgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkKHtcbiAgICAgICAgICBzb3VyY2U6ICdtYWlhJyxcbiAgICAgICAgICB0b29scyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKG9wZW5UYXNrUGFuZWxJZCAmJiAod2FzVGFza0VkaXQgfHwgd2FzVGFza0RlbGV0ZSB8fCBtYW51YWxXYXNUYXNrRWRpdCB8fCBtYW51YWxXYXNUYXNrRGVsZXRlKSkge1xuICAgICAgICBjb25zdCBtYW51YWxQc2V1ZG9BY3Rpb246IFBlbmRpbmdBY3Rpb24gfCBudWxsID0gbWFudWFsQXBwcm92YWxcbiAgICAgICAgICA/ICh7IHRvb2xfbmFtZTogbWFudWFsQXBwcm92YWwudG9vbE5hbWUsIHRvb2xfYXJnczogbWFudWFsQXBwcm92YWwudG9vbEFyZ3MgPz8ge30gfSBhcyBQZW5kaW5nQWN0aW9uKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBjb25zdCBhZmZlY3RlZFRhc2tJZHMgPSBbXG4gICAgICAgICAgLi4uZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbVVybHMsXG4gICAgICAgICAgLi4udGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCxcbiAgICAgICAgICAuLi4obWFudWFsUHNldWRvQWN0aW9uID8gZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKFttYW51YWxQc2V1ZG9BY3Rpb25dKSA6IFtdKSxcbiAgICAgICAgXS5tYXAoU3RyaW5nKVxuICAgICAgICBpZiAoYWZmZWN0ZWRUYXNrSWRzLmluY2x1ZGVzKFN0cmluZyhvcGVuVGFza1BhbmVsSWQpKSkge1xuICAgICAgICAgIHdpbmRvdy50YXNrUGFuZWw/LnJlZmV0Y2hUYXNrPy4oKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHsgaXNDaGF0Vmlld1Zpc2libGUsIG1hcmtDaGF0QXNSZWFkIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgICAgaWYgKGlzQWN0aXZlICYmIGlzQ2hhdFZpZXdWaXNpYmxlKSB7XG4gICAgICAgIGF3YWl0IG1hcmtDaGF0QXNSZWFkKHNlc3Npb25JZCwgeyBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIC8vIGBwYXJ0aWFsVGV4dGAgbG8gcmVzY2F0YSBgc3RvcFN0cmVhbWAgYW50ZXMgZGUgbGltcGlhciBlbCBzdG9yZSBleHRlcm5vOiBlbCB0ZXh0byBlbiB2aXZvXG4gIC8vIG5vIHZpdmUgZW4gYG1lc3NhZ2VzYCwgYXPDrSBxdWUgc2luIGVzdG8gbGEgcmVzcHVlc3RhIGEgbWVkaWFzIGRlc2FwYXJlY2UgZGUgcGFudGFsbGEgYXVucXVlXG4gIC8vIGVsIGJhY2tlbmQgc8OtIGxhIGhheWEgcGVyc2lzdGlkby5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXJ0aWFsVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBFbCBzdG9wIHNpZW1wcmUgYXBsaWNhIGEgbGEgc2VzacOzbiBhY3RpdmEgKGJvdMOzbiBkZWwgaW5wdXQgdmlzaWJsZSkuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAocGFydGlhbFRleHQpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgICAgbWVzc2FnZTogcGFydGlhbFRleHQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1jYW5jZWxsZWRgLFxuICAgICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bENvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICBtZXNzYWdlSWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlVGV4dDogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/Lm1hcChhY3Rpb24gPT4gYWN0aW9uLnRocmVhZF9pZCksXG4gICAgICB9XG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICB9XG5cbiAgICAgIGlmIChhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgZmlyc3RBY3Rpb24gPSBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/LlswXVxuICAgICAgICBjb25zdCB0b29sTmFtZSA9IChhcHByb3ZhbCBhcyB7IHRvb2xfbmFtZT86IHN0cmluZyB9KS50b29sX25hbWUgPz8gZmlyc3RBY3Rpb24/LnRvb2xfbmFtZSA/PyAnJ1xuICAgICAgICBjb25zdCB0b29sQXJncyA9XG4gICAgICAgICAgKChhcHByb3ZhbCBhcyB7IHRvb2xfYXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pLnRvb2xfYXJncyA/P1xuICAgICAgICAgICAgKGZpcnN0QWN0aW9uPy50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgaWYgKHRvb2xOYW1lICYmIGlzQWN0aXZlKSB7XG4gICAgICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSB7IHRvb2xOYW1lLCB0b29sQXJncyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYSBtZXNzYWdlIHdpdGggdGhlIGFwcHJvdmFsIHJlcXVlc3RcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgIH0pXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdhcHByb3ZhbF9yZXF1aXJlZCcpXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb25dXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICByZXRyeUNvbXBsZXRpb24sXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIGFjdGl2ZVNlc3Npb25JZCxcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gVG9wZSBkZSBjb25jdXJyZW5jaWE6IHNpIGVzdGEgc2VzacOzbiBubyBlc3TDoSBnZW5lcmFuZG8geSB5YSBoYXlcbiAgICAgIC8vIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgYWN0aXZhcywgYXZpc2Ftb3MgeSBubyBhcnJhbmNhbW9zIG90cmEuXG4gICAgICBjb25zdCB3aWxsU3RhcnROZXdTdHJlYW0gPSAhc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgaWYgKHdpbGxTdGFydE5ld1N0cmVhbSAmJiBzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG4gICAgICAvLyBMYXMgbWVudGlvbnMgcHVlZGVuIHZlbmlyIHbDrWEgNXRvIHBhcsOhbWV0cm8gKGNhbGwgcG9zaXRpb25hbCBkZXNkZSBlbCBmb290ZXIpXG4gICAgICAvLyBvIHbDrWEgU2VuZE1lc3NhZ2VPcHRpb25zIChjYWxsIHByb2dyYW3DoXRpY28pLiBFbCBwYXLDoW1ldHJvIGV4cGzDrWNpdG8gZ2FuYS5cbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1lbnRpb25zID0gbWVudGlvbnMgPz8gb3B0aW9ucy5tZW50aW9uc1xuICAgICAgY29uc3QgY29udGV4dE1lc3NhZ2U6IENvbnRleHRNZXNzYWdlIHwgdW5kZWZpbmVkID0gYnVpbGRDb250ZXh0TWVzc2FnZShlZmZlY3RpdmVNZW50aW9ucylcbiAgICAgIGNvbnN0IHBheWxvYWRGdWFJZCA9IGZ1YUlkID8/IG9wdGlvbnMuZnVhSWRcbiAgICAgIGNvbnN0IHBheWxvYWRTY0lkID0gc2NJZCA/PyBvcHRpb25zLnNjSWRcbiAgICAgIGNvbnN0IHBheWxvYWRDb250ZXh0RGF0YSA9IG9wdGlvbnMuY29udGV4dERhdGFcbiAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheShtZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRnVhSWQsXG4gICAgICAgIHNjSWQ6IHBheWxvYWRTY0lkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBzZXRBY3RpdmVDaGF0SWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuXG4gICAgICBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGRpc3BsYXlNZXNzYWdlKSxcbiAgICAgICAgYWdlbnQsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlOiBkaXNwbGF5TWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IGNvbnRleHRSZWYuY3VycmVudC5wcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVByb2plY3RJZClcblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZEZhcUlkID0gZmFxSWQgPz8gb3B0aW9ucy5mYXFJZFxuICAgICAgY29uc3QgcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID0gYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZFxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGdWFJZCA/IHsgZnVhSWQ6IHBheWxvYWRGdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZFNjSWQgPyB7IHNjSWQ6IHBheWxvYWRTY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRDb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHBheWxvYWRDb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbixcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICB0YXNrLFxuICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKG9wdGlvbj8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihvcHRpb24uZmVlSWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbj8uY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IE51bWJlcihvcHRpb24uY2xpZW50SWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgcmV0cnlNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHJldHVyblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIXByZXZpb3VzTWVzc2FnZXMuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IG1lc3NhZ2UuaWQpKSByZXR1cm5cblxuICAgICAgY29uc3QgdXNlck1lc3NhZ2UgPSBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeShwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuICAgICAgaWYgKCF1c2VyTWVzc2FnZT8ubWVzc2FnZT8udHJpbSgpICYmICF1c2VyTWVzc2FnZT8uYXR0YWNobWVudHM/Lmxlbmd0aCAmJiAhdXNlck1lc3NhZ2U/LnNvdXJjZXM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdHVybklkID0gcmVzb2x2ZVJldHJ5VHVybklkKG1lc3NhZ2UpXG4gICAgICBjb25zdCB1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayA9IG1lc3NhZ2UuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhbWVzc2FnZS5tZW1vcnlTZXNzaW9uSWQ/LnRyaW0oKVxuICAgICAgaWYgKCF0dXJuSWQgJiYgIXVzZU9yY2hlc3RyYXRvckZhbGxiYWNrKSByZXR1cm5cblxuICAgICAgY29uc3QgdHJ1bmNhdGVkID0gbWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4ocHJldmlvdXNNZXNzYWdlcywgbWVzc2FnZSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBwcmV2aW91c01lc3NhZ2VzXG4gICAgICBzZXRBY3RpdmVDaGF0SWQoc2Vzc2lvbklkKVxuXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSB1c2VyTWVzc2FnZS5tZXNzYWdlXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gYGFuc3dlci0ke25ld01lc3NhZ2VJZH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcblxuICAgICAgY29uc3QgcGxhY2Vob2xkZXI6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICBpZDogc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCxcbiAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiBhZ2VudD8ubmFtZSB8fCAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfVxuICAgICAgY29uc3QgbmV4dE1lc3NhZ2VzID0gWy4uLnRydW5jYXRlZCwgcGxhY2Vob2xkZXJdXG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbmV4dE1lc3NhZ2VzXG4gICAgICByZXBsYWNlTWVzc2FnZXMobmV4dE1lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSB0cnVuY2F0ZWQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZClcbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IHRydW5jYXRlZC5hdCgtMSk/LmFnZW50SWQgfHwgbWVzc2FnZS5hZ2VudElkXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkodXNlck1lc3NhZ2UuYXR0YWNobWVudHMpXG4gICAgICAgID8gdXNlck1lc3NhZ2UuYXR0YWNobWVudHNcbiAgICAgICAgOiBBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgPyB1c2VyTWVzc2FnZS5zb3VyY2VzXG4gICAgICAgICAgOiBbXVxuXG4gICAgICBjb25zdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSB0cnVuY2F0ZWQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcbiAgICAgICAgY29uc3QgcHJvamVjdHMgPSBwcm9qZWN0VG9SZXF1ZXN0ID8gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pIDogbnVsbFxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IHVzZXJNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogc2Vzc2lvbklkLFxuICAgICAgICAgIG1lc3NhZ2VJZDogbmV3TWVzc2FnZUlkLFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogU3RyaW5nKGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQgfHwgJycpLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odXNlck1lc3NhZ2UuY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlOiB1c2VyTWVzc2FnZS5jb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgICAgICByZXBsYWNlTWVzc2FnZXMocHJldmlvdXNNZXNzYWdlcylcbiAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodXNlT3JjaGVzdHJhdG9yRmFsbGJhY2sgfHwgIXR1cm5JZCkge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmV0cnlDb21wbGV0aW9uKHtcbiAgICAgICAgY2hhdElkOiBzZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogbmV3TWVzc2FnZUlkLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQ6IHR1cm5JZCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgYWdlbnRJZDogU3RyaW5nKGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQgfHwgJycpLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4ocHJvamVjdFRvUmVxdWVzdCA/IHsgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0IH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3VsdC5zdGFydGVkKSByZXR1cm5cblxuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICd0dXJuX25vdF9mb3VuZCcpIHtcbiAgICAgICAgYXdhaXQgcmVwbGF5VmlhT3JjaGVzdHJhdG9yKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBwcmV2aW91c01lc3NhZ2VzXG4gICAgICByZXBsYWNlTWVzc2FnZXMocHJldmlvdXNNZXNzYWdlcylcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICByZXBsYWNlTWVzc2FnZXMsXG4gICAgICByZXRyeUNvbXBsZXRpb24sXG4gICAgICBhc2tNYWlhLFxuICAgICAgZmV0Y2hQcm9qZWN0cyxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgc2V0QWN0aXZlQ2hhdElkLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoIXRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRocmVhZF9pZHMgcHJvdmlkZWQgZm9yIGFwcHJvdmFsIGRlY2lzaW9uJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyh0aHJlYWRJZHMsIG1lc3NhZ2VzUmVmLmN1cnJlbnQpXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IGBhbnN3ZXItJHtzdHJlYW1NZXNzYWdlSWR9LXN0cmVhbWluZ2AsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSxcbiAgICAgICAgdCxcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ6IGhpdGxDb250ZXh0LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUsXG4gICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgIG9uU3RyZWFtVXBkYXRlOiBjb250ZW50ID0+IGhhbmRsZVN0cmVhbVVwZGF0ZShoaXRsQ3R4LCBjb250ZW50KSxcbiAgICAgICAgICBvbkZpbmlzaFN0cmVhbTogZmluaXNoUGF5bG9hZCA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goXG4gICAgICAgICAgICAgIGhpdGxDdHgsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29udGVudCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5zb3VyY2VzLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLm1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5zdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5jb21wbGV0ZWRBZ2VudElkXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zb2xlLmluZm8oJ1t1c2VDaGF0TWFuYWdlcl0gUEFUSD1pbml0aWFsaXplQ2hhdC91c2VySW5pdGlhbE1lc3NhZ2Ug4oCUIGNvbnRleHRSZWYgcmVzb2x1dGlvbjonLCB7XG4gICAgICAgIHByb2plY3RQcm9wSWQ6IGN0eFByb2plY3Q/LmlkID8/IG51bGwsXG4gICAgICAgIGNsaWVudElkOiBjdHhDbGllbnQ/LmlkID8/IG51bGwsXG4gICAgICAgIHRhc2tJZDogY3R4VGFzaz8uaWQgPz8gbnVsbCxcbiAgICAgICAgY2hpcHNQcm9qZWN0SWQ6IGN0eENoaXBzUHJvamVjdD8ucHJvamVjdElkID8/IG51bGwsXG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGFnZW50VHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IGN0eFByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCA/IHsgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQgPyB7IHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiB1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNTZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihwcmV2aW91c1Nlc3Npb25JZClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0Ms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TyxLQUFLLENBQUM2VCxpQkFBaUIsQ0FBQztJQUM3Q2xZLGdCQUFnQixDQUFDckQsT0FBTyxHQUFHdkksTUFBTSxDQUFDLENBQUM7SUFDbkM2TCxtQkFBbUIsQ0FBQ3RELE9BQU8sR0FBRyxJQUFJO0lBQ2xDdUQsYUFBYSxDQUFDdkQsT0FBTyxHQUFHdkksTUFBTSxDQUFDLENBQUM7SUFDaENrTixrQkFBa0IsQ0FBQ3BCLGFBQWEsQ0FBQ3ZELE9BQU8sQ0FBQztJQUN6QzBELGFBQWEsQ0FBQzFELE9BQU8sR0FBRyxLQUFLO0lBQzdCaUUseUJBQXlCLENBQUNqRSxPQUFPLEdBQUcsSUFBSTtJQUN4Q2tFLHFCQUFxQixDQUFDbEUsT0FBTyxHQUFHLElBQUk7SUFDcEN3RCxlQUFlLENBQUMsSUFBSSxDQUFDO0VBQ3ZCLENBQUMsRUFBRSxDQUFDQSxlQUFlLENBQUMsQ0FBQztFQUVyQixJQUFNZ1ksY0FBYyxHQUFHcGtCLFdBQVcsQ0FBQyxZQUFNO0lBQ3ZDOGEsYUFBYSxDQUFDLENBQUM7SUFDZm5PLGVBQWUsQ0FBQy9ELE9BQU8sR0FBRyxLQUFLO0VBQ2pDLENBQUMsRUFBRSxDQUFDa1MsYUFBYSxDQUFDLENBQUM7RUFFbkIsT0FBTztJQUNMbFIsUUFBUSxFQUFSQSxRQUFRO0lBQ1JrRSxlQUFlLEVBQWZBLGVBQWU7SUFDZkMscUJBQXFCLEVBQXJCQSxxQkFBcUI7SUFDckJ5TSxlQUFlLEVBQWZBLGVBQWU7SUFDZkUsU0FBUyxFQUFUQSxTQUFTO0lBQ1RDLGNBQWMsRUFBZEEsY0FBYztJQUNkQyxjQUFjLEVBQWRBLGNBQWM7SUFDZDFOLGNBQWMsRUFBZEEsY0FBYztJQUNkNk4sY0FBYyxFQUFkQSxjQUFjO0lBQ2Q1TyxhQUFhLEVBQUVBLGFBQWEsQ0FBQ3ZELE9BQU87SUFDcENxRCxnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUNyRCxPQUFPO0lBRTFDb1MsV0FBVyxFQUFYQSxXQUFXO0lBQ1hnRSxZQUFZLEVBQVpBLFlBQVk7SUFDWkQsYUFBYSxFQUFiQSxhQUFhO0lBQ2I0QixjQUFjLEVBQWRBLGNBQWM7SUFDZGEsc0JBQXNCLEVBQXRCQSxzQkFBc0I7SUFDdEJwVCxZQUFZLEVBQVpBLFlBQVk7SUFDWnlVLGNBQWMsRUFBZEEsY0FBYztJQUNkcUIsU0FBUyxFQUFUQSxTQUFTO0lBQ1RFLGNBQWMsRUFBZEEsY0FBYztJQUVkQyxVQUFVLEVBQUU3SixlQUFlLElBQUkxTTtFQUNqQyxDQUFDO0FBQ0gsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
1498
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJpc0hvdXJzQ2hhcmdlVG9vbCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJzZXNzaW9uU3RyZWFtaW5nVGV4dCIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwiZ2V0Q2hhdHNTdG9yZVN0YXRlIiwidXNlQ2hhdHNTdG9yZSIsInJlYXNvbmluZ1N0b3JlIiwiYnVpbGRSZWFzb25pbmdUcmFjZSIsIm1hcFJlYXNvbmluZ1RyYWNlIiwicmVhc29uaW5nVHJhY2VGb3IiLCJtZXNzYWdlSWQiLCJzbmFwc2hvdCIsImdldFNuYXBzaG90IiwiaWQiLCJzdGVwcyIsInN1bW1hcnkiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsIl9vcHRpb25zJGF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0YWNobWVudHMiLCJvcHRpb25zIiwicmVzb2x2ZVByb2plY3RUb1JlcXVlc3QiLCJjaGlwc1Byb2plY3QiLCJsYXN0TWVzc2FnZVByb2plY3RJZCIsImNoaXBzUHJvamVjdElkIiwicHJvamVjdElkIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJwYXJzZWQiLCJyZXNvbHZlQ2xpZW50UGF5bG9hZCIsImN0eENsaWVudCIsImN0eFByb2plY3QiLCJfY3R4UHJvamVjdCRjbGllbnQiLCJfb2JqZWN0U3ByZWFkIiwiY2xpZW50SWQiLCJuYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwiZmlsZSIsIkZpbGUiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX2ZpbGUiLCJyb2xlIiwiZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzIiwicGVuZGluZ0FjdGlvbnMiLCJpZHMiLCJwdXNoSWQiLCJyYXciLCJuIiwicGFyc2VJbnQiLCJTdHJpbmciLCJpc05hTiIsInB1c2giLCJmb3JFYWNoIiwiYWN0aW9uIiwiX3JlYyR0YXNrX2lkIiwiYXJncyIsInRvb2xfYXJncyIsInJlYyIsInRhc2tfaWQiLCJ0YXNrX2lkcyIsInRhc2tzIiwidCIsIl90cmVjJHRhc2tfaWQiLCJ0cmVjIiwiZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQyIiwibGlzdCIsInRpZCIsImV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zIiwiX3JlYyRhZ2VudF9pZCIsImVkaXRBY3Rpb24iLCJmaW5kIiwiYSIsInRvTG93ZXJDYXNlIiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lIiwidG9vbE5hbWUiLCJfcmVmIiwiX3JlYyRhZ2VudF9pZDIiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInRocmVhZElkcyIsImFjdGl2ZU1lc3NhZ2VzIiwiZnJvbUFjdGl2ZVZpZXciLCJtZXNzYWdlIiwiX21lc3NhZ2UkYXBwcm92YWwiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNvbWUiLCJ0aHJlYWRfaWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwiZ2V0IiwiX3VzZVNlc3Npb25zU3RvcmUkZ2V0IiwiZ2V0U3RhdGUiLCJtZXNzYWdlcyIsInNlc3Npb25FbnRyeSIsIk9iamVjdCIsImVudHJpZXMiLCJfcmVmMiIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJzZXNzaW9uTWVzc2FnZXMiLCJfbWVzc2FnZSRhcHByb3ZhbDIiLCJfc2Vzc2lvbkVudHJ5IiwiZm91bmQiLCJfbWVzc2FnZSRhcHByb3ZhbDMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWY0IiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIm9uRXJyb3IiLCJfcmVmNCRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJ0YXNrIiwic2V0VGFzayIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJpc0F1dG9BcHByb3ZlQWN0aXZlIiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwic2V0QWN0aXZlQ2hhdElkIiwic3RhdGUiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJsYXN0TWFudWFsQXBwcm92YWxSZWYiLCJoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImFjdGl2ZVNlc3Npb25JZCIsInNldEFjdGl2ZVNlc3Npb25JZCIsImlzTW91bnRlZFJlZiIsImxhc3RIYW5kbGVkVGVybWluYWxSZWYiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsImlzQXV0b0FwcHJvdmVBY3RpdmVSZWYiLCJjb250ZXh0UmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY29tbWl0VG9TZXNzaW9uIiwiaXMiLCJkcm9wRnJvbVNlc3Npb24iLCJjbGVhclNlc3Npb25UYWlsIiwic2V0TWVzc2FnZXMiLCJzZXQiLCJhY3RpdmVTZXNzaW9uTWV0YSIsIl9hY3RpdmVTZXNzaW9uTWV0YSRmaSIsInN0YXR1cyIsImlzVGVybWluYWwiLCJrZXkiLCJmaW5pc2hlZEF0IiwidGFpbCIsImdldE1lc3NhZ2VzIiwiaGFzU3RhbGVQbGFjZWhvbGRlciIsIm1zZyIsImZvcmNlIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsInByZXZpb3VzSW5pdGlhbENoYXRJZFJlZiIsInByZXZpb3VzSW5pdGlhbENoYXRJZCIsImlzQWN0aXZlIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJjdHgiLCJlcnJvck1lc3NhZ2UiLCJlcnJvclJhd01lc3NhZ2UiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMyIiwicGxhY2Vob2xkZXJJZCIsImNsZWFyIiwiaXNBY2Nlc3NEZW5pZWQiLCJpc1Byb21wdFRvb0xvbmciLCJ1c2VkIiwiaXNFcnJvciIsInN1Z2dlc3Rpb25zIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInN0YXJ0Iiwic2V0VGV4dCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY1IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwiY29tcGxldGVkQWdlbnRJZCIsIl9yZXNvbHZlZENvbnRleHQiLCJyZWFzb25pbmciLCJfbWFwUmVhc29uaW5nVHJhY2UiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfd2luZG93JHRhc2tQYW5lbCIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGVtcE1lc3NhZ2VJZCIsImZpbmlzaFRyYWNlIiwiZmluYWxNZXNzYWdlSWQiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2Iiwib3BlblRhc2tQYW5lbElkIiwibWFudWFsQXBwcm92YWwiLCJtYW51YWxXYXNUYXNrRWRpdCIsIm1hbnVhbFdhc1Rhc2tEZWxldGUiLCJob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsIiwid2FzSG91cnNDaGFyZ2VBcHByb3ZlZCIsIm1hbnVhbEhvdXJzVG9vbCIsIndhc0hvdXJzQ2hhcmdlTWFudWFsQXBwcm92ZWQiLCJ0b29scyIsIl9tYW51YWxBcHByb3ZhbCR0b29sQSIsIm1hbnVhbFBzZXVkb0FjdGlvbiIsImFmZmVjdGVkVGFza0lkcyIsIl93aW5kb3ckdGFza1BhbmVsMiIsIl93aW5kb3ckdGFza1BhbmVsMiRyZSIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJpc0NoYXRWaWV3VmlzaWJsZSIsIm1hcmtDaGF0QXNSZWFkIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJyZW5hbWUiLCJsZW5ndGgiLCJhYnJ1cHQiLCJSZWdFeHAiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYXRjaEFsbCIsIm0iLCJhdCIsImFwcHJvdmFsU3RhdHVzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFpQ2hhdEhpdGxPcHRpb24iLCJhZ2VudF90eXBlIiwiYWN0aW9uX3R5cGUiLCJkZWNpc2lvbiIsIm9wdGlvbiIsImNyZWF0ZWRfYWdlbnRfaWQiLCJzZW50IiwicmVwbGFjZSIsInVybCIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJuZXdQcm9qZWN0RGFzaGJvYXJkIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJjYWxsIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsInRhc2tQYW5lbCIsInRhc2tJZCIsInNvdXJjZSIsInRvb2xBcmdzIiwicmVmZXRjaFRhc2siLCJ0aGVuIiwiY2hhdEFnZW50IiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiX3g5IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwiX21hcFJlYXNvbmluZ1RyYWNlMiIsImhpdGxDb250ZXh0Iiwib3JpZ2luYWxfdGhyZWFkX2lkIiwibWVzc2FnZVRleHQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJhdXRvX2FwcHJvdmVkIiwiYXBwcm92YWxfc3RhdHVzIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0MiIsIl9yZWY2IiwiX3Rvb2xfbmFtZSIsIl90b29sX2FyZ3MiLCJmaXJzdEFjdGlvbiIsImFwcHJvdmFsTWVzc2FnZUlkIiwiZmluaXNoIiwiYXBwcm92YWxUcmFjZSIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmNyIsIl9jYWxsZWUyIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJ3aWxsU3RhcnROZXdTdHJlYW0iLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJwYXlsb2FkQ29udGV4dERhdGEiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50IiwiY3R4Q2hpcHNQcm9qZWN0IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJoaXN0b3J5IiwicHJvamVjdFRvUmVxdWVzdCIsInByb2plY3RzIiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDIiLCJnZXRBY3RpdmVDb3VudCIsInNob3ciLCJzZXZlcml0eSIsImNvbnRleHREYXRhIiwicG1BaVR5cGVkVGV4dCIsInRpdGxlIiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsImFnZW50TmFtZSIsImZlZUlkIiwicHJvamVjdE5hbWUiLCJ0YXNrTmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiYWdlbnRUeXBlIiwiZW1vamkiLCJhZ2VudEVtb2ppIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJjaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmOCIsIl9jYWxsZWUzIiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsInJlc3BvbnNlIiwiX2NvbnRleHQzIiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDE1IiwiX3gxNiIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOSIsIl9jYWxsZWU0IiwiZWRpdGVkQWN0aW9ucyIsIm1lc3NhZ2VXaXRoQXBwcm92YWwiLCJmb3VuZFNlc3Npb25JZCIsIm5ld1N0YXR1cyIsImlzQWN0aXZlU2Vzc2lvbiIsInN0cmVhbU1lc3NhZ2VJZCIsImhpdGxDdHgiLCJyZWxlYXNlQWN0aXZlUHJvY2Vzc2luZyIsInJlc3VsdCIsIl9jb250ZXh0NCIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJjb250aW51ZVJlcXVlc3QiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsImNhbGxiYWNrcyIsImZpbmlzaFBheWxvYWQiLCJyZXNvbHZlZENvbnRleHQiLCJhcHByb3ZhbFBheWxvYWQiLCJzdGFydGVkIiwicmVhc29uIiwiX3gxNyIsIl94MTgiLCJfeDE5IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWYxIiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiX2N0eFByb2plY3QkaWQiLCJfY3R4Q2xpZW50JGlkIiwiX2N0eFRhc2skaWQiLCJfY3R4Q2hpcHNQcm9qZWN0JHByb2oiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJoYXNJbml0aWFsRnVhIiwiaGFzSW5pdGlhbFNjIiwiX2NvbnRleHRSZWYkY3VycmVudDIiLCJpbml0aWFsRGlzcGxheU1lc3NhZ2UiLCJfY29udGV4dDUiLCJCb29sZWFuIiwiaW5mbyIsInByb2plY3RQcm9wSWQiLCJyZXNldENoYXQiLCJwcmV2aW91c1Nlc3Npb25JZCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QsIFBlbmRpbmdBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZXNzYWdlLCBidWlsZENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCwgaXNIb3Vyc0NoYXJnZVRvb2wgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LCBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbk1ldGEgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uTWV0YSdcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1NYW5hZ2VyLCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXInXG5pbXBvcnQgeyBhY3RpdmVWaWV3IH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvYWN0aXZlVmlldydcbmltcG9ydCB7IG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlLCBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIH0gZnJvbSAnLi4vLi4vc3RvcmUvY2hhdHNTaWRlYmFyT3B0aW1pc3RpYydcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQ29udGV4dCB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlLCB1c2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBidWlsZFJlYXNvbmluZ1RyYWNlLCBtYXBSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JlYXNvbmluZ01hcHBlcnMnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IHJlYXNvbmluZ1RyYWNlRm9yID0gKG1lc3NhZ2VJZDogc3RyaW5nKTogUmVhc29uaW5nVHJhY2UgfCBudWxsID0+IHtcbiAgY29uc3Qgc25hcHNob3QgPSByZWFzb25pbmdTdG9yZS5nZXRTbmFwc2hvdCgpXG4gIGlmIChzbmFwc2hvdC5pZCAhPT0gbWVzc2FnZUlkKSByZXR1cm4gbnVsbFxuICByZXR1cm4gYnVpbGRSZWFzb25pbmdUcmFjZShzbmFwc2hvdC5zdGVwcywgc25hcHNob3Quc3VtbWFyeSlcbn1cblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG4vKiogY2hpcHNQcm9qZWN0IGVzIGxhIGZ1ZW50ZSBkZSB2ZXJkYWQgZGVsIHBpbiB2aXNpYmxlOyBzaSBubyBoYXkgcGluLCByZXN0YXVyYXIgZGVzZGUgaGlzdG9yaWFsLiAqL1xuY29uc3QgcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QgPSAoXG4gIGNoaXBzUHJvamVjdDogeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGxhc3RNZXNzYWdlUHJvamVjdElkOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBudW1iZXIgfCBudWxsID0+IHtcbiAgY29uc3QgY2hpcHNQcm9qZWN0SWQgPSBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/IE51bWJlcihjaGlwc1Byb2plY3QucHJvamVjdElkKSA6IG51bGxcbiAgaWYgKGNoaXBzUHJvamVjdElkICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGNoaXBzUHJvamVjdElkKSkge1xuICAgIHJldHVybiBjaGlwc1Byb2plY3RJZFxuICB9XG4gIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCByZXNvbHZlQ2xpZW50UGF5bG9hZCA9IChcbiAgY3R4Q2xpZW50OiB7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjdHhQcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogeyBjbGllbnRJZD86IG51bWJlcjsgY2xpZW50TmFtZT86IHN0cmluZyB9ID0+IHtcbiAgaWYgKGN0eENsaWVudD8uaWQpIHtcbiAgICByZXR1cm4geyBjbGllbnRJZDogY3R4Q2xpZW50LmlkLCAuLi4oY3R4Q2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eENsaWVudC5uYW1lIH0gOiB7fSkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IE51bWJlcihjdHhQcm9qZWN0LmNsaWVudElkKSB9XG4gIH1cbiAgaWYgKGN0eFByb2plY3Q/LmNsaWVudD8uaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50SWQ6IGN0eFByb2plY3QuY2xpZW50LmlkLFxuICAgICAgLi4uKGN0eFByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eFByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzID0gKHJhd0F0dGFjaG1lbnRzOiB1bmtub3duKTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXdBdHRhY2htZW50cykpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiByYXdBdHRhY2htZW50c1xuICAgIC5maWx0ZXIoKGF0dGFjaG1lbnQpOiBhdHRhY2htZW50IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+ICEhYXR0YWNobWVudCAmJiB0eXBlb2YgYXR0YWNobWVudCA9PT0gJ29iamVjdCcpXG4gICAgLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5uYW1lID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50Lm5hbWUudHJpbSgpID8gYXR0YWNobWVudC5uYW1lLnRyaW0oKSA6IGBmaWxlLSR7aW5kZXggKyAxfWBcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC50eXBlID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LnR5cGUudHJpbSgpID8gYXR0YWNobWVudC50eXBlLnRyaW0oKSA6ICdwZGYnXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHR5cGVvZiBhdHRhY2htZW50Lm1pbWVfdHlwZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50Lm1pbWVfdHlwZSA6ICcnXG4gICAgICBjb25zdCBmdWxsRmlsZU5hbWUgPSBuYW1lLmluY2x1ZGVzKCcuJykgPyBuYW1lIDogYCR7bmFtZX0uJHt0eXBlfWBcbiAgICAgIGNvbnN0IG51bWVyaWNTaXplID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuc2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IGF0dGFjaG1lbnQuc2l6ZVxuICAgICAgICAgIDogTnVtYmVyLmlzRmluaXRlKE51bWJlcihhdHRhY2htZW50LnNpemUpKVxuICAgICAgICAgICAgPyBOdW1iZXIoYXR0YWNobWVudC5zaXplKVxuICAgICAgICAgICAgOiAwXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBmdWxsRmlsZU5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSksXG4gICAgICAgIGlkOlxuICAgICAgICAgIHR5cGVvZiBhdHRhY2htZW50LmlkID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LmlkLnRyaW0oKVxuICAgICAgICAgICAgPyBhdHRhY2htZW50LmlkXG4gICAgICAgICAgICA6IGBhc3Npc3RhbnQtZmlsZS0ke2luZGV4fS0ke2Z1bGxGaWxlTmFtZX1gLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzaXplOiBudW1lcmljU2l6ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXJsX29yaWdpbmFsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF90aHVtYm5haWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfZmlsZTogdHlwZW9mIGF0dGFjaG1lbnQudXJsX2ZpbGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfZmlsZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcm9sZTogYXR0YWNobWVudC5yb2xlID09PSAnYXNzaXN0YW50JyA/ICdhc3Npc3RhbnQnIDogJ3VzZXInLFxuICAgICAgfVxuICAgIH0pXG59XG5cbi8qKiBFeHRyYWUgdGFza19pZHMgZGUgbG9zIHRvb2xfYXJncyBkZSBwZW5kaW5nX2FjdGlvbnMsIGN1YnJpZW5kbyBsYXMgZm9ybWFzIGNvbXVuZXM6XG4gKiAgLSBgeyB0YXNrX2lkIH1gIG8gYHsgaWQgfWBcbiAqICAtIGB7IHRhc2tfaWRzOiBbXSB9YFxuICogIC0gYHsgdGFza3M6IFt7IHRhc2tfaWR8aWQgfSwgLi4uXSB9YFxuICogIMOadGlsIHBhcmEgdG9vbHMgZGUgZWRpdC9hc3NpZ24vZGVsZXRlIGN1YW5kbyBsYSByZXNwdWVzdGEgZGVsIExMTSBubyBpbmNsdXllIFVSTHMgL3Rhc2tzLy4uLi9kZXRhaWwuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIGNvbnN0IHB1c2hJZCA9IChyYXc6IHVua25vd24pID0+IHtcbiAgICBpZiAocmF3ID09IG51bGwpIHJldHVyblxuICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gIH1cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHB1c2hJZChyZWMudGFza19pZCA/PyByZWMuaWQpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tfaWRzKSkge1xuICAgICAgcmVjLnRhc2tfaWRzLmZvckVhY2gocHVzaElkKVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza3MpKSB7XG4gICAgICByZWMudGFza3MuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgaWYgKHQgJiYgdHlwZW9mIHQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHQpKSB7XG4gICAgICAgICAgY29uc3QgdHJlYyA9IHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICBwdXNoSWQodHJlYy50YXNrX2lkID8/IHRyZWMuaWQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbi8qKiB0YXNrX2lkIC8gdGFza19pZHMgZW4gcGVuZGluZ19hY3Rpb25zIGRlIGRlbGV0ZV8qIChsYSByZXNwdWVzdGEgcHVlZGUgbm8gaW5jbHVpciBVUkxzIC90YXNrcy/igKYvZGV0YWlsKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFzaycpIHtcbiAgICAgIGNvbnN0IHJhdyA9IHJlYy50YXNrX2lkID8/IHJlYy5pZFxuICAgICAgaWYgKHJhdyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrc19iYXRjaCcpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSByZWMudGFza19pZHNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgIGxpc3QuZm9yRWFjaCh0aWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcodGlkKSwgMTApXG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZWRpdEFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcbiAgaWYgKFxuICAgICFlZGl0QWN0aW9uIHx8XG4gICAgIWVkaXRBY3Rpb24udG9vbF9hcmdzIHx8XG4gICAgdHlwZW9mIGVkaXRBY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkoZWRpdEFjdGlvbi50b29sX2FyZ3MpXG4gICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gZWRpdEFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSwgdG9vbE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBhY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSB0b29sTmFtZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLnRvb2xfYXJncyB8fCB0eXBlb2YgYWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhY3Rpb24udG9vbF9hcmdzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gYWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWQgPz8gcmVjLmlkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG4vKiogw5psdGltbyByZWN1cnNvIHNpIG5vIGhheSBsaW5rcyBuaSB0b29sX2FyZ3MgcGFyc2VhYmxlcyAocC4gZWouIFwiSUQgKio3NTk3MTA2KipcIikuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQodGV4dDogc3RyaW5nKTogbnVtYmVyW10ge1xuICBjb25zdCBsYWJlbGVkID0gdGV4dC5tYXRjaCgvXFxiSURcXHMqXFwqXFwqKFxcZCspXFwqXFwqL2kpXG4gIGlmIChsYWJlbGVkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGxhYmVsZWRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIGNvbnN0IGJvbGQgPSB0ZXh0Lm1hdGNoKC9cXCpcXCooXFxkezUsfSlcXCpcXCovKVxuICBpZiAoYm9sZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChib2xkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzID0gKFxuICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICBhY3RpdmVNZXNzYWdlczogQ2hhdE1lc3NhZ2VbXVxuKTogeyBtZXNzYWdlOiBDaGF0TWVzc2FnZTsgc2Vzc2lvbklkOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICBjb25zdCBmcm9tQWN0aXZlVmlldyA9IGFjdGl2ZU1lc3NhZ2VzLmZpbmQobWVzc2FnZSA9PlxuICAgIG1lc3NhZ2UuYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICApXG4gIGlmIChmcm9tQWN0aXZlVmlldz8uYXBwcm92YWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogZnJvbUFjdGl2ZVZpZXcsXG4gICAgICBzZXNzaW9uSWQ6IGZyb21BY3RpdmVWaWV3LmFwcHJvdmFsLnNlc3Npb25faWQgfHwgYWN0aXZlVmlldy5nZXQoKSB8fCAnJyxcbiAgICB9XG4gIH1cblxuICBjb25zdCB7IG1lc3NhZ2VzIH0gPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKClcbiAgY29uc3Qgc2Vzc2lvbkVudHJ5ID0gT2JqZWN0LmVudHJpZXMobWVzc2FnZXMpLmZpbmQoKFssIHNlc3Npb25NZXNzYWdlc10pID0+XG4gICAgc2Vzc2lvbk1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PlxuICAgICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgKVxuICApXG4gIGlmIChzZXNzaW9uRW50cnkpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBzZXNzaW9uTWVzc2FnZXNdID0gc2Vzc2lvbkVudHJ5XG4gICAgY29uc3QgZm91bmQgPSBzZXNzaW9uTWVzc2FnZXMuZmluZChtZXNzYWdlID0+XG4gICAgICBtZXNzYWdlLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICApXG4gICAgaWYgKGZvdW5kPy5hcHByb3ZhbCkge1xuICAgICAgcmV0dXJuIHsgbWVzc2FnZTogZm91bmQsIHNlc3Npb25JZDogZm91bmQuYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBzZXNzaW9uSWQgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHRhc2ssXG4gICAgc2V0VGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaXNBdXRvQXBwcm92ZUFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG5cbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHNldEFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0QWN0aXZlQ2hhdElkKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjbGVhclN0cmVhbVVpUmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcbiAgLyoqXG4gICAqIFNlc2nDs24gYWN0dWFsbWVudGUgdmlzaWJsZS4gU2UgbWFudGllbmUgZW4gc3RhdGUgKG5vIHNvbG8gZW4gcmVmKSBwYXJhIHF1ZVxuICAgKiBlbCBtb3RvciBkZSBzdHJlYW1pbmcgcHVlZGEgbGVlciByZWFjdGl2YW1lbnRlIGxvcyBmbGFncyBkZSBFU1RBIHNlc2nDs25cbiAgICogZGVzZGUgZWwgc3RvcmUsIG1pZW50cmFzIG90cmFzIHNpZ3VlbiBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICovXG4gIGNvbnN0IFthY3RpdmVTZXNzaW9uSWQsIHNldEFjdGl2ZVNlc3Npb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgLyoqIFRydWUgbWllbnRyYXMgZXN0YSBpbnN0YW5jaWEgZXN0w6kgbW9udGFkYSAoZXZpdGEgc2V0U3RhdGUgdHJhcyBkZXNtb250YXIpLiAqL1xuICBjb25zdCBpc01vdW50ZWRSZWYgPSB1c2VSZWYodHJ1ZSlcbiAgLyoqIEV2aXRhIHJlY29uY2lsaWFyIGRvcyB2ZWNlcyBlbCBtaXNtbyBlc3RhZG8gdGVybWluYWwgZGUgdW5hIHNlc2nDs24uICovXG4gIGNvbnN0IGxhc3RIYW5kbGVkVGVybWluYWxSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiA9IHVzZVJlZihpc0F1dG9BcHByb3ZlQWN0aXZlKVxuICAvKiogRXZpdGEgY2xvc3VyZXMgb2Jzb2xldGFzIGN1YW5kbyBlbCBmb290ZXIgY29uc2VydmEgc2VuZE1lc3NhZ2UgZW50cmUgcmVuZGVycy4gKi9cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH0pXG4gIGNvbnRleHRSZWYuY3VycmVudCA9IHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0F1dG9BcHByb3ZlQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBpc0F1dG9BcHByb3ZlQWN0aXZlXSlcblxuICBjb25zdCB7IGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgbG9hZE1lc3NhZ2VzLCBhZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBoYW5kbGVTY3JvbGwgfSA9XG4gICAgdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBhZ2VudHMsXG4gICAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICAvKipcbiAgICogRXNjcmliZSB1biBtZW5zYWplIGVuIGVsIHN0b3JlIHBvci1zZXNpw7NuIHksIHNpIGxhIHNlc2nDs24gZXMgbGEgYWN0aXZhLFxuICAgKiB0YW1iacOpbiBlbiBsYSB2aXN0YSBsb2NhbC4gUGVybWl0ZSBxdWUgc2VzaW9uZXMgZW4gYmFja2dyb3VuZCBhY3VtdWxlbiBzdVxuICAgKiByZXN1bHRhZG8gc2luIHBpc2FyIGVsIGNoYXQgcXVlIGVsIHVzdWFyaW8gZXN0w6EgbWlyYW5kby5cbiAgICovXG4gIGNvbnN0IGNvbW1pdFRvU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5hZGRNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZSlcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgYWRkTWVzc2FnZShtZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBkcm9wRnJvbVNlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkucmVtb3ZlTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2VJZClcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcmVtb3ZlTWVzc2FnZV1cbiAgKVxuXG4gIC8qKiBMaW1waWEgZWwgdGFpbCBlbiB2dWVsbyBkZSB1bmEgc2VzacOzbiAodHJhcyB0ZXJtaW5hcjsgZWwgYmFja2VuZCBwYXNhIGEgc2VyIGZ1ZW50ZSkuICovXG4gIGNvbnN0IGNsZWFyU2Vzc2lvblRhaWwgPSB1c2VDYWxsYmFjaygoc2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuc2V0TWVzc2FnZXMoc2Vzc2lvbklkLCBbXSlcbiAgfSwgW10pXG5cbiAgLy8gUmVnaXN0cmFyIGxhIHNlc2nDs24gdmlzaWJsZSBlbiBlbCB0cmFja2VyIGdsb2JhbCBwYXJhIHF1ZSBsb3MgY2FsbGJhY2tzIGRlbFxuICAvLyBtb3RvciAocXVlIHB1ZWRlbiBwZXJ0ZW5lY2VyIGEgdW5hIGluc3RhbmNpYSB5YSBkZXNtb250YWRhKSBzZXBhbiBjdcOhbCBlcyBsYVxuICAvLyBzZXNpw7NuIGFjdGl2YSBhY3R1YWwuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWN0aXZlVmlldy5zZXQoYWN0aXZlU2Vzc2lvbklkKVxuICB9LCBbYWN0aXZlU2Vzc2lvbklkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAoYWN0aXZlVmlldy5pcyhjdXJyZW50Q2hhdElkLmN1cnJlbnQpKSB7XG4gICAgICAgIGFjdGl2ZVZpZXcuc2V0KG51bGwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBSZWNvbmNpbGlhY2nDs246IHNpIGxhIHNlc2nDs24gYWN0aXZhIHRlcm1pbmEgKGNvbXBsZXRlL2Vycm9yL2NhbmNlbGxlZCkgcGVybyBlbFxuICAvLyBzdG9yZSBwb3Itc2VzacOzbiB0b2RhdsOtYSB0aWVuZSB1biBwbGFjZWhvbGRlciBkZSBzdHJlYW1pbmcsIHJlZnJlc2NhbW9zIGRlc2RlXG4gIC8vIGVsIGJhY2tlbmQuIFVzYW1vcyBlbCBzdG9yZSAobm8gbWVzc2FnZXNSZWYpOiBoYW5kbGVTdHJlYW1GaW5pc2ggbGltcGlhIGVsXG4gIC8vIHBsYWNlaG9sZGVyIGFow60gZGUgZm9ybWEgc8OtbmNyb25hOyBtZXNzYWdlc1JlZiBwdWVkZSBxdWVkYXIgc3RhbGUgdW4gcmVuZGVyXG4gIC8vIHBvcnF1ZSBzZXRTdGF0dXMgKFp1c3RhbmQpIHkgcmVtb3ZlTWVzc2FnZSAoUmVhY3QpIG5vIGJhdGNoYW4ganVudG9zLlxuICBjb25zdCBhY3RpdmVTZXNzaW9uTWV0YSA9IHVzZVNlc3Npb25NZXRhKGFjdGl2ZVNlc3Npb25JZClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzXG4gICAgaWYgKCFzdGF0dXMpIHJldHVyblxuICAgIGNvbnN0IGlzVGVybWluYWwgPSBzdGF0dXMgPT09ICdjb21wbGV0ZScgfHwgc3RhdHVzID09PSAnZXJyb3InIHx8IHN0YXR1cyA9PT0gJ2NhbmNlbGxlZCdcbiAgICBpZiAoIWlzVGVybWluYWwpIHJldHVyblxuICAgIGNvbnN0IGtleSA9IGAke2FjdGl2ZVNlc3Npb25JZH06JHtzdGF0dXN9OiR7YWN0aXZlU2Vzc2lvbk1ldGE/LmZpbmlzaGVkQXQgPz8gJyd9YFxuICAgIGlmIChsYXN0SGFuZGxlZFRlcm1pbmFsUmVmLmN1cnJlbnQgPT09IGtleSkgcmV0dXJuXG4gICAgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID0ga2V5XG5cbiAgICBjb25zdCB0YWlsID0gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLmdldE1lc3NhZ2VzKGFjdGl2ZVNlc3Npb25JZClcbiAgICBjb25zdCBoYXNTdGFsZVBsYWNlaG9sZGVyID0gdGFpbC5zb21lKG1zZyA9PiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1zZy5pZCkpXG4gICAgaWYgKGhhc1N0YWxlUGxhY2Vob2xkZXIpIHtcbiAgICAgIGxvYWRNZXNzYWdlcyh7IGZvcmNlOiB0cnVlIH0pXG4gICAgfVxuICB9LCBbYWN0aXZlU2Vzc2lvbk1ldGE/LnN0YXR1cywgYWN0aXZlU2Vzc2lvbk1ldGE/LmZpbmlzaGVkQXQsIGFjdGl2ZVNlc3Npb25JZCwgbG9hZE1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjaGF0LWxvYWRpbmctbWVzc2FnZXMtY2hhbmdlZCcsIHtcbiAgICAgIGRldGFpbDogeyBsb2FkaW5nTWVzc2FnZXMgfSxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXNdKVxuXG4gIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPihpbml0aWFsQ2hhdElkKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNJbml0aWFsQ2hhdElkID0gcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcblxuICAgIC8vIENoYXQgbnVldm8gLyBob21lOiBpbml0aWFsQ2hhdElkIHBhc2EgYSBudWxsLCBhc8OtIHF1ZSBsYSByYW1hIGRlIGFiYWpvIG5vXG4gICAgLy8gYXBsaWNhLiBIYXkgcXVlIHJvdGFyIGEgdW5hIHNlc2nDs24gbnVldmEgaWd1YWw6IHNpIHNlZ3VpbW9zIGFwdW50YW5kbyBhIGxhXG4gICAgLy8gYW50ZXJpb3IsIGBhY3RpdmVWaWV3YCBsYSBzaWd1ZSBtYXJjYW5kbyBjb21vIGFjdGl2YSB5IGN1YW5kbyB0ZXJtaW5hIG5vIHNlXG4gICAgLy8gbm90aWZpY2EgKHkgc3UgcmVzcHVlc3RhIHNlIGNvbW1pdGVhIHNvYnJlIGxhIHZpc3RhIG51ZXZhKS4gRWwgw6FyYm9sIG5vXG4gICAgLy8gcmVtb250YSBlbiBlc3RlIGZsdWpvIChubyBoYXkgYGtleWApIHkgbmFkaWUgY29uc3VtZSBgcmVzZXRDaGF0YC5cbiAgICBpZiAoIWluaXRpYWxDaGF0SWQgJiYgcHJldmlvdXNJbml0aWFsQ2hhdElkKSB7XG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIE5PIGFib3J0YW1vcyBlbCBzdHJlYW0gYW50ZXJpb3I6IHB1ZWRlIHNlZ3VpciBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIC8vIFNvbG8gY2FtYmlhbW9zIGRlIHNlc2nDs24gYWN0aXZhOyBlbCBtb3RvciBydXRlYSBjYWRhIHN0cmVhbSBwb3Igc3VcbiAgICAgIC8vIHNlc3Npb25JZCwgYXPDrSBxdWUgbG9zIHRva2VucyBkZSBsYSBzZXNpw7NuIHByZXZpYSBzaWd1ZW4gYXBsaWPDoW5kb3NlIGFcbiAgICAgIC8vIEVTQSBzZXNpw7NuIChzdG9yZSksIG5vIGEgbGEgbnVldmEuXG5cbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoaW5pdGlhbENoYXRJZClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgLy8gaXNQcm9jZXNzaW5nUmVmIHJlZmxlamEgc2kgbGEgc2VzacOzbiBBQ1RJVkEgZXN0w6Egb2N1cGFkYS4gU2kgbGEgc2VzacOzblxuICAgICAgLy8gYSBsYSBxdWUgZW50cmFtb3Mgc2lndWUgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQsIHF1ZWRhIGJsb3F1ZWFkYTsgc2kgbm8sXG4gICAgICAvLyBzZSBoYWJpbGl0YSBlbCBlbnbDrW8gYXVucXVlIG90cmFzIHNlc2lvbmVzIHNpZ2FuIGdlbmVyYW5kby5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoaW5pdGlhbENoYXRJZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICAvLyBsb2FkTWVzc2FnZXMgbG8gZGlzcGFyYSB1c2VDaGF0TWVzc2FnZXMgYWwgY2FtYmlhciBjaGF0SWQgKGNvbiBjYWNoZSBlbiBtZW1vcmlhKS5cbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgc2V0VGFza10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRBY3RpdmVDaGF0SWQoaW5pdGlhbENoYXRJZCB8fCBudWxsKVxuICB9LCBbaW5pdGlhbENoYXRJZCwgc2V0QWN0aXZlQ2hhdElkXSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgbWVzc2FnZUlkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzQWNjZXNzRGVuaWVkID0gZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgY29uc3QgaXNQcm9tcHRUb29Mb25nID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSAnaW52YWxpZF9yZXF1ZXN0X2Vycm9yJyAmJiBlcnJvclJhd01lc3NhZ2U/LmluY2x1ZGVzKCdwcm9tcHQgaXMgdG9vIGxvbmcnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGlzQWNjZXNzRGVuaWVkXG4gICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgIDogaXNQcm9tcHRUb29Mb25nXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yUHJvbXB0VG9vTG9uZycsIHsgdXNlZDogZXJyb3JSYXdNZXNzYWdlPy5tYXRjaCgvKFxcZCspIHRva2Vucy8pPy5bMV0gPz8gJycgfSlcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVzc2FnZUlkfWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIC8vIENoaXAgXCJSZWludGVudGFyXCIgc29sbyBlbiBlbCBlcnJvciBnZW7DqXJpY28gKHAuIGVqLiA1MDApOyBubyBhcGxpY2EgYSBhY2Nlc3MgZGVuaWVkIG5pIHByb21wdCB0b28gbG9uZy5cbiAgICAgICAgLi4uKCFpc0FjY2Vzc0RlbmllZCAmJiAhaXNQcm9tcHRUb29Mb25nID8geyBzdWdnZXN0aW9uczogW3QoJ2NoYXQucmV0cnknKV0gfSA6IHt9KSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcblxuICAgICAgLy8gQXNlZ3VyYW1vcyBlbCBwbGFjZWhvbGRlciB1bmEgw7puaWNhIHZleiBwb3Igc3RyZWFtLCB0YW50byBlbiBlbCBzdG9yZVxuICAgICAgLy8gZGUgbGEgc2VzacOzbiBjb21vIGVuIGxhIHZpc3RhIHNpIGVzIGxhIGFjdGl2YS4gRWwgdGV4dG8gZW4gdml2byB2aWFqYVxuICAgICAgLy8gcG9yIHNlc3Npb25TdHJlYW1pbmdUZXh0IChleHRlcm5vKSwgc2luIHJlLXJlbmRlciBkZWwgw6FyYm9sIGNvbXBsZXRvLlxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJFeGlzdHMgPSB1c2VTZXNzaW9uc1N0b3JlXG4gICAgICAgIC5nZXRTdGF0ZSgpXG4gICAgICAgIC5nZXRNZXNzYWdlcyhzZXNzaW9uSWQpXG4gICAgICAgIC5zb21lKG1zZyA9PiBtc2cuaWQgPT09IHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGlmICghcGxhY2Vob2xkZXJFeGlzdHMpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IHBsYWNlaG9sZGVySWQsXG4gICAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHBsYWNlaG9sZGVySWRcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIH1cblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY3R4OiBTdHJlYW1Db250ZXh0LFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGwsXG4gICAgICBfcmVzb2x2ZWRDb250ZXh0PzogdW5rbm93bixcbiAgICAgIHJlYXNvbmluZz86IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBwbGFjZWhvbGRlcklkXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyhyYXdBdHRhY2htZW50cylcbiAgICAgIGNvbnN0IGZpbmlzaFRyYWNlID0gbWFwUmVhc29uaW5nVHJhY2UocmVhc29uaW5nKSA/PyByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgZmluYWxNZXNzYWdlSWQgPSBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWBcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcblxuICAgICAgLy8gU2VzacOzbiBlbiBiYWNrZ3JvdW5kOiBjZXJyYW1vcyBsZWFuLiBFbCBiYWNrZW5kIHlhIHBlcnNpc3Rpw7MgbGFcbiAgICAgIC8vIHJlc3B1ZXN0YSwgYXPDrSBxdWUgYWwgdm9sdmVyIGEgbGEgc2VzacOzbiBzZSBjYXJnYSBkZXNkZSBhaMOtLiBBdmlzYW1vc1xuICAgICAgLy8gcXVlIHRlcm1pbsOzICh1bnJlYWQgKyBldmVudG8gcGFyYSB0b2FzdC9zb25pZG8pLlxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgICByZWFzb25pbmc6IGZpbmlzaFRyYWNlLFxuICAgICAgICB9KVxuICAgICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdjb21wbGV0ZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICAvLyBTeW5jIFBsYW5uZXI6IGF2aXNhciBjYXJnYSBkZSBob3JhcyBjb25maXJtYWRhIChjcmVhdGVfaG91ciAvIGNyZWF0ZV9ob3VycykuXG4gICAgICBjb25zdCBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsID0gcGVuZGluZ0FjdGlvbnNcbiAgICAgICAgLm1hcCgoYWN0aW9uOiBQZW5kaW5nQWN0aW9uKSA9PiBhY3Rpb24udG9vbF9uYW1lKVxuICAgICAgICAuZmlsdGVyKCh0b29sTmFtZSk6IHRvb2xOYW1lIGlzIHN0cmluZyA9PiBpc0hvdXJzQ2hhcmdlVG9vbCh0b29sTmFtZSkpXG4gICAgICBjb25zdCB3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIGhvdXJzVG9vbHNGcm9tQXBwcm92YWwubGVuZ3RoID4gMFxuICAgICAgY29uc3QgbWFudWFsSG91cnNUb29sID0gbWFudWFsQXBwcm92YWw/LnRvb2xOYW1lXG4gICAgICBjb25zdCB3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkID0gaXNIb3Vyc0NoYXJnZVRvb2wobWFudWFsSG91cnNUb29sKVxuXG4gICAgICBpZiAod2FzSG91cnNDaGFyZ2VBcHByb3ZlZCB8fCB3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkKSB7XG4gICAgICAgIGNvbnN0IHRvb2xzID0gd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA/IGhvdXJzVG9vbHNGcm9tQXBwcm92YWwgOiBtYW51YWxIb3Vyc1Rvb2wgPyBbbWFudWFsSG91cnNUb29sXSA6IFtdXG4gICAgICAgIGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCh7XG4gICAgICAgICAgc291cmNlOiAnbWFpYScsXG4gICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcGVuVGFza1BhbmVsSWQgJiYgKHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUgfHwgbWFudWFsV2FzVGFza0VkaXQgfHwgbWFudWFsV2FzVGFza0RlbGV0ZSkpIHtcbiAgICAgICAgY29uc3QgbWFudWFsUHNldWRvQWN0aW9uOiBQZW5kaW5nQWN0aW9uIHwgbnVsbCA9IG1hbnVhbEFwcHJvdmFsXG4gICAgICAgICAgPyAoeyB0b29sX25hbWU6IG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lLCB0b29sX2FyZ3M6IG1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzID8/IHt9IH0gYXMgUGVuZGluZ0FjdGlvbilcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgY29uc3QgYWZmZWN0ZWRUYXNrSWRzID0gW1xuICAgICAgICAgIC4uLmV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgICAgLi4udGFza0lkc0Zyb21VcmxzLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwsXG4gICAgICAgICAgLi4uKG1hbnVhbFBzZXVkb0FjdGlvbiA/IGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhbbWFudWFsUHNldWRvQWN0aW9uXSkgOiBbXSksXG4gICAgICAgIF0ubWFwKFN0cmluZylcbiAgICAgICAgaWYgKGFmZmVjdGVkVGFza0lkcy5pbmNsdWRlcyhTdHJpbmcob3BlblRhc2tQYW5lbElkKSkpIHtcbiAgICAgICAgICB3aW5kb3cudGFza1BhbmVsPy5yZWZldGNoVGFzaz8uKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgICByZWFzb25pbmc6IGZpbmlzaFRyYWNlLFxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG5cbiAgICAgIGNvbnN0IHsgaXNDaGF0Vmlld1Zpc2libGUsIG1hcmtDaGF0QXNSZWFkIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgICAgaWYgKGlzQWN0aXZlICYmIGlzQ2hhdFZpZXdWaXNpYmxlKSB7XG4gICAgICAgIGF3YWl0IG1hcmtDaGF0QXNSZWFkKHNlc3Npb25JZCwgeyBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gRWwgc3RvcCBzaWVtcHJlIGFwbGljYSBhIGxhIHNlc2nDs24gYWN0aXZhIChib3TDs24gZGVsIGlucHV0IHZpc2libGUpLlxuICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG5cbiAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tY2FuY2VsbGVkYCxcbiAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICB9KVxuICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICB9LCA1MDApXG4gIH0sIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHBsYWNlaG9sZGVySWRcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5tYXAoYWN0aW9uID0+IGFjdGlvbi50aHJlYWRfaWQpLFxuICAgICAgfVxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgfVxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIHx8IGFwcHJvdmFsLmF1dG9fYXBwcm92ZWQgfHwgYXBwcm92YWwuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSAmJiBpc0FjdGl2ZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBjb25zdCBhcHByb3ZhbE1lc3NhZ2VJZCA9IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gXG4gICAgICByZWFzb25pbmdTdG9yZS5maW5pc2godGVtcE1lc3NhZ2VJZCwgYXBwcm92YWwucmVhc29uaW5nKVxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXBwcm92YWxUcmFjZSA9IG1hcFJlYXNvbmluZ1RyYWNlKGFwcHJvdmFsLnJlYXNvbmluZykgPz8gcmVhc29uaW5nVHJhY2VGb3IoYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBhcHByb3ZhbE1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICAgIHJlYXNvbmluZzogYXBwcm92YWxUcmFjZSxcbiAgICAgIH0pXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdhcHByb3ZhbF9yZXF1aXJlZCcpXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb25dXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgYWN0aXZlU2Vzc2lvbklkLFxuICAgIG9uRXJyb3I6IGhhbmRsZVN0cmVhbUVycm9yLFxuICAgIG9uU3RyZWFtVXBkYXRlOiBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgb25GaW5pc2hTdHJlYW06IGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICBvblN0b3A6IGhhbmRsZVN0cmVhbVN0b3AsXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkOiBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLFxuICB9KVxuXG4gIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCA9ICgpID0+IHtcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgIHNldEFjdGl2ZUxvYWRpbmdzKHt9KVxuICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gIH1cblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBUb3BlIGRlIGNvbmN1cnJlbmNpYTogc2kgZXN0YSBzZXNpw7NuIG5vIGVzdMOhIGdlbmVyYW5kbyB5IHlhIGhheVxuICAgICAgLy8gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyBhY3RpdmFzLCBhdmlzYW1vcyB5IG5vIGFycmFuY2Ftb3Mgb3RyYS5cbiAgICAgIGNvbnN0IHdpbGxTdGFydE5ld1N0cmVhbSA9ICFzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBpZiAod2lsbFN0YXJ0TmV3U3RyZWFtICYmIHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIC8vIExhcyBtZW50aW9ucyBwdWVkZW4gdmVuaXIgdsOtYSA1dG8gcGFyw6FtZXRybyAoY2FsbCBwb3NpdGlvbmFsIGRlc2RlIGVsIGZvb3RlcilcbiAgICAgIC8vIG8gdsOtYSBTZW5kTWVzc2FnZU9wdGlvbnMgKGNhbGwgcHJvZ3JhbcOhdGljbykuIEVsIHBhcsOhbWV0cm8gZXhwbMOtY2l0byBnYW5hLlxuICAgICAgY29uc3QgZWZmZWN0aXZlTWVudGlvbnMgPSBtZW50aW9ucyA/PyBvcHRpb25zLm1lbnRpb25zXG4gICAgICBjb25zdCBjb250ZXh0TWVzc2FnZTogQ29udGV4dE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBidWlsZENvbnRleHRNZXNzYWdlKGVmZmVjdGl2ZU1lbnRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZ1YUlkID0gZnVhSWQgPz8gb3B0aW9ucy5mdWFJZFxuICAgICAgY29uc3QgcGF5bG9hZFNjSWQgPSBzY0lkID8/IG9wdGlvbnMuc2NJZFxuICAgICAgY29uc3QgcGF5bG9hZENvbnRleHREYXRhID0gb3B0aW9ucy5jb250ZXh0RGF0YVxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZFNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHRpdGxlOiBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUoZGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgY29udGV4dFJlZi5jdXJyZW50LnByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlUHJvamVjdElkKVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRnVhSWQgPyB7IGZ1YUlkOiBwYXlsb2FkRnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRTY0lkID8geyBzY0lkOiBwYXlsb2FkU2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQ29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiBwYXlsb2FkQ29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgdGFzayxcbiAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHModGhyZWFkSWRzLCBtZXNzYWdlc1JlZi5jdXJyZW50KVxuICAgICAgaWYgKCFmb3VuZD8ubWVzc2FnZS5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWVzc2FnZTogbWVzc2FnZVdpdGhBcHByb3ZhbCwgc2Vzc2lvbklkOiBmb3VuZFNlc3Npb25JZCB9ID0gZm91bmRcbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGlmICghYXBwcm92YWwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGFwcHJvdmFsLnNlc3Npb25faWQgfHwgZm91bmRTZXNzaW9uSWRcbiAgICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlc3Npb25faWQgZGlzcG9uaWJsZSBwYXJhIGFwcHJvdmFsOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2VXaXRoQXBwcm92YWwubWVzc2FnZSxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNBY3RpdmVTZXNzaW9uID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwgeyAuLi5tZXNzYWdlV2l0aEFwcHJvdmFsLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG5cbiAgICAgIGNvbnN0IHN0cmVhbU1lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHN0cmVhbU1lc3NhZ2VJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ3R4OiBTdHJlYW1Db250ZXh0ID0ge1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogc3RyZWFtTWVzc2FnZUlkLFxuICAgICAgICBwbGFjZWhvbGRlcklkOiBgYW5zd2VyLSR7c3RyZWFtTWVzc2FnZUlkfS1zdHJlYW1pbmdgLFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc0FjdGl2ZVNlc3Npb24pIHJldHVyblxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlc3Npb25TdHJlYW1NYW5hZ2VyLnN0YXJ0Q29udGludWVTdHJlYW0oe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IGhpdGxDdHgucGxhY2Vob2xkZXJJZCxcbiAgICAgICAgY29udGludWVSZXF1ZXN0OiB7XG4gICAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICB9LFxuICAgICAgICB0LFxuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bENvbnRleHQsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSxcbiAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgb25TdHJlYW1VcGRhdGU6IGNvbnRlbnQgPT4gaGFuZGxlU3RyZWFtVXBkYXRlKGhpdGxDdHgsIGNvbnRlbnQpLFxuICAgICAgICAgIG9uRmluaXNoU3RyZWFtOiBmaW5pc2hQYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChcbiAgICAgICAgICAgICAgaGl0bEN0eCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5jb250ZW50LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnNvdXJjZXMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQubWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVzb2x2ZWRDb250ZXh0LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnJlYXNvbmluZ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoaGl0bEN0eClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGhpdGxDdHgsIGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAoIXJlc3VsdC5zdGFydGVkKSB7XG4gICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgY29tbWl0VG9TZXNzaW9uLFxuICAgICAgaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgICBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgICBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgICAgdCxcbiAgICBdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGdWEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxTYyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSAmJiAhaGFzSW5pdGlhbEZ1YSAmJiAhaGFzSW5pdGlhbFNjKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIG51bGwpID8/IGN0eFByb2plY3Q/LmlkID8/IG51bGxcblxuICAgICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIFBBVEg9aW5pdGlhbGl6ZUNoYXQvdXNlckluaXRpYWxNZXNzYWdlIOKAlCBjb250ZXh0UmVmIHJlc29sdXRpb246Jywge1xuICAgICAgICBwcm9qZWN0UHJvcElkOiBjdHhQcm9qZWN0Py5pZCA/PyBudWxsLFxuICAgICAgICBjbGllbnRJZDogY3R4Q2xpZW50Py5pZCA/PyBudWxsLFxuICAgICAgICB0YXNrSWQ6IGN0eFRhc2s/LmlkID8/IG51bGwsXG4gICAgICAgIGNoaXBzUHJvamVjdElkOiBjdHhDaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgaW5pdGlhbERpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSh1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkLFxuICAgICAgICBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgdGl0bGU6IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZShpbml0aWFsRGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IGN0eFByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCA/IHsgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQgPyB7IHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiB1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNTZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihwcmV2aW91c1Nlc3Npb25JZClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJt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
|