@projectcor/maia-components 2.11.103-3 → 2.11.103-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +7 -6
  3. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +9 -12
  4. package/lib/components/index.js +2 -1
  5. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  6. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +68 -97
  7. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +9 -18
  8. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +3 -3
  9. package/lib/components/molecules/ChatAIHome/styles.js +26 -32
  10. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +60 -56
  11. package/lib/components/molecules/Sidebar/Sidebar.js +4 -2
  12. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +35 -6
  13. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +543 -0
  14. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  15. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  16. package/lib/context/cor-user.js +1 -5
  17. package/lib/dev/DevMaiaPage.js +30 -0
  18. package/lib/hooks/useAgentModel/useCreateAgent.js +61 -14
  19. package/lib/hooks/useAgentModel/useUpdateAgent.js +58 -11
  20. package/lib/hooks/useEvent.js +2 -1
  21. package/lib/index.js +5 -2
  22. package/lib/lang/br/index.js +9 -6
  23. package/lib/lang/en/index.js +9 -6
  24. package/lib/lang/es/index.js +9 -6
  25. package/lib/lang/fr/index.js +9 -6
  26. package/lib/services/maia/Agents/connectors.js +250 -0
  27. package/lib/types/agentModal.js +1 -1
  28. package/lib/utils/normalizeAgentConnectors.js +28 -3
  29. package/package.json +1 -1
  30. package/lib/utils/managerHoursHomeFuas.js +0 -54
@@ -0,0 +1,543 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ /* eslint-disable no-nested-ternary */
8
+ /* eslint-disable react/function-component-definition */
9
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
10
+ import moment from 'moment';
11
+ import { useTranslation } from 'react-i18next';
12
+ import { useUser } from '../../../context/cor-user';
13
+ import { MAIAError } from '../../atoms/MAIAError';
14
+ import { ChatAIContent } from '../../molecules/ChatAIContent';
15
+ import { buildHandlers, options } from '../../molecules/ChatAIModal/constants';
16
+ import { Sidebar } from '../../molecules/Sidebar';
17
+ import { useGetAgents } from '../../../services/maia/Agents/getAgents';
18
+ import { GlobalContext, useGlobalContext } from '../../../context/global-context';
19
+ import { ChatAIModalHeader } from '../../molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader';
20
+ import { Snackbar } from '../SnackBar/Snackbar';
21
+ import { ProjectSummaryContent } from '../../molecules/ProjectSummaryContent';
22
+ import { AbmAgentModal } from '../AbmAgentModal/AbmAgentModal';
23
+ import { ChatAiModalFooter } from '../../molecules/ChatAIModal/components/ChatAiModalFooter';
24
+ import { SECTIONS } from '../../../constants/config';
25
+ import { validateIsMaia } from '../../../services/utils/validateIsMaia';
26
+ import { fetchMaia } from '../../../services/maia/client';
27
+ import { mapCORLang } from '../../../lang/utils';
28
+ import { useStreamdownStyles } from '../../../hooks/useStreamdownStyles';
29
+ import { useProjectSummaryConfig } from '../../../hooks/useProjectSummaryConfig';
30
+ import { acquireChatsStore, releaseChatsStore } from '../../../store';
31
+ import { useEvent } from '../../../hooks/useEvent';
32
+ import { useGetSkills } from '../../../services/maia/Skills/getSkills';
33
+ import { isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
34
+ import { withAppCfg } from '../../atoms/WithAppCfg';
35
+ import { Features } from '../../atoms/WithFeatureValidation';
36
+ import { SCPageMain, SCPageWrapper } from './ChatAIPage.styles';
37
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
38
+ var validateAccessByFeature = function validateAccessByFeature(section) {
39
+ if (section === 'header' && (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS || window.MAIA_CHAT_AI_FEATURE_ACCESS)) {
40
+ return true;
41
+ }
42
+ if ((section === 'project' || section === 'client') && window.MAIA_CHAT_AI_FEATURE_ACCESS) {
43
+ return true;
44
+ }
45
+ return false;
46
+ };
47
+ export var ChatAIPage = withAppCfg(function (_ref) {
48
+ var _ref$entity = _ref.entity,
49
+ entity = _ref$entity === void 0 ? {
50
+ projectId: null,
51
+ clientId: null
52
+ } : _ref$entity,
53
+ _ref$project = _ref.project,
54
+ initialProject = _ref$project === void 0 ? null : _ref$project,
55
+ _ref$client = _ref.client,
56
+ initialClient = _ref$client === void 0 ? null : _ref$client,
57
+ _ref$section = _ref.section,
58
+ section = _ref$section === void 0 ? 'header' : _ref$section,
59
+ _ref$hasMultiAgents = _ref.hasMultiAgents,
60
+ hasMultiAgents = _ref$hasMultiAgents === void 0 ? false : _ref$hasMultiAgents,
61
+ className = _ref.className;
62
+ useStreamdownStyles();
63
+ var initialProjectValue = section === 'project' ? initialProject : null;
64
+ var _useState = useState(initialProjectValue),
65
+ _useState2 = _slicedToArray(_useState, 2),
66
+ project = _useState2[0],
67
+ setProject = _useState2[1];
68
+ useEffect(function () {
69
+ if (section === 'project' && initialProject != null) {
70
+ setProject(initialProject);
71
+ }
72
+ }, [section, initialProject]);
73
+ var _useProjectSummaryCon = useProjectSummaryConfig({
74
+ section: section,
75
+ entity: entity,
76
+ project: project,
77
+ setProject: setProject,
78
+ client: section === 'client' ? initialClient !== null && initialClient !== void 0 ? initialClient : null : undefined,
79
+ hasMultiAgents: hasMultiAgents
80
+ }),
81
+ context = _useProjectSummaryCon.context,
82
+ restoreConfigureSettings = _useProjectSummaryCon.restoreConfigureSettings;
83
+ var providerValue = useMemo(function () {
84
+ return _objectSpread(_objectSpread({}, context), {}, {
85
+ section: section
86
+ });
87
+ }, [context, section]);
88
+ useEffect(function () {
89
+ acquireChatsStore();
90
+ return function () {
91
+ releaseChatsStore();
92
+ restoreConfigureSettings();
93
+ };
94
+ }, [restoreConfigureSettings]);
95
+ return /*#__PURE__*/_jsx(GlobalContext.Provider, {
96
+ value: providerValue,
97
+ children: /*#__PURE__*/_jsx(ChatAIPageContent, {
98
+ section: section,
99
+ className: className
100
+ })
101
+ });
102
+ }, Features.CHAT_AI);
103
+ var ChatAIPageContent = function ChatAIPageContent(_ref2) {
104
+ var _user$permissions, _user$permissions2, _user$permissions3, _agents$data;
105
+ var section = _ref2.section,
106
+ className = _ref2.className;
107
+ var user = useUser();
108
+ var _useTranslation = useTranslation([SECTIONS.abmAgent]),
109
+ i18n = _useTranslation.i18n;
110
+ var amplitudEvent = useEvent();
111
+ var lang = i18n.language === 'br' ? 'pt-br' : i18n.language;
112
+ moment.locale(lang);
113
+ var _useState3 = useState({
114
+ message: '',
115
+ attachments: []
116
+ }),
117
+ _useState4 = _slicedToArray(_useState3, 2),
118
+ userInitialMessage = _useState4[0],
119
+ setUserInitialMessage = _useState4[1];
120
+ var _useState5 = useState(null),
121
+ _useState6 = _slicedToArray(_useState5, 2),
122
+ initialChatId = _useState6[0],
123
+ setInitialChatId = _useState6[1];
124
+ var _useState7 = useState(0),
125
+ _useState8 = _slicedToArray(_useState7, 2),
126
+ newChatKey = _useState8[0],
127
+ setNewChatKey = _useState8[1];
128
+ var _useState9 = useState(null),
129
+ _useState0 = _slicedToArray(_useState9, 2),
130
+ sendMessageFunction = _useState0[0],
131
+ setSendMessageFunction = _useState0[1];
132
+ var _useState1 = useState(null),
133
+ _useState10 = _slicedToArray(_useState1, 2),
134
+ stopGenerationFunction = _useState10[0],
135
+ setStopGenerationFunction = _useState10[1];
136
+ var _useState11 = useState(false),
137
+ _useState12 = _slicedToArray(_useState11, 2),
138
+ isStreaming = _useState12[0],
139
+ setIsStreaming = _useState12[1];
140
+ var _useState13 = useState(false),
141
+ _useState14 = _slicedToArray(_useState13, 2),
142
+ isWriting = _useState14[0],
143
+ setIsWriting = _useState14[1];
144
+ var _useState15 = useState(false),
145
+ _useState16 = _slicedToArray(_useState15, 2),
146
+ refetchChats = _useState16[0],
147
+ setRefetchChats = _useState16[1];
148
+ var _useState17 = useState(options.home),
149
+ _useState18 = _slicedToArray(_useState17, 2),
150
+ currentOption = _useState18[0],
151
+ setCurrentOption = _useState18[1];
152
+ var _useState19 = useState(false),
153
+ _useState20 = _slicedToArray(_useState19, 2),
154
+ hasError = _useState20[0],
155
+ setHasError = _useState20[1];
156
+ var handlers = useMemo(function () {
157
+ return buildHandlers(setCurrentOption, setHasError);
158
+ }, []);
159
+ var _useState21 = useState(false),
160
+ _useState22 = _slicedToArray(_useState21, 2),
161
+ sidebarHasError = _useState22[0],
162
+ setSidebarHasError = _useState22[1];
163
+ var resetSelectedChatRef = useRef(null);
164
+ var _useState23 = useState('sidebar'),
165
+ _useState24 = _slicedToArray(_useState23, 2),
166
+ layoutMode = _useState24[0],
167
+ setLayoutMode = _useState24[1];
168
+ var expanded = layoutMode === 'fullscreen';
169
+ var _useGlobalContext = useGlobalContext(),
170
+ selectAgent = _useGlobalContext.selectAgent,
171
+ agent = _useGlobalContext.agent,
172
+ project = _useGlobalContext.project,
173
+ client = _useGlobalContext.client,
174
+ toggleWebSearch = _useGlobalContext.toggleWebSearch,
175
+ isWebSearchActive = _useGlobalContext.isWebSearchActive,
176
+ setChipsProject = _useGlobalContext.setChipsProject,
177
+ setClient = _useGlobalContext.setClient,
178
+ setProject = _useGlobalContext.setProject;
179
+ var _useGetAgents = useGetAgents({
180
+ selectAgent: selectAgent,
181
+ section: section,
182
+ agent: agent,
183
+ handleGoHome: handlers.home
184
+ }),
185
+ agents = _useGetAgents.agents,
186
+ loading = _useGetAgents.loading,
187
+ loadingMore = _useGetAgents.loadingMore,
188
+ agentError = _useGetAgents.error,
189
+ handleGetAgents = _useGetAgents.handleGetAgents,
190
+ loadMoreAgents = _useGetAgents.loadMoreAgents,
191
+ addAgent = _useGetAgents.addAgent,
192
+ removeAgent = _useGetAgents.removeAgent,
193
+ updateAgent = _useGetAgents.updateAgent,
194
+ updateAgentFavorite = _useGetAgents.updateAgentFavorite,
195
+ selectFirstAgent = _useGetAgents.selectFirstAgent,
196
+ sortAgentsList = _useGetAgents.sortAgentsList;
197
+ var _useGetSkills = useGetSkills(),
198
+ skills = _useGetSkills.skills,
199
+ loadingSkills = _useGetSkills.loading,
200
+ handleGetSkills = _useGetSkills.handleGetSkills,
201
+ removeSkill = _useGetSkills.removeSkill;
202
+ var isMAIA = validateIsMaia(agent);
203
+ var userHasPermissions = ((user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 || (_user$permissions = _user$permissions.ai_agents) === null || _user$permissions === void 0 ? void 0 : _user$permissions.create) || (user === null || user === void 0 || (_user$permissions2 = user.permissions) === null || _user$permissions2 === void 0 || (_user$permissions2 = _user$permissions2.ai_agents) === null || _user$permissions2 === void 0 ? void 0 : _user$permissions2.edit) || (user === null || user === void 0 || (_user$permissions3 = user.permissions) === null || _user$permissions3 === void 0 || (_user$permissions3 = _user$permissions3.ai_agents) === null || _user$permissions3 === void 0 ? void 0 : _user$permissions3["delete"])) && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
204
+ var computedCurrentOption = useMemo(function () {
205
+ var isGlobalSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global';
206
+ var isProjectSpecialist = isMAIA && ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' || (agent === null || agent === void 0 ? void 0 : agent.entity) == null);
207
+ var isClientSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client';
208
+ var isMaiaker = isMarketplaceGlobalCloneAgent(agent);
209
+ if (currentOption === options.myAgents && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
210
+ return options.myAgents;
211
+ }
212
+ if (currentOption === options.mySkills && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
213
+ return options.mySkills;
214
+ }
215
+ if (isGlobalSpecialist && !isMaiaker && (agent === null || agent === void 0 ? void 0 : agent.type) !== 'orchestrator' && currentOption === options.home) {
216
+ return options.chat;
217
+ }
218
+ var shouldShowProjectSelector = currentOption !== options.chat && isProjectSpecialist && !project;
219
+ var shouldShowClientSelector = currentOption !== options.chat && isClientSpecialist && !client;
220
+ if (shouldShowProjectSelector) return options.projectSelector;
221
+ if (shouldShowClientSelector) return options.clientSelector;
222
+ return currentOption;
223
+ }, [currentOption, project, client, isMAIA, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type]);
224
+ var isMaiakerAgentSelected = useMemo(function () {
225
+ return isMarketplaceGlobalCloneAgent(agent);
226
+ }, [agent]);
227
+ var sidebarAgentsNavActive = useMemo(function () {
228
+ if (computedCurrentOption === options.mySkills) return 'mySkills';
229
+ if (computedCurrentOption === options.myAgents) return 'myAgents';
230
+ if (isMaiakerAgentSelected) return 'maiaker';
231
+ return null;
232
+ }, [computedCurrentOption, isMaiakerAgentSelected]);
233
+ var agentsFetchedRef = useRef(false);
234
+ useEffect(function () {
235
+ if (!agentsFetchedRef.current) {
236
+ agentsFetchedRef.current = true;
237
+ handleGetAgents();
238
+ }
239
+ }, [handleGetAgents]);
240
+ useEffect(function () {
241
+ var onMergeCreatedAgent = function onMergeCreatedAgent(evt) {
242
+ var _ref3 = evt.detail || {},
243
+ nextAgent = _ref3.agent;
244
+ if (nextAgent !== null && nextAgent !== void 0 && nextAgent.id) addAgent(nextAgent, {
245
+ navigateHome: false
246
+ });
247
+ };
248
+ document.addEventListener('maia-merge-created-agent-into-list', onMergeCreatedAgent);
249
+ return function () {
250
+ return document.removeEventListener('maia-merge-created-agent-into-list', onMergeCreatedAgent);
251
+ };
252
+ }, [addAgent]);
253
+ useEffect(function () {
254
+ var onSyncEditedAgent = function onSyncEditedAgent(evt) {
255
+ var _ref4 = evt.detail || {},
256
+ nextAgent = _ref4.agent;
257
+ if (!(nextAgent !== null && nextAgent !== void 0 && nextAgent.id)) return;
258
+ updateAgent(nextAgent);
259
+ if ((agent === null || agent === void 0 ? void 0 : agent.id) === nextAgent.id) selectAgent(nextAgent);
260
+ };
261
+ document.addEventListener('maia-sync-edited-agent-from-chat', onSyncEditedAgent);
262
+ return function () {
263
+ return document.removeEventListener('maia-sync-edited-agent-from-chat', onSyncEditedAgent);
264
+ };
265
+ }, [updateAgent, selectAgent, agent === null || agent === void 0 ? void 0 : agent.id]);
266
+ useEffect(function () {
267
+ var openChatView = function openChatView() {
268
+ setHasError(false);
269
+ setInitialChatId(null);
270
+ setNewChatKey(function (prev) {
271
+ return prev + 1;
272
+ });
273
+ setUserInitialMessage({
274
+ message: '',
275
+ attachments: []
276
+ });
277
+ setCurrentOption(options.chat);
278
+ document.dispatchEvent(new CustomEvent('chat-session-changed'));
279
+ };
280
+ document.addEventListener('maia-open-chat-view', openChatView);
281
+ return function () {
282
+ return document.removeEventListener('maia-open-chat-view', openChatView);
283
+ };
284
+ }, []);
285
+ useEffect(function () {
286
+ var openNewChatWithAgent = function openNewChatWithAgent(event) {
287
+ var _detail;
288
+ var nextAgent = (_detail = event.detail) === null || _detail === void 0 ? void 0 : _detail.agent;
289
+ if (!nextAgent) return;
290
+ setProject(null);
291
+ setClient === null || setClient === void 0 || setClient(null);
292
+ selectAgent(nextAgent);
293
+ setHasError(false);
294
+ setCurrentOption(options.home);
295
+ };
296
+ document.addEventListener('maia-open-new-chat-with-agent', openNewChatWithAgent);
297
+ return function () {
298
+ return document.removeEventListener('maia-open-new-chat-with-agent', openNewChatWithAgent);
299
+ };
300
+ }, [selectAgent, setClient, setProject]);
301
+ var startChat = useCallback(function (message, attachments, faqId, agentSuggestionId) {
302
+ if (sidebarHasError) setSidebarHasError(false);
303
+ setInitialChatId(null);
304
+ setNewChatKey(function (prev) {
305
+ return prev + 1;
306
+ });
307
+ setUserInitialMessage(_objectSpread(_objectSpread({
308
+ message: message || '',
309
+ attachments: attachments || []
310
+ }, faqId ? {
311
+ faqId: faqId
312
+ } : {}), agentSuggestionId ? {
313
+ agentSuggestionId: agentSuggestionId
314
+ } : {}));
315
+ handlers.chat();
316
+ }, [handlers, sidebarHasError]);
317
+
318
+ // Sidebar types this prop as (chatId: string) but passes the full chat object at runtime
319
+ var goToChat = useCallback(function (chatArg) {
320
+ var chat = chatArg;
321
+ setUserInitialMessage({
322
+ message: '',
323
+ attachments: []
324
+ });
325
+ setInitialChatId(chat.sessionExternalId);
326
+ var selectedAgent = agents.data.find(function (agentItem) {
327
+ return agentItem.id === chat.agentId;
328
+ });
329
+ if (selectedAgent) selectAgent(selectedAgent);
330
+ document.dispatchEvent(new CustomEvent('chat-session-changed'));
331
+ handlers.chat();
332
+ }, [handlers, agents, selectAgent]);
333
+ var handleSendMessageReady = useCallback(function (sendMessage, stopGeneration, streaming, writing) {
334
+ setSendMessageFunction(function () {
335
+ return sendMessage;
336
+ });
337
+ setStopGenerationFunction(function () {
338
+ return stopGeneration;
339
+ });
340
+ setIsStreaming(streaming);
341
+ setIsWriting(writing);
342
+ }, []);
343
+ var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId) {
344
+ if (sidebarHasError) setSidebarHasError(false);
345
+ if (sendMessageFunction && computedCurrentOption === options.chat) {
346
+ sendMessageFunction(message, attachments, faqId, agentSuggestionId);
347
+ } else {
348
+ startChat(message, attachments, faqId, agentSuggestionId);
349
+ }
350
+ }, [sendMessageFunction, startChat, computedCurrentOption, sidebarHasError]);
351
+ var handleGoHome = useCallback(function () {
352
+ if (currentOption === options.chat) {
353
+ setInitialChatId(null);
354
+ setNewChatKey(function (prev) {
355
+ return prev + 1;
356
+ });
357
+ if ((agent === null || agent === void 0 ? void 0 : agent.entity) !== 'client') setClient === null || setClient === void 0 || setClient(null);
358
+ }
359
+ if ((!agent || agent !== null && agent !== void 0 && agent.is_deleted || agent !== null && agent !== void 0 && agent.has_not_permissions || agent !== null && agent !== void 0 && agent.has_not_access || agent !== null && agent !== void 0 && agent.project_deleted) && agents.data.length > 0) {
360
+ selectAgent(agents.data[0]);
361
+ }
362
+ setCurrentOption(options.home);
363
+ setChipsProject(null);
364
+ setHasError(false);
365
+ if (isWebSearchActive) toggleWebSearch();
366
+ if (resetSelectedChatRef.current) resetSelectedChatRef.current();
367
+ }, [currentOption, isWebSearchActive, toggleWebSearch, agent, agents, selectAgent, setClient, setChipsProject]);
368
+ var handleResetChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
369
+ return _regeneratorRuntime.wrap(function (_context) {
370
+ while (1) switch (_context.prev = _context.next) {
371
+ case 0:
372
+ setUserInitialMessage({
373
+ message: '',
374
+ attachments: []
375
+ });
376
+ setInitialChatId(null);
377
+ document.dispatchEvent(new CustomEvent('chat-session-changed'));
378
+ handleGoHome();
379
+ case 1:
380
+ case "end":
381
+ return _context.stop();
382
+ }
383
+ }, _callee);
384
+ })), [handleGoHome]);
385
+ var handleOpenMarketplace = useCallback(function () {
386
+ if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
387
+ return;
388
+ }
389
+ setCurrentOption(options.myAgents);
390
+ }, []);
391
+ var handleOpenSkills = useCallback(function () {
392
+ if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
393
+ return;
394
+ }
395
+ setHasError(false);
396
+ setCurrentOption(options.mySkills);
397
+ handleGetSkills();
398
+ }, [handleGetSkills]);
399
+ var handleGoToMaiaker = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
400
+ var maiakerAgent, response, data, _t;
401
+ return _regeneratorRuntime.wrap(function (_context2) {
402
+ while (1) switch (_context2.prev = _context2.next) {
403
+ case 0:
404
+ setHasError(false);
405
+ maiakerAgent = agents.data.find(function (a) {
406
+ return isMarketplaceGlobalCloneAgent(a);
407
+ });
408
+ if (maiakerAgent) {
409
+ _context2.next = 5;
410
+ break;
411
+ }
412
+ _context2.prev = 1;
413
+ _context2.next = 2;
414
+ return fetchMaia({
415
+ path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
416
+ method: 'GET'
417
+ });
418
+ case 2:
419
+ response = _context2.sent;
420
+ _context2.next = 3;
421
+ return response.json();
422
+ case 3:
423
+ data = _context2.sent;
424
+ maiakerAgent = (data.data || []).find(function (a) {
425
+ return isMarketplaceGlobalCloneAgent(a);
426
+ });
427
+ _context2.next = 5;
428
+ break;
429
+ case 4:
430
+ _context2.prev = 4;
431
+ _t = _context2["catch"](1);
432
+ return _context2.abrupt("return");
433
+ case 5:
434
+ if (maiakerAgent) {
435
+ _context2.next = 6;
436
+ break;
437
+ }
438
+ return _context2.abrupt("return");
439
+ case 6:
440
+ setProject(null);
441
+ setClient === null || setClient === void 0 || setClient(null);
442
+ selectAgent(maiakerAgent);
443
+ setCurrentOption(options.home);
444
+ if (resetSelectedChatRef.current) resetSelectedChatRef.current();
445
+ case 7:
446
+ case "end":
447
+ return _context2.stop();
448
+ }
449
+ }, _callee2, null, [[1, 4]]);
450
+ })), [agents.data, i18n.language, selectAgent, setClient, setProject]);
451
+ var handleDeleteAgentFromMyAgents = useCallback(function (agentId) {
452
+ removeAgent(agentId);
453
+ if ((agent === null || agent === void 0 ? void 0 : agent.id) === agentId) selectFirstAgent(agentId);
454
+ }, [agent === null || agent === void 0 ? void 0 : agent.id, removeAgent, selectFirstAgent]);
455
+ var showNewChat = computedCurrentOption !== options.chat;
456
+ var hideHeaderAgentSelector = computedCurrentOption === options.myAgents || computedCurrentOption === options.mySkills;
457
+ var hideFooterOnMaiakerMarketplaceHome = computedCurrentOption === options.home && isMaiakerAgentSelected;
458
+
459
+ // Suppress unused variable warning — kept for potential Amplitude tracking parity
460
+ void amplitudEvent;
461
+ return /*#__PURE__*/_jsxs(SCPageWrapper, {
462
+ className: className,
463
+ children: [validateAccessByFeature(section) ? /*#__PURE__*/_jsx(Sidebar, {
464
+ onGoToChat: goToChat,
465
+ onError: function onError() {
466
+ return setSidebarHasError(true);
467
+ },
468
+ handleGoToHome: handleGoHome,
469
+ handleOpenMarketplace: handleOpenMarketplace,
470
+ handleOpenSkills: handleOpenSkills,
471
+ showNewChat: showNewChat,
472
+ refetchChats: refetchChats,
473
+ handleSetRefetchChats: setRefetchChats,
474
+ hasError: sidebarHasError,
475
+ resetSelectedChatRef: resetSelectedChatRef,
476
+ agentsNavActive: sidebarAgentsNavActive
477
+ }) : null, /*#__PURE__*/_jsxs(SCPageMain, {
478
+ children: [/*#__PURE__*/_jsx(ChatAIModalHeader, {
479
+ layoutMode: layoutMode,
480
+ onLayoutModeChange: setLayoutMode,
481
+ expanded: expanded,
482
+ agents: agents.data,
483
+ hasError: !!agentError,
484
+ loading: loading,
485
+ loadingMore: loadingMore,
486
+ hasMore: agents.has_more,
487
+ handleResetChat: handleResetChat,
488
+ onAgentUpdate: updateAgentFavorite,
489
+ loadMoreAgents: loadMoreAgents,
490
+ sortAgentsList: sortAgentsList,
491
+ hideAgentSelector: hideHeaderAgentSelector,
492
+ hideControls: true
493
+ }), hasError ? /*#__PURE__*/_jsx(MAIAError, {}) : validateAccessByFeature(section) ? /*#__PURE__*/_jsx(ChatAIContent, {
494
+ currentOption: computedCurrentOption,
495
+ handlers: _objectSpread(_objectSpread({}, handlers), {}, {
496
+ chat: startChat,
497
+ home: handlers.home,
498
+ handleGoHome: handleGoHome
499
+ }),
500
+ onError: function onError() {
501
+ return setHasError(true);
502
+ },
503
+ refs: {
504
+ userInitialMessage: userInitialMessage,
505
+ initialChatId: initialChatId
506
+ },
507
+ onSendMessageReady: handleSendMessageReady,
508
+ expanded: expanded,
509
+ floating: false,
510
+ agents: agents.data,
511
+ onDeleteAgent: handleDeleteAgentFromMyAgents,
512
+ onFavoriteAgentUpdate: updateAgentFavorite,
513
+ hasMoreAgents: !!agents.has_more,
514
+ loadingMoreAgents: loadingMore,
515
+ onLoadMoreAgents: loadMoreAgents,
516
+ onGoToMaiaker: handleGoToMaiaker,
517
+ skills: skills,
518
+ loadingSkills: loadingSkills,
519
+ onDeleteSkill: removeSkill,
520
+ loadingAgents: loading,
521
+ agentError: agentError
522
+ }) : /*#__PURE__*/_jsx(ProjectSummaryContent, {
523
+ onRestartSummary: handlers.home
524
+ }), (computedCurrentOption === options.home && !!(agents !== null && agents !== void 0 && (_agents$data = agents.data) !== null && _agents$data !== void 0 && _agents$data.length) || computedCurrentOption === options.chat) && !hideFooterOnMaiakerMarketplaceHome && !hasError && !loading && validateAccessByFeature(section) && /*#__PURE__*/_jsx(ChatAiModalFooter, {
525
+ agent: agent,
526
+ handleSendMessage: handleSendMessage,
527
+ handleStopGeneration: stopGenerationFunction,
528
+ isStreaming: isStreaming,
529
+ isWriting: isWriting,
530
+ chatId: initialChatId,
531
+ newChatKey: newChatKey,
532
+ layoutMode: layoutMode
533
+ })]
534
+ }), userHasPermissions && /*#__PURE__*/_jsx(AbmAgentModal, {
535
+ addAgent: addAgent,
536
+ updateAgent: updateAgent,
537
+ removeAgent: removeAgent,
538
+ updateAgentFavorite: updateAgentFavorite,
539
+ selectFirstAgent: selectFirstAgent
540
+ }), /*#__PURE__*/_jsx(Snackbar, {})]
541
+ });
542
+ };
543
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIm1vbWVudCIsInVzZVRyYW5zbGF0aW9uIiwidXNlVXNlciIsIk1BSUFFcnJvciIsIkNoYXRBSUNvbnRlbnQiLCJidWlsZEhhbmRsZXJzIiwib3B0aW9ucyIsIlNpZGViYXIiLCJ1c2VHZXRBZ2VudHMiLCJHbG9iYWxDb250ZXh0IiwidXNlR2xvYmFsQ29udGV4dCIsIkNoYXRBSU1vZGFsSGVhZGVyIiwiU25hY2tiYXIiLCJQcm9qZWN0U3VtbWFyeUNvbnRlbnQiLCJBYm1BZ2VudE1vZGFsIiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJTRUNUSU9OUyIsInZhbGlkYXRlSXNNYWlhIiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsInVzZVN0cmVhbWRvd25TdHlsZXMiLCJ1c2VQcm9qZWN0U3VtbWFyeUNvbmZpZyIsImFjcXVpcmVDaGF0c1N0b3JlIiwicmVsZWFzZUNoYXRzU3RvcmUiLCJ1c2VFdmVudCIsInVzZUdldFNraWxscyIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50Iiwid2l0aEFwcENmZyIsIkZlYXR1cmVzIiwiU0NQYWdlTWFpbiIsIlNDUGFnZVdyYXBwZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwidmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUiLCJzZWN0aW9uIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyIsIkNoYXRBSVBhZ2UiLCJfcmVmIiwiX3JlZiRlbnRpdHkiLCJlbnRpdHkiLCJwcm9qZWN0SWQiLCJjbGllbnRJZCIsIl9yZWYkcHJvamVjdCIsInByb2plY3QiLCJpbml0aWFsUHJvamVjdCIsIl9yZWYkY2xpZW50IiwiY2xpZW50IiwiaW5pdGlhbENsaWVudCIsIl9yZWYkc2VjdGlvbiIsIl9yZWYkaGFzTXVsdGlBZ2VudHMiLCJoYXNNdWx0aUFnZW50cyIsImNsYXNzTmFtZSIsImluaXRpYWxQcm9qZWN0VmFsdWUiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZXRQcm9qZWN0IiwiX3VzZVByb2plY3RTdW1tYXJ5Q29uIiwidW5kZWZpbmVkIiwiY29udGV4dCIsInJlc3RvcmVDb25maWd1cmVTZXR0aW5ncyIsInByb3ZpZGVyVmFsdWUiLCJfb2JqZWN0U3ByZWFkIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImNoaWxkcmVuIiwiQ2hhdEFJUGFnZUNvbnRlbnQiLCJDSEFUX0FJIiwiX3JlZjIiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl91c2VyJHBlcm1pc3Npb25zMiIsIl91c2VyJHBlcm1pc3Npb25zMyIsIl9hZ2VudHMkZGF0YSIsInVzZXIiLCJfdXNlVHJhbnNsYXRpb24iLCJhYm1BZ2VudCIsImkxOG4iLCJhbXBsaXR1ZEV2ZW50IiwibGFuZyIsImxhbmd1YWdlIiwibG9jYWxlIiwiX3VzZVN0YXRlMyIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwic2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJpc1N0cmVhbWluZyIsInNldElzU3RyZWFtaW5nIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJyZWZldGNoQ2hhdHMiLCJzZXRSZWZldGNoQ2hhdHMiLCJfdXNlU3RhdGUxNyIsImhvbWUiLCJfdXNlU3RhdGUxOCIsImN1cnJlbnRPcHRpb24iLCJzZXRDdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMTkiLCJfdXNlU3RhdGUyMCIsImhhc0Vycm9yIiwic2V0SGFzRXJyb3IiLCJoYW5kbGVycyIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJzaWRlYmFySGFzRXJyb3IiLCJzZXRTaWRlYmFySGFzRXJyb3IiLCJyZXNldFNlbGVjdGVkQ2hhdFJlZiIsIl91c2VTdGF0ZTIzIiwiX3VzZVN0YXRlMjQiLCJsYXlvdXRNb2RlIiwic2V0TGF5b3V0TW9kZSIsImV4cGFuZGVkIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsImFnZW50IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJfdXNlR2V0QWdlbnRzIiwiaGFuZGxlR29Ib21lIiwiYWdlbnRzIiwibG9hZGluZyIsImxvYWRpbmdNb3JlIiwiYWdlbnRFcnJvciIsImVycm9yIiwiaGFuZGxlR2V0QWdlbnRzIiwibG9hZE1vcmVBZ2VudHMiLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiX3VzZUdldFNraWxscyIsInNraWxscyIsImxvYWRpbmdTa2lsbHMiLCJoYW5kbGVHZXRTa2lsbHMiLCJyZW1vdmVTa2lsbCIsImlzTUFJQSIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwiZWRpdCIsImNvbXB1dGVkQ3VycmVudE9wdGlvbiIsImlzR2xvYmFsU3BlY2lhbGlzdCIsImlzUHJvamVjdFNwZWNpYWxpc3QiLCJpc0NsaWVudFNwZWNpYWxpc3QiLCJpc01haWFrZXIiLCJteUFnZW50cyIsIm15U2tpbGxzIiwidHlwZSIsImNoYXQiLCJzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yIiwic2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yIiwicHJvamVjdFNlbGVjdG9yIiwiY2xpZW50U2VsZWN0b3IiLCJuYW1lIiwiaXNNYWlha2VyQWdlbnRTZWxlY3RlZCIsInNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNGZXRjaGVkUmVmIiwiY3VycmVudCIsIm9uTWVyZ2VDcmVhdGVkQWdlbnQiLCJldnQiLCJfcmVmMyIsImRldGFpbCIsIm5leHRBZ2VudCIsImlkIiwibmF2aWdhdGVIb21lIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjQiLCJvcGVuQ2hhdFZpZXciLCJwcmV2IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJldmVudCIsIl9kZXRhaWwiLCJzdGFydENoYXQiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZ29Ub0NoYXQiLCJjaGF0QXJnIiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzZWxlY3RlZEFnZW50IiwiZGF0YSIsImZpbmQiLCJhZ2VudEl0ZW0iLCJhZ2VudElkIiwiaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSIsInNlbmRNZXNzYWdlIiwic3RvcEdlbmVyYXRpb24iLCJzdHJlYW1pbmciLCJ3cml0aW5nIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicHJvamVjdF9kZWxldGVkIiwibGVuZ3RoIiwiaGFuZGxlUmVzZXRDaGF0IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0Iiwic3RvcCIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsImhhbmRsZU9wZW5Ta2lsbHMiLCJoYW5kbGVHb1RvTWFpYWtlciIsIl9jYWxsZWUyIiwibWFpYWtlckFnZW50IiwicmVzcG9uc2UiLCJfdCIsIl9jb250ZXh0MiIsImEiLCJwYXRoIiwiY29uY2F0IiwibWV0aG9kIiwic2VudCIsImpzb24iLCJhYnJ1cHQiLCJoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyIsInNob3dOZXdDaGF0IiwiaGlkZUhlYWRlckFnZW50U2VsZWN0b3IiLCJoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lIiwib25Hb1RvQ2hhdCIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsImFnZW50c05hdkFjdGl2ZSIsIm9uTGF5b3V0TW9kZUNoYW5nZSIsImhhc01vcmUiLCJoYXNfbW9yZSIsIm9uQWdlbnRVcGRhdGUiLCJoaWRlQWdlbnRTZWxlY3RvciIsImhpZGVDb250cm9scyIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJmbG9hdGluZyIsIm9uRGVsZXRlQWdlbnQiLCJvbkZhdm9yaXRlQWdlbnRVcGRhdGUiLCJoYXNNb3JlQWdlbnRzIiwibG9hZGluZ01vcmVBZ2VudHMiLCJvbkxvYWRNb3JlQWdlbnRzIiwib25Hb1RvTWFpYWtlciIsIm9uRGVsZXRlU2tpbGwiLCJsb2FkaW5nQWdlbnRzIiwib25SZXN0YXJ0U3VtbWFyeSIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwiY2hhdElkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0NoYXRBSVBhZ2UvQ2hhdEFJUGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgQ2hhdEFJQ29udGVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9jb25zdGFudHMnXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyBHbG9iYWxDb250ZXh0LCB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENoYXRBSU1vZGFsSGVhZGVyIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRBSU1vZGFsL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uL1NuYWNrQmFyL1NuYWNrYmFyJ1xuaW1wb3J0IHsgUHJvamVjdFN1bW1hcnlDb250ZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwnXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9jb21wb25lbnRzL0NoYXRBaU1vZGFsRm9vdGVyJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgdXNlU3RyZWFtZG93blN0eWxlcyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWRvd25TdHlsZXMnXG5pbXBvcnQgeyB1c2VQcm9qZWN0U3VtbWFyeUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVByb2plY3RTdW1tYXJ5Q29uZmlnJ1xuaW1wb3J0IHsgYWNxdWlyZUNoYXRzU3RvcmUsIHJlbGVhc2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUnXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NsaWVudCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRBSU1vZGFsL2xheW91dCdcbmltcG9ydCB7IHVzZUdldFNraWxscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2dldFNraWxscydcbmltcG9ydCB7IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IHdpdGhBcHBDZmcgfSBmcm9tICcuLi8uLi9hdG9tcy9XaXRoQXBwQ2ZnJ1xuaW1wb3J0IHsgRmVhdHVyZXMgfSBmcm9tICcuLi8uLi9hdG9tcy9XaXRoRmVhdHVyZVZhbGlkYXRpb24nXG5pbXBvcnQgeyBTQ1BhZ2VNYWluLCBTQ1BhZ2VXcmFwcGVyIH0gZnJvbSAnLi9DaGF0QUlQYWdlLnN0eWxlcydcblxuZXhwb3J0IHR5cGUgQ2hhdEFJUGFnZVByb3BzID0ge1xuICBlbnRpdHk/OiB7IHByb2plY3RJZDogc3RyaW5nIHwgbnVsbDsgY2xpZW50SWQ6IHN0cmluZyB8IG51bGwgfVxuICBwcm9qZWN0PzogUHJvamVjdCB8IG51bGxcbiAgY2xpZW50PzogQ2xpZW50IHwgbnVsbFxuICBzZWN0aW9uPzogJ3Byb2plY3QnIHwgJ2hlYWRlcicgfCAnY2xpZW50J1xuICBoYXNNdWx0aUFnZW50cz86IGJvb2xlYW5cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU2VjdGlvblR5cGUgPSAncHJvamVjdCcgfCAnaGVhZGVyJyB8ICdjbGllbnQnXG5cbnR5cGUgQ2hhdExpc3RJdGVtID0geyBzZXNzaW9uRXh0ZXJuYWxJZDogc3RyaW5nOyBhZ2VudElkOiBzdHJpbmcgfVxuXG5jb25zdCB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSA9IChzZWN0aW9uOiBzdHJpbmcpID0+IHtcbiAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInICYmICh3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyB8fCB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKChzZWN0aW9uID09PSAncHJvamVjdCcgfHwgc2VjdGlvbiA9PT0gJ2NsaWVudCcpICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJUGFnZSA9IHdpdGhBcHBDZmcoXG4gICh7XG4gICAgZW50aXR5ID0geyBwcm9qZWN0SWQ6IG51bGwsIGNsaWVudElkOiBudWxsIH0sXG4gICAgcHJvamVjdDogaW5pdGlhbFByb2plY3QgPSBudWxsLFxuICAgIGNsaWVudDogaW5pdGlhbENsaWVudCA9IG51bGwsXG4gICAgc2VjdGlvbiA9ICdoZWFkZXInLFxuICAgIGhhc011bHRpQWdlbnRzID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICB9OiBDaGF0QUlQYWdlUHJvcHMpID0+IHtcbiAgICB1c2VTdHJlYW1kb3duU3R5bGVzKClcblxuICAgIGNvbnN0IGluaXRpYWxQcm9qZWN0VmFsdWUgPSBzZWN0aW9uID09PSAncHJvamVjdCcgPyBpbml0aWFsUHJvamVjdCA6IG51bGxcbiAgICBjb25zdCBbcHJvamVjdCwgc2V0UHJvamVjdF0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4oaW5pdGlhbFByb2plY3RWYWx1ZSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ3Byb2plY3QnICYmIGluaXRpYWxQcm9qZWN0ICE9IG51bGwpIHtcbiAgICAgICAgc2V0UHJvamVjdChpbml0aWFsUHJvamVjdClcbiAgICAgIH1cbiAgICB9LCBbc2VjdGlvbiwgaW5pdGlhbFByb2plY3RdKVxuXG4gICAgY29uc3QgeyBjb250ZXh0LCByZXN0b3JlQ29uZmlndXJlU2V0dGluZ3MgfSA9IHVzZVByb2plY3RTdW1tYXJ5Q29uZmlnKHtcbiAgICAgIHNlY3Rpb24sXG4gICAgICBlbnRpdHksXG4gICAgICBwcm9qZWN0LFxuICAgICAgc2V0UHJvamVjdCxcbiAgICAgIGNsaWVudDogc2VjdGlvbiA9PT0gJ2NsaWVudCcgPyAoaW5pdGlhbENsaWVudCA/PyBudWxsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGhhc011bHRpQWdlbnRzLFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm92aWRlclZhbHVlID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7IC4uLmNvbnRleHQsIHNlY3Rpb246IHNlY3Rpb24gYXMgJ3Byb2plY3QnIHwgJ2hlYWRlcicgfCAnY2xpZW50JyB9KSxcbiAgICAgIFtjb250ZXh0LCBzZWN0aW9uXVxuICAgIClcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBhY3F1aXJlQ2hhdHNTdG9yZSgpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWxlYXNlQ2hhdHNTdG9yZSgpXG4gICAgICAgIHJlc3RvcmVDb25maWd1cmVTZXR0aW5ncygpXG4gICAgICB9XG4gICAgfSwgW3Jlc3RvcmVDb25maWd1cmVTZXR0aW5nc10pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEdsb2JhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3Byb3ZpZGVyVmFsdWV9PlxuICAgICAgICA8Q2hhdEFJUGFnZUNvbnRlbnQgc2VjdGlvbj17c2VjdGlvbiBhcyBTZWN0aW9uVHlwZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IC8+XG4gICAgICA8L0dsb2JhbENvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuICB9LFxuICBGZWF0dXJlcy5DSEFUX0FJXG4pXG5cbmNvbnN0IENoYXRBSVBhZ2VDb250ZW50ID0gKHsgc2VjdGlvbiwgY2xhc3NOYW1lIH06IHsgc2VjdGlvbjogU2VjdGlvblR5cGU7IGNsYXNzTmFtZT86IHN0cmluZyB9KSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0LWJyJyA6IGkxOG4ubGFuZ3VhZ2VcbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IFt1c2VySW5pdGlhbE1lc3NhZ2UsIHNldFVzZXJJbml0aWFsTWVzc2FnZV0gPSB1c2VTdGF0ZTx7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gIH0+KHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICBjb25zdCBbaW5pdGlhbENoYXRJZCwgc2V0SW5pdGlhbENoYXRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbbmV3Q2hhdEtleSwgc2V0TmV3Q2hhdEtleV0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbl0gPSB1c2VTdGF0ZTxcbiAgICAoKG1lc3NhZ2U6IHN0cmluZywgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLCBmYXFJZD86IHN0cmluZywgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcpID0+IHZvaWQpIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3JlZmV0Y2hDaGF0cywgc2V0UmVmZXRjaENoYXRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudE9wdGlvbiwgc2V0Q3VycmVudE9wdGlvbl0gPSB1c2VTdGF0ZShvcHRpb25zLmhvbWUpXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGhhbmRsZXJzID0gdXNlTWVtbygoKSA9PiBidWlsZEhhbmRsZXJzKHNldEN1cnJlbnRPcHRpb24sIHNldEhhc0Vycm9yKSwgW10pXG4gIGNvbnN0IFtzaWRlYmFySGFzRXJyb3IsIHNldFNpZGViYXJIYXNFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgcmVzZXRTZWxlY3RlZENoYXRSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2xheW91dE1vZGUsIHNldExheW91dE1vZGVdID0gdXNlU3RhdGU8TWFpYUNoYXRNb2RhbExheW91dE1vZGU+KCdzaWRlYmFyJylcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcblxuICBjb25zdCB7XG4gICAgc2VsZWN0QWdlbnQsXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIGNvbnN0IHtcbiAgICBhZ2VudHMsXG4gICAgbG9hZGluZyxcbiAgICBsb2FkaW5nTW9yZSxcbiAgICBlcnJvcjogYWdlbnRFcnJvcixcbiAgICBoYW5kbGVHZXRBZ2VudHMsXG4gICAgbG9hZE1vcmVBZ2VudHMsXG4gICAgYWRkQWdlbnQsXG4gICAgcmVtb3ZlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgICBzZWxlY3RGaXJzdEFnZW50LFxuICAgIHNvcnRBZ2VudHNMaXN0LFxuICB9ID0gdXNlR2V0QWdlbnRzKHsgc2VsZWN0QWdlbnQsIHNlY3Rpb24sIGFnZW50LCBoYW5kbGVHb0hvbWU6IGhhbmRsZXJzLmhvbWUgfSlcblxuICBjb25zdCB7IHNraWxscywgbG9hZGluZzogbG9hZGluZ1NraWxscywgaGFuZGxlR2V0U2tpbGxzLCByZW1vdmVTa2lsbCB9ID0gdXNlR2V0U2tpbGxzKClcblxuICBjb25zdCBpc01BSUEgPSB2YWxpZGF0ZUlzTWFpYShhZ2VudCBhcyBBZ2VudClcblxuICBjb25zdCB1c2VySGFzUGVybWlzc2lvbnMgPVxuICAgICh1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5jcmVhdGUgfHxcbiAgICAgIHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmVkaXQgfHxcbiAgICAgIHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmRlbGV0ZSkgJiZcbiAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuXG4gIGNvbnN0IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGlzR2xvYmFsU3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJ1xuICAgIGNvbnN0IGlzUHJvamVjdFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBhZ2VudD8uZW50aXR5ID09IG51bGwpXG4gICAgY29uc3QgaXNDbGllbnRTcGVjaWFsaXN0ID0gaXNNQUlBICYmIGFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnXG4gICAgY29uc3QgaXNNYWlha2VyID0gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpXG5cbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cyAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubXlBZ2VudHNcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxscyAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubXlTa2lsbHNcbiAgICB9XG5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIGlmIChzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IpIHJldHVybiBvcHRpb25zLmNsaWVudFNlbGVjdG9yXG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25cbiAgfSwgW2N1cnJlbnRPcHRpb24sIHByb2plY3QsIGNsaWVudCwgaXNNQUlBLCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdKVxuXG4gIGNvbnN0IGlzTWFpYWtlckFnZW50U2VsZWN0ZWQgPSB1c2VNZW1vKCgpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KSwgW2FnZW50XSlcblxuICBjb25zdCBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlID0gdXNlTWVtbygoKTogJ21haWFrZXInIHwgJ215QWdlbnRzJyB8ICdteVNraWxscycgfCBudWxsID0+IHtcbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzKSByZXR1cm4gJ215U2tpbGxzJ1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMpIHJldHVybiAnbXlBZ2VudHMnXG4gICAgaWYgKGlzTWFpYWtlckFnZW50U2VsZWN0ZWQpIHJldHVybiAnbWFpYWtlcidcbiAgICByZXR1cm4gbnVsbFxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkXSlcblxuICBjb25zdCBhZ2VudHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGhhbmRsZUdldEFnZW50cygpXG4gICAgfVxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTWVyZ2VDcmVhdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmIChuZXh0QWdlbnQ/LmlkKSBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gIH0sIFthZGRBZ2VudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblN5bmNFZGl0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFuZXh0QWdlbnQ/LmlkKSByZXR1cm5cbiAgICAgIHVwZGF0ZUFnZW50KG5leHRBZ2VudClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IG5leHRBZ2VudC5pZCkgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICB9LCBbdXBkYXRlQWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudD8uaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkNoYXRWaWV3ID0gKCkgPT4ge1xuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuY2hhdClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgbmV4dEFnZW50ID0gKGV2ZW50IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWw/LmFnZW50XG4gICAgICBpZiAoIW5leHRBZ2VudCkgcmV0dXJuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3RdKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlPzogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCAnJyxcbiAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgLy8gU2lkZWJhciB0eXBlcyB0aGlzIHByb3AgYXMgKGNoYXRJZDogc3RyaW5nKSBidXQgcGFzc2VzIHRoZSBmdWxsIGNoYXQgb2JqZWN0IGF0IHJ1bnRpbWVcbiAgY29uc3QgZ29Ub0NoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoY2hhdEFyZzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBjaGF0ID0gY2hhdEFyZyBhcyB1bmtub3duIGFzIENoYXRMaXN0SXRlbVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoYWdlbnRJdGVtID0+IGFnZW50SXRlbS5pZCA9PT0gY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHNlbGVjdEFnZW50KHNlbGVjdGVkQWdlbnQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBhZ2VudHMsIHNlbGVjdEFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZCxcbiAgICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgICAgc3RyZWFtaW5nOiBib29sZWFuLFxuICAgICAgd3JpdGluZzogYm9vbGVhblxuICAgICkgPT4ge1xuICAgICAgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbigoKSA9PiBzZW5kTWVzc2FnZSlcbiAgICAgIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24oKCkgPT4gc3RvcEdlbmVyYXRpb24pXG4gICAgICBzZXRJc1N0cmVhbWluZyhzdHJlYW1pbmcpXG4gICAgICBzZXRJc1dyaXRpbmcod3JpdGluZylcbiAgICB9LFxuICAgIFtdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlOiBzdHJpbmcsIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSwgZmFxSWQ/OiBzdHJpbmcsIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICBpZiAoc2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIGlmIChhZ2VudD8uZW50aXR5ICE9PSAnY2xpZW50Jykgc2V0Q2xpZW50Py4obnVsbClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKCFhZ2VudCB8fCBhZ2VudD8uaXNfZGVsZXRlZCB8fCBhZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyB8fCBhZ2VudD8uaGFzX25vdF9hY2Nlc3MgfHwgYWdlbnQ/LnByb2plY3RfZGVsZXRlZCkgJiZcbiAgICAgIGFnZW50cy5kYXRhLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50cy5kYXRhWzBdKVxuICAgIH1cbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICB9LCBbY3VycmVudE9wdGlvbiwgaXNXZWJTZWFyY2hBY3RpdmUsIHRvZ2dsZVdlYlNlYXJjaCwgYWdlbnQsIGFnZW50cywgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0XSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICBjb25zdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teUFnZW50cylcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlT3BlblNraWxscyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15U2tpbGxzKVxuICAgIGhhbmRsZUdldFNraWxscygpXG4gIH0sIFtoYW5kbGVHZXRTa2lsbHNdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGE6IEFnZW50KSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhKSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHJldHVyblxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gIH0sIFthZ2VudHMuZGF0YSwgaTE4bi5sYW5ndWFnZSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdF0pXG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZW1vdmVBZ2VudChhZ2VudElkKVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gYWdlbnRJZCkgc2VsZWN0Rmlyc3RBZ2VudChhZ2VudElkKVxuICAgIH0sXG4gICAgW2FnZW50Py5pZCwgcmVtb3ZlQWdlbnQsIHNlbGVjdEZpcnN0QWdlbnRdXG4gIClcblxuICBjb25zdCBzaG93TmV3Q2hhdCA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0XG4gIGNvbnN0IGhpZGVIZWFkZXJBZ2VudFNlbGVjdG9yID1cbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMgfHwgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzXG4gIGNvbnN0IGhpZGVGb290ZXJPbk1haWFrZXJNYXJrZXRwbGFjZUhvbWUgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBpc01haWFrZXJBZ2VudFNlbGVjdGVkXG5cbiAgLy8gU3VwcHJlc3MgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcg4oCUIGtlcHQgZm9yIHBvdGVudGlhbCBBbXBsaXR1ZGUgdHJhY2tpbmcgcGFyaXR5XG4gIHZvaWQgYW1wbGl0dWRFdmVudFxuXG4gIHJldHVybiAoXG4gICAgPFNDUGFnZVdyYXBwZXIgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAge3ZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24pID8gKFxuICAgICAgICA8U2lkZWJhclxuICAgICAgICAgIG9uR29Ub0NoYXQ9e2dvVG9DaGF0fVxuICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldFNpZGViYXJIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICBoYW5kbGVHb1RvSG9tZT17aGFuZGxlR29Ib21lfVxuICAgICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZT17aGFuZGxlT3Blbk1hcmtldHBsYWNlfVxuICAgICAgICAgIGhhbmRsZU9wZW5Ta2lsbHM9e2hhbmRsZU9wZW5Ta2lsbHN9XG4gICAgICAgICAgc2hvd05ld0NoYXQ9e3Nob3dOZXdDaGF0fVxuICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cz17c2V0UmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhc0Vycm9yPXtzaWRlYmFySGFzRXJyb3J9XG4gICAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWY9e3Jlc2V0U2VsZWN0ZWRDaGF0UmVmfVxuICAgICAgICAgIGFnZW50c05hdkFjdGl2ZT17c2lkZWJhckFnZW50c05hdkFjdGl2ZX1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFNDUGFnZU1haW4+XG4gICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtzZXRMYXlvdXRNb2RlfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgIGhhc0Vycm9yPXshIWFnZW50RXJyb3J9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgaGFzTW9yZT17YWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgIGhhbmRsZVJlc2V0Q2hhdD17aGFuZGxlUmVzZXRDaGF0fVxuICAgICAgICAgIG9uQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgbG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgIHNvcnRBZ2VudHNMaXN0PXtzb3J0QWdlbnRzTGlzdH1cbiAgICAgICAgICBoaWRlQWdlbnRTZWxlY3Rvcj17aGlkZUhlYWRlckFnZW50U2VsZWN0b3J9XG4gICAgICAgICAgaGlkZUNvbnRyb2xzXG4gICAgICAgIC8+XG4gICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uKSA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBmbG9hdGluZz17ZmFsc2V9XG4gICAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgICBza2lsbHM9e3NraWxsc31cbiAgICAgICAgICAgIGxvYWRpbmdTa2lsbHM9e2xvYWRpbmdTa2lsbHN9XG4gICAgICAgICAgICBvbkRlbGV0ZVNraWxsPXtyZW1vdmVTa2lsbH1cbiAgICAgICAgICAgIGxvYWRpbmdBZ2VudHM9e2xvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFByb2plY3RTdW1tYXJ5Q29udGVudCBvblJlc3RhcnRTdW1tYXJ5PXtoYW5kbGVycy5ob21lfSAvPlxuICAgICAgICApfVxuICAgICAgICB7KChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiAhIWFnZW50cz8uZGF0YT8ubGVuZ3RoKSB8fFxuICAgICAgICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSAmJlxuICAgICAgICAgICFoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lICYmXG4gICAgICAgICAgIWhhc0Vycm9yICYmXG4gICAgICAgICAgIWxvYWRpbmcgJiZcbiAgICAgICAgICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFpTW9kYWxGb290ZXJcbiAgICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgICBoYW5kbGVTZW5kTWVzc2FnZT17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BHZW5lcmF0aW9uPXtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9ufVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzV3JpdGluZz17aXNXcml0aW5nfVxuICAgICAgICAgICAgICBjaGF0SWQ9e2luaXRpYWxDaGF0SWR9XG4gICAgICAgICAgICAgIG5ld0NoYXRLZXk9e25ld0NoYXRLZXl9XG4gICAgICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8L1NDUGFnZU1haW4+XG4gICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgPEFibUFnZW50TW9kYWxcbiAgICAgICAgICBhZGRBZ2VudD17YWRkQWdlbnR9XG4gICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgIHJlbW92ZUFnZW50PXtyZW1vdmVBZ2VudH1cbiAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPFNuYWNrYmFyIC8+XG4gICAgPC9TQ1BhZ2VXcmFwcGVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3pFLE9BQU9DLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MsU0FBUyxRQUFRLHVCQUF1QjtBQUNqRCxTQUFTQyxhQUFhLFFBQVEsK0JBQStCO0FBQzdELFNBQVNDLGFBQWEsRUFBRUMsT0FBTyxRQUFRLHVDQUF1QztBQUM5RSxTQUFTQyxPQUFPLFFBQVEseUJBQXlCO0FBQ2pELFNBQVNDLFlBQVksUUFBUSx5Q0FBeUM7QUFDdEUsU0FBU0MsYUFBYSxFQUFFQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFFakYsU0FBU0MsaUJBQWlCLFFBQVEsNEVBQTRFO0FBQzlHLFNBQVNDLFFBQVEsUUFBUSxzQkFBc0I7QUFDL0MsU0FBU0MscUJBQXFCLFFBQVEsdUNBQXVDO0FBQzdFLFNBQVNDLGFBQWEsUUFBUSxnQ0FBZ0M7QUFDOUQsU0FBU0MsaUJBQWlCLFFBQVEsMERBQTBEO0FB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