@projectcor/maia-components 2.11.23-0 → 2.11.23-2
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/ApprovalBox/ApprovalBox.js +60 -17
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +23 -16
- package/lib/components/atoms/icons/index.js +1 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -24
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +61 -26
- package/lib/components/molecules/ChatAIHome/styles.js +43 -37
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +6 -58
- package/lib/components/molecules/ChatAIMessages/newStyles.js +21 -24
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +14 -184
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +42 -20
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +13 -5
- package/lib/components/molecules/ChatAIModal/constants.js +2 -6
- package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -4
- package/lib/components/molecules/Sidebar/Sidebar.js +198 -138
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +1 -13
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +52 -99
- package/lib/hooks/index.js +1 -4
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +80 -185
- package/lib/hooks/useEvent.js +2 -5
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +7 -19
- package/lib/lang/br/index.js +23 -73
- package/lib/lang/en/index.js +23 -73
- package/lib/lang/es/index.js +21 -71
- package/lib/lang/fr/index.js +18 -57
- package/lib/services/maia/Agents/getAgentById.js +5 -9
- package/lib/services/maia/Agents/getAgents.js +10 -9
- package/lib/services/maia/Orchestrator/orchestrator.js +22 -29
- package/lib/services/utils/mapChatMessages.js +14 -5
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/package.json +1 -1
- package/lib/components/atoms/icons/MaiaStoreIcon.js +0 -31
- package/lib/components/atoms/icons/MyAgentsNavIcon.js +0 -51
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +0 -130
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +0 -91
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +0 -137
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +0 -43
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +0 -37
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +0 -328
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +0 -178
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +0 -123
- package/lib/hooks/useAgentSuggestions.js +0 -60
- package/lib/services/maia/Agents/fetchAgentDetail.js +0 -122
- package/lib/services/maia/Agents/getAgentSuggestions.js +0 -44
- package/lib/types/AgentSuggestion.js +0 -2
|
@@ -24,7 +24,6 @@ import { ChatHistoryRole } from '../../types/Chat';
|
|
|
24
24
|
import { useProjects } from '../useProjects';
|
|
25
25
|
import { useTabTaskDefault } from '../useTabTaskDefault';
|
|
26
26
|
import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
|
|
27
|
-
import { fetchAgentDetail } from '../../services/maia/Agents/fetchAgentDetail';
|
|
28
27
|
var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
|
|
29
28
|
var _options$attachments;
|
|
30
29
|
if (Array.isArray(attachmentsOrOptions)) {
|
|
@@ -68,30 +67,6 @@ function extractTaskIdsFromDeletePendingActions(pendingActions) {
|
|
|
68
67
|
});
|
|
69
68
|
return ids;
|
|
70
69
|
}
|
|
71
|
-
function extractAgentIdFromEditAgentPendingActions(pendingActions) {
|
|
72
|
-
var _rec$agent_id;
|
|
73
|
-
var editAction = pendingActions.find(function (a) {
|
|
74
|
-
return (a.tool_name || '').toLowerCase() === 'edit_agent';
|
|
75
|
-
});
|
|
76
|
-
if (!editAction || !editAction.tool_args || _typeof(editAction.tool_args) !== 'object' || Array.isArray(editAction.tool_args)) {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
var rec = editAction.tool_args;
|
|
80
|
-
var raw = (_rec$agent_id = rec.agent_id) !== null && _rec$agent_id !== void 0 ? _rec$agent_id : rec.agentId;
|
|
81
|
-
return raw != null ? String(raw) : null;
|
|
82
|
-
}
|
|
83
|
-
function extractAgentIdFromPendingActionsByToolName(pendingActions, toolName) {
|
|
84
|
-
var _ref, _rec$agent_id2;
|
|
85
|
-
var action = pendingActions.find(function (a) {
|
|
86
|
-
return (a.tool_name || '').toLowerCase() === toolName.toLowerCase();
|
|
87
|
-
});
|
|
88
|
-
if (!action || !action.tool_args || _typeof(action.tool_args) !== 'object' || Array.isArray(action.tool_args)) {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
var rec = action.tool_args;
|
|
92
|
-
var raw = (_ref = (_rec$agent_id2 = rec.agent_id) !== null && _rec$agent_id2 !== void 0 ? _rec$agent_id2 : rec.agentId) !== null && _ref !== void 0 ? _ref : rec.id;
|
|
93
|
-
return raw != null ? String(raw) : null;
|
|
94
|
-
}
|
|
95
70
|
|
|
96
71
|
/** Último recurso si no hay links ni tool_args parseables (p. ej. "ID **7597106**"). */
|
|
97
72
|
function extractTaskIdsFromAssistantDeletionText(text) {
|
|
@@ -145,7 +120,7 @@ var parseSSELine = function parseSSELine(line) {
|
|
|
145
120
|
}
|
|
146
121
|
};
|
|
147
122
|
var processSSEStream = /*#__PURE__*/function () {
|
|
148
|
-
var
|
|
123
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response, threadId, callbacks) {
|
|
149
124
|
var _response$body;
|
|
150
125
|
var reader, decoder, buffer, accumulatedContent, isStreamComplete, handleLine, _yield$reader$read, done, value, lines, i;
|
|
151
126
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
@@ -166,14 +141,10 @@ var processSSEStream = /*#__PURE__*/function () {
|
|
|
166
141
|
callbacks.onNode(eventData.message, threadId);
|
|
167
142
|
}
|
|
168
143
|
} else if (eventType === 'complete') {
|
|
169
|
-
var _eventData$agent_id;
|
|
170
144
|
var finalContent = eventData.content || accumulatedContent;
|
|
171
145
|
var sources = eventData.sources || null;
|
|
172
146
|
var memorySessionId = eventData.memory_session_id || '';
|
|
173
|
-
|
|
174
|
-
var agentIdRaw = (_eventData$agent_id = eventData.agent_id) !== null && _eventData$agent_id !== void 0 ? _eventData$agent_id : eventData.agentId;
|
|
175
|
-
var completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
|
|
176
|
-
callbacks.onComplete(finalContent, sources, memorySessionId, threadId, suggestions, completedAgentId);
|
|
147
|
+
callbacks.onComplete(finalContent, sources, memorySessionId, threadId);
|
|
177
148
|
} else if (eventType === 'approval_required') {
|
|
178
149
|
var _callbacks$onApproval;
|
|
179
150
|
(_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, eventData, accumulatedContent, threadId);
|
|
@@ -227,15 +198,15 @@ var processSSEStream = /*#__PURE__*/function () {
|
|
|
227
198
|
}, _callee);
|
|
228
199
|
}));
|
|
229
200
|
return function processSSEStream(_x, _x2, _x3) {
|
|
230
|
-
return
|
|
201
|
+
return _ref.apply(this, arguments);
|
|
231
202
|
};
|
|
232
203
|
}();
|
|
233
|
-
export var useChatManager = function useChatManager(
|
|
234
|
-
var initialChatId =
|
|
235
|
-
userInitialMessage =
|
|
236
|
-
onError =
|
|
237
|
-
|
|
238
|
-
agents =
|
|
204
|
+
export var useChatManager = function useChatManager(_ref2) {
|
|
205
|
+
var initialChatId = _ref2.chatId,
|
|
206
|
+
userInitialMessage = _ref2.userInitialMessage,
|
|
207
|
+
onError = _ref2.onError,
|
|
208
|
+
_ref2$agents = _ref2.agents,
|
|
209
|
+
agents = _ref2$agents === void 0 ? [] : _ref2$agents;
|
|
239
210
|
var _useT = useT(),
|
|
240
211
|
t = _useT.t;
|
|
241
212
|
var authUser = useUser();
|
|
@@ -317,9 +288,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
317
288
|
var lastMsgWithProject = messages.filter(function (msg) {
|
|
318
289
|
return msg.projectId;
|
|
319
290
|
}).at(-1);
|
|
320
|
-
var
|
|
321
|
-
projectId =
|
|
322
|
-
projectName =
|
|
291
|
+
var _ref3 = lastMsgWithProject || {},
|
|
292
|
+
projectId = _ref3.projectId,
|
|
293
|
+
projectName = _ref3.projectName;
|
|
323
294
|
if (!projectId) return;
|
|
324
295
|
fetchProjects(projectId).then(function (projects) {
|
|
325
296
|
var found = projects === null || projects === void 0 ? void 0 : projects.find(function (p) {
|
|
@@ -353,9 +324,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
353
324
|
var lastMsgWithClient = messages.filter(function (msg) {
|
|
354
325
|
return msg.clientId != null && msg.clientName;
|
|
355
326
|
}).at(-1);
|
|
356
|
-
var
|
|
357
|
-
msgClientId =
|
|
358
|
-
msgClientName =
|
|
327
|
+
var _ref4 = lastMsgWithClient || {},
|
|
328
|
+
msgClientId = _ref4.clientId,
|
|
329
|
+
msgClientName = _ref4.clientName;
|
|
359
330
|
if (msgClientId == null || !msgClientName) return;
|
|
360
331
|
setClient === null || setClient === void 0 || setClient({
|
|
361
332
|
id: Number(msgClientId),
|
|
@@ -393,9 +364,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
393
364
|
});
|
|
394
365
|
}, [addMessage]);
|
|
395
366
|
var handleStreamFinish = useCallback(/*#__PURE__*/function () {
|
|
396
|
-
var
|
|
397
|
-
var _previousMessage$appr
|
|
398
|
-
var tempMessageId, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete,
|
|
367
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId) {
|
|
368
|
+
var _previousMessage$appr;
|
|
369
|
+
var tempMessageId, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, 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, customEvent;
|
|
399
370
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
400
371
|
while (1) switch (_context2.prev = _context2.next) {
|
|
401
372
|
case 0:
|
|
@@ -423,35 +394,6 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
423
394
|
wasTaskDelete = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
|
|
424
395
|
return TASK_DELETE_TOOLS.includes(action.tool_name);
|
|
425
396
|
});
|
|
426
|
-
wasCreateAgentApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
|
|
427
|
-
return action.tool_name === 'create_agent';
|
|
428
|
-
});
|
|
429
|
-
wasConfigureAgentAccessApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
|
|
430
|
-
return (action.tool_name || '').toLowerCase() === 'configure_agent_access';
|
|
431
|
-
});
|
|
432
|
-
if (wasCreateAgentApproved && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim()) {
|
|
433
|
-
createAgentFollowUp = {
|
|
434
|
-
agentId: completedAgentId.trim()
|
|
435
|
-
};
|
|
436
|
-
} else if (wasConfigureAgentAccessApproved && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && (completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim() || extractAgentIdFromPendingActionsByToolName(pendingActions, 'configure_agent_access'))) {
|
|
437
|
-
configuredAgentId = (completedAgentId === null || completedAgentId === void 0 ? void 0 : completedAgentId.trim()) || extractAgentIdFromPendingActionsByToolName(pendingActions, 'configure_agent_access');
|
|
438
|
-
createAgentFollowUp = {
|
|
439
|
-
agentId: configuredAgentId
|
|
440
|
-
};
|
|
441
|
-
}
|
|
442
|
-
wasEditAgentApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
|
|
443
|
-
return (action.tool_name || '').toLowerCase() === 'edit_agent';
|
|
444
|
-
});
|
|
445
|
-
if (wasEditAgentApproved) {
|
|
446
|
-
fromStream = completedAgentId === null || completedAgentId === void 0 ? void 0 : completedAgentId.trim();
|
|
447
|
-
fromArgs = extractAgentIdFromEditAgentPendingActions(pendingActions);
|
|
448
|
-
resolvedAgentId = fromStream || fromArgs;
|
|
449
|
-
if (resolvedAgentId) {
|
|
450
|
-
editAgentFollowUp = {
|
|
451
|
-
agentId: resolvedAgentId
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
397
|
taskIdsFromUrls = matches.map(function (match) {
|
|
456
398
|
return parseInt(match[1], 10);
|
|
457
399
|
});
|
|
@@ -495,7 +437,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
495
437
|
}
|
|
496
438
|
}
|
|
497
439
|
case 3:
|
|
498
|
-
addMessage(
|
|
440
|
+
addMessage({
|
|
499
441
|
id: "answer-".concat(memorySessionId),
|
|
500
442
|
message: contentToAdd,
|
|
501
443
|
date: new Date(),
|
|
@@ -505,33 +447,8 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
505
447
|
},
|
|
506
448
|
role: ChatHistoryRole.ASSISTANT,
|
|
507
449
|
sources: sources,
|
|
508
|
-
memorySessionId: memorySessionId
|
|
509
|
-
|
|
510
|
-
}, createAgentFollowUp ? {
|
|
511
|
-
createAgentFollowUp: createAgentFollowUp
|
|
512
|
-
} : {}));
|
|
513
|
-
if ((_createAgentFollowUp = createAgentFollowUp) !== null && _createAgentFollowUp !== void 0 && _createAgentFollowUp.agentId) {
|
|
514
|
-
fetchAgentDetail(createAgentFollowUp.agentId).then(function (chatAgent) {
|
|
515
|
-
document.dispatchEvent(new CustomEvent('maia-merge-created-agent-into-list', {
|
|
516
|
-
detail: {
|
|
517
|
-
agent: chatAgent
|
|
518
|
-
}
|
|
519
|
-
}));
|
|
520
|
-
})["catch"](function (err) {
|
|
521
|
-
console.error('[useChatManager] No se pudo añadir el agente recién creado al listado', err);
|
|
522
|
-
});
|
|
523
|
-
}
|
|
524
|
-
if ((_editAgentFollowUp = editAgentFollowUp) !== null && _editAgentFollowUp !== void 0 && _editAgentFollowUp.agentId) {
|
|
525
|
-
fetchAgentDetail(editAgentFollowUp.agentId).then(function (chatAgent) {
|
|
526
|
-
document.dispatchEvent(new CustomEvent('maia-sync-edited-agent-from-chat', {
|
|
527
|
-
detail: {
|
|
528
|
-
agent: chatAgent
|
|
529
|
-
}
|
|
530
|
-
}));
|
|
531
|
-
})["catch"](function (err) {
|
|
532
|
-
console.error('[useChatManager] No se pudo refrescar el agente editado', err);
|
|
533
|
-
});
|
|
534
|
-
}
|
|
450
|
+
memorySessionId: memorySessionId
|
|
451
|
+
});
|
|
535
452
|
isProcessingRef.current = false;
|
|
536
453
|
if (firstTimeRef.current) {
|
|
537
454
|
customEvent = new CustomEvent('refetch-session');
|
|
@@ -544,8 +461,8 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
544
461
|
}
|
|
545
462
|
}, _callee2);
|
|
546
463
|
}));
|
|
547
|
-
return function (_x4, _x5, _x6
|
|
548
|
-
return
|
|
464
|
+
return function (_x4, _x5, _x6) {
|
|
465
|
+
return _ref5.apply(this, arguments);
|
|
549
466
|
};
|
|
550
467
|
}(), [addMessage, removeMessage, project, getTabTaskDefault]);
|
|
551
468
|
var handleStreamStop = useCallback(function () {
|
|
@@ -581,7 +498,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
581
498
|
},
|
|
582
499
|
role: ChatHistoryRole.ASSISTANT,
|
|
583
500
|
approval: approval,
|
|
584
|
-
approvalStatus: 'pending'
|
|
501
|
+
approvalStatus: approval.approval_status || 'pending'
|
|
585
502
|
});
|
|
586
503
|
isProcessingRef.current = false;
|
|
587
504
|
}, [addMessage, removeMessage]);
|
|
@@ -599,9 +516,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
599
516
|
stopStreaming = _useOrchestratorStrea.stopStreaming;
|
|
600
517
|
var currentProject = project;
|
|
601
518
|
var sendMessage = useCallback(/*#__PURE__*/function () {
|
|
602
|
-
var
|
|
519
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId) {
|
|
603
520
|
var _messagesRef$current, _project$client;
|
|
604
|
-
var _normalizeSendMessage, attachments, options, newMessageId, lastMessageWithProject, currentAgentFromMessages, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId,
|
|
521
|
+
var _normalizeSendMessage, attachments, options, newMessageId, lastMessageWithProject, currentAgentFromMessages, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId, payloadData;
|
|
605
522
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
606
523
|
while (1) switch (_context3.prev = _context3.next) {
|
|
607
524
|
case 0:
|
|
@@ -661,8 +578,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
661
578
|
case 2:
|
|
662
579
|
projects = _context3.sent;
|
|
663
580
|
payloadFaqId = faqId !== null && faqId !== void 0 ? faqId : options.faqId;
|
|
664
|
-
|
|
665
|
-
payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
581
|
+
payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
666
582
|
message: finalMessage,
|
|
667
583
|
history: history,
|
|
668
584
|
projectId: projectToRequest,
|
|
@@ -691,10 +607,6 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
691
607
|
attachments: attachments
|
|
692
608
|
} : {}), payloadFaqId ? {
|
|
693
609
|
faqId: payloadFaqId
|
|
694
|
-
} : {}), payloadAgentSuggestionId ? {
|
|
695
|
-
agentSuggestionId: payloadAgentSuggestionId
|
|
696
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
|
|
697
|
-
agentEntity: agent.entity
|
|
698
610
|
} : {});
|
|
699
611
|
askMaia(payloadData);
|
|
700
612
|
case 3:
|
|
@@ -703,8 +615,8 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
703
615
|
}
|
|
704
616
|
}, _callee3);
|
|
705
617
|
}));
|
|
706
|
-
return function (
|
|
707
|
-
return
|
|
618
|
+
return function (_x7, _x8, _x9) {
|
|
619
|
+
return _ref6.apply(this, arguments);
|
|
708
620
|
};
|
|
709
621
|
}(), [addMessage, event, askMaia, project, client, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
|
|
710
622
|
var changeProject = useCallback(function (option) {
|
|
@@ -719,7 +631,7 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
719
631
|
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
720
632
|
};
|
|
721
633
|
});
|
|
722
|
-
askMaia(
|
|
634
|
+
askMaia({
|
|
723
635
|
message: currentUserQuestion.current,
|
|
724
636
|
history: history,
|
|
725
637
|
projectId: option.id,
|
|
@@ -734,13 +646,11 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
734
646
|
agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
|
|
735
647
|
isWebSearchActive: isWebSearchActiveRef.current,
|
|
736
648
|
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
737
|
-
}
|
|
738
|
-
agentEntity: agent.entity
|
|
739
|
-
} : {}));
|
|
649
|
+
});
|
|
740
650
|
}
|
|
741
|
-
}, [project, setProject, askMaia, authUser, isWebSearchActive
|
|
651
|
+
}, [project, setProject, askMaia, authUser, isWebSearchActive]);
|
|
742
652
|
var handleFeedback = useCallback(/*#__PURE__*/function () {
|
|
743
|
-
var
|
|
653
|
+
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
|
|
744
654
|
var response;
|
|
745
655
|
return _regeneratorRuntime.wrap(function (_context4) {
|
|
746
656
|
while (1) switch (_context4.prev = _context4.next) {
|
|
@@ -765,12 +675,12 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
765
675
|
}
|
|
766
676
|
}, _callee4);
|
|
767
677
|
}));
|
|
768
|
-
return function (
|
|
769
|
-
return
|
|
678
|
+
return function (_x0, _x1) {
|
|
679
|
+
return _ref7.apply(this, arguments);
|
|
770
680
|
};
|
|
771
681
|
}(), []);
|
|
772
682
|
var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
|
|
773
|
-
var
|
|
683
|
+
var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadIds, decision, editedActions) {
|
|
774
684
|
var messageWithApproval, approval, messageId, loadingKey, existingMessage, newStatus, response, _t;
|
|
775
685
|
return _regeneratorRuntime.wrap(function (_context5) {
|
|
776
686
|
while (1) switch (_context5.prev = _context5.next) {
|
|
@@ -864,8 +774,8 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
864
774
|
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, displayMsg));
|
|
865
775
|
});
|
|
866
776
|
},
|
|
867
|
-
onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId
|
|
868
|
-
handleStreamFinish(finalContent, sources, memorySessionId
|
|
777
|
+
onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId) {
|
|
778
|
+
handleStreamFinish(finalContent, sources, memorySessionId);
|
|
869
779
|
setActiveLoadings(function (prev) {
|
|
870
780
|
var newLoadings = _objectSpread({}, prev);
|
|
871
781
|
delete newLoadings[currentThreadId];
|
|
@@ -909,12 +819,12 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
909
819
|
}
|
|
910
820
|
}, _callee5, null, [[3, 7]]);
|
|
911
821
|
}));
|
|
912
|
-
return function (
|
|
913
|
-
return
|
|
822
|
+
return function (_x10, _x11, _x12) {
|
|
823
|
+
return _ref8.apply(this, arguments);
|
|
914
824
|
};
|
|
915
825
|
}(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired]);
|
|
916
826
|
var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
917
|
-
var
|
|
827
|
+
var _project$client2, _project$client3, history;
|
|
918
828
|
return _regeneratorRuntime.wrap(function (_context6) {
|
|
919
829
|
while (1) switch (_context6.prev = _context6.next) {
|
|
920
830
|
case 0:
|
|
@@ -928,63 +838,48 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
928
838
|
_context6.next = 1;
|
|
929
839
|
return loadMessages();
|
|
930
840
|
case 1:
|
|
931
|
-
_context6.next =
|
|
841
|
+
_context6.next = 3;
|
|
932
842
|
break;
|
|
933
843
|
case 2:
|
|
934
|
-
if (
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
844
|
+
if (userInitialMessage) {
|
|
845
|
+
history = messagesRef.current.map(function (historyMessage) {
|
|
846
|
+
return {
|
|
847
|
+
content: historyMessage.message,
|
|
848
|
+
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
849
|
+
};
|
|
850
|
+
});
|
|
851
|
+
askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
852
|
+
message: userInitialMessage.message,
|
|
853
|
+
history: history,
|
|
854
|
+
projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
|
|
855
|
+
lang: authUser.lang,
|
|
856
|
+
userId: authUser.id.toString(),
|
|
857
|
+
firstName: authUser.firstName,
|
|
858
|
+
lastName: authUser.lastName,
|
|
859
|
+
companyId: authUser.company_id.toString(),
|
|
860
|
+
chatId: currentChatId.current,
|
|
861
|
+
messageId: currentMessageId.current,
|
|
862
|
+
agentName: agent === null || agent === void 0 ? void 0 : agent.name,
|
|
863
|
+
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
864
|
+
isWebSearchActive: isWebSearchActiveRef.current,
|
|
865
|
+
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
866
|
+
}, client !== null && client !== void 0 && client.id ? {
|
|
867
|
+
clientId: client.id
|
|
868
|
+
} : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
|
|
869
|
+
clientId: project.client.id
|
|
870
|
+
} : {}), project !== null && project !== void 0 && project.name ? {
|
|
871
|
+
projectName: project.name
|
|
872
|
+
} : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
|
|
873
|
+
clientName: project.client.name
|
|
874
|
+
} : client !== null && client !== void 0 && client.name ? {
|
|
875
|
+
clientName: client.name
|
|
876
|
+
} : {}), userInitialMessage.attachments ? {
|
|
877
|
+
attachments: userInitialMessage.attachments
|
|
878
|
+
} : {}), userInitialMessage.faqId ? {
|
|
879
|
+
faqId: userInitialMessage.faqId
|
|
880
|
+
} : {}));
|
|
944
881
|
}
|
|
945
|
-
return _context6.abrupt("return");
|
|
946
882
|
case 3:
|
|
947
|
-
history = messagesRef.current.map(function (historyMessage) {
|
|
948
|
-
return {
|
|
949
|
-
content: historyMessage.message,
|
|
950
|
-
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
951
|
-
};
|
|
952
|
-
});
|
|
953
|
-
askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
954
|
-
message: userInitialMessage.message,
|
|
955
|
-
history: history,
|
|
956
|
-
projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
|
|
957
|
-
lang: authUser.lang,
|
|
958
|
-
userId: authUser.id.toString(),
|
|
959
|
-
firstName: authUser.firstName,
|
|
960
|
-
lastName: authUser.lastName,
|
|
961
|
-
companyId: authUser.company_id.toString(),
|
|
962
|
-
chatId: currentChatId.current,
|
|
963
|
-
messageId: currentMessageId.current,
|
|
964
|
-
agentName: agent === null || agent === void 0 ? void 0 : agent.name,
|
|
965
|
-
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
966
|
-
isWebSearchActive: isWebSearchActiveRef.current,
|
|
967
|
-
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
968
|
-
}, client !== null && client !== void 0 && client.id ? {
|
|
969
|
-
clientId: client.id
|
|
970
|
-
} : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
|
|
971
|
-
clientId: project.client.id
|
|
972
|
-
} : {}), project !== null && project !== void 0 && project.name ? {
|
|
973
|
-
projectName: project.name
|
|
974
|
-
} : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
|
|
975
|
-
clientName: project.client.name
|
|
976
|
-
} : client !== null && client !== void 0 && client.name ? {
|
|
977
|
-
clientName: client.name
|
|
978
|
-
} : {}), userInitialMessage.attachments ? {
|
|
979
|
-
attachments: userInitialMessage.attachments
|
|
980
|
-
} : {}), userInitialMessage.faqId ? {
|
|
981
|
-
faqId: userInitialMessage.faqId
|
|
982
|
-
} : {}), userInitialMessage.agentSuggestionId ? {
|
|
983
|
-
agentSuggestionId: userInitialMessage.agentSuggestionId
|
|
984
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
|
|
985
|
-
agentEntity: agent.entity
|
|
986
|
-
} : {}));
|
|
987
|
-
case 4:
|
|
988
883
|
case "end":
|
|
989
884
|
return _context6.stop();
|
|
990
885
|
}
|
|
@@ -1022,4 +917,4 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1022
917
|
isDisabled: waitingResponse || loadingMessages
|
|
1023
918
|
};
|
|
1024
919
|
};
|
|
1025
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwiZm9yRWFjaCIsImFjdGlvbiIsIl90eXBlb2YiLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkIiwicmF3IiwidGFza19pZCIsImlkIiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiTnVtYmVyIiwiaXNOYU4iLCJwdXNoIiwibGlzdCIsInRhc2tfaWRzIiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJjb250ZW50Iiwib25Ub2tlbiIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjQiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwicCIsIl9mb3VuZCRjbGllbnQiLCJjbGllbnROYW1lIiwibGFzdE1zZ1dpdGhDbGllbnQiLCJjbGllbnRJZCIsIl9yZWY1IiwibXNnQ2xpZW50SWQiLCJtc2dDbGllbnROYW1lIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInRlbXBNZXNzYWdlSWQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNiIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2IiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiaW5jbHVkZXMiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJtYXAiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsIl9vYmplY3RTcHJlYWQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjciLCJfY2FsbGVlMyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDMiLCJwbUFpVHlwZWRUZXh0IiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwiaXNGaW5pdGUiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJfeDkiLCJfeDAiLCJfeDEiLCJfeDEwIiwiY2hhbmdlUHJvamVjdCIsIm9wdGlvbiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjgiLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTEiLCJfeDEyIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWY5IiwiX2NhbGxlZTUiLCJ0aHJlYWRJZHMiLCJkZWNpc2lvbiIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiZGlzcGxheU1zZyIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTMiLCJfeDE0IiwiX3gxNSIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsIl9jb250ZXh0NiIsIkJvb2xlYW4iLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChcbiAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBEZXRlY3RhciB0b2RhcyBsYXMgVVJMcyBkZSB0YXJlYXMgKC4uLi90YXNrcy8xMjMvZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG5cbiAgICAgIGxldCBjb250ZW50VG9BZGQgPSBjb250ZW50XG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICAgICAgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IFRBU0tfRURJVF9UT09MUyA9IFtcbiAgICAgICAgJ2VkaXRfdGFzaycsXG4gICAgICAgICdlZGl0X3Rhc2tzX2JhdGNoJyxcbiAgICAgICAgJ3Rhc2tfYXNzaWduJyxcbiAgICAgICAgJ3Rhc2tfdW5hc3NpZ24nLFxuICAgICAgICAndXBkYXRlX3Rhc2tfdHlwZScsXG4gICAgICAgICd1cGRhdGVfZXN0aW1hdGVkX2hvdXJzJyxcbiAgICAgICAgJ2Fzc2lnbl90YXNrX2xhYmVsJyxcbiAgICAgIF1cbiAgICAgIGNvbnN0IFRBU0tfREVMRVRFX1RPT0xTID0gWydkZWxldGVfdGFzaycsICdkZWxldGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgcGVuZGluZ0FjdGlvbnMgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgfHwgW11cbiAgICAgIGNvbnN0IHdhc1Rhc2tDcmVhdGlvbiA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfQ1JFQVRJT05fVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRWRpdCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tEZWxldGUgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0RFTEVURV9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IGFjdGlvbi50b29sX25hbWUgPT09ICdjcmVhdGVfYWdlbnQnKVxuICAgICAgY29uc3Qgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgIGxldCBjcmVhdGVBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkpIHtcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCAmJlxuICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJlxuICAgICAgICAoY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyZWRBZ2VudElkID1cbiAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHtcbiAgICAgICAgICBhZ2VudElkOiBjb25maWd1cmVkQWdlbnRJZCBhcyBzdHJpbmcsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FzRWRpdEFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG5cbiAgICAgIGxldCBlZGl0QWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0VkaXRBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGNvbnN0IGZyb21TdHJlYW0gPSBjb21wbGV0ZWRBZ2VudElkPy50cmltKClcbiAgICAgICAgY29uc3QgZnJvbUFyZ3MgPSBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRBZ2VudElkID0gZnJvbVN0cmVhbSB8fCBmcm9tQXJnc1xuICAgICAgICBpZiAocmVzb2x2ZWRBZ2VudElkKSB7XG4gICAgICAgICAgZWRpdEFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFza0lkc0Zyb21VcmxzID0gbWF0Y2hlcy5tYXAobWF0Y2ggPT4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSlcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwgPSBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0ID1cbiAgICAgICAgd2FzVGFza0RlbGV0ZSAmJiB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID09PSAwICYmIHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQoY29udGVudClcbiAgICAgICAgICA6IFtdXG4gICAgICBjb25zdCB0YXNrSWRzRm9yRGFzaGJvYXJkID1cbiAgICAgICAgdGFza0lkc0Zyb21VcmxzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRhc2tJZHNGcm9tVXJsc1xuICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWxcbiAgICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGlvblRleHRcblxuICAgICAgY29uc3Qgc2hvdWxkU3luY0Rhc2hib2FyZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgKHdhc1Rhc2tDcmVhdGlvbiB8fCB3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlKSAmJlxuICAgICAgICB0YXNrSWRzRm9yRGFzaGJvYXJkLmxlbmd0aCA+IDBcblxuICAgICAgaWYgKHNob3VsZFN5bmNEYXNoYm9hcmQpIHtcbiAgICAgICAgY29uc3QgdGFza0lkcyA9IHRhc2tJZHNGb3JEYXNoYm9hcmRcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KHRhc2tJZHNbMF0pXG4gICAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICAgIGNvbnRlbnRUb0FkZCA9IGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgICAgICAgICAgdXJsLnJlcGxhY2UoL1xcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSg/PSR8XFw/KS8sIHRhYlNlZ21lbnQpXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFByb2plY3RNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkUmF3ID0gcHJvamVjdD8uaWQgfHwgbGFzdFByb2plY3RNZXNzYWdlPy5wcm9qZWN0SWRcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IGNvbnRleHRQcm9qZWN0SWRSYXcgPyBwYXJzZUludChTdHJpbmcoY29udGV4dFByb2plY3RJZFJhdyksIDEwKSA6IG51bGxcbiAgICAgICAgY29uc3QgcGF0aE1hdGNoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvamVjdHNcXC8oXFxkKylcXC8vKVxuICAgICAgICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBpc09uUHJvamVjdFJvdXRlID0gY29udGV4dFByb2plY3RJZCAmJiByb3V0ZVByb2plY3RJZCAmJiBjb250ZXh0UHJvamVjdElkID09PSByb3V0ZVByb2plY3RJZFxuXG4gICAgICAgIGlmIChpc09uUHJvamVjdFJvdXRlKSB7XG4gICAgICAgICAgaWYgKHdhc1Rhc2tDcmVhdGlvbikge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tFZGl0KSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tEZWxldGUpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5kZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgIH0pXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBhc2tNYWlhLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgfSlcblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgcHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICAvLyBWZXJpZmljYXIgY29uc2lzdGVuY2lhIGVudHJlIGNvbnRleHRvIGdsb2JhbCB5IMO6bHRpbW8gbWVuc2FqZVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3Q/LmlkXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuXG4gICAgICBsZXQgcHJvamVjdFRvUmVxdWVzdDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgLy8gU2kgaGF5IMO6bHRpbW8gbWVuc2FqZSBjb24gcHJvamVjdElkLCB1c2FybG8gKG3DoXMgY29uZmlhYmxlKVxuICAgICAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gICAgICB9XG4gICAgICAvLyBTaSBubyBoYXkgw7psdGltbyBtZW5zYWplLCB1c2FyIGVsIGNvbnRleHRvIGdsb2JhbFxuICAgICAgZWxzZSBpZiAoY29udGV4dFByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBjb250ZXh0UHJvamVjdElkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCwgLi4uKGNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQsIC4uLihwcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgYWxndW5vIGRlIGVzdG9zIHRocmVhZElkcyBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIC8vIFVzZSBmaXJzdCB0aHJlYWRJZCBhcyB0aGUgbG9hZGluZyBrZXlcbiAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB0aHJlYWRJZHNbMF1cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZ1xuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbbG9hZGluZ0tleV06IHQoJ2NoYXQucHJvY2Vzc2luZycpLFxuICAgICAgfSkpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkcywgLy8gU2VuZCBhbGwgYWN0aW9uIHRocmVhZF9pZHMgYXQgb25jZVxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgPyBtZXNzYWdlIDogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudFRocmVhZElkXTogZGlzcGxheU1zZyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Db21wbGV0ZTogKFxuICAgICAgICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICAgICAgICBzb3VyY2VzOiBhbnksXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBzdWdnZXN0aW9ucywgYWdlbnRJZClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIE5ldyBISVRMIGludGVycnVwdGlvbiBkZXRlY3RlZCBhZnRlciByZXN1bWUgKGNoYWluZWQgYWN0aW9ucylcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoYXBwcm92YWxQYXlsb2FkIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKGVycm9yOiBhbnksIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZXJyb3IpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLCBhZ2VudCwgYWRkTWVzc2FnZSwgaGFuZGxlU3RyZWFtRXJyb3IsIGhhbmRsZVN0cmVhbVVwZGF0ZSwgaGFuZGxlU3RyZWFtRmluaXNoLCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSlcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxBdHRhY2htZW50cyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRmFxID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkIHx8IG51bGwsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCB9IDogcHJvamVjdD8uY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5jbGllbnQ/Lm5hbWVcbiAgICAgICAgICA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9XG4gICAgICAgICAgOiBjbGllbnQ/Lm5hbWVcbiAgICAgICAgICAgID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtzdG9wU3RyZWFtaW5nXSlcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBjdXJyZW50UHJvamVjdCxcbiAgICBjdXJyZW50Q2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudE1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGlu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
|
|
920
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwicGVuZGluZ0FjdGlvbnMiLCJpZHMiLCJmb3JFYWNoIiwiYWN0aW9uIiwiX3R5cGVvZiIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQiLCJyYXciLCJ0YXNrX2lkIiwiaWQiLCJuIiwicGFyc2VJbnQiLCJTdHJpbmciLCJOdW1iZXIiLCJpc05hTiIsInB1c2giLCJsaXN0IiwidGFza19pZHMiLCJ0aWQiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsIm5hbWUiLCJmaXJzdE5hbWUiLCJhdmF0YXIiLCJwaWN0dXJlIiwiY3VycmVudCIsInBhcnNlU1NFTGluZSIsImxpbmUiLCJ0cmltIiwiX2xpbmUkc3BsaXQiLCJzcGxpdCIsIl9saW5lJHNwbGl0MiIsIl9zbGljZWRUb0FycmF5IiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJyZXBsYWNlIiwiZGF0YVN0ciIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJwYXJzZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwicHJvY2Vzc1NTRVN0cmVhbSIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJjb250ZW50Iiwib25Ub2tlbiIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJvbkNvbXBsZXRlIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYyIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYyJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjMiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwiZmluZCIsInAiLCJfZm91bmQkY2xpZW50IiwiY2xpZW50TmFtZSIsImxhc3RNc2dXaXRoQ2xpZW50IiwiY2xpZW50SWQiLCJfcmVmNCIsIm1zZ0NsaWVudElkIiwibXNnQ2xpZW50TmFtZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiaXNFcnJvciIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJoYW5kbGVTdHJlYW1VcGRhdGUiLCJ0ZW1wTWVzc2FnZUlkIiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjUiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsInRhc2tVcmxSZWdleCIsIm1hdGNoZXMiLCJjb250ZW50VG9BZGQiLCJwcmV2aW91c01lc3NhZ2UiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwiVEFTS19DUkVBVElPTl9UT09MUyIsIlRBU0tfRURJVF9UT09MUyIsIlRBU0tfREVMRVRFX1RPT0xTIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwidGFza0lkc0Zyb21VcmxzIiwidGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCIsInRhc2tJZHNGcm9tRGVsZXRpb25UZXh0IiwidGFza0lkc0ZvckRhc2hib2FyZCIsInNob3VsZFN5bmNEYXNoYm9hcmQiLCJ0YXNrSWRzIiwidGFiIiwidGFiU2VnbWVudCIsImxhc3RQcm9qZWN0TWVzc2FnZSIsImNvbnRleHRQcm9qZWN0SWRSYXciLCJjb250ZXh0UHJvamVjdElkIiwicGF0aE1hdGNoIiwicm91dGVQcm9qZWN0SWQiLCJpc09uUHJvamVjdFJvdXRlIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMiIsIl93aW5kb3ckbmV3UHJvamVjdERhczMiLCJfd2luZG93JG5ld1Byb2plY3REYXM0IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNSIsIl93aW5kb3ckbmV3UHJvamVjdERhczYiLCJfY29udGV4dDIiLCJSZWdFeHAiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYXRjaEFsbCIsIm0iLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNvbWUiLCJpbmNsdWRlcyIsIm1hcCIsInVybCIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJuZXdQcm9qZWN0RGFzaGJvYXJkIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJlZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQiLCJkZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkIiwiX3g0IiwiX3g1IiwiX3g2IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsImFwcHJvdmFsU3RhdHVzIiwiYXBwcm92YWxfc3RhdHVzIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjYiLCJfY2FsbGVlMyIsImZhcUlkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsImFnZW50SWQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJpc0Zpbml0ZSIsIl9vYmplY3RTcHJlYWQiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiX3g3IiwiX3g4IiwiX3g5IiwiY2hhbmdlUHJvamVjdCIsIm9wdGlvbiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjciLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MCIsIl94MSIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU1IiwidGhyZWFkSWRzIiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImxvYWRpbmdLZXkiLCJleGlzdGluZ01lc3NhZ2UiLCJuZXdTdGF0dXMiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwidGhyZWFkX2lkIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJuZXdMb2FkaW5ncyIsImN1cnJlbnRUaHJlYWRJZCIsImRpc3BsYXlNc2ciLCJhcHByb3ZhbFBheWxvYWQiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU2IiwiX3Byb2plY3QkY2xpZW50MiIsIl9wcm9qZWN0JGNsaWVudDMiLCJfY29udGV4dDYiLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChmaW5hbENvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdhcHByb3ZhbF9yZXF1aXJlZCcpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihldmVudERhdGEsIGFjY3VtdWxhdGVkQ29udGVudCwgdGhyZWFkSWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50RGF0YS5lcnJvciwgdGhyZWFkSWQpXG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKCFpc1N0cmVhbUNvbXBsZXRlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIGlzU3RyZWFtQ29tcGxldGUgPSB0cnVlXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaGFuZGxlTGluZShsaW5lc1tpXSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgYWdlbnQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICBjb25zdCB7IGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgbG9hZE1lc3NhZ2VzLCBhZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBoYW5kbGVTY3JvbGwgfSA9XG4gICAgdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBhZ2VudHMsXG4gICAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjaGF0LWxvYWRpbmctbWVzc2FnZXMtY2hhbmdlZCcsIHtcbiAgICAgIGRldGFpbDogeyBsb2FkaW5nTWVzc2FnZXMgfSxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG5cbiAgICAgIGxvYWRNZXNzYWdlcygpXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIGxvYWRNZXNzYWdlc10pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2hpcHNQcm9qZWN0IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIHByb2plY3RJZCBwZXJvIGNoaXBzUHJvamVjdCBubyBzZSBoYSBzZXRlYWRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNoaXBzUHJvamVjdCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoUHJvamVjdCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgY29uc3QgeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lIH0gPSBsYXN0TXNnV2l0aFByb2plY3QgfHwge31cbiAgICBpZiAoIXByb2plY3RJZCkgcmV0dXJuXG5cbiAgICBmZXRjaFByb2plY3RzKHByb2plY3RJZCkudGhlbihwcm9qZWN0cyA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSBOdW1iZXIocHJvamVjdElkKSlcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lOiBmb3VuZC5uYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGZvdW5kLmNsaWVudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhmb3VuZC5pZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoZm91bmQpXG4gICAgICB9IGVsc2UgaWYgKHByb2plY3ROYW1lKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdCh7IGlkOiBOdW1iZXIocHJvamVjdElkKSwgbmFtZTogcHJvamVjdE5hbWUgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbbWVzc2FnZXMsIGNoaXBzUHJvamVjdCwgbG9hZGluZ01lc3NhZ2VzLCBmZXRjaFByb2plY3RzLCBzZXRDaGlwc1Byb2plY3QsIHNldFByb2plY3RdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNsaWVudCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBjbGllbnRJZCBwZXJvIGNsaWVudCBubyBzZSBoYSBzZXRlYWRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNsaWVudCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoQ2xpZW50ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cuY2xpZW50SWQgIT0gbnVsbCAmJiBtc2cuY2xpZW50TmFtZSkuYXQoLTEpXG4gICAgY29uc3QgeyBjbGllbnRJZDogbXNnQ2xpZW50SWQsIGNsaWVudE5hbWU6IG1zZ0NsaWVudE5hbWUgfSA9IGxhc3RNc2dXaXRoQ2xpZW50IHx8IHt9XG4gICAgaWYgKG1zZ0NsaWVudElkID09IG51bGwgfHwgIW1zZ0NsaWVudE5hbWUpIHJldHVyblxuXG4gICAgc2V0Q2xpZW50Py4oeyBpZDogTnVtYmVyKG1zZ0NsaWVudElkKSwgbmFtZTogbXNnQ2xpZW50TmFtZSB9KVxuICB9LCBbbWVzc2FnZXMsIGNsaWVudCwgbG9hZGluZ01lc3NhZ2VzLCBzZXRDbGllbnRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGVycm9yTWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JBY2Nlc3NEZW5pZWQnKVxuICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG5cbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUZpbmlzaCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChjb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgVEFTS19FRElUX1RPT0xTID0gW1xuICAgICAgICAnZWRpdF90YXNrJyxcbiAgICAgICAgJ2VkaXRfdGFza3NfYmF0Y2gnLFxuICAgICAgICAndGFza19hc3NpZ24nLFxuICAgICAgICAndGFza191bmFzc2lnbicsXG4gICAgICAgICd1cGRhdGVfdGFza190eXBlJyxcbiAgICAgICAgJ3VwZGF0ZV9lc3RpbWF0ZWRfaG91cnMnLFxuICAgICAgICAnYXNzaWduX3Rhc2tfbGFiZWwnLFxuICAgICAgXVxuICAgICAgY29uc3QgVEFTS19ERUxFVEVfVE9PTFMgPSBbJ2RlbGV0ZV90YXNrJywgJ2RlbGV0ZV90YXNrc19iYXRjaCddXG4gICAgICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyB8fCBbXVxuICAgICAgY29uc3Qgd2FzVGFza0NyZWF0aW9uID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19DUkVBVElPTl9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tFZGl0ID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0RlbGV0ZSA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6IGFwcHJvdmFsLmFwcHJvdmFsX3N0YXR1cyB8fCAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsIGZhcUlkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGFsZ3VubyBkZSBlc3RvcyB0aHJlYWRJZHMgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICAvLyBVc2UgZmlyc3QgdGhyZWFkSWQgYXMgdGhlIGxvYWRpbmcga2V5XG4gICAgICBjb25zdCBsb2FkaW5nS2V5ID0gdGhyZWFkSWRzWzBdXG5cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZ1xuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbbG9hZGluZ0tleV06IHQoJ2NoYXQucHJvY2Vzc2luZycpLFxuICAgICAgfSkpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkcywgLy8gU2VuZCBhbGwgYWN0aW9uIHRocmVhZF9pZHMgYXQgb25jZVxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgPyBtZXNzYWdlIDogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudFRocmVhZElkXTogZGlzcGxheU1zZyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Db21wbGV0ZTogKGZpbmFsQ29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gTmV3IEhJVEwgaW50ZXJydXB0aW9uIGRldGVjdGVkIGFmdGVyIHJlc3VtZSAoY2hhaW5lZCBhY3Rpb25zKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChhcHByb3ZhbFBheWxvYWQgYXMgQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYXV0aFVzZXIsIGFnZW50LCBhZGRNZXNzYWdlLCBoYW5kbGVTdHJlYW1FcnJvciwgaGFuZGxlU3RyZWFtVXBkYXRlLCBoYW5kbGVTdHJlYW1GaW5pc2gsIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCB8fCBudWxsLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBjbGllbnQuaWQgfSA6IHByb2plY3Q/LmNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8uY2xpZW50Py5uYW1lXG4gICAgICAgICAgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfVxuICAgICAgICAgIDogY2xpZW50Py5uYW1lXG4gICAgICAgICAgICA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtzdG9wU3RyZWFtaW5nXSlcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBjdXJyZW50UHJvamVjdCxcbiAgICBjdXJyZW50Q2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudE1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMv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
|