@projectcor/maia-components 2.11.103-4 → 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 (72) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +1 -6
  3. package/lib/components/atoms/icons/index.js +1 -2
  4. package/lib/components/index.js +2 -1
  5. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  6. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +7 -46
  7. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +69 -308
  8. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +18 -28
  9. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +2 -9
  10. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +61 -69
  11. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +1 -5
  12. package/lib/components/molecules/ChatFooter/ChatFooter.js +2 -4
  13. package/lib/components/molecules/Sidebar/Sidebar.js +61 -104
  14. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +1 -16
  15. package/lib/components/molecules/Sidebar/Sidebar.styles.js +29 -30
  16. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +35 -6
  17. package/lib/components/organisms/ChatAI/ChatAI.js +40 -131
  18. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +543 -0
  19. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  20. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  21. package/lib/context/global-context.js +1 -3
  22. package/lib/dev/DevMaiaPage.js +30 -0
  23. package/lib/hooks/useAgentModel/useCreateAgent.js +61 -14
  24. package/lib/hooks/useAgentModel/useUpdateAgent.js +58 -11
  25. package/lib/hooks/useChatManager/useChatManager.js +438 -530
  26. package/lib/hooks/useChatMessages/useChatMessages.js +236 -427
  27. package/lib/hooks/useChats/useChats.js +4 -21
  28. package/lib/hooks/useEvent.js +2 -1
  29. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  30. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +521 -139
  31. package/lib/hooks/useStreamingMessage/index.js +3 -2
  32. package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
  33. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +17 -13
  34. package/lib/index.js +5 -2
  35. package/lib/lang/br/index.js +9 -11
  36. package/lib/lang/en/index.js +9 -11
  37. package/lib/lang/es/index.js +9 -11
  38. package/lib/lang/fr/index.js +10 -13
  39. package/lib/services/maia/Agents/connectors.js +250 -0
  40. package/lib/services/maia/Chats/getChatsByUserId.js +4 -6
  41. package/lib/services/maia/Chats/index.js +1 -3
  42. package/lib/store/chatsStore.types.js +1 -1
  43. package/lib/store/useChatsStore.js +12 -149
  44. package/lib/types/Chat.js +1 -1
  45. package/lib/types/agentModal.js +1 -1
  46. package/lib/utils/normalizeAgentConnectors.js +28 -3
  47. package/package.json +3 -3
  48. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +0 -20
  49. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +0 -20
  50. package/lib/components/atoms/SessionGeneratingDot/index.js +0 -2
  51. package/lib/components/atoms/icons/MaiaSparkleIcon.js +0 -75
  52. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +0 -66
  53. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +0 -55
  54. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +0 -2
  55. package/lib/hooks/useMinimizedPillBottomOffset.js +0 -97
  56. package/lib/services/maia/Chats/markSessionAsRead.js +0 -32
  57. package/lib/store/chatsSidebarOptimistic.js +0 -92
  58. package/lib/store/maiaMinimizedPersistence.js +0 -49
  59. package/lib/store/sessions/activeView.js +0 -22
  60. package/lib/store/sessions/index.js +0 -9
  61. package/lib/store/sessions/sessionHitlContext.js +0 -15
  62. package/lib/store/sessions/sessionNotificationSound.js +0 -57
  63. package/lib/store/sessions/sessionNotifications.js +0 -110
  64. package/lib/store/sessions/sessionNotifications.types.js +0 -2
  65. package/lib/store/sessions/sessionStreamManager.js +0 -576
  66. package/lib/store/sessions/sessionStreamingText.js +0 -80
  67. package/lib/store/sessions/sessions.types.js +0 -35
  68. package/lib/store/sessions/useSessionMeta.js +0 -39
  69. package/lib/store/sessions/useSessionStreamingText.js +0 -18
  70. package/lib/store/sessions/useSessionsStore.js +0 -197
  71. package/lib/utils/formatUnreadCount.js +0 -6
  72. package/lib/utils/maiaHostOpen.js +0 -54
@@ -1,9 +1,9 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  import _typeof from "@babel/runtime/helpers/typeof";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  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; }
5
5
  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; }
6
- import { useRef, useState, useMemo, useEffect, useCallback } from 'react';
6
+ import { useRef, useState, useMemo, useEffect } from 'react';
7
7
  import { useProjectSummaryConfig } from '../../../hooks/useProjectSummaryConfig';
8
8
  import { MODAL_ELEMENTS } from '../../../hooks/useModal/useModal';
9
9
  import { ChatAIModal } from '../../molecules/ChatAIModal';
@@ -11,30 +11,10 @@ import { GlobalContext } from '../../../context/global-context';
11
11
  import { Features } from '../../atoms/WithFeatureValidation';
12
12
  import { withAppCfg } from '../../atoms/WithAppCfg';
13
13
  import { acquireChatsStore, releaseChatsStore } from '../../../store';
14
- import { getChatsStoreState } from '../../../store/useChatsStore';
15
- import { ensureSessionNotificationsInitialized } from '../../../store/sessions/sessionNotifications';
16
- import { useUser } from '../../../context/cor-user';
17
14
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
18
- import { MAIA_OPEN_FROM_HOST_EVENT, logMaiaHost } from '../../../utils/maiaHostOpen';
19
15
  import { jsx as _jsx } from "react/jsx-runtime";
20
- var normalizeBannerEntryFaq = function normalizeBannerEntryFaq(faq) {
21
- var _faq$faqId, _faq$faqTitle;
22
- var id = faq === null || faq === void 0 || (_faq$faqId = faq.faqId) === null || _faq$faqId === void 0 ? void 0 : _faq$faqId.trim();
23
- var title = faq === null || faq === void 0 || (_faq$faqTitle = faq.faqTitle) === null || _faq$faqTitle === void 0 ? void 0 : _faq$faqTitle.trim();
24
- if (!title) {
25
- return null;
26
- }
27
- var contextData = (faq === null || faq === void 0 ? void 0 : faq.contextData) != null && _typeof(faq.contextData) === 'object' ? faq.contextData : undefined;
28
- return _objectSpread(_objectSpread({}, id ? {
29
- faqId: id
30
- } : {}), {}, {
31
- faqTitle: title
32
- }, contextData ? {
33
- contextData: contextData
34
- } : {});
35
- };
36
16
  export var ChatAI = withAppCfg(function (_ref) {
37
- var initialEntity = _ref.entity,
17
+ var entity = _ref.entity,
38
18
  initialProject = _ref.project,
39
19
  initialClient = _ref.client,
40
20
  initialTask = _ref.task,
@@ -45,65 +25,34 @@ export var ChatAI = withAppCfg(function (_ref) {
45
25
  _ref$hasMultiAgents = _ref.hasMultiAgents,
46
26
  hasMultiAgents = _ref$hasMultiAgents === void 0 ? false : _ref$hasMultiAgents,
47
27
  _ref$section = _ref.section,
48
- initialSection = _ref$section === void 0 ? 'header' : _ref$section,
28
+ section = _ref$section === void 0 ? 'header' : _ref$section,
49
29
  _ref$faq = _ref.faq,
50
- initialFaqProp = _ref$faq === void 0 ? null : _ref$faq,
30
+ bannerEntryFaqProp = _ref$faq === void 0 ? null : _ref$faq,
51
31
  _ref$initialDraft = _ref.initialDraft,
52
- initialDraftProp = _ref$initialDraft === void 0 ? null : _ref$initialDraft,
53
- _ref$minimizedPillAvo = _ref.minimizedPillAvoidAnchors,
54
- initialMinimizedPillAvoidAnchors = _ref$minimizedPillAvo === void 0 ? [] : _ref$minimizedPillAvo;
32
+ initialDraftProp = _ref$initialDraft === void 0 ? null : _ref$initialDraft;
55
33
  var parentRef = useRef(null);
56
- var _useState = useState(initialSection),
34
+ var initialProjectValue = section === 'project' || section === 'task' ? initialProject : null;
35
+ var _useState = useState(initialProjectValue),
57
36
  _useState2 = _slicedToArray(_useState, 2),
58
- hostSection = _useState2[0],
59
- setHostSection = _useState2[1];
60
- var _useState3 = useState(initialEntity),
61
- _useState4 = _slicedToArray(_useState3, 2),
62
- hostEntity = _useState4[0],
63
- setHostEntity = _useState4[1];
64
- var _useState5 = useState(initialFaqProp),
65
- _useState6 = _slicedToArray(_useState5, 2),
66
- hostFaqProp = _useState6[0],
67
- setHostFaqProp = _useState6[1];
68
- var _useState7 = useState(initialDraftProp),
69
- _useState8 = _slicedToArray(_useState7, 2),
70
- hostInitialDraftProp = _useState8[0],
71
- setHostInitialDraftProp = _useState8[1];
72
- var _useState9 = useState(initialMinimizedPillAvoidAnchors),
73
- _useState0 = _slicedToArray(_useState9, 2),
74
- hostMinimizedPillAvoidAnchors = _useState0[0],
75
- setHostMinimizedPillAvoidAnchors = _useState0[1];
76
- var _useState1 = useState(initialClient !== null && initialClient !== void 0 ? initialClient : null),
77
- _useState10 = _slicedToArray(_useState1, 2),
78
- hostClient = _useState10[0],
79
- setHostClient = _useState10[1];
80
- var _useState11 = useState(initialTask !== null && initialTask !== void 0 ? initialTask : null),
81
- _useState12 = _slicedToArray(_useState11, 2),
82
- hostTask = _useState12[0],
83
- setHostTask = _useState12[1];
84
- var initialProjectValue = hostSection === 'project' || hostSection === 'task' ? initialProject : null;
85
- var _useState13 = useState(initialProjectValue),
86
- _useState14 = _slicedToArray(_useState13, 2),
87
- project = _useState14[0],
88
- setProject = _useState14[1];
37
+ project = _useState2[0],
38
+ setProject = _useState2[1];
89
39
  useEffect(function () {
90
- if ((hostSection === 'project' || hostSection === 'task') && initialProject != null) {
40
+ if ((section === 'project' || section === 'task') && initialProject != null) {
91
41
  setProject(initialProject);
92
42
  }
93
- }, [hostSection, initialProject]);
43
+ }, [section, initialProject]);
94
44
  var _useProjectSummaryCon = useProjectSummaryConfig({
95
- section: hostSection,
96
- entity: hostEntity,
45
+ section: section,
46
+ entity: entity,
97
47
  project: project,
98
48
  setProject: setProject,
99
- client: hostSection === 'client' ? hostClient : undefined,
100
- task: hostSection === 'task' ? hostTask : undefined,
49
+ client: section === 'client' ? initialClient !== null && initialClient !== void 0 ? initialClient : null : undefined,
50
+ task: section === 'task' ? initialTask !== null && initialTask !== void 0 ? initialTask : null : undefined,
101
51
  hasMultiAgents: hasMultiAgents
102
52
  }),
103
53
  context = _useProjectSummaryCon.context,
104
54
  restoreConfigureSettings = _useProjectSummaryCon.restoreConfigureSettings;
105
55
  var eventAmplitude = useEvent();
106
- var user = useUser();
107
56
  var deepLinkSendPendingRef = useRef(false);
108
57
  var handleCloseModal = function handleCloseModal() {
109
58
  deepLinkSendPendingRef.current = false;
@@ -111,84 +60,44 @@ export var ChatAI = withAppCfg(function (_ref) {
111
60
  restoreConfigureSettings();
112
61
  handleClose();
113
62
  };
63
+
64
+ // Reset del store solo cuando no queda ninguna instancia de ChatAI montada
65
+ // (ej. sidebar + flotante en tarea comparten el mismo store global)
114
66
  useEffect(function () {
115
67
  acquireChatsStore();
116
- ensureSessionNotificationsInitialized();
117
- logMaiaHost('ChatAI mounted', {
118
- section: initialSection,
119
- mountCount: getChatsStoreState().mountCount
120
- });
121
68
  return function () {
122
69
  deepLinkSendPendingRef.current = false;
123
70
  releaseChatsStore();
124
- logMaiaHost('ChatAI unmounted', {
125
- mountCount: getChatsStoreState().mountCount
126
- });
127
71
  };
128
- }, [user.id, user.company_id, initialSection]);
129
- var applyHostOpenDetail = useCallback(function (detail) {
130
- var _detail$project$id, _detail$project, _detail$client$id, _detail$client, _detail$task$id, _detail$task, _detail$faq, _detail$initialDraft;
131
- logMaiaHost('ChatAI applyHostOpenDetail', {
132
- section: detail.section,
133
- entity: detail.entity,
134
- projectId: (_detail$project$id = (_detail$project = detail.project) === null || _detail$project === void 0 ? void 0 : _detail$project.id) !== null && _detail$project$id !== void 0 ? _detail$project$id : null,
135
- clientId: (_detail$client$id = (_detail$client = detail.client) === null || _detail$client === void 0 ? void 0 : _detail$client.id) !== null && _detail$client$id !== void 0 ? _detail$client$id : null,
136
- taskId: (_detail$task$id = (_detail$task = detail.task) === null || _detail$task === void 0 ? void 0 : _detail$task.id) !== null && _detail$task$id !== void 0 ? _detail$task$id : null
137
- });
138
- setHostSection(detail.section);
139
- setHostEntity(detail.entity);
140
- setHostFaqProp((_detail$faq = detail.faq) !== null && _detail$faq !== void 0 ? _detail$faq : null);
141
- setHostInitialDraftProp((_detail$initialDraft = detail.initialDraft) !== null && _detail$initialDraft !== void 0 ? _detail$initialDraft : null);
142
- if (detail.minimizedPillAvoidAnchors != null) {
143
- setHostMinimizedPillAvoidAnchors(detail.minimizedPillAvoidAnchors);
144
- }
145
- if (detail.section === 'project' || detail.section === 'task') {
146
- var _detail$project2;
147
- setProject((_detail$project2 = detail.project) !== null && _detail$project2 !== void 0 ? _detail$project2 : null);
148
- } else {
149
- setProject(null);
150
- }
151
- if (detail.section === 'client') {
152
- var _detail$client2;
153
- setHostClient((_detail$client2 = detail.client) !== null && _detail$client2 !== void 0 ? _detail$client2 : null);
154
- } else if (detail.section === 'header' || detail.section === 'planner') {
155
- setHostClient(null);
156
- }
157
- if (detail.section === 'task') {
158
- var _detail$task2;
159
- setHostTask((_detail$task2 = detail.task) !== null && _detail$task2 !== void 0 ? _detail$task2 : null);
160
- } else {
161
- setHostTask(null);
162
- }
163
72
  }, []);
164
- useEffect(function () {
165
- var onOpenFromHost = function onOpenFromHost(event) {
166
- var _ref2 = event,
167
- detail = _ref2.detail;
168
- if (!detail) return;
169
- applyHostOpenDetail(detail);
170
- };
171
- document.addEventListener(MAIA_OPEN_FROM_HOST_EVENT, onOpenFromHost);
172
- return function () {
173
- document.removeEventListener(MAIA_OPEN_FROM_HOST_EVENT, onOpenFromHost);
174
- };
175
- }, [applyHostOpenDetail]);
176
73
  var bannerEntryFaq = useMemo(function () {
177
- return normalizeBannerEntryFaq(hostFaqProp);
178
- }, [hostFaqProp === null || hostFaqProp === void 0 ? void 0 : hostFaqProp.faqId, hostFaqProp === null || hostFaqProp === void 0 ? void 0 : hostFaqProp.faqTitle, hostFaqProp === null || hostFaqProp === void 0 ? void 0 : hostFaqProp.contextData]);
74
+ var _bannerEntryFaqProp$f, _bannerEntryFaqProp$f2;
75
+ var id = bannerEntryFaqProp === null || bannerEntryFaqProp === void 0 || (_bannerEntryFaqProp$f = bannerEntryFaqProp.faqId) === null || _bannerEntryFaqProp$f === void 0 ? void 0 : _bannerEntryFaqProp$f.trim();
76
+ var title = bannerEntryFaqProp === null || bannerEntryFaqProp === void 0 || (_bannerEntryFaqProp$f2 = bannerEntryFaqProp.faqTitle) === null || _bannerEntryFaqProp$f2 === void 0 ? void 0 : _bannerEntryFaqProp$f2.trim();
77
+ if (!title) {
78
+ return null;
79
+ }
80
+ var contextData = (bannerEntryFaqProp === null || bannerEntryFaqProp === void 0 ? void 0 : bannerEntryFaqProp.contextData) != null && _typeof(bannerEntryFaqProp.contextData) === 'object' ? bannerEntryFaqProp.contextData : undefined;
81
+ return _objectSpread(_objectSpread({}, id ? {
82
+ faqId: id
83
+ } : {}), {}, {
84
+ faqTitle: title
85
+ }, contextData ? {
86
+ contextData: contextData
87
+ } : {});
88
+ }, [bannerEntryFaqProp === null || bannerEntryFaqProp === void 0 ? void 0 : bannerEntryFaqProp.faqId, bannerEntryFaqProp === null || bannerEntryFaqProp === void 0 ? void 0 : bannerEntryFaqProp.faqTitle, bannerEntryFaqProp === null || bannerEntryFaqProp === void 0 ? void 0 : bannerEntryFaqProp.contextData]);
179
89
  var initialDraft = useMemo(function () {
180
- var draft = hostInitialDraftProp === null || hostInitialDraftProp === void 0 ? void 0 : hostInitialDraftProp.trim();
90
+ var draft = initialDraftProp === null || initialDraftProp === void 0 ? void 0 : initialDraftProp.trim();
181
91
  return draft || null;
182
- }, [hostInitialDraftProp]);
92
+ }, [initialDraftProp]);
183
93
  var providerValue = useMemo(function () {
184
94
  return _objectSpread(_objectSpread({}, context), {}, {
185
- section: hostSection,
95
+ section: section,
186
96
  bannerEntryFaq: bannerEntryFaq,
187
97
  initialDraft: initialDraft,
188
- deepLinkSendPendingRef: deepLinkSendPendingRef,
189
- minimizedPillAvoidAnchors: hostMinimizedPillAvoidAnchors
98
+ deepLinkSendPendingRef: deepLinkSendPendingRef
190
99
  });
191
- }, [context, hostSection, bannerEntryFaq, initialDraft, hostMinimizedPillAvoidAnchors]);
100
+ }, [context, section, bannerEntryFaq, initialDraft]);
192
101
  return /*#__PURE__*/_jsx(GlobalContext.Provider, {
193
102
  value: providerValue,
194
103
  children: /*#__PURE__*/_jsx(ChatAIModal, {
@@ -198,4 +107,4 @@ export var ChatAI = withAppCfg(function (_ref) {
198
107
  })
199
108
  });
200
109
  }, Features.CHAT_AI);
201
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VDYWxsYmFjayIsInVzZVByb2plY3RTdW1tYXJ5Q29uZmlnIiwiTU9EQUxfRUxFTUVOVFMiLCJDaGF0QUlNb2RhbCIsIkdsb2JhbENvbnRleHQiLCJGZWF0dXJlcyIsIndpdGhBcHBDZmciLCJhY3F1aXJlQ2hhdHNTdG9yZSIsInJlbGVhc2VDaGF0c1N0b3JlIiwiZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInVzZVVzZXIiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIk1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQiLCJsb2dNYWlhSG9zdCIsImpzeCIsIl9qc3giLCJub3JtYWxpemVCYW5uZXJFbnRyeUZhcSIsImZhcSIsIl9mYXEkZmFxSWQiLCJfZmFxJGZhcVRpdGxlIiwiaWQiLCJmYXFJZCIsInRyaW0iLCJ0aXRsZSIsImZhcVRpdGxlIiwiY29udGV4dERhdGEiLCJfdHlwZW9mIiwidW5kZWZpbmVkIiwiX29iamVjdFNwcmVhZCIsIkNoYXRBSSIsIl9yZWYiLCJpbml0aWFsRW50aXR5IiwiZW50aXR5IiwiaW5pdGlhbFByb2plY3QiLCJwcm9qZWN0IiwiaW5pdGlhbENsaWVudCIsImNsaWVudCIsImluaXRpYWxUYXNrIiwidGFzayIsIl9yZWYkaGFuZGxlQ2xvc2UiLCJoYW5kbGVDbG9zZSIsIl9yZWYkaGFzTXVsdGlBZ2VudHMiLCJoYXNNdWx0aUFnZW50cyIsIl9yZWYkc2VjdGlvbiIsInNlY3Rpb24iLCJpbml0aWFsU2VjdGlvbiIsIl9yZWYkZmFxIiwiaW5pdGlhbEZhcVByb3AiLCJfcmVmJGluaXRpYWxEcmFmdCIsImluaXRpYWxEcmFmdCIsImluaXRpYWxEcmFmdFByb3AiLCJfcmVmJG1pbmltaXplZFBpbGxBdm8iLCJtaW5pbWl6ZWRQaWxsQXZvaWRBbmNob3JzIiwiaW5pdGlhbE1pbmltaXplZFBpbGxBdm9pZEFuY2hvcnMiLCJwYXJlbnRSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJob3N0U2VjdGlvbiIsInNldEhvc3RTZWN0aW9uIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJob3N0RW50aXR5Iiwic2V0SG9zdEVudGl0eSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaG9zdEZhcVByb3AiLCJzZXRIb3N0RmFxUHJvcCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaG9zdEluaXRpYWxEcmFmdFByb3AiLCJzZXRIb3N0SW5pdGlhbERyYWZ0UHJvcCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwiaG9zdE1pbmltaXplZFBpbGxBdm9pZEFuY2hvcnMiLCJzZXRIb3N0TWluaW1pemVkUGlsbEF2b2lkQW5jaG9ycyIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImhvc3RDbGllbnQiLCJzZXRIb3N0Q2xpZW50IiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImhvc3RUYXNrIiwic2V0SG9zdFRhc2siLCJpbml0aWFsUHJvamVjdFZhbHVlIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsInNldFByb2plY3QiLCJfdXNlUHJvamVjdFN1bW1hcnlDb24iLCJjb250ZXh0IiwicmVzdG9yZUNvbmZpZ3VyZVNldHRpbmdzIiwiZXZlbnRBbXBsaXR1ZGUiLCJ1c2VyIiwiZGVlcExpbmtTZW5kUGVuZGluZ1JlZiIsImhhbmRsZUNsb3NlTW9kYWwiLCJjdXJyZW50IiwiYWlDaGF0Q2xvc2UiLCJtb3VudENvdW50IiwiY29tcGFueV9pZCIsImFwcGx5SG9zdE9wZW5EZXRhaWwiLCJkZXRhaWwiLCJfZGV0YWlsJHByb2plY3QkaWQiLCJfZGV0YWlsJHByb2plY3QiLCJfZGV0YWlsJGNsaWVudCRpZCIsIl9kZXRhaWwkY2xpZW50IiwiX2RldGFpbCR0YXNrJGlkIiwiX2RldGFpbCR0YXNrIiwiX2RldGFpbCRmYXEiLCJfZGV0YWlsJGluaXRpYWxEcmFmdCIsInByb2plY3RJZCIsImNsaWVudElkIiwidGFza0lkIiwiX2RldGFpbCRwcm9qZWN0MiIsIl9kZXRhaWwkY2xpZW50MiIsIl9kZXRhaWwkdGFzazIiLCJvbk9wZW5Gcm9tSG9zdCIsImV2ZW50IiwiX3JlZjIiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYmFubmVyRW50cnlGYXEiLCJkcmFmdCIsInByb3ZpZGVyVmFsdWUiLCJQcm92aWRlciIsInZhbHVlIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJDSEFUX0FJIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0NoYXRBSS9DaGF0QUkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVByb2plY3RTdW1tYXJ5Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUHJvamVjdFN1bW1hcnlDb25maWcnXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NsaWVudCdcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9UYXNrJ1xuaW1wb3J0IHsgTU9EQUxfRUxFTUVOVFMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNb2RhbC91c2VNb2RhbCdcbmltcG9ydCB7IENoYXRBSU1vZGFsIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRBSU1vZGFsJ1xuaW1wb3J0IHsgR2xvYmFsQ29udGV4dCwgdHlwZSBCYW5uZXJFbnRyeUZhcSwgdHlwZSBNaW5pbWl6ZWRQaWxsQXZvaWRBbmNob3IgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRmVhdHVyZXMgfSBmcm9tICcuLi8uLi9hdG9tcy9XaXRoRmVhdHVyZVZhbGlkYXRpb24nXG5pbXBvcnQgeyB3aXRoQXBwQ2ZnIH0gZnJvbSAnLi4vLi4vYXRvbXMvV2l0aEFwcENmZydcbmltcG9ydCB7IGFjcXVpcmVDaGF0c1N0b3JlLCByZWxlYXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHtcbiAgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCxcbiAgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwsXG4gIHR5cGUgTWFpYUhvc3RTZWN0aW9uLFxuICBsb2dNYWlhSG9zdCxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbWFpYUhvc3RPcGVuJ1xuXG50eXBlIENoYXRBSVByb3BzID0ge1xuICBlbnRpdHk6IHtcbiAgICBwcm9qZWN0SWQ6IHN0cmluZyB8IG51bGxcbiAgICBjbGllbnRJZDogc3RyaW5nIHwgbnVsbFxuICB9XG4gIHByb2plY3Q6IFByb2plY3QgfCBudWxsXG4gIGNsaWVudD86IENsaWVudCB8IG51bGxcbiAgdGFzaz86IFRhc2sgfCBudWxsXG4gIGhhbmRsZUNsb3NlPzogKCkgPT4gdm9pZFxuICBoYXNNdWx0aUFnZW50cz86IGJvb2xlYW5cbiAgc2VjdGlvbj86IE1haWFIb3N0U2VjdGlvblxuICAvKiogQmFubmVyIC8gaG9zdDogYWJyZSBlbCBjaGF0IGVudmlhbmRvIGxhIEZBUSBjb21vIG1lbnNhamUgeSBgWC1GYXEtSWRgIGVuIGVsIG9yY2hlc3RyYXRvciAqL1xuICBmYXE/OiBCYW5uZXJFbnRyeUZhcSB8IG51bGxcbiAgaW5pdGlhbERyYWZ0Pzogc3RyaW5nIHwgbnVsbFxuICAvKiogU2VsZWN0b3JlcyBET00gZGVsIGhvc3QgcXVlIGVsIHBpbGwgbWluaW1pemFkbyBkZWJlIGVzcXVpdmFyIGFsIGVzdGFyIHZpc2libGUuICovXG4gIG1pbmltaXplZFBpbGxBdm9pZEFuY2hvcnM/OiBNaW5pbWl6ZWRQaWxsQXZvaWRBbmNob3JbXVxufVxuXG5jb25zdCBub3JtYWxpemVCYW5uZXJFbnRyeUZhcSA9IChmYXE6IEJhbm5lckVudHJ5RmFxIHwgbnVsbCB8IHVuZGVmaW5lZCk6IEJhbm5lckVudHJ5RmFxIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGlkID0gZmFxPy5mYXFJZD8udHJpbSgpXG4gIGNvbnN0IHRpdGxlID0gZmFxPy5mYXFUaXRsZT8udHJpbSgpXG4gIGlmICghdGl0bGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGNvbnRleHREYXRhID0gZmFxPy5jb250ZXh0RGF0YSAhPSBudWxsICYmIHR5cGVvZiBmYXEuY29udGV4dERhdGEgPT09ICdvYmplY3QnID8gZmFxLmNvbnRleHREYXRhIDogdW5kZWZpbmVkXG4gIHJldHVybiB7XG4gICAgLi4uKGlkID8geyBmYXFJZDogaWQgfSA6IHt9KSxcbiAgICBmYXFUaXRsZTogdGl0bGUsXG4gICAgLi4uKGNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YSB9IDoge30pLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUkgPSB3aXRoQXBwQ2ZnKFxuICAoe1xuICAgIGVudGl0eTogaW5pdGlhbEVudGl0eSxcbiAgICBwcm9qZWN0OiBpbml0aWFsUHJvamVjdCxcbiAgICBjbGllbnQ6IGluaXRpYWxDbGllbnQsXG4gICAgdGFzazogaW5pdGlhbFRhc2ssXG4gICAgaGFuZGxlQ2xvc2UgPSAoKSA9PiBudWxsLFxuICAgIGhhc011bHRpQWdlbnRzID0gZmFsc2UsXG4gICAgc2VjdGlvbjogaW5pdGlhbFNlY3Rpb24gPSAnaGVhZGVyJyxcbiAgICBmYXE6IGluaXRpYWxGYXFQcm9wID0gbnVsbCxcbiAgICBpbml0aWFsRHJhZnQ6IGluaXRpYWxEcmFmdFByb3AgPSBudWxsLFxuICAgIG1pbmltaXplZFBpbGxBdm9pZEFuY2hvcnM6IGluaXRpYWxNaW5pbWl6ZWRQaWxsQXZvaWRBbmNob3JzID0gW10sXG4gIH06IENoYXRBSVByb3BzKSA9PiB7XG4gICAgY29uc3QgcGFyZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICAgIGNvbnN0IFtob3N0U2VjdGlvbiwgc2V0SG9zdFNlY3Rpb25dID0gdXNlU3RhdGU8TWFpYUhvc3RTZWN0aW9uPihpbml0aWFsU2VjdGlvbilcbiAgICBjb25zdCBbaG9zdEVudGl0eSwgc2V0SG9zdEVudGl0eV0gPSB1c2VTdGF0ZShpbml0aWFsRW50aXR5KVxuICAgIGNvbnN0IFtob3N0RmFxUHJvcCwgc2V0SG9zdEZhcVByb3BdID0gdXNlU3RhdGU8QmFubmVyRW50cnlGYXEgfCBudWxsPihpbml0aWFsRmFxUHJvcClcbiAgICBjb25zdCBbaG9zdEluaXRpYWxEcmFmdFByb3AsIHNldEhvc3RJbml0aWFsRHJhZnRQcm9wXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KGluaXRpYWxEcmFmdFByb3ApXG4gICAgY29uc3QgW2hvc3RNaW5pbWl6ZWRQaWxsQXZvaWRBbmNob3JzLCBzZXRIb3N0TWluaW1pemVkUGlsbEF2b2lkQW5jaG9yc10gPSB1c2VTdGF0ZShpbml0aWFsTWluaW1pemVkUGlsbEF2b2lkQW5jaG9ycylcbiAgICBjb25zdCBbaG9zdENsaWVudCwgc2V0SG9zdENsaWVudF0gPSB1c2VTdGF0ZTxDbGllbnQgfCBudWxsPihpbml0aWFsQ2xpZW50ID8/IG51bGwpXG4gICAgY29uc3QgW2hvc3RUYXNrLCBzZXRIb3N0VGFza10gPSB1c2VTdGF0ZTxUYXNrIHwgbnVsbD4oaW5pdGlhbFRhc2sgPz8gbnVsbClcblxuICAgIGNvbnN0IGluaXRpYWxQcm9qZWN0VmFsdWUgPSBob3N0U2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IGhvc3RTZWN0aW9uID09PSAndGFzaycgPyBpbml0aWFsUHJvamVjdCA6IG51bGxcbiAgICBjb25zdCBbcHJvamVjdCwgc2V0UHJvamVjdF0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4oaW5pdGlhbFByb2plY3RWYWx1ZSlcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoKGhvc3RTZWN0aW9uID09PSAncHJvamVjdCcgfHwgaG9zdFNlY3Rpb24gPT09ICd0YXNrJykgJiYgaW5pdGlhbFByb2plY3QgIT0gbnVsbCkge1xuICAgICAgICBzZXRQcm9qZWN0KGluaXRpYWxQcm9qZWN0KVxuICAgICAgfVxuICAgIH0sIFtob3N0U2VjdGlvbiwgaW5pdGlhbFByb2plY3RdKVxuXG4gICAgY29uc3QgeyBjb250ZXh0LCByZXN0b3JlQ29uZmlndXJlU2V0dGluZ3MgfSA9IHVzZVByb2plY3RTdW1tYXJ5Q29uZmlnKHtcbiAgICAgIHNlY3Rpb246IGhvc3RTZWN0aW9uLFxuICAgICAgZW50aXR5OiBob3N0RW50aXR5LFxuICAgICAgcHJvamVjdCxcbiAgICAgIHNldFByb2plY3QsXG4gICAgICBjbGllbnQ6IGhvc3RTZWN0aW9uID09PSAnY2xpZW50JyA/IGhvc3RDbGllbnQgOiB1bmRlZmluZWQsXG4gICAgICB0YXNrOiBob3N0U2VjdGlvbiA9PT0gJ3Rhc2snID8gaG9zdFRhc2sgOiB1bmRlZmluZWQsXG4gICAgICBoYXNNdWx0aUFnZW50cyxcbiAgICB9KVxuICAgIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICAgIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgICBjb25zdCBkZWVwTGlua1NlbmRQZW5kaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0Q2xvc2UpXG4gICAgICByZXN0b3JlQ29uZmlndXJlU2V0dGluZ3MoKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBhY3F1aXJlQ2hhdHNTdG9yZSgpXG4gICAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcbiAgICAgIGxvZ01haWFIb3N0KCdDaGF0QUkgbW91bnRlZCcsIHtcbiAgICAgICAgc2VjdGlvbjogaW5pdGlhbFNlY3Rpb24sXG4gICAgICAgIG1vdW50Q291bnQ6IGdldENoYXRzU3RvcmVTdGF0ZSgpLm1vdW50Q291bnQsXG4gICAgICB9KVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZGVlcExpbmtTZW5kUGVuZGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmVsZWFzZUNoYXRzU3RvcmUoKVxuICAgICAgICBsb2dNYWlhSG9zdCgnQ2hhdEFJIHVubW91bnRlZCcsIHsgbW91bnRDb3VudDogZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubW91bnRDb3VudCB9KVxuICAgICAgfVxuICAgIH0sIFt1c2VyLmlkLCB1c2VyLmNvbXBhbnlfaWQsIGluaXRpYWxTZWN0aW9uXSlcblxuICAgIGNvbnN0IGFwcGx5SG9zdE9wZW5EZXRhaWwgPSB1c2VDYWxsYmFjaygoZGV0YWlsOiBNYWlhSG9zdE9wZW5EZXRhaWwpID0+IHtcbiAgICAgIGxvZ01haWFIb3N0KCdDaGF0QUkgYXBwbHlIb3N0T3BlbkRldGFpbCcsIHtcbiAgICAgICAgc2VjdGlvbjogZGV0YWlsLnNlY3Rpb24sXG4gICAgICAgIGVudGl0eTogZGV0YWlsLmVudGl0eSxcbiAgICAgICAgcHJvamVjdElkOiBkZXRhaWwucHJvamVjdD8uaWQgPz8gbnVsbCxcbiAgICAgICAgY2xpZW50SWQ6IGRldGFpbC5jbGllbnQ/LmlkID8/IG51bGwsXG4gICAgICAgIHRhc2tJZDogZGV0YWlsLnRhc2s/LmlkID8/IG51bGwsXG4gICAgICB9KVxuICAgICAgc2V0SG9zdFNlY3Rpb24oZGV0YWlsLnNlY3Rpb24pXG4gICAgICBzZXRIb3N0RW50aXR5KGRldGFpbC5lbnRpdHkpXG4gICAgICBzZXRIb3N0RmFxUHJvcChkZXRhaWwuZmFxID8/IG51bGwpXG4gICAgICBzZXRIb3N0SW5pdGlhbERyYWZ0UHJvcChkZXRhaWwuaW5pdGlhbERyYWZ0ID8/IG51bGwpXG4gICAgICBpZiAoZGV0YWlsLm1pbmltaXplZFBpbGxBdm9pZEFuY2hvcnMgIT0gbnVsbCkge1xuICAgICAgICBzZXRIb3N0TWluaW1pemVkUGlsbEF2b2lkQW5jaG9ycyhkZXRhaWwubWluaW1pemVkUGlsbEF2b2lkQW5jaG9ycylcbiAgICAgIH1cblxuICAgICAgaWYgKGRldGFpbC5zZWN0aW9uID09PSAncHJvamVjdCcgfHwgZGV0YWlsLnNlY3Rpb24gPT09ICd0YXNrJykge1xuICAgICAgICBzZXRQcm9qZWN0KGRldGFpbC5wcm9qZWN0ID8/IG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0SG9zdENsaWVudChkZXRhaWwuY2xpZW50ID8/IG51bGwpXG4gICAgICB9IGVsc2UgaWYgKGRldGFpbC5zZWN0aW9uID09PSAnaGVhZGVyJyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3BsYW5uZXInKSB7XG4gICAgICAgIHNldEhvc3RDbGllbnQobnVsbClcbiAgICAgIH1cblxuICAgICAgaWYgKGRldGFpbC5zZWN0aW9uID09PSAndGFzaycpIHtcbiAgICAgICAgc2V0SG9zdFRhc2soZGV0YWlsLnRhc2sgPz8gbnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEhvc3RUYXNrKG51bGwpXG4gICAgICB9XG4gICAgfSwgW10pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb25PcGVuRnJvbUhvc3QgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudCBhcyBDdXN0b21FdmVudDxNYWlhSG9zdE9wZW5EZXRhaWw+XG4gICAgICAgIGlmICghZGV0YWlsKSByZXR1cm5cbiAgICAgICAgYXBwbHlIb3N0T3BlbkRldGFpbChkZXRhaWwpXG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgb25PcGVuRnJvbUhvc3QpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIG9uT3BlbkZyb21Ib3N0KVxuICAgICAgfVxuICAgIH0sIFthcHBseUhvc3RPcGVuRGV0YWlsXSlcblxuICAgIGNvbnN0IGJhbm5lckVudHJ5RmFxID0gdXNlTWVtbyhcbiAgICAgICgpID0+IG5vcm1hbGl6ZUJhbm5lckVudHJ5RmFxKGhvc3RGYXFQcm9wKSxcbiAgICAgIFtob3N0RmFxUHJvcD8uZmFxSWQsIGhvc3RGYXFQcm9wPy5mYXFUaXRsZSwgaG9zdEZhcVByb3A/LmNvbnRleHREYXRhXVxuICAgIClcblxuICAgIGNvbnN0IGluaXRpYWxEcmFmdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgZHJhZnQgPSBob3N0SW5pdGlhbERyYWZ0UHJvcD8udHJpbSgpXG4gICAgICByZXR1cm4gZHJhZnQgfHwgbnVsbFxuICAgIH0sIFtob3N0SW5pdGlhbERyYWZ0UHJvcF0pXG5cbiAgICBjb25zdCBwcm92aWRlclZhbHVlID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgIHNlY3Rpb246IGhvc3RTZWN0aW9uLFxuICAgICAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICAgICAgaW5pdGlhbERyYWZ0LFxuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLFxuICAgICAgICBtaW5pbWl6ZWRQaWxsQXZvaWRBbmNob3JzOiBob3N0TWluaW1pemVkUGlsbEF2b2lkQW5jaG9ycyxcbiAgICAgIH0pLFxuICAgICAgW2NvbnRleHQsIGhvc3RTZWN0aW9uLCBiYW5uZXJFbnRyeUZhcSwgaW5pdGlhbERyYWZ0LCBob3N0TWluaW1pemVkUGlsbEF2b2lkQW5jaG9yc11cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEdsb2JhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3Byb3ZpZGVyVmFsdWV9PlxuICAgICAgICA8Q2hhdEFJTW9kYWwgY2xhc3NOYW1lPXtNT0RBTF9FTEVNRU5UU30gaGFuZGxlQ2xvc2U9e2hhbmRsZUNsb3NlTW9kYWx9IHBhcmVudFJlZj17cGFyZW50UmVmfSAvPlxuICAgICAgPC9HbG9iYWxDb250ZXh0LlByb3ZpZGVyPlxuICAgIClcbiAgfSxcbiAgRmVhdHVyZXMuQ0hBVF9BSVxuKVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFNBQVNBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLFNBQVMsRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDekUsU0FBU0MsdUJBQXVCLFFBQVEsd0NBQXdDO0FBSWhGLFNBQVNDLGNBQWMsUUFBUSxrQ0FBa0M7QUFDakUsU0FBU0MsV0FBVyxRQUFRLDZCQUE2QjtBQUN6RCxTQUFTQyxhQUFhLFFBQTRELGlDQUFpQztBQUNuSCxTQUFTQyxRQUFRLFFBQVEsbUNBQW1DO0FBQzVELFNBQVNDLFVBQVUsUUFBUSx3QkFBd0I7QUFDbkQsU0FBU0MsaUJBQWlCLEVBQUVDLGlCQUFpQixRQUFRLGdCQUFnQjtBQUNyRSxTQUFTQyxrQkFBa0IsUUFBUSw4QkFBOEI7QUFDakUsU0FBU0MscUNBQXFDLFFBQVEsOENBQThD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
110
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VQcm9qZWN0U3VtbWFyeUNvbmZpZyIsIk1PREFMX0VMRU1FTlRTIiwiQ2hhdEFJTW9kYWwiLCJHbG9iYWxDb250ZXh0IiwiRmVhdHVyZXMiLCJ3aXRoQXBwQ2ZnIiwiYWNxdWlyZUNoYXRzU3RvcmUiLCJyZWxlYXNlQ2hhdHNTdG9yZSIsIkVWRU5UUyIsInVzZUV2ZW50IiwianN4IiwiX2pzeCIsIkNoYXRBSSIsIl9yZWYiLCJlbnRpdHkiLCJpbml0aWFsUHJvamVjdCIsInByb2plY3QiLCJpbml0aWFsQ2xpZW50IiwiY2xpZW50IiwiaW5pdGlhbFRhc2siLCJ0YXNrIiwiX3JlZiRoYW5kbGVDbG9zZSIsImhhbmRsZUNsb3NlIiwiX3JlZiRoYXNNdWx0aUFnZW50cyIsImhhc011bHRpQWdlbnRzIiwiX3JlZiRzZWN0aW9uIiwic2VjdGlvbiIsIl9yZWYkZmFxIiwiZmFxIiwiYmFubmVyRW50cnlGYXFQcm9wIiwiX3JlZiRpbml0aWFsRHJhZnQiLCJpbml0aWFsRHJhZnQiLCJpbml0aWFsRHJhZnRQcm9wIiwicGFyZW50UmVmIiwiaW5pdGlhbFByb2plY3RWYWx1ZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldFByb2plY3QiLCJfdXNlUHJvamVjdFN1bW1hcnlDb24iLCJ1bmRlZmluZWQiLCJjb250ZXh0IiwicmVzdG9yZUNvbmZpZ3VyZVNldHRpbmdzIiwiZXZlbnRBbXBsaXR1ZGUiLCJkZWVwTGlua1NlbmRQZW5kaW5nUmVmIiwiaGFuZGxlQ2xvc2VNb2RhbCIsImN1cnJlbnQiLCJhaUNoYXRDbG9zZSIsImJhbm5lckVudHJ5RmFxIiwiX2Jhbm5lckVudHJ5RmFxUHJvcCRmIiwiX2Jhbm5lckVudHJ5RmFxUHJvcCRmMiIsImlkIiwiZmFxSWQiLCJ0cmltIiwidGl0bGUiLCJmYXFUaXRsZSIsImNvbnRleHREYXRhIiwiX3R5cGVvZiIsIl9vYmplY3RTcHJlYWQiLCJkcmFmdCIsInByb3ZpZGVyVmFsdWUiLCJQcm92aWRlciIsInZhbHVlIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJDSEFUX0FJIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0NoYXRBSS9DaGF0QUkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdFN1bW1hcnlDb25maWcgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VQcm9qZWN0U3VtbWFyeUNvbmZpZydcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyBNT0RBTF9FTEVNRU5UUyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1vZGFsL3VzZU1vZGFsJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWwgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwnXG5pbXBvcnQgeyBHbG9iYWxDb250ZXh0LCB0eXBlIEJhbm5lckVudHJ5RmFxIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEZlYXR1cmVzIH0gZnJvbSAnLi4vLi4vYXRvbXMvV2l0aEZlYXR1cmVWYWxpZGF0aW9uJ1xuaW1wb3J0IHsgd2l0aEFwcENmZyB9IGZyb20gJy4uLy4uL2F0b21zL1dpdGhBcHBDZmcnXG5pbXBvcnQgeyBhY3F1aXJlQ2hhdHNTdG9yZSwgcmVsZWFzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZSdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcblxudHlwZSBDaGF0QUlQcm9wcyA9IHtcbiAgZW50aXR5OiB7XG4gICAgcHJvamVjdElkOiBzdHJpbmcgfCBudWxsXG4gICAgY2xpZW50SWQ6IHN0cmluZyB8IG51bGxcbiAgfVxuICBwcm9qZWN0OiBQcm9qZWN0IHwgbnVsbFxuICBjbGllbnQ/OiBDbGllbnQgfCBudWxsXG4gIHRhc2s/OiBUYXNrIHwgbnVsbFxuICBoYW5kbGVDbG9zZT86ICgpID0+IHZvaWRcbiAgaGFzTXVsdGlBZ2VudHM/OiBib29sZWFuXG4gIHNlY3Rpb24/OiAncHJvamVjdCcgfCAnaGVhZGVyJyB8ICdjbGllbnQnIHwgJ3Rhc2snIHwgJ3BsYW5uZXInXG4gIC8qKiBCYW5uZXIgLyBob3N0OiBhYnJlIGVsIGNoYXQgZW52aWFuZG8gbGEgRkFRIGNvbW8gbWVuc2FqZSB5IGBYLUZhcS1JZGAgZW4gZWwgb3JjaGVzdHJhdG9yICovXG4gIGZhcT86IEJhbm5lckVudHJ5RmFxIHwgbnVsbFxuICBpbml0aWFsRHJhZnQ/OiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUkgPSB3aXRoQXBwQ2ZnKFxuICAoe1xuICAgIGVudGl0eSxcbiAgICBwcm9qZWN0OiBpbml0aWFsUHJvamVjdCxcbiAgICBjbGllbnQ6IGluaXRpYWxDbGllbnQsXG4gICAgdGFzazogaW5pdGlhbFRhc2ssXG4gICAgaGFuZGxlQ2xvc2UgPSAoKSA9PiBudWxsLFxuICAgIGhhc011bHRpQWdlbnRzID0gZmFsc2UsXG4gICAgc2VjdGlvbiA9ICdoZWFkZXInLFxuICAgIGZhcTogYmFubmVyRW50cnlGYXFQcm9wID0gbnVsbCxcbiAgICBpbml0aWFsRHJhZnQ6IGluaXRpYWxEcmFmdFByb3AgPSBudWxsLFxuICB9OiBDaGF0QUlQcm9wcykgPT4ge1xuICAgIGNvbnN0IHBhcmVudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgICBjb25zdCBpbml0aWFsUHJvamVjdFZhbHVlID0gc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IHNlY3Rpb24gPT09ICd0YXNrJyA/IGluaXRpYWxQcm9qZWN0IDogbnVsbFxuICAgIGNvbnN0IFtwcm9qZWN0LCBzZXRQcm9qZWN0XSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihpbml0aWFsUHJvamVjdFZhbHVlKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICgoc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IHNlY3Rpb24gPT09ICd0YXNrJykgJiYgaW5pdGlhbFByb2plY3QgIT0gbnVsbCkge1xuICAgICAgICBzZXRQcm9qZWN0KGluaXRpYWxQcm9qZWN0KVxuICAgICAgfVxuICAgIH0sIFtzZWN0aW9uLCBpbml0aWFsUHJvamVjdF0pXG5cbiAgICBjb25zdCB7IGNvbnRleHQsIHJlc3RvcmVDb25maWd1cmVTZXR0aW5ncyB9ID0gdXNlUHJvamVjdFN1bW1hcnlDb25maWcoe1xuICAgICAgc2VjdGlvbixcbiAgICAgIGVudGl0eSxcbiAgICAgIHByb2plY3QsXG4gICAgICBzZXRQcm9qZWN0LFxuICAgICAgY2xpZW50OiBzZWN0aW9uID09PSAnY2xpZW50JyA/IChpbml0aWFsQ2xpZW50ID8/IG51bGwpIDogdW5kZWZpbmVkLFxuICAgICAgdGFzazogc2VjdGlvbiA9PT0gJ3Rhc2snID8gKGluaXRpYWxUYXNrID8/IG51bGwpIDogdW5kZWZpbmVkLFxuICAgICAgaGFzTXVsdGlBZ2VudHMsXG4gICAgfSlcbiAgICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgICBjb25zdCBkZWVwTGlua1NlbmRQZW5kaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gICAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0Q2xvc2UpXG4gICAgICByZXN0b3JlQ29uZmlndXJlU2V0dGluZ3MoKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cblxuICAgIC8vIFJlc2V0IGRlbCBzdG9yZSBzb2xvIGN1YW5kbyBubyBxdWVkYSBuaW5ndW5hIGluc3RhbmNpYSBkZSBDaGF0QUkgbW9udGFkYVxuICAgIC8vIChlai4gc2lkZWJhciArIGZsb3RhbnRlIGVuIHRhcmVhIGNvbXBhcnRlbiBlbCBtaXNtbyBzdG9yZSBnbG9iYWwpXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGFjcXVpcmVDaGF0c1N0b3JlKClcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHJlbGVhc2VDaGF0c1N0b3JlKClcbiAgICAgIH1cbiAgICB9LCBbXSlcblxuICAgIGNvbnN0IGJhbm5lckVudHJ5RmFxID0gdXNlTWVtbygoKTogQmFubmVyRW50cnlGYXEgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGlkID0gYmFubmVyRW50cnlGYXFQcm9wPy5mYXFJZD8udHJpbSgpXG4gICAgICBjb25zdCB0aXRsZSA9IGJhbm5lckVudHJ5RmFxUHJvcD8uZmFxVGl0bGU/LnRyaW0oKVxuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgY29uc3QgY29udGV4dERhdGEgPVxuICAgICAgICBiYW5uZXJFbnRyeUZhcVByb3A/LmNvbnRleHREYXRhICE9IG51bGwgJiYgdHlwZW9mIGJhbm5lckVudHJ5RmFxUHJvcC5jb250ZXh0RGF0YSA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IGJhbm5lckVudHJ5RmFxUHJvcC5jb250ZXh0RGF0YVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4oaWQgPyB7IGZhcUlkOiBpZCB9IDoge30pLFxuICAgICAgICBmYXFUaXRsZTogdGl0bGUsXG4gICAgICAgIC4uLihjb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH1cbiAgICB9LCBbYmFubmVyRW50cnlGYXFQcm9wPy5mYXFJZCwgYmFubmVyRW50cnlGYXFQcm9wPy5mYXFUaXRsZSwgYmFubmVyRW50cnlGYXFQcm9wPy5jb250ZXh0RGF0YV0pXG5cbiAgICBjb25zdCBpbml0aWFsRHJhZnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gaW5pdGlhbERyYWZ0UHJvcD8udHJpbSgpXG4gICAgICByZXR1cm4gZHJhZnQgfHwgbnVsbFxuICAgIH0sIFtpbml0aWFsRHJhZnRQcm9wXSlcblxuICAgIGNvbnN0IHByb3ZpZGVyVmFsdWUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgc2VjdGlvbjogc2VjdGlvbiBhcyAncHJvamVjdCcgfCAnaGVhZGVyJyB8ICdjbGllbnQnIHwgJ3Rhc2snIHwgJ3BsYW5uZXInLFxuICAgICAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICAgICAgaW5pdGlhbERyYWZ0LFxuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLFxuICAgICAgfSksXG4gICAgICBbY29udGV4dCwgc2VjdGlvbiwgYmFubmVyRW50cnlGYXEsIGluaXRpYWxEcmFmdF1cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEdsb2JhbENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3Byb3ZpZGVyVmFsdWV9PlxuICAgICAgICA8Q2hhdEFJTW9kYWwgY2xhc3NOYW1lPXtNT0RBTF9FTEVNRU5UU30gaGFuZGxlQ2xvc2U9e2hhbmRsZUNsb3NlTW9kYWx9IHBhcmVudFJlZj17cGFyZW50UmVmfSAvPlxuICAgICAgPC9HbG9iYWxDb250ZXh0LlByb3ZpZGVyPlxuICAgIClcbiAgfSxcbiAgRmVhdHVyZXMuQ0hBVF9BSVxuKVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLFNBQVNBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLFNB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QUFrQixDQUFDMkIsV0FBVyxNQUFLLFFBQVEsR0FDekYzQixrQkFBa0IsQ0FBQzJCLFdBQVcsR0FDOUJoQixTQUFTO0lBQ2YsT0FBQWtCLGFBQUEsQ0FBQUEsYUFBQSxLQUNNUCxFQUFFLEdBQUc7TUFBRUMsS0FBSyxFQUFFRDtJQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDM0JJLFFBQVEsRUFBRUQ7SUFBSyxHQUNYRSxXQUFXLEdBQUc7TUFBRUEsV0FBVyxFQUFYQTtJQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7RUFFMUMsQ0FBQyxFQUFFLENBQUMzQixrQkFBa0IsYUFBbEJBLGtCQUFrQix1QkFBbEJBLGtCQUFrQixDQUFFdUIsS0FBSyxFQUFFdkIsa0JBQWtCLGFBQWxCQSxrQkFBa0IsdUJBQWxCQSxrQkFBa0IsQ0FBRTBCLFFBQVEsRUFBRTFCLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUUyQixXQUFXLENBQUMsQ0FBQztFQUU5RixJQUFNekIsWUFBWSxHQUFHakMsT0FBTyxDQUFDLFlBQU07SUFDakMsSUFBTTZELEtBQUssR0FBRzNCLGdCQUFnQixhQUFoQkEsZ0JBQWdCLHVCQUFoQkEsZ0JBQWdCLENBQUVxQixJQUFJLENBQUMsQ0FBQztJQUN0QyxPQUFPTSxLQUFLLElBQUksSUFBSTtFQUN0QixDQUFDLEVBQUUsQ0FBQzNCLGdCQUFnQixDQUFDLENBQUM7RUFFdEIsSUFBTTRCLGFBQWEsR0FBRzlELE9BQU8sQ0FDM0I7SUFBQSxPQUFBNEQsYUFBQSxDQUFBQSxhQUFBLEtBQ0tqQixPQUFPO01BQ1ZmLE9BQU8sRUFBRUEsT0FBK0Q7TUFDeEVzQixjQUFjLEVBQWRBLGNBQWM7TUFDZGpCLFlBQVksRUFBWkEsWUFBWTtNQUNaYSxzQkFBc0IsRUFBdEJBO0lBQXNCO0VBQUEsQ0FDdEIsRUFDRixDQUFDSCxPQUFPLEVBQUVmLE9BQU8sRUFBRXNCLGNBQWMsRUFBRWpCLFlBQVksQ0FDakQsQ0FBQztFQUVELG9CQUNFcEIsSUFBQSxDQUFDUixhQUFhLENBQUMwRCxRQUFRO0lBQUNDLEtBQUssRUFBRUYsYUFBYztJQUFBRyxRQUFBLGVBQzNDcEQsSUFBQSxDQUFDVCxXQUFXO01BQUM4RCxTQUFTLEVBQUUvRCxjQUFlO01BQUNxQixXQUFXLEVBQUV1QixnQkFBaUI7TUFBQ1osU0FBUyxFQUFFQTtJQUFVLENBQUU7RUFBQyxDQUN6RSxDQUFDO0FBRTdCLENBQUMsRUFDRDdCLFFBQVEsQ0FBQzZELE9BQ1gsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==