@projectcor/maia-components 2.11.100-10 → 2.11.100-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/App.js +4 -2
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +212 -14
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +99 -9
- package/lib/components/atoms/Chip/Chip.js +5 -12
- package/lib/components/atoms/Chip/styles.js +6 -6
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +28 -121
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +2 -6
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +5 -12
- package/lib/components/atoms/MAIAInput/MAIAInput.js +270 -398
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -5
- package/lib/components/atoms/MAIAInput/styles.js +86 -102
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +41 -56
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +12 -28
- package/lib/components/atoms/icons/index.js +1 -10
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +7 -18
- package/lib/components/molecules/ChatAIHome/styles.js +38 -54
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +191 -44
- package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -10
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +2 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +4 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +8 -1
- package/lib/components/molecules/ChatFooter/ChatFooter.js +62 -23
- package/lib/components/molecules/Sidebar/Sidebar.js +3 -14
- package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +90 -0
- package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +19 -0
- package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +2 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
- package/lib/dev/DevStreamTimelineDemo.js +614 -0
- package/lib/dev/mockStreamTimelineDemo.js +417 -0
- package/lib/dev/mockStreamTimelineRunner.js +298 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +40 -14
- package/lib/hooks/useAgentModel/useUpdateAgent.js +37 -11
- package/lib/hooks/useChatManager/useChatManager.js +145 -46
- package/lib/hooks/useEvent.js +2 -1
- package/lib/hooks/useMentionPopover.js +2 -4
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +180 -23
- package/lib/hooks/useStreamTimeline/index.js +7 -0
- package/lib/hooks/useStreamTimeline/streamTimelineStore.js +37 -0
- package/lib/lang/br/index.js +16 -7
- package/lib/lang/en/index.js +16 -7
- package/lib/lang/es/index.js +16 -7
- package/lib/lang/fr/index.js +15 -9
- package/lib/services/maia/Agents/connectors.js +124 -0
- package/lib/styles/config.js +2 -2
- package/lib/types/agentModal.js +1 -1
- package/lib/types/streamActivity.js +1 -1
- package/lib/types/streamTimeline.js +2 -0
- package/lib/utils/normalizeAgentConnectors.js +28 -3
- package/lib/utils/streamDebugLog.js +169 -0
- package/lib/utils/streamExecutionSteps.js +96 -0
- package/lib/utils/streamTimeline.js +161 -0
- package/package.json +1 -1
- package/lib/components/atoms/MAIAInput/maiaInputLayout.js +0 -25
- package/lib/components/atoms/icons/MaiaInputAddIcon.js +0 -42
- package/lib/components/atoms/icons/MaiaInputAttachIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +0 -33
- package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +0 -35
- package/lib/components/atoms/icons/MaiaInputMentionIcon.js +0 -44
- package/lib/components/atoms/icons/MaiaInputRobotIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputSendIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputSlashIcon.js +0 -29
- package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +0 -35
|
@@ -11,36 +11,31 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
11
11
|
/* eslint-disable prefer-destructuring */
|
|
12
12
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
13
13
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
14
|
-
import { useCallback, useEffect,
|
|
14
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
15
15
|
import { createPortal } from 'react-dom';
|
|
16
16
|
import { Popover } from '@mui/material';
|
|
17
|
+
import { PaperPlane } from '@projectcor/icons/lib/components/PaperPlane';
|
|
18
|
+
import { Attach } from '@projectcor/icons/lib/components/Attach';
|
|
19
|
+
import { Globe } from '@projectcor/icons/lib/components/Globe';
|
|
20
|
+
import { Trash } from '@projectcor/icons/lib/components/Trash';
|
|
21
|
+
import { Plus } from '@projectcor/icons/lib/components/Plus';
|
|
17
22
|
import { Check } from '@projectcor/icons/lib/components/Check';
|
|
18
23
|
import { Cross } from '@projectcor/icons/lib/components/Cross';
|
|
19
24
|
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
20
|
-
import
|
|
21
|
-
import {
|
|
25
|
+
import colors from '@projectcor/theme/lib/base/colors';
|
|
26
|
+
import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCMIAttachment, SCMIAttachmentDeleteIcon, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon, StyledMAIADropOverlay } from './styles';
|
|
22
27
|
import { useGlobalContext } from '../../../context/global-context';
|
|
23
28
|
import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
|
|
24
29
|
import { SlashCommandDropdown } from '../SlashCommandDropdown';
|
|
25
30
|
import { useSlashCommands } from '../../../hooks/useSlashCommands';
|
|
26
31
|
import { resolveQuickActionType } from '../../../utils/hoursPlannerQuickActionType';
|
|
27
32
|
import { useT } from '../../../hooks/useT';
|
|
28
|
-
import {
|
|
29
|
-
import { MaiaInputAttachIcon } from '../icons/MaiaInputAttachIcon';
|
|
30
|
-
import { MaiaInputAttachmentImageIcon } from '../icons/MaiaInputAttachmentImageIcon';
|
|
31
|
-
import { MaiaInputDeepSearchIcon } from '../icons/MaiaInputDeepSearchIcon';
|
|
32
|
-
import { CorAccessIcon } from '../icons/CorAccessIcon';
|
|
33
|
-
import { MaiaInputMentionIcon } from '../icons/MaiaInputMentionIcon';
|
|
34
|
-
import { MaiaInputRobotIcon } from '../icons/MaiaInputRobotIcon';
|
|
35
|
-
import { MaiaInputSendIcon } from '../icons/MaiaInputSendIcon';
|
|
36
|
-
import { MaiaInputSlashIcon } from '../icons/MaiaInputSlashIcon';
|
|
37
|
-
import { MaiaInputWebSearchIcon } from '../icons/MaiaInputWebSearchIcon';
|
|
33
|
+
import { TelescopeIcon } from '../icons/TelescopeIcon';
|
|
38
34
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
39
35
|
import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
|
|
40
36
|
import { MAIA_CHAT_INPUT_UI } from '../../../styles/config';
|
|
41
37
|
import { allowedFileTypes, fileTypes, MAX_FILE_SIZE_MB_MAIA_VISION, MAX_FILE_SIZE_MB_OLD, MAX_FILE_SIZE_MB_AUDIO, MAX_CHAT_INPUT_ATTACHMENTS } from '../../../constants/formatExtensions';
|
|
42
38
|
import { APPCUES_EVENTS, trackAppcuesEvent } from '../../../services/appcues';
|
|
43
|
-
import { Chip } from '../Chip';
|
|
44
39
|
import { ContextMentionEditor } from '../ContextMentionEditor';
|
|
45
40
|
import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
|
|
46
41
|
// eslint-disable-next-line import/no-cycle
|
|
@@ -48,13 +43,8 @@ import { useMentionPopover } from '../../../hooks/useMentionPopover';
|
|
|
48
43
|
import { dataTransferHasFiles, filesFromDataTransfer } from '../../../utils/chatInputFiles';
|
|
49
44
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
50
45
|
var TOOL_CHIP_EXIT_MS = 220;
|
|
51
|
-
var SLASH_DROPDOWN_WIDTH_PX = 340;
|
|
52
|
-
var SLASH_DROPDOWN_LEFT_OFFSET_PX = 24;
|
|
53
|
-
var SLASH_DROPDOWN_MAX_HEIGHT_PX = 416;
|
|
54
|
-
var SLASH_DROPDOWN_GAP_ABOVE_INPUT_PX = 4;
|
|
55
|
-
var SLASH_DROPDOWN_VIEWPORT_EDGE_PX = 8;
|
|
56
46
|
export var MAIAInput = function MAIAInput(_ref) {
|
|
57
|
-
var _agent$entity
|
|
47
|
+
var _agent$entity;
|
|
58
48
|
var onSendMessage = _ref.onSendMessage,
|
|
59
49
|
className = _ref.className,
|
|
60
50
|
disabled = _ref.disabled,
|
|
@@ -73,28 +63,25 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
73
63
|
newChatKey = _ref.newChatKey,
|
|
74
64
|
tooltipZIndex = _ref.tooltipZIndex,
|
|
75
65
|
externalPopoverAnchorRef = _ref.popoverAnchorRef,
|
|
76
|
-
layoutMode = _ref.layoutMode
|
|
77
|
-
contextChip = _ref.contextChip;
|
|
66
|
+
layoutMode = _ref.layoutMode;
|
|
78
67
|
var _useT = useT(),
|
|
79
68
|
t = _useT.t;
|
|
80
69
|
var editorRef = useRef(null);
|
|
81
70
|
var fileInputRef = useRef(null);
|
|
82
|
-
var chipsRowRef = useRef(null);
|
|
83
|
-
var toolbarRowRef = useRef(null);
|
|
84
71
|
var internalWrapperRef = useRef(null);
|
|
85
72
|
var wrapperRef = externalPopoverAnchorRef !== null && externalPopoverAnchorRef !== void 0 ? externalPopoverAnchorRef : internalWrapperRef;
|
|
86
73
|
var _useState = useState(false),
|
|
87
74
|
_useState2 = _slicedToArray(_useState, 2),
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
var _useState3 = useState(
|
|
75
|
+
hasWrappedToSecondLine = _useState2[0],
|
|
76
|
+
setHasWrappedToSecondLine = _useState2[1];
|
|
77
|
+
var _useState3 = useState(false),
|
|
91
78
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
var _useState5 = useState(
|
|
79
|
+
hasTypingPresence = _useState4[0],
|
|
80
|
+
setHasTypingPresence = _useState4[1];
|
|
81
|
+
var _useState5 = useState(false),
|
|
95
82
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
96
|
-
|
|
97
|
-
|
|
83
|
+
isFocused = _useState6[0],
|
|
84
|
+
setIsFocused = _useState6[1];
|
|
98
85
|
var _useState7 = useState({
|
|
99
86
|
isOpen: false,
|
|
100
87
|
excludedFiles: [],
|
|
@@ -171,43 +158,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
171
158
|
slashQuery = _useState18[0],
|
|
172
159
|
setSlashQuery = _useState18[1];
|
|
173
160
|
var slashMenuWasOpenRef = useRef(false);
|
|
174
|
-
var slashDropdownZIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
175
|
-
var _useState19 = useState({
|
|
176
|
-
bottom: 0,
|
|
177
|
-
left: 0,
|
|
178
|
-
maxHeight: SLASH_DROPDOWN_MAX_HEIGHT_PX
|
|
179
|
-
}),
|
|
180
|
-
_useState20 = _slicedToArray(_useState19, 2),
|
|
181
|
-
slashDropdownPos = _useState20[0],
|
|
182
|
-
setSlashDropdownPos = _useState20[1];
|
|
183
|
-
var positionSlashDropdown = useCallback(function () {
|
|
184
|
-
var _wrapperRef$current;
|
|
185
|
-
var rect = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.getBoundingClientRect();
|
|
186
|
-
if (!rect || rect.width <= 0) return;
|
|
187
|
-
var viewportH = window.innerHeight;
|
|
188
|
-
var viewportW = window.innerWidth;
|
|
189
|
-
var left = Math.max(8, Math.min(viewportW - SLASH_DROPDOWN_WIDTH_PX - 8, rect.left + SLASH_DROPDOWN_LEFT_OFFSET_PX));
|
|
190
|
-
var availableHeightPx = rect.top - SLASH_DROPDOWN_GAP_ABOVE_INPUT_PX - SLASH_DROPDOWN_VIEWPORT_EDGE_PX;
|
|
191
|
-
var maxHeight = Math.min(SLASH_DROPDOWN_MAX_HEIGHT_PX, Math.max(0, availableHeightPx));
|
|
192
|
-
setSlashDropdownPos({
|
|
193
|
-
left: left,
|
|
194
|
-
bottom: viewportH - rect.top + SLASH_DROPDOWN_GAP_ABOVE_INPUT_PX,
|
|
195
|
-
maxHeight: maxHeight
|
|
196
|
-
});
|
|
197
|
-
}, [wrapperRef]);
|
|
198
|
-
useLayoutEffect(function () {
|
|
199
|
-
if (!showSlashDropdown) return undefined;
|
|
200
|
-
positionSlashDropdown();
|
|
201
|
-
var handler = function handler() {
|
|
202
|
-
return positionSlashDropdown();
|
|
203
|
-
};
|
|
204
|
-
window.addEventListener('scroll', handler, true);
|
|
205
|
-
window.addEventListener('resize', handler);
|
|
206
|
-
return function () {
|
|
207
|
-
window.removeEventListener('scroll', handler, true);
|
|
208
|
-
window.removeEventListener('resize', handler);
|
|
209
|
-
};
|
|
210
|
-
}, [showSlashDropdown, positionSlashDropdown]);
|
|
211
161
|
|
|
212
162
|
/** Tras elegir o quitar búsqueda web/profunda: volver al textarea (Popover/menu puede robar foco). */
|
|
213
163
|
var scheduleInputFocusAfterToolAction = function scheduleInputFocusAfterToolAction() {
|
|
@@ -223,7 +173,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
223
173
|
};
|
|
224
174
|
var closePlusMenu = function closePlusMenu() {
|
|
225
175
|
setPlusMenuAnchor(null);
|
|
226
|
-
scheduleInputFocusAfterToolAction();
|
|
227
176
|
};
|
|
228
177
|
var cancelPendingToolChipExit = function cancelPendingToolChipExit() {
|
|
229
178
|
if (toolChipExitTimerRef.current !== null) {
|
|
@@ -232,10 +181,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
232
181
|
}
|
|
233
182
|
setToolChipExiting(false);
|
|
234
183
|
};
|
|
235
|
-
var handlePlusButtonMouseDown = function handlePlusButtonMouseDown(e) {
|
|
236
|
-
// Evita que el botón robe el foco del input al abrir el menú.
|
|
237
|
-
e.preventDefault();
|
|
238
|
-
};
|
|
239
184
|
var handlePlusButtonClick = function handlePlusButtonClick(e) {
|
|
240
185
|
e.stopPropagation();
|
|
241
186
|
if (plusMenuAnchor) {
|
|
@@ -247,13 +192,6 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
247
192
|
agent_type: analyticsAgentType
|
|
248
193
|
}, analyticsCloneEntityPayload));
|
|
249
194
|
};
|
|
250
|
-
var handleMentionButtonClick = function handleMentionButtonClick(e) {
|
|
251
|
-
var _editorRef$current2;
|
|
252
|
-
e.stopPropagation();
|
|
253
|
-
if (disabled) return;
|
|
254
|
-
closePlusMenu();
|
|
255
|
-
(_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.insertMentionTrigger();
|
|
256
|
-
};
|
|
257
195
|
var handlePlusMenuAttach = function handlePlusMenuAttach() {
|
|
258
196
|
var _fileInputRef$current;
|
|
259
197
|
closePlusMenu();
|
|
@@ -322,20 +260,14 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
322
260
|
}, analyticsCloneEntityPayload));
|
|
323
261
|
scheduleInputFocusAfterToolAction();
|
|
324
262
|
};
|
|
325
|
-
var handlePlusMenuQuickActions = function handlePlusMenuQuickActions() {
|
|
326
|
-
var _editorRef$current3;
|
|
327
|
-
setPlusMenuAnchor(null);
|
|
328
|
-
if (disabled) return;
|
|
329
|
-
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.insertSlashTrigger();
|
|
330
|
-
};
|
|
331
263
|
useEffect(function () {
|
|
332
264
|
if (!disabled) {
|
|
333
|
-
var _editorRef$
|
|
334
|
-
(_editorRef$
|
|
265
|
+
var _editorRef$current2;
|
|
266
|
+
(_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.focus();
|
|
335
267
|
}
|
|
336
268
|
}, [disabled]);
|
|
337
269
|
useEffect(function () {
|
|
338
|
-
var _editorRef$
|
|
270
|
+
var _editorRef$current3;
|
|
339
271
|
var draft = initialDraft === null || initialDraft === void 0 ? void 0 : initialDraft.trim();
|
|
340
272
|
if (!draft || initialDraftAppliedRef.current || disabled) {
|
|
341
273
|
return;
|
|
@@ -344,13 +276,16 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
344
276
|
if (deepLinkSendPendingRef) {
|
|
345
277
|
deepLinkSendPendingRef.current = true;
|
|
346
278
|
}
|
|
347
|
-
(_editorRef$
|
|
279
|
+
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.setPlainText(draft);
|
|
348
280
|
setHasTypingPresence(true);
|
|
349
281
|
if (!disabled) {
|
|
350
|
-
var _editorRef$
|
|
351
|
-
(_editorRef$
|
|
282
|
+
var _editorRef$current4;
|
|
283
|
+
(_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.focus();
|
|
352
284
|
}
|
|
353
285
|
}, [initialDraft, disabled, deepLinkSendPendingRef]);
|
|
286
|
+
var compactSingleRowToolbar = useMemo(function () {
|
|
287
|
+
return attachments.length === 0 && !isWebSearchActive && !isDeepSearchActive && !hasWrappedToSecondLine;
|
|
288
|
+
}, [attachments.length, isWebSearchActive, isDeepSearchActive, hasWrappedToSecondLine]);
|
|
354
289
|
var sendDisabled = useMemo(function () {
|
|
355
290
|
return !hasTypingPresence && attachments.length === 0;
|
|
356
291
|
}, [hasTypingPresence, attachments.length]);
|
|
@@ -385,8 +320,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
385
320
|
if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
|
|
386
321
|
var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
|
|
387
322
|
setTimeout(function () {
|
|
388
|
-
var _editorRef$
|
|
389
|
-
if (!disabled) (_editorRef$
|
|
323
|
+
var _editorRef$current5;
|
|
324
|
+
if (!disabled) (_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.focus();
|
|
390
325
|
}, delay);
|
|
391
326
|
}
|
|
392
327
|
previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
|
|
@@ -406,8 +341,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
406
341
|
}
|
|
407
342
|
var timeoutId = window.setTimeout(function () {
|
|
408
343
|
if (!disabled) {
|
|
409
|
-
var _editorRef$
|
|
410
|
-
(_editorRef$
|
|
344
|
+
var _editorRef$current6;
|
|
345
|
+
(_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.focus();
|
|
411
346
|
}
|
|
412
347
|
}, 200);
|
|
413
348
|
return function () {
|
|
@@ -438,12 +373,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
438
373
|
// Clear input when session changes (user switches to a different chat)
|
|
439
374
|
useEffect(function () {
|
|
440
375
|
var handleSessionChange = function handleSessionChange() {
|
|
441
|
-
var _editorRef$
|
|
376
|
+
var _editorRef$current7;
|
|
442
377
|
if (deepLinkSendPendingRef) {
|
|
443
378
|
deepLinkSendPendingRef.current = false;
|
|
444
379
|
}
|
|
445
|
-
(_editorRef$
|
|
380
|
+
(_editorRef$current7 = editorRef.current) === null || _editorRef$current7 === void 0 || _editorRef$current7.clear();
|
|
446
381
|
setHasTypingPresence(false);
|
|
382
|
+
setHasWrappedToSecondLine(false);
|
|
447
383
|
setShowSlashDropdown(false);
|
|
448
384
|
setSlashQuery('');
|
|
449
385
|
resetMentionOpenTracking();
|
|
@@ -459,8 +395,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
459
395
|
var handleRefocus = function handleRefocus() {
|
|
460
396
|
if (disabled) return;
|
|
461
397
|
requestAnimationFrame(function () {
|
|
462
|
-
var _editorRef$
|
|
463
|
-
(_editorRef$
|
|
398
|
+
var _editorRef$current8;
|
|
399
|
+
(_editorRef$current8 = editorRef.current) === null || _editorRef$current8 === void 0 || _editorRef$current8.focus();
|
|
464
400
|
});
|
|
465
401
|
};
|
|
466
402
|
document.addEventListener('maia-input-refocus', handleRefocus);
|
|
@@ -469,41 +405,43 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
469
405
|
};
|
|
470
406
|
}, [disabled]);
|
|
471
407
|
var handleSendMessage = useCallback(function () {
|
|
472
|
-
var _editorRef$
|
|
473
|
-
var state = (_editorRef$
|
|
408
|
+
var _editorRef$current9, _state$text, _state$mentions, _editorRef$current0;
|
|
409
|
+
var state = (_editorRef$current9 = editorRef.current) === null || _editorRef$current9 === void 0 ? void 0 : _editorRef$current9.serialize();
|
|
474
410
|
var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
|
|
475
411
|
if (!text.trim() && !attachments.length) return;
|
|
476
412
|
var mentions = (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : [];
|
|
477
413
|
onSendMessage(text, attachments, mentions);
|
|
478
|
-
(_editorRef$
|
|
414
|
+
(_editorRef$current0 = editorRef.current) === null || _editorRef$current0 === void 0 || _editorRef$current0.clear();
|
|
479
415
|
setHasTypingPresence(false);
|
|
416
|
+
setHasWrappedToSecondLine(false);
|
|
480
417
|
setShowSlashDropdown(false);
|
|
481
418
|
setSlashQuery('');
|
|
482
419
|
resetMentionOpenTracking();
|
|
483
420
|
}, [attachments, onSendMessage, resetMentionOpenTracking]);
|
|
484
421
|
var handleSelectSlashCommand = useCallback(function (command) {
|
|
485
|
-
var _editorRef$
|
|
422
|
+
var _editorRef$current1, _state$text2, _editorRef$current11;
|
|
486
423
|
eventAmplitude(EVENTS.aiChatQuickActionSelect, {
|
|
487
424
|
type_quick_action: resolveQuickActionType(command),
|
|
488
425
|
origin_quick_action: 'slash_menu'
|
|
489
426
|
});
|
|
490
|
-
var state = (_editorRef$
|
|
427
|
+
var state = (_editorRef$current1 = editorRef.current) === null || _editorRef$current1 === void 0 ? void 0 : _editorRef$current1.serialize();
|
|
491
428
|
var text = (_state$text2 = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text2 !== void 0 ? _state$text2 : '';
|
|
492
429
|
var triggerPart = "/".concat(slashQuery);
|
|
493
430
|
var beforeTrigger = text.endsWith(triggerPart) ? text.slice(0, -triggerPart.length) : text;
|
|
494
431
|
var isEmptyBeforeTrigger = beforeTrigger.trim() === '';
|
|
495
432
|
if (isEmptyBeforeTrigger) {
|
|
496
|
-
var _editorRef$
|
|
433
|
+
var _editorRef$current10;
|
|
497
434
|
onSendMessage(command.title, attachments, undefined, undefined, undefined, undefined, command.id);
|
|
498
|
-
(_editorRef$
|
|
435
|
+
(_editorRef$current10 = editorRef.current) === null || _editorRef$current10 === void 0 || _editorRef$current10.clear();
|
|
499
436
|
setHasTypingPresence(false);
|
|
437
|
+
setHasWrappedToSecondLine(false);
|
|
500
438
|
setShowSlashDropdown(false);
|
|
501
439
|
setSlashQuery('');
|
|
502
440
|
slashMenuWasOpenRef.current = false;
|
|
503
441
|
resetMentionOpenTracking();
|
|
504
442
|
return;
|
|
505
443
|
}
|
|
506
|
-
(_editorRef$
|
|
444
|
+
(_editorRef$current11 = editorRef.current) === null || _editorRef$current11 === void 0 || _editorRef$current11.insertSlashCommand({
|
|
507
445
|
id: command.id,
|
|
508
446
|
label: command.title
|
|
509
447
|
});
|
|
@@ -516,10 +454,27 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
516
454
|
slashMenuWasOpenRef.current = false;
|
|
517
455
|
};
|
|
518
456
|
var handleEditorInput = useCallback(function (_ref4) {
|
|
457
|
+
var _editorRef$current12;
|
|
519
458
|
var text = _ref4.text,
|
|
520
459
|
trigger = _ref4.trigger,
|
|
521
460
|
slashTrigger = _ref4.slashTrigger;
|
|
522
|
-
|
|
461
|
+
var visualMultiline = !!((_editorRef$current12 = editorRef.current) !== null && _editorRef$current12 !== void 0 && _editorRef$current12.hasVisualMultiline());
|
|
462
|
+
var explicitMultiline = text.includes('\n');
|
|
463
|
+
var isLikelyFirstCharMeasurementGlitch = text.length <= 1 && !explicitMultiline && visualMultiline;
|
|
464
|
+
var stableVisualMultiline = isLikelyFirstCharMeasurementGlitch ? false : visualMultiline;
|
|
465
|
+
var nextIsMultiline = explicitMultiline || stableVisualMultiline;
|
|
466
|
+
var nextHasTypingPresence = text.trim().length > 0;
|
|
467
|
+
var nextTypingPresence = text.trim().length > 0;
|
|
468
|
+
setHasTypingPresence(nextTypingPresence);
|
|
469
|
+
setHasWrappedToSecondLine(function (prev) {
|
|
470
|
+
var next = prev;
|
|
471
|
+
if (!nextHasTypingPresence) {
|
|
472
|
+
next = false;
|
|
473
|
+
} else if (nextIsMultiline) {
|
|
474
|
+
next = true;
|
|
475
|
+
}
|
|
476
|
+
return next;
|
|
477
|
+
});
|
|
523
478
|
onChange === null || onChange === void 0 || onChange();
|
|
524
479
|
handleTrigger(trigger);
|
|
525
480
|
if (slashTrigger !== null && slashTrigger !== void 0 && slashTrigger.active && slashCommands.length > 0) {
|
|
@@ -664,8 +619,8 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
664
619
|
addFiles(files);
|
|
665
620
|
};
|
|
666
621
|
var handleWrapperPaste = function handleWrapperPaste(e) {
|
|
667
|
-
var _wrapperRef$
|
|
668
|
-
var editorEl = (_wrapperRef$
|
|
622
|
+
var _wrapperRef$current;
|
|
623
|
+
var editorEl = (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.querySelector('[contenteditable="true"]');
|
|
669
624
|
if (editorEl && editorEl.contains(e.target)) return;
|
|
670
625
|
var files = filesFromDataTransfer(e.clipboardData);
|
|
671
626
|
if (!files.length) return;
|
|
@@ -675,49 +630,24 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
675
630
|
var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
|
|
676
631
|
onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
|
|
677
632
|
};
|
|
633
|
+
var handleWrapperFocus = function handleWrapperFocus() {
|
|
634
|
+
return setIsFocused(true);
|
|
635
|
+
};
|
|
636
|
+
var handleWrapperBlur = function handleWrapperBlur() {
|
|
637
|
+
setTimeout(function () {
|
|
638
|
+
var _wrapperRef$current2;
|
|
639
|
+
if (!((_wrapperRef$current2 = wrapperRef.current) !== null && _wrapperRef$current2 !== void 0 && _wrapperRef$current2.contains(document.activeElement))) {
|
|
640
|
+
setIsFocused(false);
|
|
641
|
+
}
|
|
642
|
+
}, 0);
|
|
643
|
+
};
|
|
678
644
|
var handleStopGeneration = function handleStopGeneration() {
|
|
679
645
|
eventAmplitude(EVENTS.aiChatStopResponse);
|
|
680
646
|
onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
|
|
681
647
|
};
|
|
682
|
-
var
|
|
683
|
-
useLayoutEffect(function () {
|
|
684
|
-
var chipsEl = chipsRowRef.current;
|
|
685
|
-
var toolbarEl = toolbarRowRef.current;
|
|
686
|
-
var updateHeights = function updateHeights() {
|
|
687
|
-
var nextChips = showChipsRow && chipsEl ? Math.ceil(chipsEl.getBoundingClientRect().height) : 0;
|
|
688
|
-
var nextToolbar = toolbarEl ? Math.ceil(toolbarEl.getBoundingClientRect().height) : MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX;
|
|
689
|
-
setChipsRowHeight(function (prev) {
|
|
690
|
-
return prev === nextChips ? prev : nextChips;
|
|
691
|
-
});
|
|
692
|
-
setToolbarRowHeight(function (prev) {
|
|
693
|
-
return prev === nextToolbar ? prev : nextToolbar;
|
|
694
|
-
});
|
|
695
|
-
};
|
|
696
|
-
updateHeights();
|
|
697
|
-
var observer = new ResizeObserver(updateHeights);
|
|
698
|
-
if (showChipsRow && chipsEl) observer.observe(chipsEl);
|
|
699
|
-
if (toolbarEl) observer.observe(toolbarEl);
|
|
700
|
-
return function () {
|
|
701
|
-
return observer.disconnect();
|
|
702
|
-
};
|
|
703
|
-
}, [showChipsRow, contextChip === null || contextChip === void 0 || (_contextChip$items2 = contextChip.items) === null || _contextChip$items2 === void 0 ? void 0 : _contextChip$items2.length, attachments.length]);
|
|
704
|
-
var editorMaxHeight = useMemo(function () {
|
|
705
|
-
return getMaiaInputEditorMaxHeight({
|
|
706
|
-
chipsRowHeightPx: chipsRowHeight,
|
|
707
|
-
toolbarRowHeightPx: toolbarRowHeight
|
|
708
|
-
});
|
|
709
|
-
}, [chipsRowHeight, toolbarRowHeight]);
|
|
710
|
-
var toolbarIconColor = '#808080';
|
|
648
|
+
var plusIconColor = isFocused ? colors.text.secondary : colors.text.mediumGray;
|
|
711
649
|
var plusMenuIconColor = MAIA_CHAT_INPUT_UI.menuIcon;
|
|
712
|
-
var
|
|
713
|
-
var hasCorAccess = Boolean(isCustomAgent && (agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.some(function (connector) {
|
|
714
|
-
return connector.group === 'COR' && connector.slugs.some(function (slug) {
|
|
715
|
-
return typeof slug === 'string' && slug.trim().length > 0;
|
|
716
|
-
});
|
|
717
|
-
})));
|
|
718
|
-
var agentModelName = isCustomAgent ? (agent === null || agent === void 0 || (_agent$model_display_ = agent.model_display_name) === null || _agent$model_display_ === void 0 ? void 0 : _agent$model_display_.trim()) || null : null;
|
|
719
|
-
var showCustomMetaIndicators = hasCorAccess || Boolean(agentModelName);
|
|
720
|
-
var showMentionButton = (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' || hasCorAccess;
|
|
650
|
+
var plusMenuSelectedColor = MAIA_CHAT_INPUT_UI.textBrandBold;
|
|
721
651
|
var activeToolChipLeadingIcon;
|
|
722
652
|
if (activeToolChipHovered) {
|
|
723
653
|
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
|
|
@@ -726,13 +656,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
726
656
|
height: 18
|
|
727
657
|
});
|
|
728
658
|
} else if (isWebSearchActive) {
|
|
729
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(
|
|
659
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Globe, {
|
|
730
660
|
color: plusMenuIconColor,
|
|
731
661
|
width: 18,
|
|
732
662
|
height: 18
|
|
733
663
|
});
|
|
734
664
|
} else {
|
|
735
|
-
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(
|
|
665
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(TelescopeIcon, {
|
|
736
666
|
color: plusMenuIconColor,
|
|
737
667
|
width: 18,
|
|
738
668
|
height: 18
|
|
@@ -744,267 +674,219 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
744
674
|
disabled: false,
|
|
745
675
|
alignButtons: alignButtons,
|
|
746
676
|
hasAttachments: !!attachments.length,
|
|
677
|
+
compactSingleRowToolbar: compactSingleRowToolbar,
|
|
747
678
|
$fileDragActive: isFileDragActive,
|
|
748
679
|
"data-appcues": "maia_chat_input",
|
|
749
680
|
"data-maia-streaming": isStreaming ? 'true' : 'false',
|
|
681
|
+
onFocus: handleWrapperFocus,
|
|
682
|
+
onBlur: handleWrapperBlur,
|
|
750
683
|
onPaste: handleWrapperPaste,
|
|
751
684
|
onDragEnter: handleDragEnter,
|
|
752
685
|
onDragLeave: handleDragLeave,
|
|
753
686
|
onDragOver: handleDragOver,
|
|
754
687
|
onDrop: handleDrop,
|
|
755
|
-
children: [
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
});
|
|
688
|
+
children: [showSlashDropdown && /*#__PURE__*/_jsx(SlashCommandDropdown, {
|
|
689
|
+
commands: slashCommands,
|
|
690
|
+
query: slashQuery,
|
|
691
|
+
onSelect: handleSelectSlashCommand,
|
|
692
|
+
onClose: handleCloseSlashDropdown
|
|
693
|
+
}), !!attachments.length && /*#__PURE__*/_jsx("div", {
|
|
694
|
+
style: {
|
|
695
|
+
display: 'flex',
|
|
696
|
+
gap: '12px',
|
|
697
|
+
alignItems: 'center'
|
|
698
|
+
},
|
|
699
|
+
children: attachments.map(function (attachment, index) {
|
|
700
|
+
var _fileNameParts$pop2, _attachment$type;
|
|
701
|
+
var fileNameParts = attachment.name.split('.');
|
|
702
|
+
var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop2 = fileNameParts.pop()) === null || _fileNameParts$pop2 === void 0 ? void 0 : _fileNameParts$pop2.toLowerCase()) : '';
|
|
703
|
+
var isImageByExtension = ['.png', '.jpg', '.jpeg'].includes(fileExtension);
|
|
704
|
+
var isImageByMime = (_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/');
|
|
705
|
+
var isImage = isImageByMime && isImageByExtension;
|
|
774
706
|
return /*#__PURE__*/_jsx(Tooltip, {
|
|
775
707
|
title: attachment.name,
|
|
776
708
|
zIndex: tooltipZIndex,
|
|
777
709
|
children: /*#__PURE__*/_jsxs(SCMIAttachment, {
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
},
|
|
789
|
-
children: /*#__PURE__*/_jsx(Cross, {
|
|
790
|
-
color: "#666666",
|
|
791
|
-
width: 14,
|
|
792
|
-
height: 14
|
|
793
|
-
})
|
|
794
|
-
})]
|
|
795
|
-
}), /*#__PURE__*/_jsx(SCMIAttachmentName, {
|
|
796
|
-
children: attachment.name
|
|
710
|
+
isImage: isImage,
|
|
711
|
+
children: [attachment.icon, /*#__PURE__*/_jsx(SCMIAttachmentDeleteIcon, {
|
|
712
|
+
onClick: function onClick() {
|
|
713
|
+
return handleDeleteAttachment(attachment.id);
|
|
714
|
+
},
|
|
715
|
+
children: /*#__PURE__*/_jsx(Trash, {
|
|
716
|
+
color: "rgba(191, 191, 191, 1)",
|
|
717
|
+
width: 18,
|
|
718
|
+
height: 18
|
|
719
|
+
})
|
|
797
720
|
})]
|
|
798
721
|
})
|
|
799
|
-
}, "".concat(
|
|
800
|
-
})
|
|
722
|
+
}, "".concat(index, "-").concat(attachment.name));
|
|
723
|
+
})
|
|
801
724
|
}), /*#__PURE__*/_jsxs(StyledMAIAMainToolbarGrid, {
|
|
802
|
-
|
|
725
|
+
$compactRow: compactSingleRowToolbar,
|
|
726
|
+
children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
|
|
727
|
+
$compactRow: compactSingleRowToolbar,
|
|
728
|
+
children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
|
|
729
|
+
children: [/*#__PURE__*/_jsx(PlusToggleButton, {
|
|
730
|
+
type: "button",
|
|
731
|
+
$menuOpen: plusMenuOpen,
|
|
732
|
+
onClick: handlePlusButtonClick,
|
|
733
|
+
"aria-label": t('chat.openPlusMenuAria'),
|
|
734
|
+
"aria-haspopup": "true",
|
|
735
|
+
"aria-expanded": plusMenuOpen,
|
|
736
|
+
children: /*#__PURE__*/_jsx(Plus, {
|
|
737
|
+
color: plusIconColor,
|
|
738
|
+
width: 20,
|
|
739
|
+
height: 20
|
|
740
|
+
})
|
|
741
|
+
}), /*#__PURE__*/_jsx(Popover, {
|
|
742
|
+
open: plusMenuOpen,
|
|
743
|
+
anchorEl: plusMenuAnchor,
|
|
744
|
+
onClose: closePlusMenu,
|
|
745
|
+
anchorOrigin: {
|
|
746
|
+
vertical: 'top',
|
|
747
|
+
horizontal: 'left'
|
|
748
|
+
},
|
|
749
|
+
transformOrigin: {
|
|
750
|
+
vertical: 'bottom',
|
|
751
|
+
horizontal: 'left'
|
|
752
|
+
},
|
|
753
|
+
sx: {
|
|
754
|
+
zIndex: plusMenuZIndex
|
|
755
|
+
},
|
|
756
|
+
slotProps: {
|
|
757
|
+
paper: {
|
|
758
|
+
elevation: 0,
|
|
759
|
+
sx: {
|
|
760
|
+
overflow: 'visible',
|
|
761
|
+
borderRadius: '4px',
|
|
762
|
+
boxShadow: 'none',
|
|
763
|
+
backgroundColor: 'transparent',
|
|
764
|
+
marginTop: '-4px'
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
},
|
|
768
|
+
children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
|
|
769
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
770
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
771
|
+
type: "button",
|
|
772
|
+
onClick: handlePlusMenuAttach,
|
|
773
|
+
children: [/*#__PURE__*/_jsx(Attach, {
|
|
774
|
+
color: plusMenuIconColor,
|
|
775
|
+
width: 20,
|
|
776
|
+
height: 20
|
|
777
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
778
|
+
$selected: false,
|
|
779
|
+
children: t('chat.plusMenuAttach')
|
|
780
|
+
})]
|
|
781
|
+
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
782
|
+
type: "button",
|
|
783
|
+
onClick: handlePlusMenuWebSearch,
|
|
784
|
+
children: [/*#__PURE__*/_jsx(Globe, {
|
|
785
|
+
color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
786
|
+
width: 20,
|
|
787
|
+
height: 20
|
|
788
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
789
|
+
$selected: !!isWebSearchActive,
|
|
790
|
+
children: t('chat.searchWeb')
|
|
791
|
+
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
792
|
+
color: plusMenuSelectedColor,
|
|
793
|
+
width: 16,
|
|
794
|
+
height: 16
|
|
795
|
+
}) : null]
|
|
796
|
+
})]
|
|
797
|
+
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
798
|
+
type: "button",
|
|
799
|
+
onClick: handlePlusMenuDeepSearch,
|
|
800
|
+
children: [/*#__PURE__*/_jsx(TelescopeIcon, {
|
|
801
|
+
color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
802
|
+
width: 20,
|
|
803
|
+
height: 20
|
|
804
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
805
|
+
$selected: !!isDeepSearchActive,
|
|
806
|
+
children: t('chat.plusMenuDeepInvestigation')
|
|
807
|
+
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
808
|
+
color: plusMenuSelectedColor,
|
|
809
|
+
width: 16,
|
|
810
|
+
height: 16
|
|
811
|
+
}) : null]
|
|
812
|
+
})]
|
|
813
|
+
})
|
|
814
|
+
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
815
|
+
$hovered: activeToolChipHovered,
|
|
816
|
+
$exiting: toolChipExiting,
|
|
817
|
+
onMouseEnter: function onMouseEnter() {
|
|
818
|
+
return setActiveToolChipHovered(true);
|
|
819
|
+
},
|
|
820
|
+
onMouseLeave: function onMouseLeave() {
|
|
821
|
+
return setActiveToolChipHovered(false);
|
|
822
|
+
},
|
|
823
|
+
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
824
|
+
type: "button",
|
|
825
|
+
$closeShown: activeToolChipHovered,
|
|
826
|
+
"aria-label": t('chat.removeActiveToolAria'),
|
|
827
|
+
onClick: function onClick(e) {
|
|
828
|
+
e.stopPropagation();
|
|
829
|
+
beginToolChipExit();
|
|
830
|
+
},
|
|
831
|
+
children: activeToolChipLeadingIcon
|
|
832
|
+
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
833
|
+
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
834
|
+
})]
|
|
835
|
+
})]
|
|
836
|
+
})
|
|
837
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
838
|
+
style: compactSingleRowToolbar ? {
|
|
839
|
+
gridColumn: 2,
|
|
840
|
+
gridRow: 1,
|
|
841
|
+
minWidth: 0,
|
|
842
|
+
alignSelf: 'center'
|
|
843
|
+
} : {
|
|
844
|
+
gridColumn: '1 / -1',
|
|
845
|
+
gridRow: 1,
|
|
846
|
+
minWidth: 0
|
|
847
|
+
},
|
|
803
848
|
children: /*#__PURE__*/_jsx(ContextMentionEditor, {
|
|
804
849
|
ref: editorRef,
|
|
805
850
|
disabled: disabled,
|
|
806
851
|
placeholder: placeholder,
|
|
807
|
-
maxHeight: editorMaxHeight,
|
|
808
852
|
onInput: handleEditorInput,
|
|
809
853
|
onKeyDown: handleKeyDown,
|
|
854
|
+
onFocus: handleWrapperFocus,
|
|
855
|
+
onBlur: handleWrapperBlur,
|
|
810
856
|
onPasteFiles: handlePasteFiles
|
|
811
857
|
})
|
|
812
|
-
}), /*#__PURE__*/
|
|
813
|
-
|
|
814
|
-
children:
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
"aria-haspopup": "true",
|
|
823
|
-
"aria-expanded": plusMenuOpen,
|
|
824
|
-
children: /*#__PURE__*/_jsx(MaiaInputAddIcon, {
|
|
825
|
-
color: toolbarIconColor,
|
|
826
|
-
width: 18,
|
|
827
|
-
height: 18
|
|
828
|
-
})
|
|
829
|
-
}), showMentionButton && /*#__PURE__*/_jsx(PlusToggleButton, {
|
|
830
|
-
type: "button",
|
|
831
|
-
$menuOpen: false,
|
|
832
|
-
onClick: handleMentionButtonClick,
|
|
833
|
-
disabled: disabled,
|
|
834
|
-
"aria-label": t('chat.openMentionAria'),
|
|
835
|
-
children: /*#__PURE__*/_jsx(MaiaInputMentionIcon, {
|
|
836
|
-
color: toolbarIconColor,
|
|
837
|
-
width: 18,
|
|
838
|
-
height: 18
|
|
839
|
-
})
|
|
840
|
-
}), /*#__PURE__*/_jsx(Popover, {
|
|
841
|
-
open: plusMenuOpen,
|
|
842
|
-
anchorEl: plusMenuAnchor,
|
|
843
|
-
onClose: closePlusMenu,
|
|
844
|
-
disableAutoFocus: true,
|
|
845
|
-
disableEnforceFocus: true,
|
|
846
|
-
disableRestoreFocus: true,
|
|
847
|
-
anchorOrigin: {
|
|
848
|
-
vertical: 'top',
|
|
849
|
-
horizontal: 'left'
|
|
850
|
-
},
|
|
851
|
-
transformOrigin: {
|
|
852
|
-
vertical: 'bottom',
|
|
853
|
-
horizontal: 'left'
|
|
854
|
-
},
|
|
855
|
-
sx: {
|
|
856
|
-
zIndex: plusMenuZIndex
|
|
857
|
-
},
|
|
858
|
-
slotProps: {
|
|
859
|
-
paper: {
|
|
860
|
-
elevation: 0,
|
|
861
|
-
sx: {
|
|
862
|
-
overflow: 'visible',
|
|
863
|
-
borderRadius: '4px',
|
|
864
|
-
boxShadow: 'none',
|
|
865
|
-
backgroundColor: 'transparent',
|
|
866
|
-
marginTop: '-4px'
|
|
867
|
-
}
|
|
868
|
-
}
|
|
869
|
-
},
|
|
870
|
-
children: /*#__PURE__*/_jsx(PlusMenuPaper, {
|
|
871
|
-
children: /*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
872
|
-
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
873
|
-
type: "button",
|
|
874
|
-
onClick: handlePlusMenuAttach,
|
|
875
|
-
children: [/*#__PURE__*/_jsx(MaiaInputAttachIcon, {
|
|
876
|
-
color: plusMenuIconColor,
|
|
877
|
-
width: 21,
|
|
878
|
-
height: 20
|
|
879
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
880
|
-
children: t('chat.plusMenuAttach')
|
|
881
|
-
})]
|
|
882
|
-
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
883
|
-
type: "button",
|
|
884
|
-
onClick: handlePlusMenuWebSearch,
|
|
885
|
-
children: [/*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
|
|
886
|
-
color: plusMenuIconColor,
|
|
887
|
-
width: 20,
|
|
888
|
-
height: 20
|
|
889
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
890
|
-
children: t('chat.searchWeb')
|
|
891
|
-
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
892
|
-
color: plusMenuIconColor,
|
|
893
|
-
width: 16,
|
|
894
|
-
height: 16
|
|
895
|
-
}) : null]
|
|
896
|
-
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
897
|
-
type: "button",
|
|
898
|
-
onClick: handlePlusMenuDeepSearch,
|
|
899
|
-
children: [/*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
|
|
900
|
-
color: plusMenuIconColor,
|
|
901
|
-
width: 20,
|
|
902
|
-
height: 20
|
|
903
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
904
|
-
children: t('chat.plusMenuDeepInvestigation')
|
|
905
|
-
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
906
|
-
color: plusMenuIconColor,
|
|
907
|
-
width: 16,
|
|
908
|
-
height: 16
|
|
909
|
-
}) : null]
|
|
910
|
-
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
911
|
-
type: "button",
|
|
912
|
-
onClick: handlePlusMenuQuickActions,
|
|
913
|
-
children: [/*#__PURE__*/_jsx(MaiaInputSlashIcon, {
|
|
914
|
-
color: plusMenuIconColor,
|
|
915
|
-
width: 20,
|
|
916
|
-
height: 20
|
|
917
|
-
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
918
|
-
children: t('chat.plusMenuQuickActions')
|
|
919
|
-
})]
|
|
920
|
-
})]
|
|
921
|
-
})
|
|
922
|
-
})
|
|
923
|
-
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
924
|
-
$hovered: activeToolChipHovered,
|
|
925
|
-
$exiting: toolChipExiting,
|
|
926
|
-
onMouseEnter: function onMouseEnter() {
|
|
927
|
-
return setActiveToolChipHovered(true);
|
|
928
|
-
},
|
|
929
|
-
onMouseLeave: function onMouseLeave() {
|
|
930
|
-
return setActiveToolChipHovered(false);
|
|
931
|
-
},
|
|
932
|
-
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
933
|
-
type: "button",
|
|
934
|
-
$closeShown: activeToolChipHovered,
|
|
935
|
-
"aria-label": t('chat.removeActiveToolAria'),
|
|
936
|
-
onClick: function onClick(e) {
|
|
937
|
-
e.stopPropagation();
|
|
938
|
-
beginToolChipExit();
|
|
939
|
-
},
|
|
940
|
-
children: activeToolChipLeadingIcon
|
|
941
|
-
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
942
|
-
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
943
|
-
})]
|
|
944
|
-
})]
|
|
858
|
+
}), /*#__PURE__*/_jsx(StyledMAIASendToolbarCell, {
|
|
859
|
+
$compactRow: compactSingleRowToolbar,
|
|
860
|
+
children: isWriting ? /*#__PURE__*/_jsx(Tooltip, {
|
|
861
|
+
title: t('chat.stop'),
|
|
862
|
+
zIndex: tooltipZIndex,
|
|
863
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
|
|
864
|
+
disabled: false,
|
|
865
|
+
onClick: handleStopGeneration,
|
|
866
|
+
className: className,
|
|
867
|
+
children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
|
|
945
868
|
})
|
|
946
|
-
})
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
width: 15,
|
|
957
|
-
height: 14,
|
|
958
|
-
color: toolbarIconColor
|
|
959
|
-
})
|
|
960
|
-
})
|
|
961
|
-
})), agentModelName && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
962
|
-
title: t('chipLlm.tooltip', {
|
|
963
|
-
model: agentModelName
|
|
964
|
-
})
|
|
965
|
-
}, tooltipZIndex != null ? {
|
|
966
|
-
zIndex: tooltipZIndex
|
|
967
|
-
} : {}), {}, {
|
|
968
|
-
children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
|
|
969
|
-
"aria-label": agentModelName,
|
|
970
|
-
children: /*#__PURE__*/_jsx(MaiaInputRobotIcon, {
|
|
971
|
-
width: 18,
|
|
972
|
-
height: 18,
|
|
973
|
-
color: toolbarIconColor
|
|
974
|
-
})
|
|
975
|
-
})
|
|
976
|
-
}))]
|
|
977
|
-
}), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
|
|
978
|
-
title: t('chat.stop'),
|
|
979
|
-
zIndex: tooltipZIndex,
|
|
980
|
-
children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
|
|
981
|
-
disabled: false,
|
|
982
|
-
onClick: handleStopGeneration,
|
|
869
|
+
}) : /*#__PURE__*/_jsx(Tooltip, {
|
|
870
|
+
title: t('chat.send'),
|
|
871
|
+
zIndex: tooltipZIndex,
|
|
872
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
873
|
+
style: {
|
|
874
|
+
display: 'inline-flex',
|
|
875
|
+
alignItems: 'center'
|
|
876
|
+
},
|
|
877
|
+
children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
|
|
878
|
+
onClick: handleSendMessage,
|
|
983
879
|
className: className,
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
style: {
|
|
991
|
-
display: 'inline-flex',
|
|
992
|
-
alignItems: 'center'
|
|
993
|
-
},
|
|
994
|
-
children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
|
|
995
|
-
onClick: handleSendMessage,
|
|
996
|
-
className: className,
|
|
997
|
-
disabled: sendDisabled || disabled,
|
|
998
|
-
hasValues: hasTypingPresence || attachments.length > 0,
|
|
999
|
-
children: /*#__PURE__*/_jsx(MaiaInputSendIcon, {
|
|
1000
|
-
color: "#BFBFBF",
|
|
1001
|
-
width: 16,
|
|
1002
|
-
height: 16
|
|
1003
|
-
})
|
|
880
|
+
disabled: sendDisabled || disabled,
|
|
881
|
+
hasValues: hasTypingPresence || attachments.length > 0,
|
|
882
|
+
children: /*#__PURE__*/_jsx(PaperPlane, {
|
|
883
|
+
color: "#BFBFBF",
|
|
884
|
+
width: 18,
|
|
885
|
+
height: 18
|
|
1004
886
|
})
|
|
1005
887
|
})
|
|
1006
|
-
})
|
|
1007
|
-
})
|
|
888
|
+
})
|
|
889
|
+
})
|
|
1008
890
|
})]
|
|
1009
891
|
}), /*#__PURE__*/_jsx("input", {
|
|
1010
892
|
ref: fileInputRef,
|
|
@@ -1030,17 +912,7 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
1030
912
|
excludedFiles: modalProps.excludedFiles,
|
|
1031
913
|
exceededFiles: modalProps.exceededFiles,
|
|
1032
914
|
fileSizes: modalProps.fileSizes
|
|
1033
|
-
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)
|
|
1034
|
-
commands: slashCommands,
|
|
1035
|
-
query: slashQuery,
|
|
1036
|
-
onSelect: handleSelectSlashCommand,
|
|
1037
|
-
onClose: handleCloseSlashDropdown,
|
|
1038
|
-
bottom: slashDropdownPos.bottom,
|
|
1039
|
-
left: slashDropdownPos.left,
|
|
1040
|
-
maxHeight: slashDropdownPos.maxHeight,
|
|
1041
|
-
zIndex: slashDropdownZIndex,
|
|
1042
|
-
anchorRef: wrapperRef
|
|
1043
|
-
}), document.body)]
|
|
915
|
+
}), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)]
|
|
1044
916
|
});
|
|
1045
917
|
};
|
|
1046
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ0lucHV0Q2hpcHNSb3ciLCJTQ0lucHV0TWV0YUljb25CdXR0b24iLCJTQ0lucHV0TWV0YUluZGljYXRvcnMiLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlNDTUlBdHRhY2htZW50RmlsZUljb24iLCJTQ01JQXR0YWNobWVudEljb24iLCJTQ01JQXR0YWNobWVudE5hbWUiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkIiwiU0NJbnB1dEVkaXRvckNlbGwiLCJTQ0lucHV0VG9vbGJhclJvdyIsIlN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwiLCJTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVN0b3BCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEljb24iLCJTdHlsZWRNQUlBRHJvcE92ZXJsYXkiLCJnZXRNYWlhSW5wdXRFZGl0b3JNYXhIZWlnaHQiLCJNQUlBX0lOUFVUX1RPT0xCQVJfUk9XX0hFSUdIVF9QWCIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwiU2xhc2hDb21tYW5kRHJvcGRvd24iLCJ1c2VTbGFzaENvbW1hbmRzIiwicmVzb2x2ZVF1aWNrQWN0aW9uVHlwZSIsInVzZVQiLCJNYWlhSW5wdXRBZGRJY29uIiwiTWFpYUlucHV0QXR0YWNoSWNvbiIsIk1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24iLCJNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiIsIkNvckFjY2Vzc0ljb24iLCJNYWlhSW5wdXRNZW50aW9uSWNvbiIsIk1haWFJbnB1dFJvYm90SWNvbiIsIk1haWFJbnB1dFNlbmRJY29uIiwiTWFpYUlucHV0U2xhc2hJY29uIiwiTWFpYUlucHV0V2ViU2VhcmNoSWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSIsIk1BSUFfQ0hBVF9JTlBVVF9VSSIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZXMiLCJNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OIiwiTUFYX0ZJTEVfU0laRV9NQl9PTEQiLCJNQVhfRklMRV9TSVpFX01CX0FVRElPIiwiTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMiLCJBUFBDVUVTX0VWRU5UUyIsInRyYWNrQXBwY3Vlc0V2ZW50IiwiQ2hpcCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZU1lbnRpb25Qb3BvdmVyIiwiZGF0YVRyYW5zZmVySGFzRmlsZXMiLCJmaWxlc0Zyb21EYXRhVHJhbnNmZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJUT09MX0NISVBfRVhJVF9NUyIsIlNMQVNIX0RST1BET1dOX1dJRFRIX1BYIiwiU0xBU0hfRFJPUERPV05fTEVGVF9PRkZTRVRfUFgiLCJTTEFTSF9EUk9QRE9XTl9NQVhfSEVJR0hUX1BYIiwiU0xBU0hfRFJPUERPV05fR0FQX0FCT1ZFX0lOUFVUX1BYIiwiU0xBU0hfRFJPUERPV05fVklFV1BPUlRfRURHRV9QWCIsIk1BSUFJbnB1dCIsIl9yZWYiLCJfYWdlbnQkZW50aXR5IiwiX2NvbnRleHRDaGlwJGl0ZW1zIiwiX2NvbnRleHRDaGlwJGl0ZW1zMiIsIl9hZ2VudCRjb25uZWN0b3JzIiwiX2FnZW50JG1vZGVsX2Rpc3BsYXlfIiwiX2NvbnRleHRDaGlwJGl0ZW1zMyIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJ0b29sdGlwWkluZGV4IiwiZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmIiwicG9wb3ZlckFuY2hvclJlZiIsImxheW91dE1vZGUiLCJjb250ZXh0Q2hpcCIsIl91c2VUIiwidCIsImVkaXRvclJlZiIsImZpbGVJbnB1dFJlZiIsImNoaXBzUm93UmVmIiwidG9vbGJhclJvd1JlZiIsImludGVybmFsV3JhcHBlclJlZiIsIndyYXBwZXJSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoYXNUeXBpbmdQcmVzZW5jZSIsInNldEhhc1R5cGluZ1ByZXNlbmNlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjaGlwc1Jvd0hlaWdodCIsInNldENoaXBzUm93SGVpZ2h0IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b29sYmFyUm93SGVpZ2h0Iiwic2V0VG9vbGJhclJvd0hlaWdodCIsIl91c2VTdGF0ZTciLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImZpbGVTaXplcyIsIl91c2VTdGF0ZTgiLCJtb2RhbFByb3BzIiwic2V0TW9kYWxQcm9wcyIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImluaXRpYWxEcmFmdCIsImRlZXBMaW5rU2VuZFBlbmRpbmdSZWYiLCJwbHVzTWVudVpJbmRleCIsImluaXRpYWxEcmFmdEFwcGxpZWRSZWYiLCJfdXNlTWVudGlvblBvcG92ZXIiLCJwb3BvdmVyT3BlbiIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImhhbmRsZVRyaWdnZXIiLCJoYW5kbGVQb3BvdmVyS2V5RG93biIsImhhbmRsZUtleURvd24iLCJwb3BvdmVyTm9kZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwicGx1c01lbnVBbmNob3IiLCJzZXRQbHVzTWVudUFuY2hvciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsInNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJ0b29sQ2hpcEV4aXRpbmciLCJzZXRUb29sQ2hpcEV4aXRpbmciLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNGaWxlRHJhZ0FjdGl2ZSIsInNldElzRmlsZURyYWdBY3RpdmUiLCJ0b29sQ2hpcEV4aXRUaW1lclJlZiIsImZpbGVEcmFnQ291bnRlclJlZiIsInNlYXJjaE1vZGVBY3RpdmVSZWYiLCJ3ZWIiLCJkZWVwIiwicGx1c01lbnVPcGVuIiwiQm9vbGVhbiIsInByZXZpb3VzQWdlbnRJZFJlZiIsInVuZGVmaW5lZCIsInByZXZpb3VzQ2hhdElkUmVmIiwicHJldmlvdXNOZXdDaGF0S2V5UmVmIiwicHJldmlvdXNMYXlvdXRNb2RlUmVmIiwiYW5hbHl0aWNzQWdlbnRUeXBlIiwiYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIiwidHlwZSIsImVudGl0eSIsIl91c2VTbGFzaENvbW1hbmRzIiwiaWQiLCJzbGFzaENvbW1hbmRzIiwiY29tbWFuZHMiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2Iiwic2hvd1NsYXNoRHJvcGRvd24iLCJzZXRTaG93U2xhc2hEcm9wZG93biIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJzbGFzaFF1ZXJ5Iiwic2V0U2xhc2hRdWVyeSIsInNsYXNoTWVudVdhc09wZW5SZWYiLCJzbGFzaERyb3Bkb3duWkluZGV4IiwiX3VzZVN0YXRlMTkiLCJib3R0b20iLCJsZWZ0IiwibWF4SGVpZ2h0IiwiX3VzZVN0YXRlMjAiLCJzbGFzaERyb3Bkb3duUG9zIiwic2V0U2xhc2hEcm9wZG93blBvcyIsInBvc2l0aW9uU2xhc2hEcm9wZG93biIsIl93cmFwcGVyUmVmJGN1cnJlbnQiLCJyZWN0IiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwidmlld3BvcnRIIiwid2luZG93IiwiaW5uZXJIZWlnaHQiLCJ2aWV3cG9ydFciLCJpbm5lcldpZHRoIiwiTWF0aCIsIm1heCIsIm1pbiIsImF2YWlsYWJsZUhlaWdodFB4IiwidG9wIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsIl9lZGl0b3JSZWYkY3VycmVudCIsImZvY3VzIiwiY2xvc2VQbHVzTWVudSIsImNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQiLCJjbGVhclRpbWVvdXQiLCJoYW5kbGVQbHVzQnV0dG9uTW91c2VEb3duIiwiZSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUGx1c0J1dHRvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRhcmdldCIsImFpQ2hhdFBsdXNPcGVuIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2siLCJfZWRpdG9yUmVmJGN1cnJlbnQyIiwiaW5zZXJ0TWVudGlvblRyaWdnZXIiLCJoYW5kbGVQbHVzTWVudUF0dGFjaCIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwibGVuZ3RoIiwiY2xpY2siLCJiZWdpblRvb2xDaGlwRXhpdCIsIndhc1dlYiIsIndhc0RlZXAiLCJfc2VhcmNoTW9kZUFjdGl2ZVJlZiQiLCJoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCIsImhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCIsImhhbmRsZVBsdXNNZW51UXVpY2tBY3Rpb25zIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsImluc2VydFNsYXNoVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ1IiwiZHJhZnQiLCJ0cmltIiwic2V0UGxhaW5UZXh0IiwiX2VkaXRvclJlZiRjdXJyZW50NiIsInNlbmREaXNhYmxlZCIsImFnZW50Q2hhbmdlZCIsInByZXZpb3VzQ2hhdElkIiwiY3VycmVudENoYXRJZCIsImNoYXRDaGFuZ2VkIiwiY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0IiwibmV3Q2hhdFN0YXJ0ZWQiLCJpc0luaXRpYWxNb3VudCIsImRlbGF5IiwiX2VkaXRvclJlZiRjdXJyZW50NyIsInByZXZpb3VzTGF5b3V0TW9kZSIsInRpbWVvdXRJZCIsIl9lZGl0b3JSZWYkY3VycmVudDgiLCJpc1NwZWNpYWxpc3RBZ2VudCIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfcmVmMiIsIl9yZWYzIiwiZW50cnkiLCJpc0ludGVyc2VjdGluZyIsIm1haWFDb250ZXh0TWVudGlvbkluaXQiLCJkaXNjb25uZWN0IiwidGhyZXNob2xkIiwib2JzZXJ2ZSIsImhhbmRsZVNlc3Npb25DaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQ5IiwiY2xlYXIiLCJkb2N1bWVudCIsImhhbmRsZVJlZm9jdXMiLCJfZWRpdG9yUmVmJGN1cnJlbnQwIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQxIiwiX3N0YXRlJHRleHQiLCJfc3RhdGUkbWVudGlvbnMiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMCIsInN0YXRlIiwic2VyaWFsaXplIiwidGV4dCIsIm1lbnRpb25zIiwiaGFuZGxlU2VsZWN0U2xhc2hDb21tYW5kIiwiY29tbWFuZCIsIl9lZGl0b3JSZWYkY3VycmVudDExIiwiX3N0YXRlJHRleHQyIiwiX2VkaXRvclJlZiRjdXJyZW50MTMiLCJhaUNoYXRRdWlja0FjdGlvblNlbGVjdCIsInR5cGVfcXVpY2tfYWN0aW9uIiwib3JpZ2luX3F1aWNrX2FjdGlvbiIsInRyaWdnZXJQYXJ0IiwiY29uY2F0IiwiYmVmb3JlVHJpZ2dlciIsImVuZHNXaXRoIiwic2xpY2UiLCJpc0VtcHR5QmVmb3JlVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDEyIiwidGl0bGUiLCJpbnNlcnRTbGFzaENvbW1hbmQiLCJsYWJlbCIsImhhbmRsZUNsb3NlU2xhc2hEcm9wZG93biIsImhhbmRsZUVkaXRvcklucHV0IiwiX3JlZjQiLCJ0cmlnZ2VyIiwic2xhc2hUcmlnZ2VyIiwiYWN0aXZlIiwiYWlDaGF0UXVpY2tBY3Rpb25PcGVuIiwicXVlcnkiLCJrZXkiLCJzaGlmdEtleSIsImFkZEZpbGVzIiwiaW5jb21pbmciLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpbmNsdWRlcyIsImlzT2xkRm9ybWF0IiwiaXNBdWRpb0Zvcm1hdCIsImZvckVhY2giLCJmaWxlIiwiX2ZpbGVOYW1lUGFydHMkcG9wIiwiZXhjbHVkZWRGaWxlIiwiZmlsZU5hbWVQYXJ0cyIsIm5hbWUiLCJzcGxpdCIsImZpbGVFeHRlbnNpb24iLCJwb3AiLCJ0b0xvd2VyQ2FzZSIsInNpemUiLCJwdXNoIiwidHlwZUZpbGUiLCJwYXJzZWRGaWxlIiwiRmlsZSIsImhhbmRsZUZpbGVTZWxlY3QiLCJmaWxlcyIsInRhcmdldCIsIkFycmF5IiwiZnJvbSIsInZhbHVlIiwicmVzZXRGaWxlRHJhZyIsImhhbmRsZURyYWdFbnRlciIsImRhdGFUcmFuc2ZlciIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZURyYWdPdmVyIiwiZHJvcEVmZmVjdCIsImhhbmRsZURyb3AiLCJoYW5kbGVQYXN0ZUZpbGVzIiwiaGFuZGxlV3JhcHBlclBhc3RlIiwiX3dyYXBwZXJSZWYkY3VycmVudDIiLCJlZGl0b3JFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250YWlucyIsImNsaXBib2FyZERhdGEiLCJoYW5kbGVEZWxldGVBdHRhY2htZW50IiwiZmlsZUlkIiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJzaG93Q2hpcHNSb3ciLCJpdGVtcyIsImNoaXBzRWwiLCJ0b29sYmFyRWwiLCJ1cGRhdGVIZWlnaHRzIiwibmV4dENoaXBzIiwiY2VpbCIsImhlaWdodCIsIm5leHRUb29sYmFyIiwicHJldiIsIlJlc2l6ZU9ic2VydmVyIiwiZWRpdG9yTWF4SGVpZ2h0IiwiY2hpcHNSb3dIZWlnaHRQeCIsInRvb2xiYXJSb3dIZWlnaHRQeCIsInRvb2xiYXJJY29uQ29sb3IiLCJwbHVzTWVudUljb25Db2xvciIsIm1lbnVJY29uIiwiaXNDdXN0b21BZ2VudCIsImhhc0NvckFjY2VzcyIsImNvbm5lY3RvcnMiLCJzb21lIiwiY29ubmVjdG9yIiwiZ3JvdXAiLCJzbHVncyIsInNsdWciLCJhZ2VudE1vZGVsTmFtZSIsIm1vZGVsX2Rpc3BsYXlfbmFtZSIsInNob3dDdXN0b21NZXRhSW5kaWNhdG9ycyIsInNob3dNZW50aW9uQnV0dG9uIiwiYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiIsImNvbG9yIiwiY2hpcENsb3NlSWNvbiIsImNoaWxkcmVuIiwicmVmIiwiaGFzQXR0YWNobWVudHMiLCIkZmlsZURyYWdBY3RpdmUiLCJvblBhc3RlIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJsZWFkaW5nSWNvbiIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJpc0ltYWdlIiwic3RhcnRzV2l0aCIsInRlc3QiLCJjaGlwSWNvbiIsInpJbmRleCIsImRlZmF1bHRWYWx1ZSIsIm9uQ2xpY2siLCJvbklucHV0Iiwib25LZXlEb3duIiwib25QYXN0ZUZpbGVzIiwiJG1lbnVPcGVuIiwib25Nb3VzZURvd24iLCJvcGVuIiwiYW5jaG9yRWwiLCJvbkNsb3NlIiwiZGlzYWJsZUF1dG9Gb2N1cyIsImRpc2FibGVFbmZvcmNlRm9jdXMiLCJkaXNhYmxlUmVzdG9yZUZvY3VzIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwic3giLCJzbG90UHJvcHMiLCJwYXBlciIsImVsZXZhdGlvbiIsIm92ZXJmbG93IiwiYm9yZGVyUmFkaXVzIiwiYm94U2hhZG93IiwiYmFja2dyb3VuZENvbG9yIiwibWFyZ2luVG9wIiwiJGhvdmVyZWQiLCIkZXhpdGluZyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIiRjbG9zZVNob3duIiwibW9kZWwiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJib2R5Iiwib25TZWxlY3QiLCJhbmNob3JSZWYiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQge1xuICBDaGFuZ2VFdmVudCxcbiAgQ2xpcGJvYXJkRXZlbnQsXG4gIERyYWdFdmVudCxcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudCxcbiAgUmVhY3ROb2RlLFxuICBNdXRhYmxlUmVmT2JqZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgUG9wb3ZlciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5pbXBvcnQgeyBDaGVjayB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZWNrJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHtcbiAgQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uLFxuICBBY3RpdmVUb29sQ2hpcExhYmVsLFxuICBBY3RpdmVUb29sQ2hpcFJvb3QsXG4gIFBsdXNNZW51RGl2aWRlcixcbiAgUGx1c01lbnVJbm5lckNvbHVtbixcbiAgUGx1c01lbnVJdGVtQnV0dG9uLFxuICBQbHVzTWVudUl0ZW1MYWJlbCxcbiAgUGx1c01lbnVQYXBlcixcbiAgUGx1c01lbnVUb29sc1JvdyxcbiAgUGx1c1RvZ2dsZUJ1dHRvbixcbiAgU0NJbnB1dENoaXBzUm93LFxuICBTQ0lucHV0TWV0YUljb25CdXR0b24sXG4gIFNDSW5wdXRNZXRhSW5kaWNhdG9ycyxcbiAgU0NNSUF0dGFjaG1lbnQsXG4gIFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbixcbiAgU0NNSUF0dGFjaG1lbnRGaWxlSWNvbixcbiAgU0NNSUF0dGFjaG1lbnRJY29uLFxuICBTQ01JQXR0YWNobWVudE5hbWUsXG4gIFN0eWxlZE1BSUFJbnB1dFdyYXBwZXIsXG4gIFN0eWxlZE1BSUFTZW5kQnV0dG9uLFxuICBTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkLFxuICBTQ0lucHV0RWRpdG9yQ2VsbCxcbiAgU0NJbnB1dFRvb2xiYXJSb3csXG4gIFN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTdG9wQnV0dG9uLFxuICBTdHlsZWRNQUlBU3RvcEljb24sXG4gIFN0eWxlZE1BSUFEcm9wT3ZlcmxheSxcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBnZXRNYWlhSW5wdXRFZGl0b3JNYXhIZWlnaHQsIE1BSUFfSU5QVVRfVE9PTEJBUl9ST1dfSEVJR0hUX1BYIH0gZnJvbSAnLi9tYWlhSW5wdXRMYXlvdXQnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IFNsYXNoQ29tbWFuZERyb3Bkb3duIH0gZnJvbSAnLi4vU2xhc2hDb21tYW5kRHJvcGRvd24nXG5pbXBvcnQgeyB1c2VTbGFzaENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU2xhc2hDb21tYW5kcydcbmltcG9ydCB7IHJlc29sdmVRdWlja0FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ob3Vyc1BsYW5uZXJRdWlja0FjdGlvblR5cGUnXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0FjdGlvbidcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgTWFpYUlucHV0QWRkSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dEFkZEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRBdHRhY2hJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0QXR0YWNoSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRBdHRhY2htZW50SW1hZ2VJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0RGVlcFNlYXJjaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXREZWVwU2VhcmNoSWNvbidcbmltcG9ydCB7IENvckFjY2Vzc0ljb24gfSBmcm9tICcuLi9pY29ucy9Db3JBY2Nlc3NJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0TWVudGlvbkljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRNZW50aW9uSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFJvYm90SWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dFJvYm90SWNvbidcbmltcG9ydCB7IE1haWFJbnB1dFNlbmRJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0U2VuZEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRTbGFzaEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRTbGFzaEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRXZWJTZWFyY2hJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0V2ViU2VhcmNoSWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGdldENoYXRUb29sc01lbnVBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgTUFJQV9DSEFUX0lOUFVUX1VJIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7XG4gIGFsbG93ZWRGaWxlVHlwZXMsXG4gIGZpbGVUeXBlcyxcbiAgTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTixcbiAgTUFYX0ZJTEVfU0laRV9NQl9PTEQsXG4gIE1BWF9GSUxFX1NJWkVfTUJfQVVESU8sXG4gIE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcbmltcG9ydCB7IEFQUENVRVNfRVZFTlRTLCB0cmFja0FwcGN1ZXNFdmVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcGN1ZXMnXG5pbXBvcnQgeyBDaGlwIH0gZnJvbSAnLi4vQ2hpcCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9yLCBDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZSB9IGZyb20gJy4uL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgeyB1c2VNZW50aW9uUG9wb3ZlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1lbnRpb25Qb3BvdmVyJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBkYXRhVHJhbnNmZXJIYXNGaWxlcywgZmlsZXNGcm9tRGF0YVRyYW5zZmVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY2hhdElucHV0RmlsZXMnXG5cbmNvbnN0IFRPT0xfQ0hJUF9FWElUX01TID0gMjIwXG5jb25zdCBTTEFTSF9EUk9QRE9XTl9XSURUSF9QWCA9IDM0MFxuY29uc3QgU0xBU0hfRFJPUERPV05fTEVGVF9PRkZTRVRfUFggPSAyNFxuY29uc3QgU0xBU0hfRFJPUERPV05fTUFYX0hFSUdIVF9QWCA9IDQxNlxuY29uc3QgU0xBU0hfRFJPUERPV05fR0FQX0FCT1ZFX0lOUFVUX1BYID0gNFxuY29uc3QgU0xBU0hfRFJPUERPV05fVklFV1BPUlRfRURHRV9QWCA9IDhcblxudHlwZSBBdHRhY2htZW50RmlsZSA9IHtcbiAgZmlsZTogRmlsZVxuICBvcmlnaW5hbEZpbGU/OiBGaWxlXG4gIGlkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNpemU6IG51bWJlclxuICB0eXBlOiBzdHJpbmdcbiAgaWNvbj86IFJlYWN0Tm9kZVxufVxuXG50eXBlIE1BSUFJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2VuZE1lc3NhZ2U6IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICBmYXFJZD86IHN0cmluZyxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICBmdWFJZD86IHN0cmluZyxcbiAgICBzY0lkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCgpID0+IHZvaWQpIHwgbnVsbFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG4gIHRvb2x0aXBaSW5kZXg/OiBudW1iZXJcbiAgLyoqIEV4cG9uZSBlbCB3cmFwcGVyIGRlbCBpbnB1dCBwYXJhIGFuY2xhciBwb3BvdmVycyAobWVuY2lvbmVzLCBwaW4gZGUgY29udGV4dG8pLiAqL1xuICBwb3BvdmVyQW5jaG9yUmVmPzogTXV0YWJsZVJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IG51bGw+XG4gIGxheW91dE1vZGU/OiAnc2lkZWJhcicgfCAnZnVsbHNjcmVlbicgfCAnZmxvYXRpbmcnXG4gIC8qKiBDaGlwIGRlIGNvbnRleHRvICh0YXJlYS9wcm95ZWN0by9jbGllbnRlL2dsb2JhbCkgbW9zdHJhZG8gZW4gbGEgdG9vbGJhciBkZWwgaW5wdXQuICovXG4gIGNvbnRleHRDaGlwPzoge1xuICAgIGl0ZW1zOiBzdHJpbmdbXVxuICAgIHR5cGU/OiBDb250ZXh0RW50aXR5VHlwZVxuICAgIGxlYWRpbmdJY29uPzogUmVhY3ROb2RlXG4gIH0gfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG4gIHRvb2x0aXBaSW5kZXgsXG4gIHBvcG92ZXJBbmNob3JSZWY6IGV4dGVybmFsUG9wb3ZlckFuY2hvclJlZixcbiAgbGF5b3V0TW9kZSxcbiAgY29udGV4dENoaXAsXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGlwc1Jvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdG9vbGJhclJvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgaW50ZXJuYWxXcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmID8/IGludGVybmFsV3JhcHBlclJlZlxuICBjb25zdCBbaGFzVHlwaW5nUHJlc2VuY2UsIHNldEhhc1R5cGluZ1ByZXNlbmNlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY2hpcHNSb3dIZWlnaHQsIHNldENoaXBzUm93SGVpZ2h0XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFt0b29sYmFyUm93SGVpZ2h0LCBzZXRUb29sYmFyUm93SGVpZ2h0XSA9IHVzZVN0YXRlKE1BSUFfSU5QVVRfVE9PTEJBUl9ST1dfSEVJR0hUX1BYKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBmaWxlU2l6ZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gIH0pXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7XG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZURlZXBTZWFyY2gsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGFnZW50LFxuICAgIGluaXRpYWxEcmFmdCxcbiAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHBsdXNNZW51WkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMzAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IGluaXRpYWxEcmFmdEFwcGxpZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qge1xuICAgIHBvcG92ZXJPcGVuLFxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyxcbiAgICBoYW5kbGVUcmlnZ2VyLFxuICAgIGhhbmRsZUtleURvd246IGhhbmRsZVBvcG92ZXJLZXlEb3duLFxuICAgIHBvcG92ZXJOb2RlLFxuICB9ID0gdXNlTWVudGlvblBvcG92ZXIoe1xuICAgIGVkaXRvclJlZixcbiAgICBwb3BvdmVyQW5jaG9yUmVmOiB3cmFwcGVyUmVmLFxuICB9KVxuXG4gIGNvbnN0IFtwbHVzTWVudUFuY2hvciwgc2V0UGx1c01lbnVBbmNob3JdID0gdXNlU3RhdGU8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbYWN0aXZlVG9vbENoaXBIb3ZlcmVkLCBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt0b29sQ2hpcEV4aXRpbmcsIHNldFRvb2xDaGlwRXhpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzRmlsZURyYWdBY3RpdmUsIHNldElzRmlsZURyYWdBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRvb2xDaGlwRXhpdFRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZmlsZURyYWdDb3VudGVyUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZVJlZiA9IHVzZVJlZjxNQUlBSW5wdXRQcm9wc1snbGF5b3V0TW9kZSddPih1bmRlZmluZWQpXG5cbiAgY29uc3QgYW5hbHl0aWNzQWdlbnRUeXBlID0gZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZShhZ2VudClcbiAgY29uc3QgYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyB7IGVudGl0eTogYWdlbnQuZW50aXR5ID8/IG51bGwgfSA6IHt9XG5cbiAgLy8gU2xhc2ggY29tbWFuZHMgYXBsaWNhbiBhIGNsb25lcyBlc3BlY2lhbGlzdGFzIHkgYWwgb3JjaGVzdHJhdG9yIGdsb2JhbCAoZXN0ZSBhZ3JlZ2EgbG9zIGRlIHN1cyBzdWJhZ2VudGVzKS5cbiAgLy8gTG9zIGN1c3RvbSB5IGxvcyBjbG9uZSBnbG9iYWwvbWFpYWtlciBubyBsb3MgdGllbmVuIGhhYmlsaXRhZG9zLlxuICBjb25zdCB7IGNvbW1hbmRzOiBzbGFzaENvbW1hbmRzIH0gPSB1c2VTbGFzaENvbW1hbmRzKFxuICAgIChhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcpIHx8XG4gICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQ/LmVudGl0eSAhPT0gJ2dsb2JhbCcpXG4gICAgICA/IGFnZW50Py5pZFxuICAgICAgOiB1bmRlZmluZWRcbiAgKVxuICBjb25zdCBbc2hvd1NsYXNoRHJvcGRvd24sIHNldFNob3dTbGFzaERyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2xhc2hRdWVyeSwgc2V0U2xhc2hRdWVyeV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3Qgc2xhc2hNZW51V2FzT3BlblJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2xhc2hEcm9wZG93blpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTIwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbc2xhc2hEcm9wZG93blBvcywgc2V0U2xhc2hEcm9wZG93blBvc10gPSB1c2VTdGF0ZSh7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgbWF4SGVpZ2h0OiBTTEFTSF9EUk9QRE9XTl9NQVhfSEVJR0hUX1BYLFxuICB9KVxuXG4gIGNvbnN0IHBvc2l0aW9uU2xhc2hEcm9wZG93biA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCByZWN0ID0gd3JhcHBlclJlZi5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGlmICghcmVjdCB8fCByZWN0LndpZHRoIDw9IDApIHJldHVyblxuXG4gICAgY29uc3Qgdmlld3BvcnRIID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoXG4gICAgICA4LFxuICAgICAgTWF0aC5taW4odmlld3BvcnRXIC0gU0xBU0hfRFJPUERPV05fV0lEVEhfUFggLSA4LCByZWN0LmxlZnQgKyBTTEFTSF9EUk9QRE9XTl9MRUZUX09GRlNFVF9QWClcbiAgICApXG4gICAgY29uc3QgYXZhaWxhYmxlSGVpZ2h0UHggPSByZWN0LnRvcCAtIFNMQVNIX0RST1BET1dOX0dBUF9BQk9WRV9JTlBVVF9QWCAtIFNMQVNIX0RST1BET1dOX1ZJRVdQT1JUX0VER0VfUFhcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLm1pbihTTEFTSF9EUk9QRE9XTl9NQVhfSEVJR0hUX1BYLCBNYXRoLm1heCgwLCBhdmFpbGFibGVIZWlnaHRQeCkpXG5cbiAgICBzZXRTbGFzaERyb3Bkb3duUG9zKHtcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHJlY3QudG9wICsgU0xBU0hfRFJPUERPV05fR0FQX0FCT1ZFX0lOUFVUX1BYLFxuICAgICAgbWF4SGVpZ2h0LFxuICAgIH0pXG4gIH0sIFt3cmFwcGVyUmVmXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvd1NsYXNoRHJvcGRvd24pIHJldHVybiB1bmRlZmluZWRcblxuICAgIHBvc2l0aW9uU2xhc2hEcm9wZG93bigpXG5cbiAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4gcG9zaXRpb25TbGFzaERyb3Bkb3duKClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlcilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3Nob3dTbGFzaERyb3Bkb3duLCBwb3NpdGlvblNsYXNoRHJvcGRvd25dKVxuXG4gIC8qKiBUcmFzIGVsZWdpciBvIHF1aXRhciBiw7pzcXVlZGEgd2ViL3Byb2Z1bmRhOiB2b2x2ZXIgYWwgdGV4dGFyZWEgKFBvcG92ZXIvbWVudSBwdWVkZSByb2JhciBmb2NvKS4gKi9cbiAgY29uc3Qgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uID0gKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCAwKVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjbG9zZVBsdXNNZW51ID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQgPSAoKSA9PiB7XG4gICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50KVxuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c0J1dHRvbk1vdXNlRG93biA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIC8vIEV2aXRhIHF1ZSBlbCBib3TDs24gcm9iZSBlbCBmb2NvIGRlbCBpbnB1dCBhbCBhYnJpciBlbCBtZW7Dui5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNCdXR0b25DbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAocGx1c01lbnVBbmNob3IpIHtcbiAgICAgIGNsb3NlUGx1c01lbnUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFBsdXNNZW51QW5jaG9yKGUuY3VycmVudFRhcmdldClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UGx1c09wZW4sIHsgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLCAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU1lbnRpb25CdXR0b25DbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRNZW50aW9uVHJpZ2dlcigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHJldHVyblxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBiZWdpblRvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHdhc1dlYiA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgY29uc3Qgd2FzRGVlcCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlmICghd2FzV2ViICYmICF3YXNEZWVwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKHRydWUpXG4gICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGNvbnN0IHsgd2ViLCBkZWVwIH0gPSBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnRcbiAgICAgIGlmICh3YXNXZWIgJiYgd2ViKSB7XG4gICAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICB9IGVsc2UgaWYgKHdhc0RlZXAgJiYgZGVlcCkge1xuICAgICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICAgIH1cbiAgICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gICAgfSwgVE9PTF9DSElQX0VYSVRfTVMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoID0gKCkgPT4ge1xuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGlmIChpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywge1xuICAgICAgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLFxuICAgICAgb3B0aW9uOiAnZGVlcF9zZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNNZW51UXVpY2tBY3Rpb25zID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0U2xhc2hUcmlnZ2VyKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkcmFmdCA9IGluaXRpYWxEcmFmdD8udHJpbSgpXG4gICAgaWYgKCFkcmFmdCB8fCBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgaWYgKGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYpIHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnNldFBsYWluVGV4dChkcmFmdClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0cnVlKVxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbaW5pdGlhbERyYWZ0LCBkaXNhYmxlZCwgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgY29uc3Qgc2VuZERpc2FibGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiAhaGFzVHlwaW5nUHJlc2VuY2UgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwLFxuICAgIFtoYXNUeXBpbmdQcmVzZW5jZSwgYXR0YWNobWVudHMubGVuZ3RoXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmICgoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGxhIGRpc3Bvc2ljacOzbiBkZWwgbW9kYWwgKHNpZGViYXIgLyBmdWxsc2NyZWVuIC8gZmxvYXRpbmcpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYXlvdXRNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlID0gcHJldmlvdXNMYXlvdXRNb2RlUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0xheW91dE1vZGVSZWYuY3VycmVudCA9IGxheW91dE1vZGVcblxuICAgIGlmIChwcmV2aW91c0xheW91dE1vZGUgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0xheW91dE1vZGUgPT09IGxheW91dE1vZGUgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9XG4gICAgfSwgMjAwKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKVxuICB9LCBbbGF5b3V0TW9kZSwgZGlzYWJsZWRdKVxuXG4gIC8vIEFwcGN1ZXM6IG5vdGlmeSB0aGF0IHRoZSBpbnB1dCBpcyB2aXNpYmxlIGZvciBzcGVjaWFsaXN0IGFnZW50cyAoY2xvbmUgKyBwcm9qZWN0L2NsaWVudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpc1NwZWNpYWxpc3RBZ2VudCA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQgfHwgIWlzU3BlY2lhbGlzdEFnZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChbZW50cnldKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIHRyYWNrQXBwY3Vlc0V2ZW50KEFQUENVRVNfRVZFTlRTLm1haWFDb250ZXh0TWVudGlvbkluaXQpXG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cbiAgICApXG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHdyYXBwZXJSZWYuY3VycmVudClcbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFthZ2VudD8uaWQsIGFnZW50Py50eXBlLCBhZ2VudD8uZW50aXR5XSlcblxuICAvLyBDbGVhciBpbnB1dCB3aGVuIHNlc3Npb24gY2hhbmdlcyAodXNlciBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBjaGF0KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoZGVlcExpbmtTZW5kUGVuZGluZ1JlZikge1xuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSlcbiAgfSwgW3Jlc2V0TWVudGlvbk9wZW5UcmFja2luZywgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgLy8gTWFudGVuZXIgZm9jbyBhbCBzZWxlY2Npb25hciB1biBjb250ZXh0byByZWNpZW50ZSAoZWwgY2xpY2sgZW4gZWwgcGlsbCBsbyByb2JhIGFsIGlucHV0KS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZWZvY3VzID0gKCkgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtaW5wdXQtcmVmb2N1cycsIGhhbmRsZVJlZm9jdXMpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtaW5wdXQtcmVmb2N1cycsIGhhbmRsZVJlZm9jdXMpXG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBlZGl0b3JSZWYuY3VycmVudD8uc2VyaWFsaXplKClcbiAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICBpZiAoIXRleHQudHJpbSgpICYmICFhdHRhY2htZW50cy5sZW5ndGgpIHJldHVyblxuICAgIGNvbnN0IG1lbnRpb25zID0gc3RhdGU/Lm1lbnRpb25zID8/IFtdXG4gICAgb25TZW5kTWVzc2FnZSh0ZXh0LCBhdHRhY2htZW50cywgbWVudGlvbnMpXG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZShmYWxzZSlcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gIH0sIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nXSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZDogQWN0aW9uKSA9PiB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25TZWxlY3QsIHtcbiAgICAgICAgdHlwZV9xdWlja19hY3Rpb246IHJlc29sdmVRdWlja0FjdGlvblR5cGUoY29tbWFuZCksXG4gICAgICAgIG9yaWdpbl9xdWlja19hY3Rpb246ICdzbGFzaF9tZW51JyxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICAgIGNvbnN0IHRyaWdnZXJQYXJ0ID0gYC8ke3NsYXNoUXVlcnl9YFxuICAgICAgY29uc3QgYmVmb3JlVHJpZ2dlciA9IHRleHQuZW5kc1dpdGgodHJpZ2dlclBhcnQpID8gdGV4dC5zbGljZSgwLCAtdHJpZ2dlclBhcnQubGVuZ3RoKSA6IHRleHRcbiAgICAgIGNvbnN0IGlzRW1wdHlCZWZvcmVUcmlnZ2VyID0gYmVmb3JlVHJpZ2dlci50cmltKCkgPT09ICcnXG5cbiAgICAgIGlmIChpc0VtcHR5QmVmb3JlVHJpZ2dlcikge1xuICAgICAgICBvblNlbmRNZXNzYWdlKGNvbW1hbmQudGl0bGUsIGF0dGFjaG1lbnRzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbW1hbmQuaWQpXG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRTbGFzaENvbW1hbmQoeyBpZDogY29tbWFuZC5pZCwgbGFiZWw6IGNvbW1hbmQudGl0bGUgfSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYXR0YWNobWVudHMsIG9uU2VuZE1lc3NhZ2UsIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgc2xhc2hRdWVyeSwgZXZlbnRBbXBsaXR1ZGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd24gPSAoKSA9PiB7XG4gICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVkaXRvcklucHV0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHRleHQsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgc2xhc2hUcmlnZ2VyLFxuICAgIH06IHtcbiAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW11cbiAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgICAgIHNsYXNoVHJpZ2dlcj86IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgICB9KSA9PiB7XG4gICAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0ZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgb25DaGFuZ2U/LigpXG4gICAgICBoYW5kbGVUcmlnZ2VyKHRyaWdnZXIpXG5cbiAgICAgIGlmIChzbGFzaFRyaWdnZXI/LmFjdGl2ZSAmJiBzbGFzaENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25PcGVuKVxuICAgICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bih0cnVlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KHNsYXNoVHJpZ2dlci5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyLCBzbGFzaENvbW1hbmRzLCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChoYW5kbGVQb3BvdmVyS2V5RG93bihlKSkgcmV0dXJuXG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkgJiYgIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIHNlbmREaXNhYmxlZCwgZGlzYWJsZWQsIGhhbmRsZVNlbmRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgYWRkRmlsZXMgPSAoaW5jb21pbmc6IEZpbGVbXSkgPT4ge1xuICAgIGlmICghaW5jb21pbmcubGVuZ3RoIHx8IGRpc2FibGVkKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcucHB0JywgJy5wcHR4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBpbmNvbWluZy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgaWYgKGlzTmV3Rm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPbGRGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9BVURJTyAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGFkZEZpbGVzKEFycmF5LmZyb20oZmlsZXMpKVxuICAgIH1cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXNldEZpbGVEcmFnID0gKCkgPT4ge1xuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gMFxuICAgIHNldElzRmlsZURyYWdBY3RpdmUoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW50ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCArPSAxXG4gICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZSh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gKGU6IERyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWlzRmlsZURyYWdBY3RpdmUgJiYgIWRhdGFUcmFuc2Zlckhhc0ZpbGVzKGUuZGF0YVRyYW5zZmVyKSkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gTWF0aC5tYXgoMCwgZmlsZURyYWdDb3VudGVyUmVmLmN1cnJlbnQgLSAxKVxuICAgIGlmIChmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCA9PT0gMCkge1xuICAgICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZShmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFkYXRhVHJhbnNmZXJIYXNGaWxlcyhlLmRhdGFUcmFuc2ZlcikpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSdcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSB7XG4gICAgICByZXNldEZpbGVEcmFnKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmVzZXRGaWxlRHJhZygpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBhZGRGaWxlcyhmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5kYXRhVHJhbnNmZXIpKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGFzdGVGaWxlcyA9IChmaWxlczogRmlsZVtdKSA9PiB7XG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVXcmFwcGVyUGFzdGUgPSAoZTogQ2xpcGJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZWRpdG9yRWwgPSB3cmFwcGVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3IoJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJylcbiAgICBpZiAoZWRpdG9yRWwgJiYgZWRpdG9yRWwuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHJldHVyblxuICAgIGNvbnN0IGZpbGVzID0gZmlsZXNGcm9tRGF0YVRyYW5zZmVyKGUuY2xpcGJvYXJkRGF0YSlcbiAgICBpZiAoIWZpbGVzLmxlbmd0aCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3Qgc2hvd0NoaXBzUm93ID0gQm9vbGVhbihjb250ZXh0Q2hpcD8uaXRlbXM/Lmxlbmd0aCB8fCBhdHRhY2htZW50cy5sZW5ndGgpXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjaGlwc0VsID0gY2hpcHNSb3dSZWYuY3VycmVudFxuICAgIGNvbnN0IHRvb2xiYXJFbCA9IHRvb2xiYXJSb3dSZWYuY3VycmVudFxuXG4gICAgY29uc3QgdXBkYXRlSGVpZ2h0cyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG5leHRDaGlwcyA9IHNob3dDaGlwc1JvdyAmJiBjaGlwc0VsID8gTWF0aC5jZWlsKGNoaXBzRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSA6IDBcbiAgICAgIGNvbnN0IG5leHRUb29sYmFyID0gdG9vbGJhckVsXG4gICAgICAgID8gTWF0aC5jZWlsKHRvb2xiYXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXG4gICAgICAgIDogTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFhcblxuICAgICAgc2V0Q2hpcHNSb3dIZWlnaHQocHJldiA9PiAocHJldiA9PT0gbmV4dENoaXBzID8gcHJldiA6IG5leHRDaGlwcykpXG4gICAgICBzZXRUb29sYmFyUm93SGVpZ2h0KHByZXYgPT4gKHByZXYgPT09IG5leHRUb29sYmFyID8gcHJldiA6IG5leHRUb29sYmFyKSlcbiAgICB9XG5cbiAgICB1cGRhdGVIZWlnaHRzKClcblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHVwZGF0ZUhlaWdodHMpXG4gICAgaWYgKHNob3dDaGlwc1JvdyAmJiBjaGlwc0VsKSBvYnNlcnZlci5vYnNlcnZlKGNoaXBzRWwpXG4gICAgaWYgKHRvb2xiYXJFbCkgb2JzZXJ2ZXIub2JzZXJ2ZSh0b29sYmFyRWwpXG5cbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFtzaG93Q2hpcHNSb3csIGNvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoLCBhdHRhY2htZW50cy5sZW5ndGhdKVxuXG4gIGNvbnN0IGVkaXRvck1heEhlaWdodCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCh7XG4gICAgICAgIGNoaXBzUm93SGVpZ2h0UHg6IGNoaXBzUm93SGVpZ2h0LFxuICAgICAgICB0b29sYmFyUm93SGVpZ2h0UHg6IHRvb2xiYXJSb3dIZWlnaHQsXG4gICAgICB9KSxcbiAgICBbY2hpcHNSb3dIZWlnaHQsIHRvb2xiYXJSb3dIZWlnaHRdXG4gIClcblxuICBjb25zdCB0b29sYmFySWNvbkNvbG9yID0gJyM4MDgwODAnXG4gIGNvbnN0IHBsdXNNZW51SWNvbkNvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLm1lbnVJY29uXG4gIGNvbnN0IGlzQ3VzdG9tQWdlbnQgPSBhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbSdcbiAgY29uc3QgaGFzQ29yQWNjZXNzID0gQm9vbGVhbihcbiAgICBpc0N1c3RvbUFnZW50ICYmXG4gICAgYWdlbnQ/LmNvbm5lY3RvcnM/LnNvbWUoXG4gICAgICBjb25uZWN0b3IgPT5cbiAgICAgICAgY29ubmVjdG9yLmdyb3VwID09PSAnQ09SJyAmJiBjb25uZWN0b3Iuc2x1Z3Muc29tZShzbHVnID0+IHR5cGVvZiBzbHVnID09PSAnc3RyaW5nJyAmJiBzbHVnLnRyaW0oKS5sZW5ndGggPiAwKVxuICAgIClcbiAgKVxuICBjb25zdCBhZ2VudE1vZGVsTmFtZSA9IGlzQ3VzdG9tQWdlbnQgPyBhZ2VudD8ubW9kZWxfZGlzcGxheV9uYW1lPy50cmltKCkgfHwgbnVsbCA6IG51bGxcbiAgY29uc3Qgc2hvd0N1c3RvbU1ldGFJbmRpY2F0b3JzID0gaGFzQ29yQWNjZXNzIHx8IEJvb2xlYW4oYWdlbnRNb2RlbE5hbWUpXG4gIGNvbnN0IHNob3dNZW50aW9uQnV0dG9uID0gYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InIHx8IGhhc0NvckFjY2Vzc1xuXG4gIGxldCBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uOiBSZWFjdE5vZGVcbiAgaWYgKGFjdGl2ZVRvb2xDaGlwSG92ZXJlZCkge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8Q3Jvc3MgY29sb3I9e01BSUFfQ0hBVF9JTlBVVF9VSS5jaGlwQ2xvc2VJY29ufSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPE1haWFJbnB1dFdlYlNlYXJjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdHlsZWRNQUlBSW5wdXRXcmFwcGVyXG4gICAgICAgIHJlZj17d3JhcHBlclJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgaGFzQXR0YWNobWVudHM9eyEhYXR0YWNobWVudHMubGVuZ3RofVxuICAgICAgICAkZmlsZURyYWdBY3RpdmU9e2lzRmlsZURyYWdBY3RpdmV9XG4gICAgICAgIGRhdGEtYXBwY3Vlcz1cIm1haWFfY2hhdF9pbnB1dFwiXG4gICAgICAgIGRhdGEtbWFpYS1zdHJlYW1pbmc9e2lzU3RyZWFtaW5nID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICAgICAgb25QYXN0ZT17aGFuZGxlV3JhcHBlclBhc3RlfVxuICAgICAgICBvbkRyYWdFbnRlcj17aGFuZGxlRHJhZ0VudGVyfVxuICAgICAgICBvbkRyYWdMZWF2ZT17aGFuZGxlRHJhZ0xlYXZlfVxuICAgICAgICBvbkRyYWdPdmVyPXtoYW5kbGVEcmFnT3Zlcn1cbiAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxuICAgICAgPlxuICAgICAgICB7c2hvd0NoaXBzUm93ICYmIChcbiAgICAgICAgICA8U0NJbnB1dENoaXBzUm93IHJlZj17Y2hpcHNSb3dSZWZ9PlxuICAgICAgICAgICAge2NvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8Q2hpcFxuICAgICAgICAgICAgICAgIGl0ZW1zPXtjb250ZXh0Q2hpcC5pdGVtc31cbiAgICAgICAgICAgICAgICB0eXBlPXtjb250ZXh0Q2hpcC50eXBlfVxuICAgICAgICAgICAgICAgIGxlYWRpbmdJY29uPXtjb250ZXh0Q2hpcC5sZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IC9cXC4ocG5nfGpwZT9nfGdpZnx3ZWJwfGJtcHxzdmcpJC9pLnRlc3QoYXR0YWNobWVudC5uYW1lIHx8ICcnKVxuICAgICAgICAgICAgICBjb25zdCBjaGlwSWNvbiA9IGlzSW1hZ2UgPyAoXG4gICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaG1lbnRJbWFnZUljb24gY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRBdHRhY2hJY29uIGNvbG9yPVwiIzgwODA4MFwiIHdpZHRoPXsxM30gaGVpZ2h0PXsxM30gLz5cbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2luZGV4fWB9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudEljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RmlsZUljb24+e2NoaXBJY29ufTwvU0NNSUF0dGFjaG1lbnRGaWxlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnREZWxldGVJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQucmVtb3ZlQXR0YWNobWVudEFyaWEnLCB7IGRlZmF1bHRWYWx1ZTogJ1F1aXRhciBhcmNoaXZvJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiIzY2NjY2NlwiIHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudEljb24+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudE5hbWU+e2F0dGFjaG1lbnQubmFtZX08L1NDTUlBdHRhY2htZW50TmFtZT5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDSW5wdXRDaGlwc1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQ+XG4gICAgICAgICAgPFNDSW5wdXRFZGl0b3JDZWxsPlxuICAgICAgICAgICAgPENvbnRleHRNZW50aW9uRWRpdG9yXG4gICAgICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXtlZGl0b3JNYXhIZWlnaHR9XG4gICAgICAgICAgICAgIG9uSW5wdXQ9e2hhbmRsZUVkaXRvcklucHV0fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgIG9uUGFzdGVGaWxlcz17aGFuZGxlUGFzdGVGaWxlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0lucHV0RWRpdG9yQ2VsbD5cbiAgICAgICAgICA8U0NJbnB1dFRvb2xiYXJSb3cgcmVmPXt0b29sYmFyUm93UmVmfT5cbiAgICAgICAgICAgIDxTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsPlxuICAgICAgICAgICAgICA8UGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICAgICAgICA8UGx1c1RvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAkbWVudU9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXtoYW5kbGVQbHVzQnV0dG9uTW91c2VEb3dufVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGx1c0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuUGx1c01lbnVBcmlhJyl9XG4gICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dEFkZEljb24gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAge3Nob3dNZW50aW9uQnV0dG9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkbWVudU9wZW49e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuTWVudGlvbkFyaWEnKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dE1lbnRpb25JY29uIGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICAgICAgb3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgICAgYW5jaG9yRWw9e3BsdXNNZW51QW5jaG9yfVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17Y2xvc2VQbHVzTWVudX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXNcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXNcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXNcbiAgICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17eyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgICAgICBzeD17eyB6SW5kZXg6IHBsdXNNZW51WkluZGV4IH19XG4gICAgICAgICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgcGFwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICctNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVBdHRhY2h9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MjF9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWw+e3QoJ2NoYXQucGx1c01lbnVBdHRhY2gnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudURpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVdlYlNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0V2ViU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5zZWFyY2hXZWInKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVEZWVwU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXREZWVwU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5wbHVzTWVudURlZXBJbnZlc3RpZ2F0aW9uJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc0RlZXBTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVRdWlja0FjdGlvbnN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFNsYXNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbD57dCgnY2hhdC5wbHVzTWVudVF1aWNrQWN0aW9ucycpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgICAgICAgeyhpc1dlYlNlYXJjaEFjdGl2ZSB8fCBpc0RlZXBTZWFyY2hBY3RpdmUpICYmIChcbiAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcFJvb3RcbiAgICAgICAgICAgICAgICAgICAgJGhvdmVyZWQ9e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgJGV4aXRpbmc9e3Rvb2xDaGlwRXhpdGluZ31cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICRjbG9zZVNob3duPXthY3RpdmVUb29sQ2hpcEhvdmVyZWR9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBY3RpdmVUb29sQXJpYScpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7YWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcEljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IHQoJ2NoYXQuc2VhcmNoV2ViJykgOiB0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcFJvb3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9QbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgICAgPC9TdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsPlxuICAgICAgICAgICAgPFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGw+XG4gICAgICAgICAgICAgIHtzaG93Q3VzdG9tTWV0YUluZGljYXRvcnMgJiYgKFxuICAgICAgICAgICAgICAgIDxTQ0lucHV0TWV0YUluZGljYXRvcnM+XG4gICAgICAgICAgICAgICAgICB7aGFzQ29yQWNjZXNzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dCgnY2hhdC5mb290ZXIuY29yQWNjZXNzVG9vbHRpcCcpfVxuICAgICAgICAgICAgICAgICAgICAgIHsuLi4odG9vbHRpcFpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHRvb2x0aXBaSW5kZXggfSA6IHt9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0lucHV0TWV0YUljb25CdXR0b24gYXJpYS1sYWJlbD17dCgnY2hhdC5mb290ZXIuY29yQWNjZXNzTGFiZWwnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q29yQWNjZXNzSWNvbiB3aWR0aD17MTV9IGhlaWdodD17MTR9IGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NJbnB1dE1ldGFJY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2FnZW50TW9kZWxOYW1lICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17dCgnY2hpcExsbS50b29sdGlwJywgeyBtb2RlbDogYWdlbnRNb2RlbE5hbWUgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDSW5wdXRNZXRhSWNvbkJ1dHRvbiBhcmlhLWxhYmVsPXthZ2VudE1vZGVsTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0Um9ib3RJY29uIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gY29sb3I9e3Rvb2xiYXJJY29uQ29sb3J9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0lucHV0TWV0YUljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9TQ0lucHV0TWV0YUluZGljYXRvcnM+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc1dyaXRpbmcgPyAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc3RvcCcpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU3RvcEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc2VuZCcpfSB6SW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZW5kRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWVzPXtoYXNUeXBpbmdQcmVzZW5jZSB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFNlbmRJY29uIGNvbG9yPVwiI0JGQkZCRlwiIHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1N0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGw+XG4gICAgICAgICAgPC9TQ0lucHV0VG9vbGJhclJvdz5cbiAgICAgICAgPC9TdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBwdCwucHB0eCwucG5nLC5qcGcsLmpwZWcsLnBkZiwueGxzeCwueGxzLC5mbGFjLC5tNGEsLm1wMywubXA0LC5vZ2EsLm9nZywud2F2LC53ZWJtXCJcbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZVNlbGVjdH1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgLz5cbiAgICAgICAge2lzRmlsZURyYWdBY3RpdmUgJiYgPFN0eWxlZE1BSUFEcm9wT3ZlcmxheT57dCgnY2hhdC5kcm9wRmlsZXNIZXJlJyl9PC9TdHlsZWRNQUlBRHJvcE92ZXJsYXk+fVxuICAgICAgPC9TdHlsZWRNQUlBSW5wdXRXcmFwcGVyPlxuICAgICAge21vZGFsUHJvcHMuaXNPcGVuICYmIChcbiAgICAgICAgPE1vZGFsRmlsZUV4Y2VlZHNcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiBmYWxzZSwgZXhjbHVkZWRGaWxlczogW10sIGV4Y2VlZGVkRmlsZXM6IFtdLCBmaWxlU2l6ZXM6IHt9IH0pfVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjbHVkZWRGaWxlc31cbiAgICAgICAgICBleGNlZWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2VlZGVkRmlsZXN9XG4gICAgICAgICAgZmlsZVNpemVzPXttb2RhbFByb3BzLmZpbGVTaXplc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cG9wb3Zlck5vZGUgJiYgY3JlYXRlUG9ydGFsKHBvcG92ZXJOb2RlLCBkb2N1bWVudC5ib2R5KX1cbiAgICAgIHtzaG93U2xhc2hEcm9wZG93biAmJlxuICAgICAgICBjcmVhdGVQb3J0YWwoXG4gICAgICAgICAgPFNsYXNoQ29tbWFuZERyb3Bkb3duXG4gICAgICAgICAgICBjb21tYW5kcz17c2xhc2hDb21tYW5kc31cbiAgICAgICAgICAgIHF1ZXJ5PXtzbGFzaFF1ZXJ5fVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlU2xhc2hEcm9wZG93bn1cbiAgICAgICAgICAgIGJvdHRvbT17c2xhc2hEcm9wZG93blBvcy5ib3R0b219XG4gICAgICAgICAgICBsZWZ0PXtzbGFzaERyb3Bkb3duUG9zLmxlZnR9XG4gICAgICAgICAgICBtYXhIZWlnaHQ9e3NsYXNoRHJvcGRvd25Qb3MubWF4SGVpZ2h0fVxuICAgICAgICAgICAgekluZGV4PXtzbGFzaERyb3Bkb3duWkluZGV4fVxuICAgICAgICAgICAgYW5jaG9yUmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICAgIC8+LFxuICAgICAgICAgIGRvY3VtZW50LmJvZHlcbiAgICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FRRUEsV0FBVyxFQUNYQyxTQUFTLEVBQ1RDLGVBQWUsRUFDZkMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsT0FBTyxRQUFRLGVBQWU7QUFDdkMsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFFdEUsU0FDRUMsd0JBQXdCLEVBQ3hCQyxtQkFBbUIsRUFDbkJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxtQkFBbUIsRUFDbkJDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxhQUFhLEVBQ2JDLGdCQUFnQixFQUNoQkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLHFCQUFxQixFQUNyQkMscUJBQXFCLEVBQ3JCQyxjQUFjLEVBQ2RDLHdCQUF3QixFQUN4QkMsc0JBQXNCLEVBQ3RCQyxrQkFBa0IsRUFDbEJDLGtCQUFrQixFQUNsQkMsc0JBQXNCLEVBQ3RCQyxvQkFBb0IsRUFDcEJDLHlCQUF5QixFQUN6QkMsaUJBQWlCLEVBQ2pCQyxpQkFBaUIsRUFDakJDLHlCQUF5QixFQUN6QkMseUJBQXlCLEVBQ3pCQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixFQUNsQkMscUJBQXFCLFFBQ2hCLFVB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
|
|
918
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsImNvbG9ycyIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dFdyYXBwZXIiLCJTdHlsZWRNQUlBU2VuZEJ1dHRvbiIsIlN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQiLCJTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCIsIlN0eWxlZE1BSUFTdG9wQnV0dG9uIiwiU3R5bGVkTUFJQVN0b3BJY29uIiwiU3R5bGVkTUFJQURyb3BPdmVybGF5IiwidXNlR2xvYmFsQ29udGV4dCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJTbGFzaENvbW1hbmREcm9wZG93biIsInVzZVNsYXNoQ29tbWFuZHMiLCJyZXNvbHZlUXVpY2tBY3Rpb25UeXBlIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldENoYXRUb29sc01lbnVBZ2VudFR5cGUiLCJNQUlBX0NIQVRfSU5QVVRfVUkiLCJhbGxvd2VkRmlsZVR5cGVzIiwiZmlsZVR5cGVzIiwiTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiIsIk1BWF9GSUxFX1NJWkVfTUJfT0xEIiwiTUFYX0ZJTEVfU0laRV9NQl9BVURJTyIsIk1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIiwiQVBQQ1VFU19FVkVOVFMiLCJ0cmFja0FwcGN1ZXNFdmVudCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZU1lbnRpb25Qb3BvdmVyIiwiZGF0YVRyYW5zZmVySGFzRmlsZXMiLCJmaWxlc0Zyb21EYXRhVHJhbnNmZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJUT09MX0NISVBfRVhJVF9NUyIsIk1BSUFJbnB1dCIsIl9yZWYiLCJfYWdlbnQkZW50aXR5Iiwib25TZW5kTWVzc2FnZSIsImNsYXNzTmFtZSIsImRpc2FibGVkIiwiaXNTdHJlYW1pbmciLCJpc1dyaXRpbmciLCJvblN0b3BHZW5lcmF0aW9uIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIl9yZWYkYWxpZ25CdXR0b25zIiwiYWxpZ25CdXR0b25zIiwib25GaWxlQXR0YWNoIiwib25EZWxldGVBdHRhY2htZW50IiwiX3JlZiRhdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwiY2hhdElkIiwibmV3Q2hhdEtleSIsInRvb2x0aXBaSW5kZXgiLCJleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYiLCJwb3BvdmVyQW5jaG9yUmVmIiwibGF5b3V0TW9kZSIsIl91c2VUIiwidCIsImVkaXRvclJlZiIsImZpbGVJbnB1dFJlZiIsImludGVybmFsV3JhcHBlclJlZiIsIndyYXBwZXJSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoYXNXcmFwcGVkVG9TZWNvbmRMaW5lIiwic2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaGFzVHlwaW5nUHJlc2VuY2UiLCJzZXRIYXNUeXBpbmdQcmVzZW5jZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNGb2N1c2VkIiwic2V0SXNGb2N1c2VkIiwiX3VzZVN0YXRlNyIsImlzT3BlbiIsImV4Y2x1ZGVkRmlsZXMiLCJleGNlZWRlZEZpbGVzIiwiZmlsZVNpemVzIiwiX3VzZVN0YXRlOCIsIm1vZGFsUHJvcHMiLCJzZXRNb2RhbFByb3BzIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwidG9nZ2xlRGVlcFNlYXJjaCIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiaW5pdGlhbERyYWZ0IiwiZGVlcExpbmtTZW5kUGVuZGluZ1JlZiIsInBsdXNNZW51WkluZGV4IiwiaW5pdGlhbERyYWZ0QXBwbGllZFJlZiIsIl91c2VNZW50aW9uUG9wb3ZlciIsInBvcG92ZXJPcGVuIiwicmVzZXRNZW50aW9uT3BlblRyYWNraW5nIiwiaGFuZGxlVHJpZ2dlciIsImhhbmRsZVBvcG92ZXJLZXlEb3duIiwiaGFuZGxlS2V5RG93biIsInBvcG92ZXJOb2RlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJwbHVzTWVudUFuY2hvciIsInNldFBsdXNNZW51QW5jaG9yIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwiYWN0aXZlVG9vbENoaXBIb3ZlcmVkIiwic2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInRvb2xDaGlwRXhpdGluZyIsInNldFRvb2xDaGlwRXhpdGluZyIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJpc0ZpbGVEcmFnQWN0aXZlIiwic2V0SXNGaWxlRHJhZ0FjdGl2ZSIsInRvb2xDaGlwRXhpdFRpbWVyUmVmIiwiZmlsZURyYWdDb3VudGVyUmVmIiwic2VhcmNoTW9kZUFjdGl2ZVJlZiIsIndlYiIsImRlZXAiLCJwbHVzTWVudU9wZW4iLCJCb29sZWFuIiwicHJldmlvdXNBZ2VudElkUmVmIiwidW5kZWZpbmVkIiwicHJldmlvdXNDaGF0SWRSZWYiLCJwcmV2aW91c05ld0NoYXRLZXlSZWYiLCJwcmV2aW91c0xheW91dE1vZGVSZWYiLCJhbmFseXRpY3NBZ2VudFR5cGUiLCJhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQiLCJ0eXBlIiwiZW50aXR5IiwiX3VzZVNsYXNoQ29tbWFuZHMiLCJpZCIsInNsYXNoQ29tbWFuZHMiLCJjb21tYW5kcyIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJzaG93U2xhc2hEcm9wZG93biIsInNldFNob3dTbGFzaERyb3Bkb3duIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsInNsYXNoUXVlcnkiLCJzZXRTbGFzaFF1ZXJ5Iiwic2xhc2hNZW51V2FzT3BlblJlZiIsInNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJfZWRpdG9yUmVmJGN1cnJlbnQiLCJjdXJyZW50IiwiZm9jdXMiLCJjbG9zZVBsdXNNZW51IiwiY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCIsImNsZWFyVGltZW91dCIsImhhbmRsZVBsdXNCdXR0b25DbGljayIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJjdXJyZW50VGFyZ2V0IiwiYWlDaGF0UGx1c09wZW4iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImhhbmRsZVBsdXNNZW51QXR0YWNoIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50IiwiYWlDaGF0VG9vbHMiLCJvcHRpb24iLCJsZW5ndGgiLCJjbGljayIsImJlZ2luVG9vbENoaXBFeGl0Iiwid2FzV2ViIiwid2FzRGVlcCIsIl9zZWFyY2hNb2RlQWN0aXZlUmVmJCIsImhhbmRsZVBsdXNNZW51V2ViU2VhcmNoIiwiaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoIiwiX2VkaXRvclJlZiRjdXJyZW50MiIsIl9lZGl0b3JSZWYkY3VycmVudDMiLCJkcmFmdCIsInRyaW0iLCJzZXRQbGFpblRleHQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ0IiwiY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXIiLCJzZW5kRGlzYWJsZWQiLCJhZ2VudENoYW5nZWQiLCJwcmV2aW91c0NoYXRJZCIsImN1cnJlbnRDaGF0SWQiLCJjaGF0Q2hhbmdlZCIsImNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCIsIm5ld0NoYXRTdGFydGVkIiwiaXNJbml0aWFsTW91bnQiLCJkZWxheSIsIl9lZGl0b3JSZWYkY3VycmVudDUiLCJwcmV2aW91c0xheW91dE1vZGUiLCJ0aW1lb3V0SWQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ2IiwiaXNTcGVjaWFsaXN0QWdlbnQiLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiX3JlZjIiLCJfcmVmMyIsImVudHJ5IiwiaXNJbnRlcnNlY3RpbmciLCJtYWlhQ29udGV4dE1lbnRpb25Jbml0IiwiZGlzY29ubmVjdCIsInRocmVzaG9sZCIsIm9ic2VydmUiLCJoYW5kbGVTZXNzaW9uQ2hhbmdlIiwiX2VkaXRvclJlZiRjdXJyZW50NyIsImNsZWFyIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVJlZm9jdXMiLCJfZWRpdG9yUmVmJGN1cnJlbnQ4IiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQ5IiwiX3N0YXRlJHRleHQiLCJfc3RhdGUkbWVudGlvbnMiLCJfZWRpdG9yUmVmJGN1cnJlbnQwIiwic3RhdGUiLCJzZXJpYWxpemUiLCJ0ZXh0IiwibWVudGlvbnMiLCJoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQiLCJjb21tYW5kIiwiX2VkaXRvclJlZiRjdXJyZW50MSIsIl9zdGF0ZSR0ZXh0MiIsIl9lZGl0b3JSZWYkY3VycmVudDExIiwiYWlDaGF0UXVpY2tBY3Rpb25TZWxlY3QiLCJ0eXBlX3F1aWNrX2FjdGlvbiIsIm9yaWdpbl9xdWlja19hY3Rpb24iLCJ0cmlnZ2VyUGFydCIsImNvbmNhdCIsImJlZm9yZVRyaWdnZXIiLCJlbmRzV2l0aCIsInNsaWNlIiwiaXNFbXB0eUJlZm9yZVRyaWdnZXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMCIsInRpdGxlIiwiaW5zZXJ0U2xhc2hDb21tYW5kIiwibGFiZWwiLCJoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd24iLCJoYW5kbGVFZGl0b3JJbnB1dCIsIl9yZWY0IiwiX2VkaXRvclJlZiRjdXJyZW50MTIiLCJ0cmlnZ2VyIiwic2xhc2hUcmlnZ2VyIiwidmlzdWFsTXVsdGlsaW5lIiwiaGFzVmlzdWFsTXVsdGlsaW5lIiwiZXhwbGljaXRNdWx0aWxpbmUiLCJpbmNsdWRlcyIsImlzTGlrZWx5Rmlyc3RDaGFyTWVhc3VyZW1lbnRHbGl0Y2giLCJzdGFibGVWaXN1YWxNdWx0aWxpbmUiLCJuZXh0SXNNdWx0aWxpbmUiLCJuZXh0SGFzVHlwaW5nUHJlc2VuY2UiLCJuZXh0VHlwaW5nUHJlc2VuY2UiLCJwcmV2IiwibmV4dCIsImFjdGl2ZSIsImFpQ2hhdFF1aWNrQWN0aW9uT3BlbiIsInF1ZXJ5Iiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsImFkZEZpbGVzIiwiaW5jb21pbmciLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpc09sZEZvcm1hdCIsImlzQXVkaW9Gb3JtYXQiLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImV4Y2x1ZGVkRmlsZSIsImZpbGVOYW1lUGFydHMiLCJuYW1lIiwic3BsaXQiLCJmaWxlRXh0ZW5zaW9uIiwicG9wIiwidG9Mb3dlckNhc2UiLCJzaXplIiwicHVzaCIsInR5cGVGaWxlIiwicGFyc2VkRmlsZSIsIkZpbGUiLCJoYW5kbGVGaWxlU2VsZWN0IiwiZmlsZXMiLCJ0YXJnZXQiLCJBcnJheSIsImZyb20iLCJ2YWx1ZSIsInJlc2V0RmlsZURyYWciLCJoYW5kbGVEcmFnRW50ZXIiLCJkYXRhVHJhbnNmZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJNYXRoIiwibWF4IiwiaGFuZGxlRHJhZ092ZXIiLCJkcm9wRWZmZWN0IiwiaGFuZGxlRHJvcCIsImhhbmRsZVBhc3RlRmlsZXMiLCJoYW5kbGVXcmFwcGVyUGFzdGUiLCJfd3JhcHBlclJlZiRjdXJyZW50IiwiZWRpdG9yRWwiLCJxdWVyeVNlbGVjdG9yIiwiY29udGFpbnMiLCJjbGlwYm9hcmREYXRhIiwiaGFuZGxlRGVsZXRlQXR0YWNobWVudCIsImZpbGVJZCIsImhhbmRsZVdyYXBwZXJGb2N1cyIsImhhbmRsZVdyYXBwZXJCbHVyIiwiX3dyYXBwZXJSZWYkY3VycmVudDIiLCJhY3RpdmVFbGVtZW50IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJwbHVzSWNvbkNvbG9yIiwic2Vjb25kYXJ5IiwibWVkaXVtR3JheSIsInBsdXNNZW51SWNvbkNvbG9yIiwibWVudUljb24iLCJwbHVzTWVudVNlbGVjdGVkQ29sb3IiLCJ0ZXh0QnJhbmRCb2xkIiwiYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiIsImNvbG9yIiwiY2hpcENsb3NlSWNvbiIsIndpZHRoIiwiaGVpZ2h0IiwiY2hpbGRyZW4iLCJyZWYiLCJoYXNBdHRhY2htZW50cyIsIiRmaWxlRHJhZ0FjdGl2ZSIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvblBhc3RlIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJvblNlbGVjdCIsIm9uQ2xvc2UiLCJzdHlsZSIsImRpc3BsYXkiLCJnYXAiLCJhbGlnbkl0ZW1zIiwibWFwIiwiYXR0YWNobWVudCIsImluZGV4IiwiX2ZpbGVOYW1lUGFydHMkcG9wMiIsIl9hdHRhY2htZW50JHR5cGUiLCJpc0ltYWdlQnlFeHRlbnNpb24iLCJpc0ltYWdlQnlNaW1lIiwic3RhcnRzV2l0aCIsImlzSW1hZ2UiLCJ6SW5kZXgiLCJpY29uIiwib25DbGljayIsIiRjb21wYWN0Um93IiwiJG1lbnVPcGVuIiwib3BlbiIsImFuY2hvckVsIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwic3giLCJzbG90UHJvcHMiLCJwYXBlciIsImVsZXZhdGlvbiIsIm92ZXJmbG93IiwiYm9yZGVyUmFkaXVzIiwiYm94U2hhZG93IiwiYmFja2dyb3VuZENvbG9yIiwibWFyZ2luVG9wIiwiJHNlbGVjdGVkIiwiJGhvdmVyZWQiLCIkZXhpdGluZyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIiRjbG9zZVNob3duIiwiZ3JpZENvbHVtbiIsImdyaWRSb3ciLCJtaW5XaWR0aCIsImFsaWduU2VsZiIsIm9uSW5wdXQiLCJvbktleURvd24iLCJvblBhc3RlRmlsZXMiLCJoYXNWYWx1ZXMiLCJtdWx0aXBsZSIsImFjY2VwdCIsImJvZHkiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQge1xuICBDaGFuZ2VFdmVudCxcbiAgQ2xpcGJvYXJkRXZlbnQsXG4gIERyYWdFdmVudCxcbiAgS2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudCxcbiAgUmVhY3ROb2RlLFxuICBNdXRhYmxlUmVmT2JqZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IFBvcG92ZXIgfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUGFwZXJQbGFuZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BhcGVyUGxhbmUnXG5pbXBvcnQgeyBBdHRhY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BdHRhY2gnXG5pbXBvcnQgeyBHbG9iZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0dsb2JlJ1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFBsdXMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QbHVzJ1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGVjaydcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgY29sb3JzIGZyb20gJ0Bwcm9qZWN0Y29yL3RoZW1lL2xpYi9iYXNlL2NvbG9ycydcblxuaW1wb3J0IHtcbiAgQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uLFxuICBBY3RpdmVUb29sQ2hpcExhYmVsLFxuICBBY3RpdmVUb29sQ2hpcFJvb3QsXG4gIFBsdXNNZW51RGl2aWRlcixcbiAgUGx1c01lbnVJbm5lckNvbHVtbixcbiAgUGx1c01lbnVJdGVtQnV0dG9uLFxuICBQbHVzTWVudUl0ZW1MYWJlbCxcbiAgUGx1c01lbnVQYXBlcixcbiAgUGx1c01lbnVUb29sc1JvdyxcbiAgUGx1c1RvZ2dsZUJ1dHRvbixcbiAgU0NNSUF0dGFjaG1lbnQsXG4gIFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbixcbiAgU3R5bGVkTUFJQUlucHV0V3JhcHBlcixcbiAgU3R5bGVkTUFJQVNlbmRCdXR0b24sXG4gIFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQsXG4gIFN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTdG9wQnV0dG9uLFxuICBTdHlsZWRNQUlBU3RvcEljb24sXG4gIFN0eWxlZE1BSUFEcm9wT3ZlcmxheSxcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IFNsYXNoQ29tbWFuZERyb3Bkb3duIH0gZnJvbSAnLi4vU2xhc2hDb21tYW5kRHJvcGRvd24nXG5pbXBvcnQgeyB1c2VTbGFzaENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU2xhc2hDb21tYW5kcydcbmltcG9ydCB7IHJlc29sdmVRdWlja0FjdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ob3Vyc1BsYW5uZXJRdWlja0FjdGlvblR5cGUnXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0FjdGlvbidcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgVGVsZXNjb3BlSWNvbiB9IGZyb20gJy4uL2ljb25zL1RlbGVzY29wZUljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IE1BSUFfQ0hBVF9JTlBVVF9VSSB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9jb25maWcnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxuICBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyxcbn0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5pbXBvcnQgeyBBUFBDVUVTX0VWRU5UUywgdHJhY2tBcHBjdWVzRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBjdWVzJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25FZGl0b3IsIENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlIH0gZnJvbSAnLi4vQ29udGV4dE1lbnRpb25FZGl0b3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IHVzZU1lbnRpb25Qb3BvdmVyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWVudGlvblBvcG92ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZGF0YVRyYW5zZmVySGFzRmlsZXMsIGZpbGVzRnJvbURhdGFUcmFuc2ZlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NoYXRJbnB1dEZpbGVzJ1xuXG5jb25zdCBUT09MX0NISVBfRVhJVF9NUyA9IDIyMFxuXG50eXBlIEF0dGFjaG1lbnRGaWxlID0ge1xuICBmaWxlOiBGaWxlXG4gIG9yaWdpbmFsRmlsZT86IEZpbGVcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG4gIHR5cGU6IHN0cmluZ1xuICBpY29uPzogUmVhY3ROb2RlXG59XG5cbnR5cGUgTUFJQUlucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TZW5kTWVzc2FnZTogKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgIGZhcUlkPzogc3RyaW5nLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgIHNjSWQ/OiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIG9uU3RvcEdlbmVyYXRpb24/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc1dyaXRpbmc/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIG9uQ2hhbmdlPzogKCkgPT4gdm9pZFxuICBhbGlnbkJ1dHRvbnM/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG4gIG9uRmlsZUF0dGFjaD86IChmaWxlOiBGaWxlKSA9PiB2b2lkXG4gIG9uRGVsZXRlQXR0YWNobWVudD86IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxuICAvKiogRXhwb25lIGVsIHdyYXBwZXIgZGVsIGlucHV0IHBhcmEgYW5jbGFyIHBvcG92ZXJzIChtZW5jaW9uZXMsIHBpbiBkZSBjb250ZXh0bykuICovXG4gIHBvcG92ZXJBbmNob3JSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD5cbiAgbGF5b3V0TW9kZT86ICdzaWRlYmFyJyB8ICdmdWxsc2NyZWVuJyB8ICdmbG9hdGluZydcbn1cblxuZXhwb3J0IGNvbnN0IE1BSUFJbnB1dCA9ICh7XG4gIG9uU2VuZE1lc3NhZ2UsXG4gIGNsYXNzTmFtZSxcbiAgZGlzYWJsZWQsXG4gIGlzU3RyZWFtaW5nLFxuICBpc1dyaXRpbmcsXG4gIG9uU3RvcEdlbmVyYXRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBvbkNoYW5nZSxcbiAgYWxpZ25CdXR0b25zID0gJ3ZlcnRpY2FsJyxcbiAgb25GaWxlQXR0YWNoLFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQsXG4gIGF0dGFjaG1lbnRzID0gW10sXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgdG9vbHRpcFpJbmRleCxcbiAgcG9wb3ZlckFuY2hvclJlZjogZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmLFxuICBsYXlvdXRNb2RlLFxufTogTUFJQUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgZWRpdG9yUmVmID0gdXNlUmVmPENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlPihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgaW50ZXJuYWxXcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmID8/IGludGVybmFsV3JhcHBlclJlZlxuICBjb25zdCBbaGFzV3JhcHBlZFRvU2Vjb25kTGluZSwgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc1R5cGluZ1ByZXNlbmNlLCBzZXRIYXNUeXBpbmdQcmVzZW5jZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzRm9jdXNlZCwgc2V0SXNGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBmaWxlU2l6ZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gIH0pXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7XG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZURlZXBTZWFyY2gsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGFnZW50LFxuICAgIGluaXRpYWxEcmFmdCxcbiAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHBsdXNNZW51WkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMzAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IGluaXRpYWxEcmFmdEFwcGxpZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qge1xuICAgIHBvcG92ZXJPcGVuLFxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyxcbiAgICBoYW5kbGVUcmlnZ2VyLFxuICAgIGhhbmRsZUtleURvd246IGhhbmRsZVBvcG92ZXJLZXlEb3duLFxuICAgIHBvcG92ZXJOb2RlLFxuICB9ID0gdXNlTWVudGlvblBvcG92ZXIoe1xuICAgIGVkaXRvclJlZixcbiAgICBwb3BvdmVyQW5jaG9yUmVmOiB3cmFwcGVyUmVmLFxuICB9KVxuXG4gIGNvbnN0IFtwbHVzTWVudUFuY2hvciwgc2V0UGx1c01lbnVBbmNob3JdID0gdXNlU3RhdGU8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbYWN0aXZlVG9vbENoaXBIb3ZlcmVkLCBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt0b29sQ2hpcEV4aXRpbmcsIHNldFRvb2xDaGlwRXhpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzRmlsZURyYWdBY3RpdmUsIHNldElzRmlsZURyYWdBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRvb2xDaGlwRXhpdFRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZmlsZURyYWdDb3VudGVyUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZVJlZiA9IHVzZVJlZjxNQUlBSW5wdXRQcm9wc1snbGF5b3V0TW9kZSddPih1bmRlZmluZWQpXG5cbiAgY29uc3QgYW5hbHl0aWNzQWdlbnRUeXBlID0gZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZShhZ2VudClcbiAgY29uc3QgYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyB7IGVudGl0eTogYWdlbnQuZW50aXR5ID8/IG51bGwgfSA6IHt9XG5cbiAgLy8gU2xhc2ggY29tbWFuZHMgYXBsaWNhbiBhIGNsb25lcyBlc3BlY2lhbGlzdGFzIHkgYWwgb3JjaGVzdHJhdG9yIGdsb2JhbCAoZXN0ZSBhZ3JlZ2EgbG9zIGRlIHN1cyBzdWJhZ2VudGVzKS5cbiAgLy8gTG9zIGN1c3RvbSB5IGxvcyBjbG9uZSBnbG9iYWwvbWFpYWtlciBubyBsb3MgdGllbmVuIGhhYmlsaXRhZG9zLlxuICBjb25zdCB7IGNvbW1hbmRzOiBzbGFzaENvbW1hbmRzIH0gPSB1c2VTbGFzaENvbW1hbmRzKFxuICAgIChhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcpIHx8XG4gICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQ/LmVudGl0eSAhPT0gJ2dsb2JhbCcpXG4gICAgICA/IGFnZW50Py5pZFxuICAgICAgOiB1bmRlZmluZWRcbiAgKVxuICBjb25zdCBbc2hvd1NsYXNoRHJvcGRvd24sIHNldFNob3dTbGFzaERyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2xhc2hRdWVyeSwgc2V0U2xhc2hRdWVyeV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3Qgc2xhc2hNZW51V2FzT3BlblJlZiA9IHVzZVJlZihmYWxzZSlcblxuICAvKiogVHJhcyBlbGVnaXIgbyBxdWl0YXIgYsO6c3F1ZWRhIHdlYi9wcm9mdW5kYTogdm9sdmVyIGFsIHRleHRhcmVhIChQb3BvdmVyL21lbnUgcHVlZGUgcm9iYXIgZm9jbykuICovXG4gIGNvbnN0IHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgMClcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2xvc2VQbHVzTWVudSA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICB9XG5cbiAgY29uc3QgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgICBzZXRUb29sQ2hpcEV4aXRpbmcoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHJldHVyblxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBiZWdpblRvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHdhc1dlYiA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgY29uc3Qgd2FzRGVlcCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlmICghd2FzV2ViICYmICF3YXNEZWVwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKHRydWUpXG4gICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGNvbnN0IHsgd2ViLCBkZWVwIH0gPSBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnRcbiAgICAgIGlmICh3YXNXZWIgJiYgd2ViKSB7XG4gICAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICB9IGVsc2UgaWYgKHdhc0RlZXAgJiYgZGVlcCkge1xuICAgICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICAgIH1cbiAgICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gICAgfSwgVE9PTF9DSElQX0VYSVRfTVMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoID0gKCkgPT4ge1xuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGlmIChpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywge1xuICAgICAgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLFxuICAgICAgb3B0aW9uOiAnZGVlcF9zZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkcmFmdCA9IGluaXRpYWxEcmFmdD8udHJpbSgpXG4gICAgaWYgKCFkcmFmdCB8fCBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgaWYgKGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYpIHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnNldFBsYWluVGV4dChkcmFmdClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0cnVlKVxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbaW5pdGlhbERyYWZ0LCBkaXNhYmxlZCwgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgY29uc3QgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXIgPSB1c2VNZW1vKFxuICAgICgpID0+IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCAmJiAhaXNXZWJTZWFyY2hBY3RpdmUgJiYgIWlzRGVlcFNlYXJjaEFjdGl2ZSAmJiAhaGFzV3JhcHBlZFRvU2Vjb25kTGluZSxcbiAgICBbYXR0YWNobWVudHMubGVuZ3RoLCBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBoYXNXcmFwcGVkVG9TZWNvbmRMaW5lXVxuICApXG5cbiAgY29uc3Qgc2VuZERpc2FibGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiAhaGFzVHlwaW5nUHJlc2VuY2UgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwLFxuICAgIFtoYXNUeXBpbmdQcmVzZW5jZSwgYXR0YWNobWVudHMubGVuZ3RoXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmICgoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGxhIGRpc3Bvc2ljacOzbiBkZWwgbW9kYWwgKHNpZGViYXIgLyBmdWxsc2NyZWVuIC8gZmxvYXRpbmcpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYXlvdXRNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlID0gcHJldmlvdXNMYXlvdXRNb2RlUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0xheW91dE1vZGVSZWYuY3VycmVudCA9IGxheW91dE1vZGVcblxuICAgIGlmIChwcmV2aW91c0xheW91dE1vZGUgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0xheW91dE1vZGUgPT09IGxheW91dE1vZGUgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9XG4gICAgfSwgMjAwKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKVxuICB9LCBbbGF5b3V0TW9kZSwgZGlzYWJsZWRdKVxuXG4gIC8vIEFwcGN1ZXM6IG5vdGlmeSB0aGF0IHRoZSBpbnB1dCBpcyB2aXNpYmxlIGZvciBzcGVjaWFsaXN0IGFnZW50cyAoY2xvbmUgKyBwcm9qZWN0L2NsaWVudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpc1NwZWNpYWxpc3RBZ2VudCA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQgfHwgIWlzU3BlY2lhbGlzdEFnZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChbZW50cnldKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIHRyYWNrQXBwY3Vlc0V2ZW50KEFQUENVRVNfRVZFTlRTLm1haWFDb250ZXh0TWVudGlvbkluaXQpXG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cbiAgICApXG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHdyYXBwZXJSZWYuY3VycmVudClcbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFthZ2VudD8uaWQsIGFnZW50Py50eXBlLCBhZ2VudD8uZW50aXR5XSlcblxuICAvLyBDbGVhciBpbnB1dCB3aGVuIHNlc3Npb24gY2hhbmdlcyAodXNlciBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBjaGF0KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoZGVlcExpbmtTZW5kUGVuZGluZ1JlZikge1xuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShmYWxzZSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gIH0sIFtyZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWZdKVxuXG4gIC8vIE1hbnRlbmVyIGZvY28gYWwgc2VsZWNjaW9uYXIgdW4gY29udGV4dG8gcmVjaWVudGUgKGVsIGNsaWNrIGVuIGVsIHBpbGwgbG8gcm9iYSBhbCBpbnB1dCkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVmb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgY29uc3QgdGV4dCA9IHN0YXRlPy50ZXh0ID8/ICcnXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSAmJiAhYXR0YWNobWVudHMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBtZW50aW9ucyA9IHN0YXRlPy5tZW50aW9ucyA/PyBbXVxuICAgIG9uU2VuZE1lc3NhZ2UodGV4dCwgYXR0YWNobWVudHMsIG1lbnRpb25zKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShmYWxzZSlcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gIH0sIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nXSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZDogQWN0aW9uKSA9PiB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25TZWxlY3QsIHtcbiAgICAgICAgdHlwZV9xdWlja19hY3Rpb246IHJlc29sdmVRdWlja0FjdGlvblR5cGUoY29tbWFuZCksXG4gICAgICAgIG9yaWdpbl9xdWlja19hY3Rpb246ICdzbGFzaF9tZW51JyxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICAgIGNvbnN0IHRyaWdnZXJQYXJ0ID0gYC8ke3NsYXNoUXVlcnl9YFxuICAgICAgY29uc3QgYmVmb3JlVHJpZ2dlciA9IHRleHQuZW5kc1dpdGgodHJpZ2dlclBhcnQpID8gdGV4dC5zbGljZSgwLCAtdHJpZ2dlclBhcnQubGVuZ3RoKSA6IHRleHRcbiAgICAgIGNvbnN0IGlzRW1wdHlCZWZvcmVUcmlnZ2VyID0gYmVmb3JlVHJpZ2dlci50cmltKCkgPT09ICcnXG5cbiAgICAgIGlmIChpc0VtcHR5QmVmb3JlVHJpZ2dlcikge1xuICAgICAgICBvblNlbmRNZXNzYWdlKGNvbW1hbmQudGl0bGUsIGF0dGFjaG1lbnRzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbW1hbmQuaWQpXG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgICBzZXRIYXNXcmFwcGVkVG9TZWNvbmRMaW5lKGZhbHNlKVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRTbGFzaENvbW1hbmQoeyBpZDogY29tbWFuZC5pZCwgbGFiZWw6IGNvbW1hbmQudGl0bGUgfSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYXR0YWNobWVudHMsIG9uU2VuZE1lc3NhZ2UsIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgc2xhc2hRdWVyeSwgZXZlbnRBbXBsaXR1ZGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd24gPSAoKSA9PiB7XG4gICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVkaXRvcklucHV0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHRleHQsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgc2xhc2hUcmlnZ2VyLFxuICAgIH06IHtcbiAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW11cbiAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgICAgIHNsYXNoVHJpZ2dlcj86IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCB2aXN1YWxNdWx0aWxpbmUgPSAhIWVkaXRvclJlZi5jdXJyZW50Py5oYXNWaXN1YWxNdWx0aWxpbmUoKVxuICAgICAgY29uc3QgZXhwbGljaXRNdWx0aWxpbmUgPSB0ZXh0LmluY2x1ZGVzKCdcXG4nKVxuICAgICAgY29uc3QgaXNMaWtlbHlGaXJzdENoYXJNZWFzdXJlbWVudEdsaXRjaCA9IHRleHQubGVuZ3RoIDw9IDEgJiYgIWV4cGxpY2l0TXVsdGlsaW5lICYmIHZpc3VhbE11bHRpbGluZVxuICAgICAgY29uc3Qgc3RhYmxlVmlzdWFsTXVsdGlsaW5lID0gaXNMaWtlbHlGaXJzdENoYXJNZWFzdXJlbWVudEdsaXRjaCA/IGZhbHNlIDogdmlzdWFsTXVsdGlsaW5lXG4gICAgICBjb25zdCBuZXh0SXNNdWx0aWxpbmUgPSBleHBsaWNpdE11bHRpbGluZSB8fCBzdGFibGVWaXN1YWxNdWx0aWxpbmVcbiAgICAgIGNvbnN0IG5leHRIYXNUeXBpbmdQcmVzZW5jZSA9IHRleHQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IG5leHRUeXBpbmdQcmVzZW5jZSA9IHRleHQudHJpbSgpLmxlbmd0aCA+IDBcblxuICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UobmV4dFR5cGluZ1ByZXNlbmNlKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShwcmV2ID0+IHtcbiAgICAgICAgbGV0IG5leHQgPSBwcmV2XG4gICAgICAgIGlmICghbmV4dEhhc1R5cGluZ1ByZXNlbmNlKSB7XG4gICAgICAgICAgbmV4dCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSBpZiAobmV4dElzTXVsdGlsaW5lKSB7XG4gICAgICAgICAgbmV4dCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0XG4gICAgICB9KVxuICAgICAgb25DaGFuZ2U/LigpXG4gICAgICBoYW5kbGVUcmlnZ2VyKHRyaWdnZXIpXG5cbiAgICAgIGlmIChzbGFzaFRyaWdnZXI/LmFjdGl2ZSAmJiBzbGFzaENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25PcGVuKVxuICAgICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bih0cnVlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KHNsYXNoVHJpZ2dlci5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyLCBzbGFzaENvbW1hbmRzLCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChoYW5kbGVQb3BvdmVyS2V5RG93bihlKSkgcmV0dXJuXG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkgJiYgIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIHNlbmREaXNhYmxlZCwgZGlzYWJsZWQsIGhhbmRsZVNlbmRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgYWRkRmlsZXMgPSAoaW5jb21pbmc6IEZpbGVbXSkgPT4ge1xuICAgIGlmICghaW5jb21pbmcubGVuZ3RoIHx8IGRpc2FibGVkKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcucHB0JywgJy5wcHR4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBpbmNvbWluZy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgaWYgKGlzTmV3Rm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPbGRGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9BVURJTyAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIGFkZEZpbGVzKEFycmF5LmZyb20oZmlsZXMpKVxuICAgIH1cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXNldEZpbGVEcmFnID0gKCkgPT4ge1xuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gMFxuICAgIHNldElzRmlsZURyYWdBY3RpdmUoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW50ZXIgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCArPSAxXG4gICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZSh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gKGU6IERyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAoIWlzRmlsZURyYWdBY3RpdmUgJiYgIWRhdGFUcmFuc2Zlckhhc0ZpbGVzKGUuZGF0YVRyYW5zZmVyKSkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGZpbGVEcmFnQ291bnRlclJlZi5jdXJyZW50ID0gTWF0aC5tYXgoMCwgZmlsZURyYWdDb3VudGVyUmVmLmN1cnJlbnQgLSAxKVxuICAgIGlmIChmaWxlRHJhZ0NvdW50ZXJSZWYuY3VycmVudCA9PT0gMCkge1xuICAgICAgc2V0SXNGaWxlRHJhZ0FjdGl2ZShmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IChlOiBEcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFkYXRhVHJhbnNmZXJIYXNGaWxlcyhlLmRhdGFUcmFuc2ZlcikpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVyblxuICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSdcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZTogRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICghZGF0YVRyYW5zZmVySGFzRmlsZXMoZS5kYXRhVHJhbnNmZXIpKSB7XG4gICAgICByZXNldEZpbGVEcmFnKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmVzZXRGaWxlRHJhZygpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBhZGRGaWxlcyhmaWxlc0Zyb21EYXRhVHJhbnNmZXIoZS5kYXRhVHJhbnNmZXIpKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGFzdGVGaWxlcyA9IChmaWxlczogRmlsZVtdKSA9PiB7XG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVXcmFwcGVyUGFzdGUgPSAoZTogQ2xpcGJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZWRpdG9yRWwgPSB3cmFwcGVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3IoJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJylcbiAgICBpZiAoZWRpdG9yRWwgJiYgZWRpdG9yRWwuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHJldHVyblxuICAgIGNvbnN0IGZpbGVzID0gZmlsZXNGcm9tRGF0YVRyYW5zZmVyKGUuY2xpcGJvYXJkRGF0YSlcbiAgICBpZiAoIWZpbGVzLmxlbmd0aCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgYWRkRmlsZXMoZmlsZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV3JhcHBlckZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJCbHVyID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHNldElzRm9jdXNlZChmYWxzZSlcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3QgcGx1c0ljb25Db2xvciA9IGlzRm9jdXNlZCA/IGNvbG9ycy50ZXh0LnNlY29uZGFyeSA6IGNvbG9ycy50ZXh0Lm1lZGl1bUdyYXlcbiAgY29uc3QgcGx1c01lbnVJY29uQ29sb3IgPSBNQUlBX0NIQVRfSU5QVVRfVUkubWVudUljb25cbiAgY29uc3QgcGx1c01lbnVTZWxlY3RlZENvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLnRleHRCcmFuZEJvbGRcblxuICBsZXQgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbjogUmVhY3ROb2RlXG4gIGlmIChhY3RpdmVUb29sQ2hpcEhvdmVyZWQpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPENyb3NzIGNvbG9yPXtNQUlBX0NIQVRfSU5QVVRfVUkuY2hpcENsb3NlSWNvbn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2UgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxHbG9iZSBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPFRlbGVzY29wZUljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3R5bGVkTUFJQUlucHV0V3JhcHBlclxuICAgICAgICByZWY9e3dyYXBwZXJSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXI9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfVxuICAgICAgICAkZmlsZURyYWdBY3RpdmU9e2lzRmlsZURyYWdBY3RpdmV9XG4gICAgICAgIGRhdGEtYXBwY3Vlcz1cIm1haWFfY2hhdF9pbnB1dFwiXG4gICAgICAgIGRhdGEtbWFpYS1zdHJlYW1pbmc9e2lzU3RyZWFtaW5nID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICAgICAgb25Gb2N1cz17aGFuZGxlV3JhcHBlckZvY3VzfVxuICAgICAgICBvbkJsdXI9e2hhbmRsZVdyYXBwZXJCbHVyfVxuICAgICAgICBvblBhc3RlPXtoYW5kbGVXcmFwcGVyUGFzdGV9XG4gICAgICAgIG9uRHJhZ0VudGVyPXtoYW5kbGVEcmFnRW50ZXJ9XG4gICAgICAgIG9uRHJhZ0xlYXZlPXtoYW5kbGVEcmFnTGVhdmV9XG4gICAgICAgIG9uRHJhZ092ZXI9e2hhbmRsZURyYWdPdmVyfVxuICAgICAgICBvbkRyb3A9e2hhbmRsZURyb3B9XG4gICAgICA+XG4gICAgICAgIHtzaG93U2xhc2hEcm9wZG93biAmJiAoXG4gICAgICAgICAgPFNsYXNoQ29tbWFuZERyb3Bkb3duXG4gICAgICAgICAgICBjb21tYW5kcz17c2xhc2hDb21tYW5kc31cbiAgICAgICAgICAgIHF1ZXJ5PXtzbGFzaFF1ZXJ5fVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlU2xhc2hEcm9wZG93bn1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ISFhdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMnB4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gYXR0YWNobWVudC5uYW1lLnNwbGl0KCcuJylcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGVOYW1lUGFydHMubGVuZ3RoID4gMSA/IGAuJHtmaWxlTmFtZVBhcnRzLnBvcCgpPy50b0xvd2VyQ2FzZSgpfWAgOiAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlQnlFeHRlbnNpb24gPSBbJy5wbmcnLCAnLmpwZycsICcuanBlZyddLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeU1pbWUgPSBhdHRhY2htZW50LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2UgPSBpc0ltYWdlQnlNaW1lICYmIGlzSW1hZ2VCeUV4dGVuc2lvblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXthdHRhY2htZW50Lm5hbWV9IGtleT17YCR7aW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWB9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQgaXNJbWFnZT17aXNJbWFnZX0+XG4gICAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50Lmljb259XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudERlbGV0ZUljb24gb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwicmdiYSgxOTEsIDE5MSwgMTkxLCAxKVwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudERlbGV0ZUljb24+XG4gICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50PlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkICRjb21wYWN0Um93PXtjb21wYWN0U2luZ2xlUm93VG9vbGJhcn0+XG4gICAgICAgICAgPFN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwgJGNvbXBhY3RSb3c9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfT5cbiAgICAgICAgICAgIDxQbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgICAgICA8UGx1c1RvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICRtZW51T3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVBsdXNCdXR0b25DbGlja31cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0Lm9wZW5QbHVzTWVudUFyaWEnKX1cbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBsdXMgY29sb3I9e3BsdXNJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgPC9QbHVzVG9nZ2xlQnV0dG9uPlxuICAgICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICAgIG9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICBhbmNob3JFbD17cGx1c01lbnVBbmNob3J9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17Y2xvc2VQbHVzTWVudX1cbiAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3sgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3sgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICAgICAgICBzeD17eyB6SW5kZXg6IHBsdXNNZW51WkluZGV4IH19XG4gICAgICAgICAgICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgICAgICAgICAgICBwYXBlcjoge1xuICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgIHN4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICctNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51QXR0YWNofT5cbiAgICAgICAgICAgICAgICAgICAgICA8QXR0YWNoIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbCAkc2VsZWN0ZWQ9e2ZhbHNlfT57dCgnY2hhdC5wbHVzTWVudUF0dGFjaCcpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51V2ViU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgICAgICA8R2xvYmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1dlYlNlYXJjaEFjdGl2ZSA/IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA6IHBsdXNNZW51SWNvbkNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbCAkc2VsZWN0ZWQ9eyEhaXNXZWJTZWFyY2hBY3RpdmV9Pnt0KCdjaGF0LnNlYXJjaFdlYicpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudVNlbGVjdGVkQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51RGVlcFNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgIDxUZWxlc2NvcGVJY29uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2lzRGVlcFNlYXJjaEFjdGl2ZSA/IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA6IHBsdXNNZW51SWNvbkNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXshIWlzRGVlcFNlYXJjaEFjdGl2ZX0+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfVxuICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7aXNEZWVwU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudVNlbGVjdGVkQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9QbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgICAgIHsoaXNXZWJTZWFyY2hBY3RpdmUgfHwgaXNEZWVwU2VhcmNoQWN0aXZlKSAmJiAoXG4gICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwUm9vdFxuICAgICAgICAgICAgICAgICAgJGhvdmVyZWQ9e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICRleGl0aW5nPXt0b29sQ2hpcEV4aXRpbmd9XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkY2xvc2VTaG93bj17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0LnJlbW92ZUFjdGl2ZVRvb2xBcmlhJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3RpdmVUb29sQ2hpcExlYWRpbmdJY29ufVxuICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcEljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gdCgnY2hhdC5zZWFyY2hXZWInKSA6IHQoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfVxuICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBSb290PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9QbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgIDwvU3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgIGNvbXBhY3RTaW5nbGVSb3dUb29sYmFyXG4gICAgICAgICAgICAgICAgPyB7IGdyaWRDb2x1bW46IDIsIGdyaWRSb3c6IDEsIG1pbldpZHRoOiAwLCBhbGlnblNlbGY6ICdjZW50ZXInIH1cbiAgICAgICAgICAgICAgICA6IHsgZ3JpZENvbHVtbjogJzEgLyAtMScsIGdyaWRSb3c6IDEsIG1pbldpZHRoOiAwIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q29udGV4dE1lbnRpb25FZGl0b3JcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBvbklucHV0PXtoYW5kbGVFZGl0b3JJbnB1dH1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVXcmFwcGVyRm9jdXN9XG4gICAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlV3JhcHBlckJsdXJ9XG4gICAgICAgICAgICAgIG9uUGFzdGVGaWxlcz17aGFuZGxlUGFzdGVGaWxlc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwgJGNvbXBhY3RSb3c9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfT5cbiAgICAgICAgICAgIHtpc1dyaXRpbmcgPyAoXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnN0b3AnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BCdXR0b24gZGlzYWJsZWQ9e2ZhbHNlfSBvbkNsaWNrPXtoYW5kbGVTdG9wR2VuZXJhdGlvbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVN0b3BCdXR0b24+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnNlbmQnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZW5kRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlcz17aGFzVHlwaW5nUHJlc2VuY2UgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyUGxhbmUgY29sb3I9XCIjQkZCRkJGXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsPlxuICAgICAgICA8L1N0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQ+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgIGFjY2VwdD1cIi50eHQsLm1kLC5jc3YsLmRvYywuZG9jeCwucHB0LC5wcHR4LC5wbmcsLmpwZywuanBlZywucGRmLC54bHN4LC54bHMsLmZsYWMsLm00YSwubXAzLC5tcDQsLm9nYSwub2dnLC53YXYsLndlYm1cIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0fVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAvPlxuICAgICAgICB7aXNGaWxlRHJhZ0FjdGl2ZSAmJiA8U3R5bGVkTUFJQURyb3BPdmVybGF5Pnt0KCdjaGF0LmRyb3BGaWxlc0hlcmUnKX08L1N0eWxlZE1BSUFEcm9wT3ZlcmxheT59XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwb3BvdmVyTm9kZSAmJiBjcmVhdGVQb3J0YWwocG9wb3Zlck5vZGUsIGRvY3VtZW50LmJvZHkpfVxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQVFFQSxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsT0FBTyxRQUFRLGVBQWU7QUFDdkMsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLE9BQU9DLE1BQU0sTUFBTSxtQ0FBbUM7QUFFdEQsU0FDRUMsd0JBQXdCLEVBQ3hCQyxtQkFBbUIsRUFDbkJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxtQkFBbUIsRUFDbkJDLGtCQUFrQixFQUNsQkMsaUJBQWlCLEVBQ2pCQyxhQUFhLEVBQ2JDLGdCQUFnQixFQUNoQkMsZ0JBQWdCLEVBQ2hCQyxjQUFjLEVBQ2RD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
|