@projectcor/maia-components 2.11.32-0 → 2.11.32-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/FeedbackButton/FeedbackButton.styles.js +2 -2
- package/lib/components/atoms/icons/ChatConversation.js +40 -0
- package/lib/components/atoms/icons/index.js +2 -2
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +41 -10
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -4
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +16 -3
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +165 -178
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +347 -253
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +15 -28
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +16 -81
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +2 -17
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +10 -9
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +37 -6
- package/lib/components/molecules/Sidebar/Sidebar.js +269 -323
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +17 -22
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +54 -37
- package/lib/components/molecules/Sidebar/SidebarChats.styles.js +73 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSection.js +69 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +150 -0
- package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +238 -0
- package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +70 -0
- package/lib/components/molecules/Sidebar/sidebarChats.types.js +14 -0
- package/lib/dev/Providers.js +2 -2
- package/lib/dev/fixtures/devUser.js +173 -0
- package/lib/dev/fixtures/mockedUser.js +169 -0
- package/lib/hooks/useChatManager/useChatManager.js +59 -103
- package/lib/hooks/useChats/useChats.js +12 -4
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +70 -139
- package/lib/lang/br/index.js +11 -6
- package/lib/lang/en/index.js +11 -6
- package/lib/lang/es/index.js +11 -6
- package/lib/lang/fr/index.js +11 -6
- package/lib/services/maia/Chats/getChatMessagesV2.js +114 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +14 -8
- package/lib/services/maia/Chats/getSessionByAgent.js +66 -0
- package/lib/services/maia/Chats/getSessionsGroupedV2.js +70 -0
- package/lib/services/maia/Chats/index.js +7 -1
- package/lib/services/maia/client.js +44 -9
- package/lib/store/chatsStore.types.js +10 -2
- package/lib/store/useChatsStore.js +75 -37
- package/lib/types/Chat.js +3 -1
- package/package.json +1 -1
- package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +0 -33
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +0 -12
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +0 -13
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +0 -3
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +0 -57
- package/lib/components/molecules/ChatAIModal/layout.js +0 -35
- package/lib/hooks/useSmoothStreamText/index.js +0 -2
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +0 -189
- package/lib/hooks/useStreamingMessage/index.js +0 -3
- package/lib/hooks/useStreamingMessage/streamingStore.js +0 -69
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +0 -22
- package/lib/mocks/mockChats.js +0 -395
- package/lib/mocks/mockedUser.js +0 -169
|
@@ -14,7 +14,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
14
14
|
/* eslint-disable react/function-component-definition */
|
|
15
15
|
/* eslint-disable react/require-default-props */
|
|
16
16
|
/* eslint-disable no-console */
|
|
17
|
-
import { useCallback, useMemo, useState, useRef, useEffect
|
|
17
|
+
import { useCallback, useMemo, useState, useRef, useEffect } from 'react';
|
|
18
18
|
import ReactDOM from 'react-dom';
|
|
19
19
|
import moment from 'moment';
|
|
20
20
|
import { useTranslation } from 'react-i18next';
|
|
@@ -31,14 +31,13 @@ import { ProjectSummaryContent } from '../ProjectSummaryContent';
|
|
|
31
31
|
import { AbmAgentModal } from '../../organisms/AbmAgentModal/AbmAgentModal';
|
|
32
32
|
import { SECTIONS } from '../../../constants/config';
|
|
33
33
|
import { SCCAIMContent, SCCAIMContentWrapper, SCCAIMWrapper } from './ChatAIModal.styles';
|
|
34
|
-
import { getMaiaFloatingPanelWidthPx } from './layout';
|
|
35
|
-
import { FloatingPanelMotion, useFloatingPanelDragTilt } from './floatingPanelMotion';
|
|
36
34
|
import { ChatAiModalFooter } from './components/ChatAiModalFooter';
|
|
37
35
|
import { validateIsMaia } from '../../../services/utils/validateIsMaia';
|
|
38
36
|
import { useFaqsStore } from '../../../store/useFaqsStore';
|
|
39
37
|
import { fetchMaia } from '../../../services/maia/client';
|
|
38
|
+
import { getSessionByAgent } from '../../../services/maia/Chats/getSessionByAgent';
|
|
40
39
|
import { mapCORLang } from '../../../lang/utils';
|
|
41
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
40
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
42
41
|
export var ID_MODAL_CHAT_AGENT = 'modals-portal-maia-chat-agent';
|
|
43
42
|
var validateAccessByFeature = function validateAccessByFeature(section) {
|
|
44
43
|
if (section === 'header' && (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS || window.MAIA_CHAT_AI_FEATURE_ACCESS)) {
|
|
@@ -74,41 +73,56 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
74
73
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
75
74
|
newChatKey = _useState6[0],
|
|
76
75
|
setNewChatKey = _useState6[1];
|
|
76
|
+
/**
|
|
77
|
+
* Sesión existente "preparada" para el agente/entity actual detectada por
|
|
78
|
+
* `resolveAgentChat` o por click en el sidebar sobre un chat clone.
|
|
79
|
+
*
|
|
80
|
+
* Mientras exista, el usuario ve la home (no entra al chat). Al enviar un
|
|
81
|
+
* mensaje o tocar una FAQ, `handleSendMessage` usa este id como chatId para
|
|
82
|
+
* continuar la conversación existente en vez de crear una nueva.
|
|
83
|
+
*
|
|
84
|
+
* Solo aplica a agentes `clone` (tanto los que requieren entity como los
|
|
85
|
+
* clone+global). Para agentes `custom` se mantiene el flujo directo a chat.
|
|
86
|
+
*/
|
|
77
87
|
var _useState7 = useState(null),
|
|
78
88
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
pendingSessionId = _useState8[0],
|
|
90
|
+
setPendingSessionId = _useState8[1];
|
|
81
91
|
var _useState9 = useState(null),
|
|
82
92
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
var _useState1 = useState(
|
|
93
|
+
sendMessageFunction = _useState0[0],
|
|
94
|
+
setSendMessageFunction = _useState0[1];
|
|
95
|
+
var _useState1 = useState(null),
|
|
86
96
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
stopGenerationFunction = _useState10[0],
|
|
98
|
+
setStopGenerationFunction = _useState10[1];
|
|
89
99
|
var _useState11 = useState(false),
|
|
90
100
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
91
|
-
|
|
92
|
-
|
|
101
|
+
isStreaming = _useState12[0],
|
|
102
|
+
setIsStreaming = _useState12[1];
|
|
93
103
|
var _useState13 = useState(false),
|
|
94
104
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
var _useState15 = useState(
|
|
105
|
+
isWriting = _useState14[0],
|
|
106
|
+
setIsWriting = _useState14[1];
|
|
107
|
+
var _useState15 = useState(false),
|
|
98
108
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
var _useState17 = useState(
|
|
109
|
+
refetchChats = _useState16[0],
|
|
110
|
+
setRefetchChats = _useState16[1];
|
|
111
|
+
var _useState17 = useState(options.home),
|
|
102
112
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
103
|
-
|
|
104
|
-
|
|
113
|
+
currentOption = _useState18[0],
|
|
114
|
+
setCurrentOption = _useState18[1];
|
|
115
|
+
var _useState19 = useState(false),
|
|
116
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
117
|
+
hasError = _useState20[0],
|
|
118
|
+
setHasError = _useState20[1];
|
|
105
119
|
var handlers = useMemo(function () {
|
|
106
120
|
return buildHandlers(setCurrentOption, setHasError);
|
|
107
121
|
}, []);
|
|
108
|
-
var
|
|
109
|
-
|
|
110
|
-
sidebarHasError =
|
|
111
|
-
setSidebarHasError =
|
|
122
|
+
var _useState21 = useState(false),
|
|
123
|
+
_useState22 = _slicedToArray(_useState21, 2),
|
|
124
|
+
sidebarHasError = _useState22[0],
|
|
125
|
+
setSidebarHasError = _useState22[1];
|
|
112
126
|
var resetSelectedChatRef = useRef(null);
|
|
113
127
|
var lang = i18n.language === 'br' ? 'pt-br' : i18n.language;
|
|
114
128
|
moment.locale(lang);
|
|
@@ -183,125 +197,28 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
183
197
|
*/
|
|
184
198
|
|
|
185
199
|
var agentsFetchedRef = useRef(false);
|
|
200
|
+
/**
|
|
201
|
+
* Guard contra race: si el usuario cambia de agente/entity antes de que termine
|
|
202
|
+
* una resolución previa, descartamos la respuesta vieja para no navegar a una
|
|
203
|
+
* conversación que ya no corresponde con la selección actual.
|
|
204
|
+
*/
|
|
205
|
+
var resolveRequestRef = useRef(0);
|
|
186
206
|
var selector = document.querySelector("#".concat(ID_MODAL_CHAT_AGENT));
|
|
187
|
-
var
|
|
188
|
-
_useState22 = _slicedToArray(_useState21, 2),
|
|
189
|
-
layoutMode = _useState22[0],
|
|
190
|
-
setLayoutMode = _useState22[1];
|
|
191
|
-
var expanded = layoutMode === 'fullscreen';
|
|
192
|
-
var isFloating = layoutMode === 'floating';
|
|
193
|
-
var contentWrapperRef = useRef(null);
|
|
194
|
-
var _useState23 = useState(null),
|
|
207
|
+
var _useState23 = useState(false),
|
|
195
208
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
var _useFloatingPanelDrag = useFloatingPanelDragTilt(isFloating),
|
|
199
|
-
tiltMotion = _useFloatingPanelDrag.tiltMotion,
|
|
200
|
-
startPointerTracking = _useFloatingPanelDrag.startPointerTracking,
|
|
201
|
-
samplePointerMove = _useFloatingPanelDrag.samplePointerMove,
|
|
202
|
-
endPointerTracking = _useFloatingPanelDrag.endPointerTracking;
|
|
203
|
-
var dragStateRef = useRef(null);
|
|
204
|
-
var clampDragPosition = useCallback(function (x, y) {
|
|
205
|
-
var contentWrapper = contentWrapperRef.current;
|
|
206
|
-
if (!contentWrapper) {
|
|
207
|
-
return {
|
|
208
|
-
x: x,
|
|
209
|
-
y: y
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
var _contentWrapper$getBo = contentWrapper.getBoundingClientRect(),
|
|
213
|
-
width = _contentWrapper$getBo.width,
|
|
214
|
-
height = _contentWrapper$getBo.height;
|
|
215
|
-
var offset = 16;
|
|
216
|
-
var maxX = Math.max(offset, window.innerWidth - width - offset);
|
|
217
|
-
var maxY = Math.max(offset, window.innerHeight - height - offset);
|
|
218
|
-
return {
|
|
219
|
-
x: Math.min(Math.max(x, offset), maxX),
|
|
220
|
-
y: Math.min(Math.max(y, offset), maxY)
|
|
221
|
-
};
|
|
222
|
-
}, []);
|
|
223
|
-
useLayoutEffect(function () {
|
|
224
|
-
if (layoutMode !== 'floating') {
|
|
225
|
-
setDragPosition(null);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
setDragPosition(function (prev) {
|
|
229
|
-
if (prev) {
|
|
230
|
-
return clampDragPosition(prev.x, prev.y);
|
|
231
|
-
}
|
|
232
|
-
var pad = 16;
|
|
233
|
-
var x = window.innerWidth - getMaiaFloatingPanelWidthPx() - pad;
|
|
234
|
-
return clampDragPosition(x, pad);
|
|
235
|
-
});
|
|
236
|
-
}, [layoutMode, clampDragPosition]);
|
|
237
|
-
var handleDragEnd = useCallback(function (event) {
|
|
238
|
-
var _dragStateRef$current;
|
|
239
|
-
endPointerTracking();
|
|
240
|
-
if (((_dragStateRef$current = dragStateRef.current) === null || _dragStateRef$current === void 0 ? void 0 : _dragStateRef$current.pointerId) !== event.pointerId) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
dragStateRef.current = null;
|
|
244
|
-
document.body.style.userSelect = '';
|
|
245
|
-
document.body.style.cursor = '';
|
|
246
|
-
}, [endPointerTracking]);
|
|
247
|
-
var handleDragMove = useCallback(function (event) {
|
|
248
|
-
var dragState = dragStateRef.current;
|
|
249
|
-
if (!dragState || dragState.pointerId !== event.pointerId) {
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
samplePointerMove(event.clientX, event.clientY);
|
|
253
|
-
var nextPosition = clampDragPosition(event.clientX - dragState.offsetX, event.clientY - dragState.offsetY);
|
|
254
|
-
setDragPosition(function (prev) {
|
|
255
|
-
if (prev && prev.x === nextPosition.x && prev.y === nextPosition.y) {
|
|
256
|
-
return prev;
|
|
257
|
-
}
|
|
258
|
-
return nextPosition;
|
|
259
|
-
});
|
|
260
|
-
}, [clampDragPosition, samplePointerMove]);
|
|
261
|
-
var resolvedDragPosition = useMemo(function () {
|
|
262
|
-
if (layoutMode !== 'floating') {
|
|
263
|
-
return dragPosition;
|
|
264
|
-
}
|
|
265
|
-
if (dragPosition) {
|
|
266
|
-
return dragPosition;
|
|
267
|
-
}
|
|
268
|
-
var pad = 16;
|
|
269
|
-
var x = typeof window !== 'undefined' ? window.innerWidth - getMaiaFloatingPanelWidthPx() - pad : pad;
|
|
270
|
-
return clampDragPosition(x, pad);
|
|
271
|
-
}, [layoutMode, dragPosition, clampDragPosition]);
|
|
272
|
-
var handleDragStart = useCallback(function (event) {
|
|
273
|
-
if (!isFloating || event.button !== 0) {
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
var target = event.target;
|
|
277
|
-
if (target.closest('button, a, input, textarea, select, [role="button"], [data-no-drag="true"]')) {
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
var contentWrapper = contentWrapperRef.current;
|
|
281
|
-
if (!contentWrapper) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
var rect = contentWrapper.getBoundingClientRect();
|
|
285
|
-
var initialPosition = resolvedDragPosition !== null && resolvedDragPosition !== void 0 ? resolvedDragPosition : clampDragPosition(rect.left, rect.top);
|
|
286
|
-
var pointerOffsetX = event.clientX - initialPosition.x;
|
|
287
|
-
var pointerOffsetY = event.clientY - initialPosition.y;
|
|
288
|
-
setDragPosition(initialPosition);
|
|
289
|
-
dragStateRef.current = {
|
|
290
|
-
pointerId: event.pointerId,
|
|
291
|
-
offsetX: pointerOffsetX,
|
|
292
|
-
offsetY: pointerOffsetY
|
|
293
|
-
};
|
|
294
|
-
event.currentTarget.setPointerCapture(event.pointerId);
|
|
295
|
-
event.preventDefault();
|
|
296
|
-
document.body.style.userSelect = 'none';
|
|
297
|
-
document.body.style.cursor = 'grabbing';
|
|
298
|
-
startPointerTracking(event.clientX, event.clientY);
|
|
299
|
-
}, [clampDragPosition, isFloating, resolvedDragPosition, startPointerTracking]);
|
|
209
|
+
expanded = _useState24[0],
|
|
210
|
+
setExpanded = _useState24[1];
|
|
300
211
|
var startChat = useCallback(function (message, attachments, faqId, agentSuggestionId) {
|
|
301
212
|
if (sidebarHasError) {
|
|
302
213
|
setSidebarHasError(false);
|
|
303
214
|
}
|
|
304
|
-
|
|
215
|
+
// Si había una sesión preparada (agente clone + entity), continuamos esa
|
|
216
|
+
// conversación: pasamos su sessionExternalId como initialChatId para que
|
|
217
|
+
// `ChatAIMessages` cargue el histórico y despache el userInitialMessage
|
|
218
|
+
// dentro de esa misma sesión en vez de crear una nueva.
|
|
219
|
+
var resumeSessionId = pendingSessionId;
|
|
220
|
+
setPendingSessionId(null);
|
|
221
|
+
setInitialChatId(resumeSessionId);
|
|
305
222
|
setNewChatKey(function (prev) {
|
|
306
223
|
return prev + 1;
|
|
307
224
|
});
|
|
@@ -314,23 +231,151 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
314
231
|
agentSuggestionId: agentSuggestionId
|
|
315
232
|
} : {}));
|
|
316
233
|
handlers.chat();
|
|
317
|
-
}, [handlers, sidebarHasError]);
|
|
318
|
-
|
|
234
|
+
}, [handlers, sidebarHasError, pendingSessionId]);
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Deja al usuario en home con una sesión existente "preparada". Al enviar
|
|
238
|
+
* mensaje o tocar una FAQ se continuará esa conversación (ver `startChat`).
|
|
239
|
+
*
|
|
240
|
+
* Se usa para agentes clone (header/selector/sidebar). Para custom seguimos
|
|
241
|
+
* entrando directo al chat con `goToChat`. No setea project/client: el
|
|
242
|
+
* caller ya dejó el contexto global en el estado correcto (selector de
|
|
243
|
+
* proyecto/cliente, sidebar con data completa, etc).
|
|
244
|
+
*/
|
|
245
|
+
var stageExistingSession = useCallback(function (chat) {
|
|
246
|
+
var _chat$sessionExternal;
|
|
319
247
|
setUserInitialMessage({
|
|
320
248
|
message: '',
|
|
321
249
|
attachments: []
|
|
322
250
|
});
|
|
323
|
-
setInitialChatId(
|
|
251
|
+
setInitialChatId(null);
|
|
252
|
+
setPendingSessionId((_chat$sessionExternal = chat === null || chat === void 0 ? void 0 : chat.sessionExternalId) !== null && _chat$sessionExternal !== void 0 ? _chat$sessionExternal : null);
|
|
253
|
+
setHasError(false);
|
|
254
|
+
setCurrentOption(options.home);
|
|
255
|
+
document.dispatchEvent(new CustomEvent('chat-session-changed'));
|
|
256
|
+
}, []);
|
|
257
|
+
var goToChat = useCallback(function (chat) {
|
|
324
258
|
var selectedAgent = agents.data.find(function (agentItem) {
|
|
325
259
|
return agentItem.id === chat.agentId;
|
|
326
260
|
});
|
|
327
261
|
if (selectedAgent) {
|
|
328
262
|
selectAgent(selectedAgent);
|
|
329
263
|
}
|
|
330
|
-
|
|
264
|
+
|
|
265
|
+
// Agentes clone: pasar por home con sesión preparada. El mensaje/FAQ que
|
|
266
|
+
// el usuario escriba continuará esta conversación.
|
|
267
|
+
if ((chat === null || chat === void 0 ? void 0 : chat.agentType) === 'clone') {
|
|
268
|
+
// Setear project/client desde la data del chat (sidebar) para que el
|
|
269
|
+
// home se muestre con el contexto correcto y `askMaia` luego tenga
|
|
270
|
+
// projectId/clientId disponibles.
|
|
271
|
+
if ((chat === null || chat === void 0 ? void 0 : chat.projectId) != null) {
|
|
272
|
+
setProject({
|
|
273
|
+
id: Number(chat.projectId),
|
|
274
|
+
name: chat.projectName || ''
|
|
275
|
+
});
|
|
276
|
+
} else {
|
|
277
|
+
setProject(null);
|
|
278
|
+
}
|
|
279
|
+
if (setClient) {
|
|
280
|
+
if ((chat === null || chat === void 0 ? void 0 : chat.clientId) != null) {
|
|
281
|
+
setClient({
|
|
282
|
+
id: Number(chat.clientId),
|
|
283
|
+
name: chat.clientName || ''
|
|
284
|
+
});
|
|
285
|
+
} else {
|
|
286
|
+
setClient(null);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
stageExistingSession(chat);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
setUserInitialMessage({
|
|
293
|
+
message: '',
|
|
294
|
+
attachments: []
|
|
295
|
+
});
|
|
296
|
+
setPendingSessionId(null);
|
|
297
|
+
setInitialChatId(chat.sessionExternalId);
|
|
331
298
|
document.dispatchEvent(new CustomEvent('chat-session-changed'));
|
|
332
299
|
handlers.chat();
|
|
333
|
-
}, [handlers, agents, selectAgent]);
|
|
300
|
+
}, [handlers, agents, selectAgent, stageExistingSession, setProject, setClient]);
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Resolución v2 `GET /v2/sessions/agent/{agent_id}[/{entity_id}]`.
|
|
304
|
+
*
|
|
305
|
+
* Si el usuario ya tenía una conversación para esa combinación agent+entity,
|
|
306
|
+
* navegamos a ella (`goToChat`). Si no (o si falla la red) devolvemos `false`
|
|
307
|
+
* y el caller decide el fallback (quedarse en home/selector actual).
|
|
308
|
+
*
|
|
309
|
+
* Puntos de ejecución:
|
|
310
|
+
* - Al seleccionar un agente en el header (custom o clone+global).
|
|
311
|
+
* - Al seleccionar proyecto/cliente en los selectors (clone+project | clone+client).
|
|
312
|
+
* - Al recibir `maia-open-new-chat-with-agent` y en `handleGoToMaiaker`.
|
|
313
|
+
*/
|
|
314
|
+
var resolveAgentChat = useCallback(/*#__PURE__*/function () {
|
|
315
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(nextAgent, entityId) {
|
|
316
|
+
var requestId, session, _t;
|
|
317
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
318
|
+
while (1) switch (_context.prev = _context.next) {
|
|
319
|
+
case 0:
|
|
320
|
+
if (nextAgent !== null && nextAgent !== void 0 && nextAgent.id) {
|
|
321
|
+
_context.next = 1;
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
return _context.abrupt("return", false);
|
|
325
|
+
case 1:
|
|
326
|
+
resolveRequestRef.current += 1;
|
|
327
|
+
requestId = resolveRequestRef.current; // Al iniciar una nueva resolución descartamos cualquier sesión preparada
|
|
328
|
+
// previamente para evitar mezclar contextos si cambia la selección.
|
|
329
|
+
setPendingSessionId(null);
|
|
330
|
+
_context.prev = 2;
|
|
331
|
+
_context.next = 3;
|
|
332
|
+
return getSessionByAgent({
|
|
333
|
+
agent: nextAgent,
|
|
334
|
+
entityId: entityId,
|
|
335
|
+
lang: mapCORLang(i18n.language)
|
|
336
|
+
});
|
|
337
|
+
case 3:
|
|
338
|
+
session = _context.sent;
|
|
339
|
+
if (!(requestId !== resolveRequestRef.current)) {
|
|
340
|
+
_context.next = 4;
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
return _context.abrupt("return", false);
|
|
344
|
+
case 4:
|
|
345
|
+
if (!session) {
|
|
346
|
+
_context.next = 5;
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
// Para agentes clone pasamos por home con la sesión preparada; al enviar
|
|
350
|
+
// mensaje o FAQ desde ahí se continuará la conversación existente.
|
|
351
|
+
// Para custom mantenemos el comportamiento directo (`goToChat`).
|
|
352
|
+
if (nextAgent.type === 'clone') {
|
|
353
|
+
stageExistingSession(_objectSpread(_objectSpread({}, session), {}, {
|
|
354
|
+
agentId: nextAgent.id
|
|
355
|
+
}));
|
|
356
|
+
} else {
|
|
357
|
+
goToChat(session);
|
|
358
|
+
}
|
|
359
|
+
return _context.abrupt("return", true);
|
|
360
|
+
case 5:
|
|
361
|
+
_context.next = 7;
|
|
362
|
+
break;
|
|
363
|
+
case 6:
|
|
364
|
+
_context.prev = 6;
|
|
365
|
+
_t = _context["catch"](2);
|
|
366
|
+
console.error('[MAIA] getSessionByAgent failed', _t);
|
|
367
|
+
case 7:
|
|
368
|
+
return _context.abrupt("return", false);
|
|
369
|
+
case 8:
|
|
370
|
+
case "end":
|
|
371
|
+
return _context.stop();
|
|
372
|
+
}
|
|
373
|
+
}, _callee, null, [[2, 6]]);
|
|
374
|
+
}));
|
|
375
|
+
return function (_x, _x2) {
|
|
376
|
+
return _ref2.apply(this, arguments);
|
|
377
|
+
};
|
|
378
|
+
}(), [goToChat, stageExistingSession, i18n.language]);
|
|
334
379
|
var handleSendMessageReady = useCallback(function (sendMessage, stopGeneration, streaming, writing) {
|
|
335
380
|
setSendMessageFunction(function () {
|
|
336
381
|
return sendMessage;
|
|
@@ -363,6 +408,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
363
408
|
setClient === null || setClient === void 0 || setClient(null);
|
|
364
409
|
}
|
|
365
410
|
}
|
|
411
|
+
// Ir a home por una acción explícita (botón home, nuevo chat, etc.) descarta
|
|
412
|
+
// cualquier sesión preparada: el usuario decidió empezar desde cero.
|
|
413
|
+
setPendingSessionId(null);
|
|
366
414
|
if ((!agent || agent !== null && agent !== void 0 && agent.is_deleted || agent !== null && agent !== void 0 && agent.has_not_permissions || agent !== null && agent !== void 0 && agent.has_not_access || agent !== null && agent !== void 0 && agent.project_deleted) && agents.data.length > 0) {
|
|
367
415
|
selectAgent(agents.data[0]);
|
|
368
416
|
}
|
|
@@ -374,9 +422,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
374
422
|
resetSelectedChatRef.current();
|
|
375
423
|
}
|
|
376
424
|
}, [options.home, options.chat, currentOption, isWebSearchActive, toggleWebSearch, agent, agents, selectAgent, setClient]);
|
|
377
|
-
var handleResetChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
378
|
-
return _regeneratorRuntime.wrap(function (
|
|
379
|
-
while (1) switch (
|
|
425
|
+
var handleResetChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
426
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
427
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
380
428
|
case 0:
|
|
381
429
|
setUserInitialMessage({
|
|
382
430
|
message: '',
|
|
@@ -388,9 +436,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
388
436
|
handleGoHome();
|
|
389
437
|
case 1:
|
|
390
438
|
case "end":
|
|
391
|
-
return
|
|
439
|
+
return _context2.stop();
|
|
392
440
|
}
|
|
393
|
-
},
|
|
441
|
+
}, _callee2);
|
|
394
442
|
})), [handleGoHome]);
|
|
395
443
|
useEffect(function () {
|
|
396
444
|
if (!agentsFetchedRef.current) {
|
|
@@ -398,10 +446,37 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
398
446
|
handleGetAgents();
|
|
399
447
|
}
|
|
400
448
|
}, [handleGetAgents]);
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Resolución inicial de sesión cuando el modal se abre desde un contexto con
|
|
452
|
+
* entity pre-seteada:
|
|
453
|
+
* - `section === 'project'`: `ProjectAIButton` ya inyectó el `project` y
|
|
454
|
+
* `useGetAgents` autoselecciona el especialista en proyectos (clone+project).
|
|
455
|
+
* - `section === 'client'`: idem con `ClientAIButton` y clone+client.
|
|
456
|
+
*
|
|
457
|
+
* En esos casos no pasamos por los selectors (no hay chance de ejecutar
|
|
458
|
+
* `resolveAgentChat`), así que lo disparamos acá una única vez en cuanto la
|
|
459
|
+
* combinación agent+entity está lista. Si hay sesión previa se "prepara" y
|
|
460
|
+
* el usuario ve home con pending (el próximo mensaje/FAQ la continúa); si no,
|
|
461
|
+
* queda en home para iniciar un nuevo chat.
|
|
462
|
+
*/
|
|
463
|
+
var initialEntityResolveDoneRef = useRef(false);
|
|
464
|
+
useEffect(function () {
|
|
465
|
+
if (initialEntityResolveDoneRef.current) return;
|
|
466
|
+
if (section !== 'project' && section !== 'client') return;
|
|
467
|
+
if ((agent === null || agent === void 0 ? void 0 : agent.type) !== 'clone') return;
|
|
468
|
+
if (section === 'project' && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' && (project === null || project === void 0 ? void 0 : project.id) != null) {
|
|
469
|
+
initialEntityResolveDoneRef.current = true;
|
|
470
|
+
resolveAgentChat(agent, project.id);
|
|
471
|
+
} else if (section === 'client' && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client' && (client === null || client === void 0 ? void 0 : client.id) != null) {
|
|
472
|
+
initialEntityResolveDoneRef.current = true;
|
|
473
|
+
resolveAgentChat(agent, client.id);
|
|
474
|
+
}
|
|
475
|
+
}, [section, agent, project === null || project === void 0 ? void 0 : project.id, client === null || client === void 0 ? void 0 : client.id, resolveAgentChat]);
|
|
401
476
|
useEffect(function () {
|
|
402
477
|
var onMergeCreatedAgent = function onMergeCreatedAgent(evt) {
|
|
403
|
-
var
|
|
404
|
-
nextAgent =
|
|
478
|
+
var _ref4 = evt.detail || {},
|
|
479
|
+
nextAgent = _ref4.agent;
|
|
405
480
|
if (nextAgent !== null && nextAgent !== void 0 && nextAgent.id) {
|
|
406
481
|
addAgent(nextAgent, {
|
|
407
482
|
navigateHome: false
|
|
@@ -415,8 +490,8 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
415
490
|
}, [addAgent]);
|
|
416
491
|
useEffect(function () {
|
|
417
492
|
var onSyncEditedAgent = function onSyncEditedAgent(evt) {
|
|
418
|
-
var
|
|
419
|
-
nextAgent =
|
|
493
|
+
var _ref5 = evt.detail || {},
|
|
494
|
+
nextAgent = _ref5.agent;
|
|
420
495
|
if (!(nextAgent !== null && nextAgent !== void 0 && nextAgent.id)) return;
|
|
421
496
|
updateAgent(nextAgent);
|
|
422
497
|
if ((agent === null || agent === void 0 ? void 0 : agent.id) === nextAgent.id) {
|
|
@@ -432,6 +507,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
432
507
|
var openChatView = function openChatView() {
|
|
433
508
|
setHasError(false);
|
|
434
509
|
setInitialChatId(null);
|
|
510
|
+
setPendingSessionId(null);
|
|
435
511
|
setNewChatKey(function (prev) {
|
|
436
512
|
return prev + 1;
|
|
437
513
|
});
|
|
@@ -456,60 +532,97 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
456
532
|
if (!nextAgent) return;
|
|
457
533
|
setProject(null);
|
|
458
534
|
setClient === null || setClient === void 0 || setClient(null);
|
|
535
|
+
setPendingSessionId(null);
|
|
459
536
|
selectAgent(nextAgent);
|
|
460
537
|
setHasError(false);
|
|
461
538
|
setCurrentOption(options.home);
|
|
539
|
+
|
|
540
|
+
// Custom / clone+global no requieren entity: resolvemos sesión existente inmediatamente.
|
|
541
|
+
// Clone+project|client quedan esperando selección de entidad (resolverá el selector).
|
|
542
|
+
var needsEntity = (nextAgent === null || nextAgent === void 0 ? void 0 : nextAgent.type) === 'clone' && ((nextAgent === null || nextAgent === void 0 ? void 0 : nextAgent.entity) === 'project' || (nextAgent === null || nextAgent === void 0 ? void 0 : nextAgent.entity) === 'client');
|
|
543
|
+
if (!needsEntity) {
|
|
544
|
+
resolveAgentChat(nextAgent);
|
|
545
|
+
}
|
|
462
546
|
};
|
|
463
547
|
document.addEventListener('maia-open-new-chat-with-agent', openNewChatWithAgent);
|
|
464
548
|
return function () {
|
|
465
549
|
document.removeEventListener('maia-open-new-chat-with-agent', openNewChatWithAgent);
|
|
466
550
|
};
|
|
467
|
-
}, [selectAgent, setClient, setProject]);
|
|
551
|
+
}, [selectAgent, setClient, setProject, resolveAgentChat]);
|
|
468
552
|
var showNewChat = computedCurrentOption !== options.chat;
|
|
469
553
|
var hideHeaderAgentSelector = computedCurrentOption === options.myAgents;
|
|
470
554
|
var handleOpenMarketplace = useCallback(function () {
|
|
471
555
|
setCurrentOption(options.myAgents);
|
|
472
556
|
}, []);
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Acción del botón "nuevo chat" del toolbar de la Sidebar.
|
|
560
|
+
*
|
|
561
|
+
* La pantalla destino depende del agente actual:
|
|
562
|
+
* - `custom` → `options.myAgents` (elegir otro agente).
|
|
563
|
+
* - `clone` + `entity: 'project'` → `options.projectSelector` (elegir proyecto).
|
|
564
|
+
* - `clone` + `entity: 'client'` → `options.clientSelector` (elegir cliente).
|
|
565
|
+
* - `clone` + `entity: 'global'` con nombre maiaker/marketplace → `options.home`
|
|
566
|
+
* (renderiza `ChatAIHomeMaiaker`).
|
|
567
|
+
* - Fallback → `options.home`.
|
|
568
|
+
*/
|
|
569
|
+
var handleNewChatAction = useCallback(function () {
|
|
570
|
+
var currentAgent = agent;
|
|
571
|
+
|
|
572
|
+
// Aseguramos que la selección de entity quede limpia para los selectors.
|
|
573
|
+
if ((currentAgent === null || currentAgent === void 0 ? void 0 : currentAgent.type) === 'clone' && (currentAgent === null || currentAgent === void 0 ? void 0 : currentAgent.entity) === 'project') {
|
|
574
|
+
setProject(null);
|
|
575
|
+
} else if ((currentAgent === null || currentAgent === void 0 ? void 0 : currentAgent.type) === 'clone' && (currentAgent === null || currentAgent === void 0 ? void 0 : currentAgent.entity) === 'client') {
|
|
576
|
+
setClient === null || setClient === void 0 || setClient(null);
|
|
577
|
+
}
|
|
578
|
+
handleGoHome();
|
|
579
|
+
|
|
580
|
+
// Para agentes custom, handleGoHome ya hizo los resets comunes; sólo
|
|
581
|
+
// redirigimos el destino a Mis Agentes.
|
|
582
|
+
if ((currentAgent === null || currentAgent === void 0 ? void 0 : currentAgent.type) === 'custom') {
|
|
583
|
+
setCurrentOption(options.myAgents);
|
|
584
|
+
}
|
|
585
|
+
}, [agent, handleGoHome, setProject, setClient]);
|
|
586
|
+
var handleGoToMaiaker = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
587
|
+
var maiakerAgent, response, data, _t2;
|
|
588
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
589
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
477
590
|
case 0:
|
|
478
591
|
setHasError(false);
|
|
479
592
|
maiakerAgent = agents.data.find(function (a) {
|
|
480
593
|
return a.type === 'clone' && a.entity === 'global';
|
|
481
594
|
});
|
|
482
595
|
if (maiakerAgent) {
|
|
483
|
-
|
|
596
|
+
_context3.next = 5;
|
|
484
597
|
break;
|
|
485
598
|
}
|
|
486
|
-
|
|
487
|
-
|
|
599
|
+
_context3.prev = 1;
|
|
600
|
+
_context3.next = 2;
|
|
488
601
|
return fetchMaia({
|
|
489
602
|
path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
|
|
490
603
|
method: 'GET'
|
|
491
604
|
});
|
|
492
605
|
case 2:
|
|
493
|
-
response =
|
|
494
|
-
|
|
606
|
+
response = _context3.sent;
|
|
607
|
+
_context3.next = 3;
|
|
495
608
|
return response.json();
|
|
496
609
|
case 3:
|
|
497
|
-
data =
|
|
610
|
+
data = _context3.sent;
|
|
498
611
|
maiakerAgent = (data.data || []).find(function (a) {
|
|
499
612
|
return a.type === 'clone' && a.entity === 'global';
|
|
500
613
|
});
|
|
501
|
-
|
|
614
|
+
_context3.next = 5;
|
|
502
615
|
break;
|
|
503
616
|
case 4:
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
return
|
|
617
|
+
_context3.prev = 4;
|
|
618
|
+
_t2 = _context3["catch"](1);
|
|
619
|
+
return _context3.abrupt("return");
|
|
507
620
|
case 5:
|
|
508
621
|
if (maiakerAgent) {
|
|
509
|
-
|
|
622
|
+
_context3.next = 6;
|
|
510
623
|
break;
|
|
511
624
|
}
|
|
512
|
-
return
|
|
625
|
+
return _context3.abrupt("return");
|
|
513
626
|
case 6:
|
|
514
627
|
setProject(null);
|
|
515
628
|
setClient === null || setClient === void 0 || setClient(null);
|
|
@@ -518,12 +631,14 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
518
631
|
if (resetSelectedChatRef.current) {
|
|
519
632
|
resetSelectedChatRef.current();
|
|
520
633
|
}
|
|
634
|
+
// maiaker/marketplace = clone+global → no requiere entity_id
|
|
635
|
+
resolveAgentChat(maiakerAgent);
|
|
521
636
|
case 7:
|
|
522
637
|
case "end":
|
|
523
|
-
return
|
|
638
|
+
return _context3.stop();
|
|
524
639
|
}
|
|
525
|
-
},
|
|
526
|
-
})), [agents.data, i18n.language, selectAgent, setClient, setProject]);
|
|
640
|
+
}, _callee3, null, [[1, 4]]);
|
|
641
|
+
})), [agents.data, i18n.language, selectAgent, setClient, setProject, resolveAgentChat]);
|
|
527
642
|
var handleDeleteAgentFromMyAgents = useCallback(function (agentId) {
|
|
528
643
|
removeAgent(agentId);
|
|
529
644
|
if ((agent === null || agent === void 0 ? void 0 : agent.id) === agentId) {
|
|
@@ -531,13 +646,11 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
531
646
|
}
|
|
532
647
|
}, [agent === null || agent === void 0 ? void 0 : agent.id, removeAgent, selectFirstAgent]);
|
|
533
648
|
var hideFooterOnMaiakerMarketplaceHome = computedCurrentOption === options.home && isMaiakerAgentSelected;
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
"aria-hidden": isFloating,
|
|
540
|
-
children: /*#__PURE__*/_jsx(Sidebar, {
|
|
649
|
+
return selector && /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/_jsxs(SCCAIMWrapper, {
|
|
650
|
+
expanded: expanded,
|
|
651
|
+
children: [/*#__PURE__*/_jsxs(SCCAIMContentWrapper, {
|
|
652
|
+
expanded: expanded,
|
|
653
|
+
children: [validateAccessByFeature(section) && /*#__PURE__*/_jsx(Sidebar, {
|
|
541
654
|
onGoToChat: goToChat,
|
|
542
655
|
onError: function onError() {
|
|
543
656
|
return setSidebarHasError(true);
|
|
@@ -549,81 +662,62 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
549
662
|
handleSetRefetchChats: setRefetchChats,
|
|
550
663
|
hasError: sidebarHasError,
|
|
551
664
|
resetSelectedChatRef: resetSelectedChatRef,
|
|
552
|
-
agentsNavActive: sidebarAgentsNavActive
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
expanded: expanded,
|
|
556
|
-
floating: isFloating,
|
|
557
|
-
children: [/*#__PURE__*/_jsx(ChatAIModalHeader, {
|
|
558
|
-
layoutMode: layoutMode,
|
|
559
|
-
onLayoutModeChange: setLayoutMode,
|
|
560
|
-
expanded: expanded,
|
|
561
|
-
draggable: isFloating,
|
|
562
|
-
onDragStart: handleDragStart,
|
|
563
|
-
onDragMove: handleDragMove,
|
|
564
|
-
onDragEnd: handleDragEnd,
|
|
565
|
-
handleClose: handleCloseModal,
|
|
566
|
-
agents: agents.data,
|
|
567
|
-
hasError: !!agentError,
|
|
568
|
-
loading: loading,
|
|
569
|
-
loadingMore: loadingMore,
|
|
570
|
-
hasMore: agents.has_more,
|
|
571
|
-
handleResetChat: handleResetChat,
|
|
572
|
-
onAgentUpdate: updateAgentFavorite,
|
|
573
|
-
loadMoreAgents: loadMoreAgents,
|
|
574
|
-
sortAgentsList: sortAgentsList,
|
|
575
|
-
hideAgentSelector: hideHeaderAgentSelector
|
|
576
|
-
}), hasError ? /*#__PURE__*/_jsx(MAIAError, {}) : validateAccessByFeature(section) ? /*#__PURE__*/_jsx(ChatAIContent, {
|
|
577
|
-
currentOption: computedCurrentOption,
|
|
578
|
-
handlers: _objectSpread(_objectSpread({}, handlers), {}, {
|
|
579
|
-
chat: startChat,
|
|
580
|
-
home: handlers.home,
|
|
581
|
-
handleGoHome: handleGoHome
|
|
582
|
-
}),
|
|
583
|
-
onError: function onError() {
|
|
584
|
-
return setHasError(true);
|
|
585
|
-
},
|
|
586
|
-
refs: {
|
|
587
|
-
userInitialMessage: userInitialMessage,
|
|
588
|
-
initialChatId: initialChatId
|
|
589
|
-
},
|
|
590
|
-
onSendMessageReady: handleSendMessageReady,
|
|
665
|
+
agentsNavActive: sidebarAgentsNavActive,
|
|
666
|
+
onNewChat: handleNewChatAction
|
|
667
|
+
}), /*#__PURE__*/_jsxs(SCCAIMContent, {
|
|
591
668
|
expanded: expanded,
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
669
|
+
children: [/*#__PURE__*/_jsx(ChatAIModalHeader, {
|
|
670
|
+
expanded: expanded,
|
|
671
|
+
setExpanded: setExpanded,
|
|
672
|
+
handleClose: handleCloseModal,
|
|
673
|
+
agents: agents.data,
|
|
674
|
+
hasError: !!agentError,
|
|
675
|
+
loading: loading,
|
|
676
|
+
loadingMore: loadingMore,
|
|
677
|
+
hasMore: agents.has_more,
|
|
678
|
+
handleResetChat: handleResetChat,
|
|
679
|
+
onAgentUpdate: updateAgentFavorite,
|
|
680
|
+
loadMoreAgents: loadMoreAgents,
|
|
681
|
+
sortAgentsList: sortAgentsList,
|
|
682
|
+
hideAgentSelector: hideHeaderAgentSelector,
|
|
683
|
+
onAgentSelected: resolveAgentChat
|
|
684
|
+
}), hasError ? /*#__PURE__*/_jsx(MAIAError, {}) : validateAccessByFeature(section) ? /*#__PURE__*/_jsx(ChatAIContent, {
|
|
685
|
+
currentOption: computedCurrentOption,
|
|
686
|
+
handlers: _objectSpread(_objectSpread({}, handlers), {}, {
|
|
687
|
+
chat: startChat,
|
|
688
|
+
home: handlers.home,
|
|
689
|
+
handleGoHome: handleGoHome
|
|
690
|
+
}),
|
|
691
|
+
onError: function onError() {
|
|
692
|
+
return setHasError(true);
|
|
693
|
+
},
|
|
694
|
+
refs: {
|
|
695
|
+
userInitialMessage: userInitialMessage,
|
|
696
|
+
initialChatId: initialChatId
|
|
697
|
+
},
|
|
698
|
+
onSendMessageReady: handleSendMessageReady,
|
|
699
|
+
expanded: expanded,
|
|
700
|
+
agents: agents.data,
|
|
701
|
+
onDeleteAgent: handleDeleteAgentFromMyAgents,
|
|
702
|
+
onFavoriteAgentUpdate: updateAgentFavorite,
|
|
703
|
+
hasMoreAgents: !!agents.has_more,
|
|
704
|
+
loadingMoreAgents: loadingMore,
|
|
705
|
+
onLoadMoreAgents: loadMoreAgents,
|
|
706
|
+
onGoToMaiaker: handleGoToMaiaker,
|
|
707
|
+
onResolveAgentChat: resolveAgentChat
|
|
708
|
+
}) : /*#__PURE__*/_jsx(ProjectSummaryContent, {
|
|
709
|
+
onRestartSummary: handlers.home
|
|
710
|
+
}), (computedCurrentOption === options.home && !!(agents !== null && agents !== void 0 && (_agents$data = agents.data) !== null && _agents$data !== void 0 && _agents$data.length) || computedCurrentOption === options.chat) && !hideFooterOnMaiakerMarketplaceHome && !hasError && !loading && validateAccessByFeature(section) && /*#__PURE__*/_jsx(ChatAiModalFooter, {
|
|
711
|
+
agent: agent,
|
|
712
|
+
handleSendMessage: handleSendMessage,
|
|
713
|
+
handleStopGeneration: stopGenerationFunction,
|
|
714
|
+
isStreaming: isStreaming,
|
|
715
|
+
isWriting: isWriting,
|
|
716
|
+
chatId: initialChatId,
|
|
717
|
+
newChatKey: newChatKey,
|
|
718
|
+
showFaqs: computedCurrentOption === options.chat
|
|
719
|
+
})]
|
|
610
720
|
})]
|
|
611
|
-
})]
|
|
612
|
-
});
|
|
613
|
-
var contentWrapper = /*#__PURE__*/_jsx(SCCAIMContentWrapper, {
|
|
614
|
-
expanded: expanded,
|
|
615
|
-
floating: isFloating,
|
|
616
|
-
ref: contentWrapperRef,
|
|
617
|
-
children: modalPanel
|
|
618
|
-
});
|
|
619
|
-
return selector && /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/_jsxs(SCCAIMWrapper, {
|
|
620
|
-
expanded: expanded,
|
|
621
|
-
layoutMode: layoutMode,
|
|
622
|
-
dragPosition: resolvedDragPosition,
|
|
623
|
-
children: [/*#__PURE__*/_jsx(FloatingPanelMotion, {
|
|
624
|
-
tilt: tiltMotion,
|
|
625
|
-
expanded: expanded,
|
|
626
|
-
children: contentWrapper
|
|
627
721
|
}), userHasPermissions && /*#__PURE__*/_jsx(AbmAgentModal, {
|
|
628
722
|
addAgent: addAgent,
|
|
629
723
|
updateAgent: updateAgent,
|
|
@@ -633,4 +727,4 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
633
727
|
}), /*#__PURE__*/_jsx(Snackbar, {})]
|
|
634
728
|
}), selector);
|
|
635
729
|
};
|
|
636
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiTUFJQUVycm9yIiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNV3JhcHBlciIsImdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCIsIkZsb2F0aW5nUGFuZWxNb3Rpb24iLCJ1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQiLCJDaGF0QWlNb2RhbEZvb3RlciIsInZhbGlkYXRlSXNNYWlhIiwidXNlRmFxc1N0b3JlIiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIklEX01PREFMX0NIQVRfQUdFTlQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInNlY3Rpb24iLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwiQ2hhdEFJTW9kYWwiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJfdXNlciRwZXJtaXNzaW9uczIiLCJfdXNlciRwZXJtaXNzaW9uczMiLCJfYWdlbnRzJGRhdGEiLCJoYW5kbGVDbG9zZSIsInVzZXIiLCJfdXNlVHJhbnNsYXRpb24iLCJhYm1BZ2VudCIsImkxOG4iLCJoYW5kbGVDbG9zZU1vZGFsIiwiZ2V0U3RhdGUiLCJjbGVhckZhcXMiLCJfdXNlU3RhdGUiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwicmVmZXRjaENoYXRzIiwic2V0UmVmZXRjaENoYXRzIiwiX3VzZVN0YXRlMTUiLCJob21lIiwiX3VzZVN0YXRlMTYiLCJjdXJyZW50T3B0aW9uIiwic2V0Q3VycmVudE9wdGlvbiIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJoYXNFcnJvciIsInNldEhhc0Vycm9yIiwiaGFuZGxlcnMiLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwic2lkZWJhckhhc0Vycm9yIiwic2V0U2lkZWJhckhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiYWdlbnQiLCJwcm9qZWN0IiwiY2xpZW50IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiX3VzZUdldEFnZW50cyIsImhhbmRsZUdvSG9tZSIsImFnZW50cyIsImxvYWRpbmciLCJsb2FkaW5nTW9yZSIsImFnZW50RXJyb3IiLCJlcnJvciIsImhhbmRsZUdldEFnZW50cyIsImxvYWRNb3JlQWdlbnRzIiwiYWRkQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50IiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNlbGVjdEZpcnN0QWdlbnQiLCJzb3J0QWdlbnRzTGlzdCIsImlzTUFJQSIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwiZWRpdCIsImNvbXB1dGVkQ3VycmVudE9wdGlvbiIsImlzR2xvYmFsU3BlY2lhbGlzdCIsImVudGl0eSIsImlzUHJvamVjdFNwZWNpYWxpc3QiLCJpc0NsaWVudFNwZWNpYWxpc3QiLCJpc01haWFrZXIiLCJ0ZXN0IiwibmFtZSIsIm15QWdlbnRzIiwiY2hhdCIsInNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IiLCJzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IiLCJwcm9qZWN0U2VsZWN0b3IiLCJjbGllbnRTZWxlY3RvciIsImlzTWFpYWtlckFnZW50U2VsZWN0ZWQiLCJ0eXBlIiwic2lkZWJhckFnZW50c05hdkFjdGl2ZSIsImFnZW50c0ZldGNoZWRSZWYiLCJzZWxlY3RvciIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImNvbmNhdCIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJsYXlvdXRNb2RlIiwic2V0TGF5b3V0TW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMjMiLCJfdXNlU3RhdGUyNCIsImRyYWdQb3NpdGlvbiIsInNldERyYWdQb3NpdGlvbiIsIl91c2VGbG9hdGluZ1BhbmVsRHJhZyIsInRpbHRNb3Rpb24iLCJzdGFydFBvaW50ZXJUcmFja2luZyIsInNhbXBsZVBvaW50ZXJNb3ZlIiwiZW5kUG9pbnRlclRyYWNraW5nIiwiZHJhZ1N0YXRlUmVmIiwiY2xhbXBEcmFnUG9zaXRpb24iLCJ4IiwieSIsImNvbnRlbnRXcmFwcGVyIiwiY3VycmVudCIsIl9jb250ZW50V3JhcHBlciRnZXRCbyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0Iiwib2Zmc2V0IiwibWF4WCIsIk1hdGgiLCJtYXgiLCJpbm5lcldpZHRoIiwibWF4WSIsImlubmVySGVpZ2h0IiwibWluIiwicHJldiIsInBhZCIsImhhbmRsZURyYWdFbmQiLCJldmVudCIsIl9kcmFnU3RhdGVSZWYkY3VycmVudCIsInBvaW50ZXJJZCIsImJvZHkiLCJzdHlsZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJoYW5kbGVEcmFnTW92ZSIsImRyYWdTdGF0ZSIsImNsaWVudFgiLCJjbGllbnRZIiwibmV4dFBvc2l0aW9uIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyZXNvbHZlZERyYWdQb3NpdGlvbiIsImhhbmRsZURyYWdTdGFydCIsImJ1dHRvbiIsInRhcmdldCIsImNsb3Nlc3QiLCJyZWN0IiwiaW5pdGlhbFBvc2l0aW9uIiwibGVmdCIsInRvcCIsInBvaW50ZXJPZmZzZXRYIiwicG9pbnRlck9mZnNldFkiLCJjdXJyZW50VGFyZ2V0Iiwic2V0UG9pbnRlckNhcHR1cmUiLCJwcmV2ZW50RGVmYXVsdCIsInN0YXJ0Q2hhdCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJfb2JqZWN0U3ByZWFkIiwiZ29Ub0NoYXQiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsInNlbGVjdGVkQWdlbnQiLCJkYXRhIiwiZmluZCIsImFnZW50SXRlbSIsImlkIiwiYWdlbnRJZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImhhbmRsZVNlbmRNZXNzYWdlUmVhZHkiLCJzZW5kTWVzc2FnZSIsInN0b3BHZW5lcmF0aW9uIiwic3RyZWFtaW5nIiwid3JpdGluZyIsImhhbmRsZVNlbmRNZXNzYWdlIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsInByb2plY3RfZGVsZXRlZCIsImxlbmd0aCIsImhhbmRsZVJlc2V0Q2hhdCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsInN0b3AiLCJvbk1lcmdlQ3JlYXRlZEFnZW50IiwiZXZ0IiwiX3JlZjMiLCJkZXRhaWwiLCJuZXh0QWdlbnQiLCJuYXZpZ2F0ZUhvbWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjQiLCJvcGVuQ2hhdFZpZXciLCJvcGVuTmV3Q2hhdFdpdGhBZ2VudCIsIl9kZXRhaWwiLCJzaG93TmV3Q2hhdCIsImhpZGVIZWFkZXJBZ2VudFNlbGVjdG9yIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlMiIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QiLCJfY29udGV4dDIiLCJhIiwicGF0aCIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiYWJydXB0IiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lIiwibW9kYWxQYW5lbCIsImNoaWxkcmVuIiwiZGlzcGxheSIsIm9uR29Ub0NoYXQiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJhZ2VudHNOYXZBY3RpdmUiLCJmbG9hdGluZyIsIm9uTGF5b3V0TW9kZUNoYW5nZSIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnTW92ZSIsIm9uRHJhZ0VuZCIsImhhc01vcmUiLCJoYXNfbW9yZSIsIm9uQWdlbnRVcGRhdGUiLCJoaWRlQWdlbnRTZWxlY3RvciIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvblJlc3RhcnRTdW1tYXJ5IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJjaGF0SWQiLCJzaG93RmFxcyIsInJlZiIsImNyZWF0ZVBvcnRhbCIsInRpbHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvQ2hhdEFJTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbm8tdXNlbGVzcy1mcmFnbWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7XG4gIFJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICBQb2ludGVyRXZlbnQgYXMgUmVhY3RQb2ludGVyRXZlbnQsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBNQUlBRXJyb3IgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBRXJyb3InXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgU0NDQUlNQ29udGVudCwgU0NDQUlNQ29udGVudFdyYXBwZXIsIFNDQ0FJTVdyYXBwZXIgfSBmcm9tICcuL0NoYXRBSU1vZGFsLnN0eWxlcydcbmltcG9ydCB7IGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCwgTWFpYUNoYXRNb2RhbExheW91dE1vZGUgfSBmcm9tICcuL2xheW91dCdcbmltcG9ydCB7IEZsb2F0aW5nUGFuZWxNb3Rpb24sIHVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdCB9IGZyb20gJy4vZmxvYXRpbmdQYW5lbE1vdGlvbidcbmltcG9ydCB7IENoYXRBaU1vZGFsRm9vdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL0NoYXRBaU1vZGFsRm9vdGVyJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuXG50eXBlIENoYXRBSU1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBoYW5kbGVDbG9zZT86ICgpID0+IHZvaWRcbiAgcGFyZW50UmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxufVxuXG5leHBvcnQgY29uc3QgSURfTU9EQUxfQ0hBVF9BR0VOVCA9ICdtb2RhbHMtcG9ydGFsLW1haWEtY2hhdC1hZ2VudCdcblxuY29uc3QgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUgPSAoc2VjdGlvbjogc3RyaW5nKSA9PiB7XG4gIGlmIChzZWN0aW9uID09PSAnaGVhZGVyJyAmJiAod2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgfHwgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICgoc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IHNlY3Rpb24gPT09ICdjbGllbnQnKSAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1vZGFsID0gKHsgaGFuZGxlQ2xvc2UgfTogQ2hhdEFJTW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmFibUFnZW50XSlcblxuICBjb25zdCBoYW5kbGVDbG9zZU1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgaGFuZGxlQ2xvc2U/LigpXG4gIH0sIFtoYW5kbGVDbG9zZV0pXG4gIGNvbnN0IFt1c2VySW5pdGlhbE1lc3NhZ2UsIHNldFVzZXJJbml0aWFsTWVzc2FnZV0gPSB1c2VTdGF0ZTx7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gIH0+KHtcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBhdHRhY2htZW50czogW10sXG4gIH0pXG4gIGNvbnN0IFtpbml0aWFsQ2hhdElkLCBzZXRJbml0aWFsQ2hhdElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtuZXdDaGF0S2V5LCBzZXROZXdDaGF0S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uXSA9IHVzZVN0YXRlPFxuICAgICgobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4gdm9pZCkgfCBudWxsXG4gID4obnVsbClcbiAgY29uc3QgW3N0b3BHZW5lcmF0aW9uRnVuY3Rpb24sIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dID0gdXNlU3RhdGU8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzU3RyZWFtaW5nLCBzZXRJc1N0cmVhbWluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IFtyZWZldGNoQ2hhdHMsIHNldFJlZmV0Y2hDaGF0c10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2N1cnJlbnRPcHRpb24sIHNldEN1cnJlbnRPcHRpb25dID0gdXNlU3RhdGUob3B0aW9ucy5ob21lKVxuICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBoYW5kbGVycyA9IHVzZU1lbW8oKCkgPT4gYnVpbGRIYW5kbGVycyhzZXRDdXJyZW50T3B0aW9uLCBzZXRIYXNFcnJvciksIFtdKVxuICBjb25zdCBbc2lkZWJhckhhc0Vycm9yLCBzZXRTaWRlYmFySGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHJlc2V0U2VsZWN0ZWRDaGF0UmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0LWJyJyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBtb21lbnQubG9jYWxlKGxhbmcpXG5cbiAgY29uc3Qge1xuICAgIHNlbGVjdEFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIGNvbnN0IHtcbiAgICBhZ2VudHMsXG4gICAgbG9hZGluZyxcbiAgICBsb2FkaW5nTW9yZSxcbiAgICBlcnJvcjogYWdlbnRFcnJvcixcbiAgICBoYW5kbGVHZXRBZ2VudHMsXG4gICAgbG9hZE1vcmVBZ2VudHMsXG4gICAgYWRkQWdlbnQsXG4gICAgcmVtb3ZlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgICBzZWxlY3RGaXJzdEFnZW50LFxuICAgIHNvcnRBZ2VudHNMaXN0LFxuICB9ID0gdXNlR2V0QWdlbnRzKHsgc2VsZWN0QWdlbnQsIHNlY3Rpb24sIGFnZW50LCBoYW5kbGVHb0hvbWU6IGhhbmRsZXJzLmhvbWUgfSlcblxuICBjb25zdCBpc01BSUEgPSB2YWxpZGF0ZUlzTWFpYShhZ2VudCBhcyBBZ2VudClcblxuICBjb25zdCB1c2VySGFzUGVybWlzc2lvbnMgPVxuICAgICh1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5jcmVhdGUgfHxcbiAgICAgIHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmVkaXQgfHxcbiAgICAgIHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmRlbGV0ZSkgJiZcbiAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuXG4gIGNvbnN0IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGlzR2xvYmFsU3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJ1xuICAgIGNvbnN0IGlzUHJvamVjdFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBhZ2VudD8uZW50aXR5ID09IG51bGwpXG4gICAgY29uc3QgaXNDbGllbnRTcGVjaWFsaXN0ID0gaXNNQUlBICYmIGFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnXG4gICAgY29uc3QgaXNNYWlha2VyID0gaXNHbG9iYWxTcGVjaWFsaXN0ICYmIC8obWFpYWtlcnxtYXJrZXRwbGFjZSkvaS50ZXN0KGFnZW50Py5uYW1lIHx8ICcnKVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgfVxuXG4gICAgaWYgKGlzR2xvYmFsU3BlY2lhbGlzdCAmJiAhaXNNYWlha2VyICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudE9wdGlvblxuICB9LCBbY3VycmVudE9wdGlvbiwgcHJvamVjdCwgY2xpZW50LCBpc01BSUEsIGFnZW50Py5lbnRpdHksIGFnZW50Py5uYW1lXSlcblxuICBjb25zdCBpc01haWFrZXJBZ2VudFNlbGVjdGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgaXNNQUlBICYmXG4gICAgICBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJlxuICAgICAgYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiZcbiAgICAgIC8obWFpYWtlcnxtYXJrZXRwbGFjZSkvaS50ZXN0KGFnZW50Py5uYW1lIHx8ICcnKSxcbiAgICBbaXNNQUlBLCBhZ2VudD8uZW50aXR5LCBhZ2VudD8udHlwZSwgYWdlbnQ/Lm5hbWVdXG4gIClcblxuICBjb25zdCBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlID0gdXNlTWVtbygoKTogJ21haWFrZXInIHwgJ215QWdlbnRzJyB8IG51bGwgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMpIHJldHVybiAnbXlBZ2VudHMnXG4gICAgaWYgKGlzTWFpYWtlckFnZW50U2VsZWN0ZWQpIHJldHVybiAnbWFpYWtlcidcbiAgICByZXR1cm4gbnVsbFxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkXSlcblxuICAvKiBSZWFjdGl2YXIgY29uIGxhIGZpbGEg4oCcTWlzIGFnZW50ZXPigJ0gZW4gU2lkZWJhcjogbXlBZ2VudHNDb3VudCBwcm9wXG4gIGNvbnN0IHNpZGViYXJNeUFnZW50c0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGFnZW50cy5kYXRhLmZpbHRlcihcbiAgICAgIGEgPT4gIShhLnR5cGUgPT09ICdjbG9uZScgJiYgYS5lbnRpdHkgPT09ICdnbG9iYWwnICYmIC8obWFpYWtlcnxtYXJrZXRwbGFjZSkvaS50ZXN0KGEubmFtZSB8fCAnJykpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgY29uc3QgW2xheW91dE1vZGUsIHNldExheW91dE1vZGVdID0gdXNlU3RhdGU8TWFpYUNoYXRNb2RhbExheW91dE1vZGU+KCdzaWRlYmFyJylcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihudWxsKVxuICBjb25zdCB7IHRpbHRNb3Rpb24sIHN0YXJ0UG9pbnRlclRyYWNraW5nLCBzYW1wbGVQb2ludGVyTW92ZSwgZW5kUG9pbnRlclRyYWNraW5nIH0gPVxuICAgIHVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdChpc0Zsb2F0aW5nKVxuICBjb25zdCBkcmFnU3RhdGVSZWYgPSB1c2VSZWY8e1xuICAgIHBvaW50ZXJJZDogbnVtYmVyXG4gICAgb2Zmc2V0WDogbnVtYmVyXG4gICAgb2Zmc2V0WTogbnVtYmVyXG4gIH0gfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGNsYW1wRHJhZ1Bvc2l0aW9uID0gdXNlQ2FsbGJhY2soKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgcmV0dXJuIHsgeCwgeSB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjb250ZW50V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IG9mZnNldCA9IDE2XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KG9mZnNldCwgd2luZG93LmlubmVyV2lkdGggLSB3aWR0aCAtIG9mZnNldClcbiAgICBjb25zdCBtYXhZID0gTWF0aC5tYXgob2Zmc2V0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBoZWlnaHQgLSBvZmZzZXQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogTWF0aC5taW4oTWF0aC5tYXgoeCwgb2Zmc2V0KSwgbWF4WCksXG4gICAgICB5OiBNYXRoLm1pbihNYXRoLm1heCh5LCBvZmZzZXQpLCBtYXhZKSxcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT4ge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHByZXYueCwgcHJldi55KVxuICAgICAgfVxuICAgICAgY29uc3QgcGFkID0gMTZcbiAgICAgIGNvbnN0IHggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkXG4gICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICAgIH0pXG4gIH0sIFtsYXlvdXRNb2RlLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBlbmRQb2ludGVyVHJhY2tpbmcoKVxuICAgICAgaWYgKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZHJhZ1N0YXRlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJ1xuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCBkcmFnU3RhdGUucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICAgIGlmIChwcmV2ICYmIHByZXYueCA9PT0gbmV4dFBvc2l0aW9uLnggJiYgcHJldi55ID09PSBuZXh0UG9zaXRpb24ueSkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NpdGlvblxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgc2FtcGxlUG9pbnRlck1vdmVdXG4gIClcblxuICBjb25zdCByZXNvbHZlZERyYWdQb3NpdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uXG4gICAgfVxuICAgIGlmIChkcmFnUG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgY29uc3QgcGFkID0gMTZcbiAgICBjb25zdCB4ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkIDogcGFkXG4gICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgfSwgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWlzRmxvYXRpbmcgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW3JvbGU9XCJidXR0b25cIl0sIFtkYXRhLW5vLWRyYWc9XCJ0cnVlXCJdJykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjdCA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSByZXNvbHZlZERyYWdQb3NpdGlvbiA/PyBjbGFtcERyYWdQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKVxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFggPSBldmVudC5jbGllbnRYIC0gaW5pdGlhbFBvc2l0aW9uLnhcbiAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIGluaXRpYWxQb3NpdGlvbi55XG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgcG9pbnRlcklkOiBldmVudC5wb2ludGVySWQsXG4gICAgICAgIG9mZnNldFg6IHBvaW50ZXJPZmZzZXRYLFxuICAgICAgICBvZmZzZXRZOiBwb2ludGVyT2Zmc2V0WSxcbiAgICAgIH1cblxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnXG4gICAgICBzdGFydFBvaW50ZXJUcmFja2luZyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBpc0Zsb2F0aW5nLCByZXNvbHZlZERyYWdQb3NpdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmddXG4gIClcblxuICBjb25zdCBzdGFydENoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZT86IHN0cmluZywgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLCBmYXFJZD86IHN0cmluZywgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCAnJyxcbiAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgZ29Ub0NoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoY2hhdDogYW55KSA9PiB7XG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgICBjb25zdCBzZWxlY3RlZEFnZW50ID0gYWdlbnRzLmRhdGEuZmluZChhZ2VudEl0ZW0gPT4gYWdlbnRJdGVtLmlkID09PSBjaGF0LmFnZW50SWQpXG4gICAgICBpZiAoc2VsZWN0ZWRBZ2VudCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzZWxlY3RlZEFnZW50KVxuICAgICAgfVxuICAgICAgLy8gRGlzcGF0Y2ggZXZlbnQgdG8gY2xlYXIgdGhlIGlucHV0IHRleHRhcmVhXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBhZ2VudHMsIHNlbGVjdEFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZCxcbiAgICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgICAgc3RyZWFtaW5nOiBib29sZWFuLFxuICAgICAgd3JpdGluZzogYm9vbGVhblxuICAgICkgPT4ge1xuICAgICAgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbigoKSA9PiBzZW5kTWVzc2FnZSlcbiAgICAgIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24oKCkgPT4gc3RvcEdlbmVyYXRpb24pXG4gICAgICBzZXRJc1N0cmVhbWluZyhzdHJlYW1pbmcpXG4gICAgICBzZXRJc1dyaXRpbmcod3JpdGluZylcbiAgICB9LFxuICAgIFtdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlOiBzdHJpbmcsIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSwgZmFxSWQ/OiBzdHJpbmcsIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChzZW5kTWVzc2FnZUZ1bmN0aW9uICYmIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICAgIHNlbmRNZXNzYWdlRnVuY3Rpb24obWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHN0YXJ0Q2hhdCwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBoYW5kbGVHb0hvbWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gU2kgZXN0YW1vcyBlbiB1bmEgY29udmVyc2FjacOzbiB5IHZhbW9zIGEgaG9tZSwgcmVzZXRlYXIgaW5pdGlhbENoYXRJZCB5IGluY3JlbWVudGFyIG5ld0NoYXRLZXlcbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICAvLyBObyBib3JyYXIgZWwgY2xpZW50ZSBzaSBlcyBhZ2VudGUgZGUgY2xpZW50ZXMgKGlndWFsIHF1ZSBlbCBwcm95ZWN0byBzZSBtYW50aWVuZSlcbiAgICAgIGlmIChhZ2VudD8uZW50aXR5ICE9PSAnY2xpZW50Jykge1xuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICAoIWFnZW50IHx8IGFnZW50Py5pc19kZWxldGVkIHx8IGFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8IGFnZW50Py5oYXNfbm90X2FjY2VzcyB8fCBhZ2VudD8ucHJvamVjdF9kZWxldGVkKSAmJlxuICAgICAgYWdlbnRzLmRhdGEubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbMF0pXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW1xuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBvcHRpb25zLmNoYXQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgYWdlbnQsXG4gICAgYWdlbnRzLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBoYW5kbGVHZXRBZ2VudHMoKVxuICAgIH1cbiAgfSwgW2hhbmRsZUdldEFnZW50c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbk1lcmdlQ3JlYXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAobmV4dEFnZW50Py5pZCkge1xuICAgICAgICBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbYWRkQWdlbnRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TeW5jRWRpdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuXG4gICAgICB1cGRhdGVBZ2VudChuZXh0QWdlbnQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBuZXh0QWdlbnQuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW3VwZGF0ZUFnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnQ/LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5DaGF0VmlldyA9ICgpID0+IHtcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmNoYXQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgQ2hhdEFJTXlBZ2VudHMuaGFuZGxlVXNlQWdlbnQgKyBvbkJhY2sgKGhhbmRsZXJzLmhvbWUpLiAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgbmV4dEFnZW50ID0gKGV2ZW50IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWw/LmFnZW50XG4gICAgICBpZiAoIW5leHRBZ2VudCkgcmV0dXJuXG5cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgfVxuICB9LCBbc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdF0pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXQgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBoaWRlSGVhZGVyQWdlbnRTZWxlY3RvciA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50c1xuICBjb25zdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15QWdlbnRzKVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVHb1RvTWFpYWtlciA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBsZXQgbWFpYWtlckFnZW50ID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGE6IEFnZW50KSA9PiBhLnR5cGUgPT09ICdjbG9uZScgJiYgYS5lbnRpdHkgPT09ICdnbG9iYWwnKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICB9LCBbYWdlbnRzLmRhdGEsIGkxOG4ubGFuZ3VhZ2UsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3RdKVxuICBjb25zdCBoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJlbW92ZUFnZW50KGFnZW50SWQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBhZ2VudElkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoYWdlbnRJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudD8uaWQsIHJlbW92ZUFnZW50LCBzZWxlY3RGaXJzdEFnZW50XVxuICApXG5cbiAgY29uc3QgaGlkZUZvb3Rlck9uTWFpYWtlck1hcmtldHBsYWNlSG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICBjb25zdCBtb2RhbFBhbmVsID0gKFxuICAgIDw+XG4gICAgICB7dmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbikgPyAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogaXNGbG9hdGluZyA/ICdub25lJyA6ICdjb250ZW50cycgfX0gYXJpYS1oaWRkZW49e2lzRmxvYXRpbmd9PlxuICAgICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgICBvbkdvVG9DaGF0PXtnb1RvQ2hhdH1cbiAgICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldFNpZGViYXJIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2U9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICAgIHNob3dOZXdDaGF0PXtzaG93TmV3Q2hhdH1cbiAgICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzPXtzZXRSZWZldGNoQ2hhdHN9XG4gICAgICAgICAgICBoYXNFcnJvcj17c2lkZWJhckhhc0Vycm9yfVxuICAgICAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWY9e3Jlc2V0U2VsZWN0ZWRDaGF0UmVmfVxuICAgICAgICAgICAgYWdlbnRzTmF2QWN0aXZlPXtzaWRlYmFyQWdlbnRzTmF2QWN0aXZlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfT5cbiAgICAgICAgPENoYXRBSU1vZGFsSGVhZGVyXG4gICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICBvbkxheW91dE1vZGVDaGFuZ2U9e3NldExheW91dE1vZGV9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGRyYWdnYWJsZT17aXNGbG9hdGluZ31cbiAgICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICAgIG9uRHJhZ01vdmU9e2hhbmRsZURyYWdNb3ZlfVxuICAgICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgIGhhc0Vycm9yPXshIWFnZW50RXJyb3J9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgaGFzTW9yZT17YWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgIGhhbmRsZVJlc2V0Q2hhdD17aGFuZGxlUmVzZXRDaGF0fVxuICAgICAgICAgIG9uQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgbG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgIHNvcnRBZ2VudHNMaXN0PXtzb3J0QWdlbnRzTGlzdH1cbiAgICAgICAgICBoaWRlQWdlbnRTZWxlY3Rvcj17aGlkZUhlYWRlckFnZW50U2VsZWN0b3J9XG4gICAgICAgIC8+XG4gICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uKSA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHsoKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmICEhYWdlbnRzPy5kYXRhPy5sZW5ndGgpIHx8XG4gICAgICAgICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpICYmXG4gICAgICAgICAgIWhpZGVGb290ZXJPbk1haWFrZXJNYXJrZXRwbGFjZUhvbWUgJiZcbiAgICAgICAgICAhaGFzRXJyb3IgJiZcbiAgICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAgIHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24pICYmIChcbiAgICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgICAgbmV3Q2hhdEtleT17bmV3Q2hhdEtleX1cbiAgICAgICAgICAgICAgc2hvd0ZhcXM9e2NvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1Db250ZW50PlxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgY29udGVudFdyYXBwZXIgPSAoXG4gICAgPFNDQ0FJTUNvbnRlbnRXcmFwcGVyIGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9IHJlZj17Y29udGVudFdyYXBwZXJSZWZ9PlxuICAgICAge21vZGFsUGFuZWx9XG4gICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgc2VsZWN0b3IgJiZcbiAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8U0NDQUlNV3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGxheW91dE1vZGU9e2xheW91dE1vZGV9IGRyYWdQb3NpdGlvbj17cmVzb2x2ZWREcmFnUG9zaXRpb259PlxuICAgICAgICA8RmxvYXRpbmdQYW5lbE1vdGlvbiB0aWx0PXt0aWx0TW90aW9ufSBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPFNuYWNrYmFyIC8+XG4gICAgICA8L1NDQ0FJTVdyYXBwZXI+LFxuICAgICAgc2VsZWN0b3JcbiAgICApXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUVFQSxXQUFXLEVBQ1hDLE9BQU8sRUFDUEMsUUFBUSxFQUNSQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsZUFBZSxRQUVWLE9BQU87QUFDZCxPQUFPQyxRQUFRLE1BQU0sV0FBVztBQUNoQyxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBQ25ELFNBQVNDLFNBQVMsUUFBUSx1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
|
|
730
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiTUFJQUVycm9yIiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNV3JhcHBlciIsIkNoYXRBaU1vZGFsRm9vdGVyIiwidmFsaWRhdGVJc01haWEiLCJ1c2VGYXFzU3RvcmUiLCJmZXRjaE1haWEiLCJnZXRTZXNzaW9uQnlBZ2VudCIsIm1hcENPUkxhbmciLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwic2VjdGlvbiIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJDaGF0QUlNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl91c2VyJHBlcm1pc3Npb25zMiIsIl91c2VyJHBlcm1pc3Npb25zMyIsIl9hZ2VudHMkZGF0YSIsImhhbmRsZUNsb3NlIiwidXNlciIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiaTE4biIsImhhbmRsZUNsb3NlTW9kYWwiLCJnZXRTdGF0ZSIsImNsZWFyRmFxcyIsIl91c2VTdGF0ZSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInVzZXJJbml0aWFsTWVzc2FnZSIsInNldFVzZXJJbml0aWFsTWVzc2FnZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaW5pdGlhbENoYXRJZCIsInNldEluaXRpYWxDaGF0SWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsIm5ld0NoYXRLZXkiLCJzZXROZXdDaGF0S2V5IiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJwZW5kaW5nU2Vzc2lvbklkIiwic2V0UGVuZGluZ1Nlc3Npb25JZCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwic2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJpc1N0cmVhbWluZyIsInNldElzU3RyZWFtaW5nIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJyZWZldGNoQ2hhdHMiLCJzZXRSZWZldGNoQ2hhdHMiLCJfdXNlU3RhdGUxNyIsImhvbWUiLCJfdXNlU3RhdGUxOCIsImN1cnJlbnRPcHRpb24iLCJzZXRDdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMTkiLCJfdXNlU3RhdGUyMCIsImhhc0Vycm9yIiwic2V0SGFzRXJyb3IiLCJoYW5kbGVycyIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJzaWRlYmFySGFzRXJyb3IiLCJzZXRTaWRlYmFySGFzRXJyb3IiLCJyZXNldFNlbGVjdGVkQ2hhdFJlZiIsImxhbmciLCJsYW5ndWFnZSIsImxvY2FsZSIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0QWdlbnQiLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInNldENoaXBzUHJvamVjdCIsInNldENsaWVudCIsInNldFByb2plY3QiLCJfdXNlR2V0QWdlbnRzIiwiaGFuZGxlR29Ib21lIiwiYWdlbnRzIiwibG9hZGluZyIsImxvYWRpbmdNb3JlIiwiYWdlbnRFcnJvciIsImVycm9yIiwiaGFuZGxlR2V0QWdlbnRzIiwibG9hZE1vcmVBZ2VudHMiLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiaXNNQUlBIiwidXNlckhhc1Blcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjcmVhdGUiLCJlZGl0IiwiY29tcHV0ZWRDdXJyZW50T3B0aW9uIiwiaXNHbG9iYWxTcGVjaWFsaXN0IiwiZW50aXR5IiwiaXNQcm9qZWN0U3BlY2lhbGlzdCIsImlzQ2xpZW50U3BlY2lhbGlzdCIsImlzTWFpYWtlciIsInRlc3QiLCJuYW1lIiwibXlBZ2VudHMiLCJjaGF0Iiwic2hvdWxkU2hvd1Byb2plY3RTZWxlY3RvciIsInNob3VsZFNob3dDbGllbnRTZWxlY3RvciIsInByb2plY3RTZWxlY3RvciIsImNsaWVudFNlbGVjdG9yIiwiaXNNYWlha2VyQWdlbnRTZWxlY3RlZCIsInR5cGUiLCJzaWRlYmFyQWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzRmV0Y2hlZFJlZiIsInJlc29sdmVSZXF1ZXN0UmVmIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0IiwiZXhwYW5kZWQiLCJzZXRFeHBhbmRlZCIsInN0YXJ0Q2hhdCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJyZXN1bWVTZXNzaW9uSWQiLCJwcmV2IiwiX29iamVjdFNwcmVhZCIsInN0YWdlRXhpc3RpbmdTZXNzaW9uIiwiX2NoYXQkc2Vzc2lvbkV4dGVybmFsIiwic2Vzc2lvbkV4dGVybmFsSWQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJnb1RvQ2hhdCIsInNlbGVjdGVkQWdlbnQiLCJkYXRhIiwiZmluZCIsImFnZW50SXRlbSIsImlkIiwiYWdlbnRJZCIsImFnZW50VHlwZSIsInByb2plY3RJZCIsIk51bWJlciIsInByb2plY3ROYW1lIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwicmVzb2x2ZUFnZW50Q2hhdCIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJuZXh0QWdlbnQiLCJlbnRpdHlJZCIsInJlcXVlc3RJZCIsInNlc3Npb24iLCJfdCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJhYnJ1cHQiLCJjdXJyZW50Iiwic2VudCIsImNvbnNvbGUiLCJzdG9wIiwiX3giLCJfeDIiLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZVNlbmRNZXNzYWdlUmVhZHkiLCJzZW5kTWVzc2FnZSIsInN0b3BHZW5lcmF0aW9uIiwic3RyZWFtaW5nIiwid3JpdGluZyIsImhhbmRsZVNlbmRNZXNzYWdlIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsInByb2plY3RfZGVsZXRlZCIsImxlbmd0aCIsImhhbmRsZVJlc2V0Q2hhdCIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiaW5pdGlhbEVudGl0eVJlc29sdmVEb25lUmVmIiwib25NZXJnZUNyZWF0ZWRBZ2VudCIsImV2dCIsIl9yZWY0IiwiZGV0YWlsIiwibmF2aWdhdGVIb21lIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvblN5bmNFZGl0ZWRBZ2VudCIsIl9yZWY1Iiwib3BlbkNoYXRWaWV3Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJldmVudCIsIl9kZXRhaWwiLCJuZWVkc0VudGl0eSIsInNob3dOZXdDaGF0IiwiaGlkZUhlYWRlckFnZW50U2VsZWN0b3IiLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJoYW5kbGVOZXdDaGF0QWN0aW9uIiwiY3VycmVudEFnZW50IiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlMyIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QyIiwiX2NvbnRleHQzIiwiYSIsInBhdGgiLCJtZXRob2QiLCJqc29uIiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lIiwiY3JlYXRlUG9ydGFsIiwiY2hpbGRyZW4iLCJvbkdvVG9DaGF0Iiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwiYWdlbnRzTmF2QWN0aXZlIiwib25OZXdDaGF0IiwiaGFzTW9yZSIsImhhc19tb3JlIiwib25BZ2VudFVwZGF0ZSIsImhpZGVBZ2VudFNlbGVjdG9yIiwib25BZ2VudFNlbGVjdGVkIiwicmVmcyIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uRGVsZXRlQWdlbnQiLCJvbkZhdm9yaXRlQWdlbnRVcGRhdGUiLCJoYXNNb3JlQWdlbnRzIiwibG9hZGluZ01vcmVBZ2VudHMiLCJvbkxvYWRNb3JlQWdlbnRzIiwib25Hb1RvTWFpYWtlciIsIm9uUmVzb2x2ZUFnZW50Q2hhdCIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsInNob3dGYXFzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuXG5pbXBvcnQgeyBDaGF0QUlDb250ZW50IH0gZnJvbSAnLi4vQ2hhdEFJQ29udGVudCdcbmltcG9ydCB7IGJ1aWxkSGFuZGxlcnMsIG9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICcuLi9TaWRlYmFyJ1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENoYXRBSU1vZGFsSGVhZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL0NoYXRBaU1vZGFsSGVhZGVyL0NoYXRBaU1vZGFsSGVhZGVyJ1xuaW1wb3J0IHsgU25hY2tiYXIgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvU25hY2tCYXIvU25hY2tiYXInXG5pbXBvcnQgeyBQcm9qZWN0U3VtbWFyeUNvbnRlbnQgfSBmcm9tICcuLi9Qcm9qZWN0U3VtbWFyeUNvbnRlbnQnXG5pbXBvcnQgeyBBYm1BZ2VudE1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibUFnZW50TW9kYWwvQWJtQWdlbnRNb2RhbCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IFNDQ0FJTUNvbnRlbnQsIFNDQ0FJTUNvbnRlbnRXcmFwcGVyLCBTQ0NBSU1XcmFwcGVyIH0gZnJvbSAnLi9DaGF0QUlNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEZvb3RlcidcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlRmFxc1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlRmFxc1N0b3JlJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBnZXRTZXNzaW9uQnlBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQ2hhdHMvZ2V0U2Vzc2lvbkJ5QWdlbnQnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcblxudHlwZSBDaGF0QUlNb2RhbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgaGFuZGxlQ2xvc2U/OiAoKSA9PiB2b2lkXG4gIHBhcmVudFJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD5cbn1cblxuZXhwb3J0IGNvbnN0IElEX01PREFMX0NIQVRfQUdFTlQgPSAnbW9kYWxzLXBvcnRhbC1tYWlhLWNoYXQtYWdlbnQnXG5cbmNvbnN0IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlID0gKHNlY3Rpb246IHN0cmluZykgPT4ge1xuICBpZiAoc2VjdGlvbiA9PT0gJ2hlYWRlcicgJiYgKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIHx8IHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoKHNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBzZWN0aW9uID09PSAnY2xpZW50JykgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbCA9ICh7IGhhbmRsZUNsb3NlIH06IENoYXRBSU1vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgIGhhbmRsZUNsb3NlPy4oKVxuICB9LCBbaGFuZGxlQ2xvc2VdKVxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICB9Pih7XG4gICAgbWVzc2FnZTogJycsXG4gICAgYXR0YWNobWVudHM6IFtdLFxuICB9KVxuICBjb25zdCBbaW5pdGlhbENoYXRJZCwgc2V0SW5pdGlhbENoYXRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbbmV3Q2hhdEtleSwgc2V0TmV3Q2hhdEtleV0gPSB1c2VTdGF0ZSgwKVxuICAvKipcbiAgICogU2VzacOzbiBleGlzdGVudGUgXCJwcmVwYXJhZGFcIiBwYXJhIGVsIGFnZW50ZS9lbnRpdHkgYWN0dWFsIGRldGVjdGFkYSBwb3JcbiAgICogYHJlc29sdmVBZ2VudENoYXRgIG8gcG9yIGNsaWNrIGVuIGVsIHNpZGViYXIgc29icmUgdW4gY2hhdCBjbG9uZS5cbiAgICpcbiAgICogTWllbnRyYXMgZXhpc3RhLCBlbCB1c3VhcmlvIHZlIGxhIGhvbWUgKG5vIGVudHJhIGFsIGNoYXQpLiBBbCBlbnZpYXIgdW5cbiAgICogbWVuc2FqZSBvIHRvY2FyIHVuYSBGQVEsIGBoYW5kbGVTZW5kTWVzc2FnZWAgdXNhIGVzdGUgaWQgY29tbyBjaGF0SWQgcGFyYVxuICAgKiBjb250aW51YXIgbGEgY29udmVyc2FjacOzbiBleGlzdGVudGUgZW4gdmV6IGRlIGNyZWFyIHVuYSBudWV2YS5cbiAgICpcbiAgICogU29sbyBhcGxpY2EgYSBhZ2VudGVzIGBjbG9uZWAgKHRhbnRvIGxvcyBxdWUgcmVxdWllcmVuIGVudGl0eSBjb21vIGxvc1xuICAgKiBjbG9uZStnbG9iYWwpLiBQYXJhIGFnZW50ZXMgYGN1c3RvbWAgc2UgbWFudGllbmUgZWwgZmx1am8gZGlyZWN0byBhIGNoYXQuXG4gICAqL1xuICBjb25zdCBbcGVuZGluZ1Nlc3Npb25JZCwgc2V0UGVuZGluZ1Nlc3Npb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbl0gPSB1c2VTdGF0ZTxcbiAgICAoKG1lc3NhZ2U6IHN0cmluZywgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLCBmYXFJZD86IHN0cmluZywgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcpID0+IHZvaWQpIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlKG9wdGlvbnMuaG9tZSlcbiAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCByZXNldFNlbGVjdGVkQ2hhdFJlZiA9IHVzZVJlZjwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdC1icicgOiBpMThuLmxhbmd1YWdlXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZWN0aW9uLFxuICAgIGFnZW50LFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFByb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICBjb25zdCB7XG4gICAgYWdlbnRzLFxuICAgIGxvYWRpbmcsXG4gICAgbG9hZGluZ01vcmUsXG4gICAgZXJyb3I6IGFnZW50RXJyb3IsXG4gICAgaGFuZGxlR2V0QWdlbnRzLFxuICAgIGxvYWRNb3JlQWdlbnRzLFxuICAgIGFkZEFnZW50LFxuICAgIHJlbW92ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUsXG4gICAgc2VsZWN0Rmlyc3RBZ2VudCxcbiAgICBzb3J0QWdlbnRzTGlzdCxcbiAgfSA9IHVzZUdldEFnZW50cyh7IHNlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgaGFuZGxlR29Ib21lOiBoYW5kbGVycy5ob21lIH0pXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID1cbiAgICAodXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5lZGl0IHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5kZWxldGUpICYmXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICBjb25zdCBjb21wdXRlZEN1cnJlbnRPcHRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc0dsb2JhbFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCdcbiAgICBjb25zdCBpc1Byb2plY3RTcGVjaWFsaXN0ID0gaXNNQUlBICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PSBudWxsKVxuICAgIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICAgIGNvbnN0IGlzTWFpYWtlciA9IGlzR2xvYmFsU3BlY2lhbGlzdCAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcblxuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5teUFnZW50c1xuICAgIH1cblxuICAgIGlmIChpc0dsb2JhbFNwZWNpYWxpc3QgJiYgIWlzTWFpYWtlciAmJiBjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmNoYXRcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yID0gY3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0ICYmIGlzUHJvamVjdFNwZWNpYWxpc3QgJiYgIXByb2plY3RcbiAgICBjb25zdCBzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNDbGllbnRTcGVjaWFsaXN0ICYmICFjbGllbnRcblxuICAgIGlmIChzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5wcm9qZWN0U2VsZWN0b3JcbiAgICB9XG4gICAgaWYgKHNob3VsZFNob3dDbGllbnRTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2xpZW50U2VsZWN0b3JcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25cbiAgfSwgW2N1cnJlbnRPcHRpb24sIHByb2plY3QsIGNsaWVudCwgaXNNQUlBLCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZV0pXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGlzTUFJQSAmJlxuICAgICAgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiZcbiAgICAgIGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmXG4gICAgICAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJyksXG4gICAgW2lzTUFJQSwgYWdlbnQ/LmVudGl0eSwgYWdlbnQ/LnR5cGUsIGFnZW50Py5uYW1lXVxuICApXG5cbiAgY29uc3Qgc2lkZWJhckFnZW50c05hdkFjdGl2ZSA9IHVzZU1lbW8oKCk6ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCBudWxsID0+IHtcbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzKSByZXR1cm4gJ215QWdlbnRzJ1xuICAgIGlmIChpc01haWFrZXJBZ2VudFNlbGVjdGVkKSByZXR1cm4gJ21haWFrZXInXG4gICAgcmV0dXJuIG51bGxcbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF0pXG5cbiAgLyogUmVhY3RpdmFyIGNvbiBsYSBmaWxhIOKAnE1pcyBhZ2VudGVz4oCdIGVuIFNpZGViYXI6IG15QWdlbnRzQ291bnQgcHJvcFxuICBjb25zdCBzaWRlYmFyTXlBZ2VudHNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBhZ2VudHMuZGF0YS5maWx0ZXIoXG4gICAgICBhID0+ICEoYS50eXBlID09PSAnY2xvbmUnICYmIGEuZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhLm5hbWUgfHwgJycpKVxuICAgIClcbiAgICAgIC5sZW5ndGhcbiAgfSwgW2FnZW50cy5kYXRhXSlcbiAgKi9cblxuICBjb25zdCBhZ2VudHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKipcbiAgICogR3VhcmQgY29udHJhIHJhY2U6IHNpIGVsIHVzdWFyaW8gY2FtYmlhIGRlIGFnZW50ZS9lbnRpdHkgYW50ZXMgZGUgcXVlIHRlcm1pbmVcbiAgICogdW5hIHJlc29sdWNpw7NuIHByZXZpYSwgZGVzY2FydGFtb3MgbGEgcmVzcHVlc3RhIHZpZWphIHBhcmEgbm8gbmF2ZWdhciBhIHVuYVxuICAgKiBjb252ZXJzYWNpw7NuIHF1ZSB5YSBubyBjb3JyZXNwb25kZSBjb24gbGEgc2VsZWNjacOzbiBhY3R1YWwuXG4gICAqL1xuICBjb25zdCByZXNvbHZlUmVxdWVzdFJlZiA9IHVzZVJlZigwKVxuXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7SURfTU9EQUxfQ0hBVF9BR0VOVH1gKVxuXG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3Qgc3RhcnRDaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2U/OiBzdHJpbmcsIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSwgZmFxSWQ/OiBzdHJpbmcsIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIC8vIFNpIGhhYsOtYSB1bmEgc2VzacOzbiBwcmVwYXJhZGEgKGFnZW50ZSBjbG9uZSArIGVudGl0eSksIGNvbnRpbnVhbW9zIGVzYVxuICAgICAgLy8gY29udmVyc2FjacOzbjogcGFzYW1vcyBzdSBzZXNzaW9uRXh0ZXJuYWxJZCBjb21vIGluaXRpYWxDaGF0SWQgcGFyYSBxdWVcbiAgICAgIC8vIGBDaGF0QUlNZXNzYWdlc2AgY2FyZ3VlIGVsIGhpc3TDs3JpY28geSBkZXNwYWNoZSBlbCB1c2VySW5pdGlhbE1lc3NhZ2VcbiAgICAgIC8vIGRlbnRybyBkZSBlc2EgbWlzbWEgc2VzacOzbiBlbiB2ZXogZGUgY3JlYXIgdW5hIG51ZXZhLlxuICAgICAgY29uc3QgcmVzdW1lU2Vzc2lvbklkID0gcGVuZGluZ1Nlc3Npb25JZFxuICAgICAgc2V0UGVuZGluZ1Nlc3Npb25JZChudWxsKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChyZXN1bWVTZXNzaW9uSWQpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2Uoe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8ICcnLFxuICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMgfHwgW10sXG4gICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBzaWRlYmFySGFzRXJyb3IsIHBlbmRpbmdTZXNzaW9uSWRdXG4gIClcblxuICAvKipcbiAgICogRGVqYSBhbCB1c3VhcmlvIGVuIGhvbWUgY29uIHVuYSBzZXNpw7NuIGV4aXN0ZW50ZSBcInByZXBhcmFkYVwiLiBBbCBlbnZpYXJcbiAgICogbWVuc2FqZSBvIHRvY2FyIHVuYSBGQVEgc2UgY29udGludWFyw6EgZXNhIGNvbnZlcnNhY2nDs24gKHZlciBgc3RhcnRDaGF0YCkuXG4gICAqXG4gICAqIFNlIHVzYSBwYXJhIGFnZW50ZXMgY2xvbmUgKGhlYWRlci9zZWxlY3Rvci9zaWRlYmFyKS4gUGFyYSBjdXN0b20gc2VndWltb3NcbiAgICogZW50cmFuZG8gZGlyZWN0byBhbCBjaGF0IGNvbiBgZ29Ub0NoYXRgLiBObyBzZXRlYSBwcm9qZWN0L2NsaWVudDogZWxcbiAgICogY2FsbGVyIHlhIGRlasOzIGVsIGNvbnRleHRvIGdsb2JhbCBlbiBlbCBlc3RhZG8gY29ycmVjdG8gKHNlbGVjdG9yIGRlXG4gICAqIHByb3llY3RvL2NsaWVudGUsIHNpZGViYXIgY29uIGRhdGEgY29tcGxldGEsIGV0YykuXG4gICAqL1xuICBjb25zdCBzdGFnZUV4aXN0aW5nU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKChjaGF0OiBhbnkpID0+IHtcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIHNldFBlbmRpbmdTZXNzaW9uSWQoY2hhdD8uc2Vzc2lvbkV4dGVybmFsSWQgPz8gbnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW10pXG5cbiAgY29uc3QgZ29Ub0NoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoY2hhdDogYW55KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZEFnZW50ID0gYWdlbnRzLmRhdGEuZmluZChhZ2VudEl0ZW0gPT4gYWdlbnRJdGVtLmlkID09PSBjaGF0LmFnZW50SWQpXG4gICAgICBpZiAoc2VsZWN0ZWRBZ2VudCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzZWxlY3RlZEFnZW50KVxuICAgICAgfVxuXG4gICAgICAvLyBBZ2VudGVzIGNsb25lOiBwYXNhciBwb3IgaG9tZSBjb24gc2VzacOzbiBwcmVwYXJhZGEuIEVsIG1lbnNhamUvRkFRIHF1ZVxuICAgICAgLy8gZWwgdXN1YXJpbyBlc2NyaWJhIGNvbnRpbnVhcsOhIGVzdGEgY29udmVyc2FjacOzbi5cbiAgICAgIGlmIChjaGF0Py5hZ2VudFR5cGUgPT09ICdjbG9uZScpIHtcbiAgICAgICAgLy8gU2V0ZWFyIHByb2plY3QvY2xpZW50IGRlc2RlIGxhIGRhdGEgZGVsIGNoYXQgKHNpZGViYXIpIHBhcmEgcXVlIGVsXG4gICAgICAgIC8vIGhvbWUgc2UgbXVlc3RyZSBjb24gZWwgY29udGV4dG8gY29ycmVjdG8geSBgYXNrTWFpYWAgbHVlZ28gdGVuZ2FcbiAgICAgICAgLy8gcHJvamVjdElkL2NsaWVudElkIGRpc3BvbmlibGVzLlxuICAgICAgICBpZiAoY2hhdD8ucHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihjaGF0LnByb2plY3RJZCksIG5hbWU6IGNoYXQucHJvamVjdE5hbWUgfHwgJycgfSBhcyBhbnkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZXRDbGllbnQpIHtcbiAgICAgICAgICBpZiAoY2hhdD8uY2xpZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0Q2xpZW50KHsgaWQ6IE51bWJlcihjaGF0LmNsaWVudElkKSwgbmFtZTogY2hhdC5jbGllbnROYW1lIHx8ICcnIH0gYXMgYW55KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDbGllbnQobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhZ2VFeGlzdGluZ1Nlc3Npb24oY2hhdClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRQZW5kaW5nU2Vzc2lvbklkKG51bGwpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBhZ2VudHMsIHNlbGVjdEFnZW50LCBzdGFnZUV4aXN0aW5nU2Vzc2lvbiwgc2V0UHJvamVjdCwgc2V0Q2xpZW50XVxuICApXG5cbiAgLyoqXG4gICAqIFJlc29sdWNpw7NuIHYyIGBHRVQgL3YyL3Nlc3Npb25zL2FnZW50L3thZ2VudF9pZH1bL3tlbnRpdHlfaWR9XWAuXG4gICAqXG4gICAqIFNpIGVsIHVzdWFyaW8geWEgdGVuw61hIHVuYSBjb252ZXJzYWNpw7NuIHBhcmEgZXNhIGNvbWJpbmFjacOzbiBhZ2VudCtlbnRpdHksXG4gICAqIG5hdmVnYW1vcyBhIGVsbGEgKGBnb1RvQ2hhdGApLiBTaSBubyAobyBzaSBmYWxsYSBsYSByZWQpIGRldm9sdmVtb3MgYGZhbHNlYFxuICAgKiB5IGVsIGNhbGxlciBkZWNpZGUgZWwgZmFsbGJhY2sgKHF1ZWRhcnNlIGVuIGhvbWUvc2VsZWN0b3IgYWN0dWFsKS5cbiAgICpcbiAgICogUHVudG9zIGRlIGVqZWN1Y2nDs246XG4gICAqIC0gQWwgc2VsZWNjaW9uYXIgdW4gYWdlbnRlIGVuIGVsIGhlYWRlciAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKS5cbiAgICogLSBBbCBzZWxlY2Npb25hciBwcm95ZWN0by9jbGllbnRlIGVuIGxvcyBzZWxlY3RvcnMgKGNsb25lK3Byb2plY3QgfCBjbG9uZStjbGllbnQpLlxuICAgKiAtIEFsIHJlY2liaXIgYG1haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50YCB5IGVuIGBoYW5kbGVHb1RvTWFpYWtlcmAuXG4gICAqL1xuICBjb25zdCByZXNvbHZlQWdlbnRDaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG5leHRBZ2VudDogQWdlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBlbnRpdHlJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuIGZhbHNlXG4gICAgICByZXNvbHZlUmVxdWVzdFJlZi5jdXJyZW50ICs9IDFcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc29sdmVSZXF1ZXN0UmVmLmN1cnJlbnRcbiAgICAgIC8vIEFsIGluaWNpYXIgdW5hIG51ZXZhIHJlc29sdWNpw7NuIGRlc2NhcnRhbW9zIGN1YWxxdWllciBzZXNpw7NuIHByZXBhcmFkYVxuICAgICAgLy8gcHJldmlhbWVudGUgcGFyYSBldml0YXIgbWV6Y2xhciBjb250ZXh0b3Mgc2kgY2FtYmlhIGxhIHNlbGVjY2nDs24uXG4gICAgICBzZXRQZW5kaW5nU2Vzc2lvbklkKG51bGwpXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgZ2V0U2Vzc2lvbkJ5QWdlbnQoe1xuICAgICAgICAgIGFnZW50OiBuZXh0QWdlbnQsXG4gICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgbGFuZzogbWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKSxcbiAgICAgICAgfSlcbiAgICAgICAgLy8gU2kgZW50cmUgdGFudG8gaHVibyBvdHJhIHJlc29sdWNpw7NuIGluaWNpYWRhLCBpZ25vcmFtb3MgZXN0YSByZXNwdWVzdGEuXG4gICAgICAgIGlmIChyZXF1ZXN0SWQgIT09IHJlc29sdmVSZXF1ZXN0UmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZVxuICAgICAgICBpZiAoc2Vzc2lvbikge1xuICAgICAgICAgIC8vIFBhcmEgYWdlbnRlcyBjbG9uZSBwYXNhbW9zIHBvciBob21lIGNvbiBsYSBzZXNpw7NuIHByZXBhcmFkYTsgYWwgZW52aWFyXG4gICAgICAgICAgLy8gbWVuc2FqZSBvIEZBUSBkZXNkZSBhaMOtIHNlIGNvbnRpbnVhcsOhIGxhIGNvbnZlcnNhY2nDs24gZXhpc3RlbnRlLlxuICAgICAgICAgIC8vIFBhcmEgY3VzdG9tIG1hbnRlbmVtb3MgZWwgY29tcG9ydGFtaWVudG8gZGlyZWN0byAoYGdvVG9DaGF0YCkuXG4gICAgICAgICAgaWYgKG5leHRBZ2VudC50eXBlID09PSAnY2xvbmUnKSB7XG4gICAgICAgICAgICBzdGFnZUV4aXN0aW5nU2Vzc2lvbih7IC4uLihzZXNzaW9uIGFzIGFueSksIGFnZW50SWQ6IG5leHRBZ2VudC5pZCB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnb1RvQ2hhdChzZXNzaW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW01BSUFdIGdldFNlc3Npb25CeUFnZW50IGZhaWxlZCcsIGVycilcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW2dvVG9DaGF0LCBzdGFnZUV4aXN0aW5nU2Vzc2lvbiwgaTE4bi5sYW5ndWFnZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlUmVhZHkgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNpIGVzdGFtb3MgZW4gdW5hIGNvbnZlcnNhY2nDs24geSB2YW1vcyBhIGhvbWUsIHJlc2V0ZWFyIGluaXRpYWxDaGF0SWQgeSBpbmNyZW1lbnRhciBuZXdDaGF0S2V5XG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgLy8gTm8gYm9ycmFyIGVsIGNsaWVudGUgc2kgZXMgYWdlbnRlIGRlIGNsaWVudGVzIChpZ3VhbCBxdWUgZWwgcHJveWVjdG8gc2UgbWFudGllbmUpXG4gICAgICBpZiAoYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSXIgYSBob21lIHBvciB1bmEgYWNjacOzbiBleHBsw61jaXRhIChib3TDs24gaG9tZSwgbnVldm8gY2hhdCwgZXRjLikgZGVzY2FydGFcbiAgICAvLyBjdWFscXVpZXIgc2VzacOzbiBwcmVwYXJhZGE6IGVsIHVzdWFyaW8gZGVjaWRpw7MgZW1wZXphciBkZXNkZSBjZXJvLlxuICAgIHNldFBlbmRpbmdTZXNzaW9uSWQobnVsbClcbiAgICBpZiAoXG4gICAgICAoIWFnZW50IHx8IGFnZW50Py5pc19kZWxldGVkIHx8IGFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8IGFnZW50Py5oYXNfbm90X2FjY2VzcyB8fCBhZ2VudD8ucHJvamVjdF9kZWxldGVkKSAmJlxuICAgICAgYWdlbnRzLmRhdGEubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbMF0pXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW1xuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBvcHRpb25zLmNoYXQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgYWdlbnQsXG4gICAgYWdlbnRzLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBoYW5kbGVHZXRBZ2VudHMoKVxuICAgIH1cbiAgfSwgW2hhbmRsZUdldEFnZW50c10pXG5cbiAgLyoqXG4gICAqIFJlc29sdWNpw7NuIGluaWNpYWwgZGUgc2VzacOzbiBjdWFuZG8gZWwgbW9kYWwgc2UgYWJyZSBkZXNkZSB1biBjb250ZXh0byBjb25cbiAgICogZW50aXR5IHByZS1zZXRlYWRhOlxuICAgKiAtIGBzZWN0aW9uID09PSAncHJvamVjdCdgOiBgUHJvamVjdEFJQnV0dG9uYCB5YSBpbnllY3TDsyBlbCBgcHJvamVjdGAgeVxuICAgKiAgIGB1c2VHZXRBZ2VudHNgIGF1dG9zZWxlY2Npb25hIGVsIGVzcGVjaWFsaXN0YSBlbiBwcm95ZWN0b3MgKGNsb25lK3Byb2plY3QpLlxuICAgKiAtIGBzZWN0aW9uID09PSAnY2xpZW50J2A6IGlkZW0gY29uIGBDbGllbnRBSUJ1dHRvbmAgeSBjbG9uZStjbGllbnQuXG4gICAqXG4gICAqIEVuIGVzb3MgY2Fzb3Mgbm8gcGFzYW1vcyBwb3IgbG9zIHNlbGVjdG9ycyAobm8gaGF5IGNoYW5jZSBkZSBlamVjdXRhclxuICAgKiBgcmVzb2x2ZUFnZW50Q2hhdGApLCBhc8OtIHF1ZSBsbyBkaXNwYXJhbW9zIGFjw6EgdW5hIMO6bmljYSB2ZXogZW4gY3VhbnRvIGxhXG4gICAqIGNvbWJpbmFjacOzbiBhZ2VudCtlbnRpdHkgZXN0w6EgbGlzdGEuIFNpIGhheSBzZXNpw7NuIHByZXZpYSBzZSBcInByZXBhcmFcIiB5XG4gICAqIGVsIHVzdWFyaW8gdmUgaG9tZSBjb24gcGVuZGluZyAoZWwgcHLDs3hpbW8gbWVuc2FqZS9GQVEgbGEgY29udGluw7phKTsgc2kgbm8sXG4gICAqIHF1ZWRhIGVuIGhvbWUgcGFyYSBpbmljaWFyIHVuIG51ZXZvIGNoYXQuXG4gICAqL1xuICBjb25zdCBpbml0aWFsRW50aXR5UmVzb2x2ZURvbmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxFbnRpdHlSZXNvbHZlRG9uZVJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBpZiAoc2VjdGlvbiAhPT0gJ3Byb2plY3QnICYmIHNlY3Rpb24gIT09ICdjbGllbnQnKSByZXR1cm5cbiAgICBpZiAoYWdlbnQ/LnR5cGUgIT09ICdjbG9uZScpIHJldHVyblxuXG4gICAgaWYgKHNlY3Rpb24gPT09ICdwcm9qZWN0JyAmJiBhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgJiYgcHJvamVjdD8uaWQgIT0gbnVsbCkge1xuICAgICAgaW5pdGlhbEVudGl0eVJlc29sdmVEb25lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICByZXNvbHZlQWdlbnRDaGF0KGFnZW50LCBwcm9qZWN0LmlkKVxuICAgIH0gZWxzZSBpZiAoc2VjdGlvbiA9PT0gJ2NsaWVudCcgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcgJiYgY2xpZW50Py5pZCAhPSBudWxsKSB7XG4gICAgICBpbml0aWFsRW50aXR5UmVzb2x2ZURvbmVSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHJlc29sdmVBZ2VudENoYXQoYWdlbnQsIGNsaWVudC5pZClcbiAgICB9XG4gIH0sIFtzZWN0aW9uLCBhZ2VudCwgcHJvamVjdD8uaWQsIGNsaWVudD8uaWQsIHJlc29sdmVBZ2VudENoYXRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25NZXJnZUNyZWF0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKG5leHRBZ2VudD8uaWQpIHtcbiAgICAgICAgYWRkQWdlbnQobmV4dEFnZW50LCB7IG5hdmlnYXRlSG9tZTogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW2FkZEFnZW50XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uU3luY0VkaXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAoIW5leHRBZ2VudD8uaWQpIHJldHVyblxuICAgICAgdXBkYXRlQWdlbnQobmV4dEFnZW50KVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gbmV4dEFnZW50LmlkKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KG5leHRBZ2VudClcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCBvblN5bmNFZGl0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCBvblN5bmNFZGl0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFt1cGRhdGVBZ2VudCwgc2VsZWN0QWdlbnQsIGFnZW50Py5pZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuQ2hhdFZpZXcgPSAoKSA9PiB7XG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldFBlbmRpbmdTZXNzaW9uSWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5jaGF0KVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1jaGF0LXZpZXcnLCBvcGVuQ2hhdFZpZXcpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1jaGF0LXZpZXcnLCBvcGVuQ2hhdFZpZXcpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKiogTWlzbW8gZmx1am8gcXVlIENoYXRBSU15QWdlbnRzLmhhbmRsZVVzZUFnZW50ICsgb25CYWNrIChoYW5kbGVycy5ob21lKS4gKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuTmV3Q2hhdFdpdGhBZ2VudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IG5leHRBZ2VudCA9IChldmVudCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsPy5hZ2VudFxuICAgICAgaWYgKCFuZXh0QWdlbnQpIHJldHVyblxuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0UGVuZGluZ1Nlc3Npb25JZChudWxsKVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcblxuICAgICAgLy8gQ3VzdG9tIC8gY2xvbmUrZ2xvYmFsIG5vIHJlcXVpZXJlbiBlbnRpdHk6IHJlc29sdmVtb3Mgc2VzacOzbiBleGlzdGVudGUgaW5tZWRpYXRhbWVudGUuXG4gICAgICAvLyBDbG9uZStwcm9qZWN0fGNsaWVudCBxdWVkYW4gZXNwZXJhbmRvIHNlbGVjY2nDs24gZGUgZW50aWRhZCAocmVzb2x2ZXLDoSBlbCBzZWxlY3RvcikuXG4gICAgICBjb25zdCBuZWVkc0VudGl0eSA9XG4gICAgICAgIG5leHRBZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiAobmV4dEFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBuZXh0QWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgICBpZiAoIW5lZWRzRW50aXR5KSB7XG4gICAgICAgIHJlc29sdmVBZ2VudENoYXQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgfVxuICB9LCBbc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgcmVzb2x2ZUFnZW50Q2hhdF0pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXQgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBoaWRlSGVhZGVyQWdlbnRTZWxlY3RvciA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50c1xuICBjb25zdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15QWdlbnRzKVxuICB9LCBbXSlcblxuICAvKipcbiAgICogQWNjacOzbiBkZWwgYm90w7NuIFwibnVldm8gY2hhdFwiIGRlbCB0b29sYmFyIGRlIGxhIFNpZGViYXIuXG4gICAqXG4gICAqIExhIHBhbnRhbGxhIGRlc3Rpbm8gZGVwZW5kZSBkZWwgYWdlbnRlIGFjdHVhbDpcbiAgICogLSBgY3VzdG9tYCAgICAgICAgICAgICAgICAgICAgICAgICDihpIgYG9wdGlvbnMubXlBZ2VudHNgIChlbGVnaXIgb3RybyBhZ2VudGUpLlxuICAgKiAtIGBjbG9uZWAgKyBgZW50aXR5OiAncHJvamVjdCdgICAgIOKGkiBgb3B0aW9ucy5wcm9qZWN0U2VsZWN0b3JgIChlbGVnaXIgcHJveWVjdG8pLlxuICAgKiAtIGBjbG9uZWAgKyBgZW50aXR5OiAnY2xpZW50J2AgICAgIOKGkiBgb3B0aW9ucy5jbGllbnRTZWxlY3RvcmAgKGVsZWdpciBjbGllbnRlKS5cbiAgICogLSBgY2xvbmVgICsgYGVudGl0eTogJ2dsb2JhbCdgIGNvbiBub21icmUgbWFpYWtlci9tYXJrZXRwbGFjZSDihpIgYG9wdGlvbnMuaG9tZWBcbiAgICogICAocmVuZGVyaXphIGBDaGF0QUlIb21lTWFpYWtlcmApLlxuICAgKiAtIEZhbGxiYWNrIOKGkiBgb3B0aW9ucy5ob21lYC5cbiAgICovXG4gIGNvbnN0IGhhbmRsZU5ld0NoYXRBY3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEFnZW50ID0gYWdlbnRcblxuICAgIC8vIEFzZWd1cmFtb3MgcXVlIGxhIHNlbGVjY2nDs24gZGUgZW50aXR5IHF1ZWRlIGxpbXBpYSBwYXJhIGxvcyBzZWxlY3RvcnMuXG4gICAgaWYgKGN1cnJlbnRBZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiBjdXJyZW50QWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgfSBlbHNlIGlmIChjdXJyZW50QWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgY3VycmVudEFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnKSB7XG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIH1cblxuICAgIGhhbmRsZUdvSG9tZSgpXG5cbiAgICAvLyBQYXJhIGFnZW50ZXMgY3VzdG9tLCBoYW5kbGVHb0hvbWUgeWEgaGl6byBsb3MgcmVzZXRzIGNvbXVuZXM7IHPDs2xvXG4gICAgLy8gcmVkaXJpZ2ltb3MgZWwgZGVzdGlubyBhIE1pcyBBZ2VudGVzLlxuICAgIGlmIChjdXJyZW50QWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gICAgfVxuICB9LCBbYWdlbnQsIGhhbmRsZUdvSG9tZSwgc2V0UHJvamVjdCwgc2V0Q2xpZW50XSlcblxuICBjb25zdCBoYW5kbGVHb1RvTWFpYWtlciA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBsZXQgbWFpYWtlckFnZW50ID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGE6IEFnZW50KSA9PiBhLnR5cGUgPT09ICdjbG9uZScgJiYgYS5lbnRpdHkgPT09ICdnbG9iYWwnKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICAgIC8vIG1haWFrZXIvbWFya2V0cGxhY2UgPSBjbG9uZStnbG9iYWwg4oaSIG5vIHJlcXVpZXJlIGVudGl0eV9pZFxuICAgIHJlc29sdmVBZ2VudENoYXQobWFpYWtlckFnZW50KVxuICB9LCBbYWdlbnRzLmRhdGEsIGkxOG4ubGFuZ3VhZ2UsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHJlc29sdmVBZ2VudENoYXRdKVxuICBjb25zdCBoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJlbW92ZUFnZW50KGFnZW50SWQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBhZ2VudElkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoYWdlbnRJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudD8uaWQsIHJlbW92ZUFnZW50LCBzZWxlY3RGaXJzdEFnZW50XVxuICApXG5cbiAgY29uc3QgaGlkZUZvb3Rlck9uTWFpYWtlck1hcmtldHBsYWNlSG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXIgZXhwYW5kZWQ9e2V4cGFuZGVkfT5cbiAgICAgICAgPFNDQ0FJTUNvbnRlbnRXcmFwcGVyIGV4cGFuZGVkPXtleHBhbmRlZH0+XG4gICAgICAgICAge3ZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24pICYmIChcbiAgICAgICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgICAgIG9uR29Ub0NoYXQ9e2dvVG9DaGF0fVxuICAgICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRTaWRlYmFySGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZT17aGFuZGxlT3Blbk1hcmtldHBsYWNlfVxuICAgICAgICAgICAgICBzaG93TmV3Q2hhdD17c2hvd05ld0NoYXR9XG4gICAgICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHM9e3NldFJlZmV0Y2hDaGF0c31cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e3NpZGViYXJIYXNFcnJvcn1cbiAgICAgICAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWY9e3Jlc2V0U2VsZWN0ZWRDaGF0UmVmfVxuICAgICAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgICAgICAgIG9uTmV3Q2hhdD17aGFuZGxlTmV3Q2hhdEFjdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHNldEV4cGFuZGVkPXtzZXRFeHBhbmRlZH1cbiAgICAgICAgICAgICAgaGFuZGxlQ2xvc2U9e2hhbmRsZUNsb3NlTW9kYWx9XG4gICAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXshIWFnZW50RXJyb3J9XG4gICAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIGxvYWRpbmdNb3JlPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgICAgaGFzTW9yZT17YWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgICBoYW5kbGVSZXNldENoYXQ9e2hhbmRsZVJlc2V0Q2hhdH1cbiAgICAgICAgICAgICAgb25BZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgICAgbG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgICBzb3J0QWdlbnRzTGlzdD17c29ydEFnZW50c0xpc3R9XG4gICAgICAgICAgICAgIGhpZGVBZ2VudFNlbGVjdG9yPXtoaWRlSGVhZGVyQWdlbnRTZWxlY3Rvcn1cbiAgICAgICAgICAgICAgb25BZ2VudFNlbGVjdGVkPXtyZXNvbHZlQWdlbnRDaGF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsvKiBDb250ZW50ICovfVxuXG4gICAgICAgICAgICB7aGFzRXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxNQUlBRXJyb3IgLz5cbiAgICAgICAgICAgICkgOiB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uKSA/IChcbiAgICAgICAgICAgICAgPENoYXRBSUNvbnRlbnRcbiAgICAgICAgICAgICAgICBjdXJyZW50T3B0aW9uPXtjb21wdXRlZEN1cnJlbnRPcHRpb259XG4gICAgICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0SGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgICAgICAgcmVmcz17eyB1c2VySW5pdGlhbE1lc3NhZ2UsIGluaXRpYWxDaGF0SWQgfX1cbiAgICAgICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICAgICAgb25GYXZvcml0ZUFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgICAgIGhhc01vcmVBZ2VudHM9eyEhYWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgICAgICBvbkxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICAgICAgICBvbkdvVG9NYWlha2VyPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICAgICAgICBvblJlc29sdmVBZ2VudENoYXQ9e3Jlc29sdmVBZ2VudENoYXR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogRm9vdGVyICovfVxuICAgICAgICAgICAgeygoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgISFhZ2VudHM/LmRhdGE/Lmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpICYmXG4gICAgICAgICAgICAgICFoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lICYmXG4gICAgICAgICAgICAgICFoYXNFcnJvciAmJlxuICAgICAgICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAgICAgICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uKSAmJiAoXG4gICAgICAgICAgICAgICAgPENoYXRBaU1vZGFsRm9vdGVyXG4gICAgICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgICAgICBoYW5kbGVTZW5kTWVzc2FnZT17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBoYW5kbGVTdG9wR2VuZXJhdGlvbj17c3RvcEdlbmVyYXRpb25GdW5jdGlvbn1cbiAgICAgICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgICAgIGlzV3JpdGluZz17aXNXcml0aW5nfVxuICAgICAgICAgICAgICAgICAgY2hhdElkPXtpbml0aWFsQ2hhdElkfVxuICAgICAgICAgICAgICAgICAgbmV3Q2hhdEtleT17bmV3Q2hhdEtleX1cbiAgICAgICAgICAgICAgICAgIHNob3dGYXFzPXtjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICAgICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibUFnZW50TW9kYWxcbiAgICAgICAgICAgIGFkZEFnZW50PXthZGRBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50PXt1cGRhdGVBZ2VudH1cbiAgICAgICAgICAgIHJlbW92ZUFnZW50PXtyZW1vdmVBZ2VudH1cbiAgICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBzZWxlY3RGaXJzdEFnZW50PXtzZWxlY3RGaXJzdEFnZW50fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTbmFja2JhciAvPlxuICAgICAgPC9TQ0NBSU1XcmFwcGVyPixcbiAgICAgIHNlbGVjdG9yXG4gICAgKVxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBb0JBLFdBQVcsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxRQUFRLE9BQU87QUFDcEYsT0FBT0MsUUFBUSxNQUFNLFdBQVc7QUFDaEMsT0FBT0MsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxTQUFTLFFBQVEsdUJBQXVCO0FBRWpELFNBQVNDLGFBQWEsUUFBUSxrQkFB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
|