@projectcor/maia-components 2.11.59-3 → 2.11.59-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 (69) hide show
  1. package/lib/App.js +2 -6
  2. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +3 -11
  3. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +2 -2
  4. package/lib/components/atoms/icons/index.js +1 -2
  5. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  6. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +11 -6
  7. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +30 -19
  8. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  9. package/lib/components/molecules/AbmSection/index.js +1 -2
  10. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +8 -16
  11. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +13 -16
  12. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -2
  13. package/lib/components/molecules/ChatAIModal/constants.js +2 -6
  14. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +2 -2
  15. package/lib/components/molecules/ChatFooter/ChatFooter.js +1 -1
  16. package/lib/components/molecules/Sidebar/Sidebar.js +37 -59
  17. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +11 -15
  18. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +50 -264
  19. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  20. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +2 -10
  21. package/lib/hooks/useAgentModel/useCreateAgent.js +10 -11
  22. package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -12
  23. package/lib/hooks/useContextMentions.js +6 -16
  24. package/lib/hooks/useMentionAllowedTypes.js +6 -38
  25. package/lib/hooks/useMentionPopover.js +16 -30
  26. package/lib/lang/br/index.js +1 -249
  27. package/lib/lang/en/index.js +1 -249
  28. package/lib/lang/es/index.js +1 -249
  29. package/lib/lang/fr/index.js +2 -251
  30. package/lib/services/maia/Agents/createAgent.js +1 -1
  31. package/lib/services/maia/Agents/getAgentById.js +2 -3
  32. package/lib/services/maia/Agents/getAgentModels.js +8 -3
  33. package/lib/services/maia/Agents/updateAgent.js +1 -1
  34. package/lib/services/maia/Orchestrator/orchestrator.js +2 -1
  35. package/lib/types/Chat.js +1 -1
  36. package/lib/types/agent.js +1 -1
  37. package/lib/types/agentModal.js +1 -1
  38. package/package.json +1 -1
  39. package/lib/components/atoms/icons/RocketIcon.js +0 -31
  40. package/lib/components/atoms/icons/WrenchIcon.js +0 -42
  41. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +0 -510
  42. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +0 -234
  43. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +0 -437
  44. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +0 -3
  45. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +0 -80
  46. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +0 -2
  47. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +0 -722
  48. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +0 -165
  49. package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +0 -2
  50. package/lib/components/molecules/ChatAIMyRoutines/ChatAIMyRoutines.js +0 -486
  51. package/lib/components/molecules/ChatAIMyRoutines/ChatAIMyRoutines.styles.js +0 -184
  52. package/lib/components/molecules/ChatAIMyRoutines/index.js +0 -2
  53. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +0 -610
  54. package/lib/components/molecules/SchedulesPage/index.js +0 -2
  55. package/lib/components/molecules/SkillsPage/SkillsPage.js +0 -708
  56. package/lib/components/molecules/SkillsPage/index.js +0 -2
  57. package/lib/components/molecules/maiaSectionModalStyles.js +0 -91
  58. package/lib/components/molecules/maiaSectionUiTokens.js +0 -31
  59. package/lib/dev/DevAbmAgentModal.js +0 -114
  60. package/lib/dev/mocks/abmModalMocks.js +0 -193
  61. package/lib/services/maia/Agents/connectors.js +0 -110
  62. package/lib/services/maia/Agents/skills.js +0 -164
  63. package/lib/services/maia/Schedules/createSchedule.js +0 -39
  64. package/lib/services/maia/Schedules/deleteSchedule.js +0 -36
  65. package/lib/services/maia/Schedules/getMySchedules.js +0 -55
  66. package/lib/services/maia/Schedules/getSchedules.js +0 -58
  67. package/lib/services/maia/Schedules/index.js +0 -5
  68. package/lib/types/agentSkill.js +0 -2
  69. package/lib/types/attachment.js +0 -2
@@ -1,510 +0,0 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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
- 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 React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
- import { useTranslation } from 'react-i18next';
8
- import { Category } from '@projectcor/icons/lib/components/Category';
9
- import { ChevronDown } from '@projectcor/icons/lib/components/ChevronDown';
10
- import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
11
- import { NotionIcon } from '../../../atoms/icons/NotionIcon';
12
- import { useResizeListener } from '../../../../hooks/useResize';
13
- import { ACTION_LABEL_KEYS, COR_TOOL_GROUPS, ENTITY_ACTION_ORDER, ENTITY_ORDER, NOTION_CONNECTOR_CATALOG, NOTION_CONNECTOR_SLUG } from './catalog';
14
- import { SCActionHeader, SCActionLabel, SCActionLabelGroup, SCActionRow, SCCategoryAccordion, SCCategoryDescription, SCCategoryHeader, SCCategoryTextGroup, SCCategoryTitle, SCChevronButton, SCComingSoonBadge, SCConnectorCard, SCConnectorHeader, SCConnectorHint, SCConnectorIcon, SCConnectorIdentity, SCConnectorRightGroup, SCConnectorTagline, SCConnectorTextGroup, SCConnectorTitle, SCCounter, SCDeleteBadge, SCExpandableBlockBody, SCEmptyTools, SCEntityCard, SCEntityHeader, SCEntityList, SCEntityTitle, SCHeader, SCRoot, SCSectionLabel, SCStatusPill, SCSubtitle, SCTitle, SCToggle, SCToggleThumb, SCToolDescription, SCToolItem, SCToolKindBadge, SCToolName, SCToolText, SCToolsList } from './AbmActionsSectionV2.styles';
15
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
16
- var HIERARCHICAL_ACTIONS = ['read', 'edit', 'delete'];
17
- var buildToolGroupMap = function buildToolGroupMap(groups) {
18
- var map = {};
19
- ENTITY_ORDER.forEach(function (entity) {
20
- map[entity] = {};
21
- });
22
- groups.forEach(function (group) {
23
- map[group.entity][group.action] = group;
24
- });
25
- return map;
26
- };
27
- var TOOL_GROUP_MAP = buildToolGroupMap(COR_TOOL_GROUPS);
28
- var TruncationTooltip = function TruncationTooltip(_ref) {
29
- var title = _ref.title,
30
- _ref$layoutKey = _ref.layoutKey,
31
- layoutKey = _ref$layoutKey === void 0 ? '' : _ref$layoutKey,
32
- children = _ref.children;
33
- var textRef = useRef(null);
34
- var _useResizeListener = useResizeListener(textRef, [title, layoutKey]),
35
- showTooltip = _useResizeListener.showTooltip;
36
- return /*#__PURE__*/_jsx(Tooltip, {
37
- title: showTooltip ? title : '',
38
- children: children(textRef)
39
- });
40
- };
41
- export var AbmActionsSectionV2 = function AbmActionsSectionV2(_ref2) {
42
- var _values$actions, _values$actions2, _values$actions4;
43
- var values = _ref2.values,
44
- handleSetAgentValues = _ref2.handleSetAgentValues;
45
- var _useTranslation = useTranslation('abm_agent_section'),
46
- t = _useTranslation.t;
47
- var selectedToolGroups = ((_values$actions = values.actions) === null || _values$actions === void 0 ? void 0 : _values$actions.selectedToolGroups) || [];
48
- var selectedConnectors = ((_values$actions2 = values.actions) === null || _values$actions2 === void 0 ? void 0 : _values$actions2.selectedConnectors) || [];
49
- var selectedToolGroupsSet = useMemo(function () {
50
- return new Set(selectedToolGroups);
51
- }, [selectedToolGroups]);
52
- var selectedConnectorsSet = useMemo(function () {
53
- return new Set(selectedConnectors);
54
- }, [selectedConnectors]);
55
- var _useState = useState(false),
56
- _useState2 = _slicedToArray(_useState, 2),
57
- corBlockExpanded = _useState2[0],
58
- setCorBlockExpanded = _useState2[1];
59
- var _useState3 = useState(new Set()),
60
- _useState4 = _slicedToArray(_useState3, 2),
61
- expandedActions = _useState4[0],
62
- setExpandedActions = _useState4[1];
63
- var _useState5 = useState(new Set()),
64
- _useState6 = _slicedToArray(_useState5, 2),
65
- expandedNotionCategories = _useState6[0],
66
- setExpandedNotionCategories = _useState6[1];
67
- /** Evita reabrir el bloque si el usuario lo cerró con la misma cantidad de tool groups seleccionados. */
68
- var prevCorToolGroupCountRef = useRef(null);
69
- /** Para distinguir cierre manual del bloque (destildar COR) del montaje inicial colapsado. */
70
- var prevCorBlockExpandedRef = useRef(null);
71
- useEffect(function () {
72
- var n = selectedToolGroups.length;
73
- var prev = prevCorToolGroupCountRef.current;
74
- prevCorToolGroupCountRef.current = n;
75
- if (n === 0) {
76
- return;
77
- }
78
- if (prev === null && n > 0) {
79
- setCorBlockExpanded(true);
80
- return;
81
- }
82
- if (prev === 0 && n > 0) {
83
- setCorBlockExpanded(true);
84
- }
85
- }, [selectedToolGroups.length]);
86
- useEffect(function () {
87
- var wasExpanded = prevCorBlockExpandedRef.current === true;
88
- if (!corBlockExpanded) {
89
- setExpandedActions(new Set());
90
- if (wasExpanded && selectedToolGroups.length > 0) {
91
- handleSetAgentValues({
92
- key: 'actions',
93
- value: _objectSpread(_objectSpread({}, values.actions), {}, {
94
- selectedToolGroups: [],
95
- selectedConnectors: selectedConnectors
96
- })
97
- });
98
- }
99
- }
100
- prevCorBlockExpandedRef.current = corBlockExpanded;
101
- }, [corBlockExpanded, handleSetAgentValues, selectedConnectors, selectedToolGroups.length, values.actions]);
102
- var isActionActive = useCallback(function (entity, action) {
103
- var _TOOL_GROUP_MAP$entit;
104
- var group = (_TOOL_GROUP_MAP$entit = TOOL_GROUP_MAP[entity]) === null || _TOOL_GROUP_MAP$entit === void 0 ? void 0 : _TOOL_GROUP_MAP$entit[action];
105
- return !!group && selectedToolGroupsSet.has(group.slug);
106
- }, [selectedToolGroupsSet]);
107
- var toggleEntityAction = useCallback(function (entity, action) {
108
- var _TOOL_GROUP_MAP$entit2;
109
- var targetGroup = (_TOOL_GROUP_MAP$entit2 = TOOL_GROUP_MAP[entity]) === null || _TOOL_GROUP_MAP$entit2 === void 0 ? void 0 : _TOOL_GROUP_MAP$entit2[action];
110
- if (!targetGroup || !targetGroup.available) return;
111
- var next = new Set(selectedToolGroups);
112
- var entityIndex = ENTITY_ORDER.indexOf(entity);
113
- var previousEntities = ENTITY_ORDER.slice(0, entityIndex + 1);
114
- var nextEntities = ENTITY_ORDER.slice(entityIndex);
115
- var actionIndex = HIERARCHICAL_ACTIONS.indexOf(action);
116
- var isCurrentlyActive = next.has(targetGroup.slug);
117
- if (isCurrentlyActive) {
118
- nextEntities.forEach(function (currentEntity) {
119
- HIERARCHICAL_ACTIONS.slice(actionIndex).forEach(function (currentAction) {
120
- var _TOOL_GROUP_MAP$curre;
121
- var group = (_TOOL_GROUP_MAP$curre = TOOL_GROUP_MAP[currentEntity]) === null || _TOOL_GROUP_MAP$curre === void 0 ? void 0 : _TOOL_GROUP_MAP$curre[currentAction];
122
- if (group !== null && group !== void 0 && group.available) next["delete"](group.slug);
123
- });
124
- });
125
- } else {
126
- previousEntities.forEach(function (currentEntity) {
127
- HIERARCHICAL_ACTIONS.slice(0, actionIndex + 1).forEach(function (currentAction) {
128
- var _TOOL_GROUP_MAP$curre2;
129
- var group = (_TOOL_GROUP_MAP$curre2 = TOOL_GROUP_MAP[currentEntity]) === null || _TOOL_GROUP_MAP$curre2 === void 0 ? void 0 : _TOOL_GROUP_MAP$curre2[currentAction];
130
- if (group !== null && group !== void 0 && group.available) next.add(group.slug);
131
- });
132
- });
133
- }
134
- handleSetAgentValues({
135
- key: 'actions',
136
- value: _objectSpread(_objectSpread({}, values.actions), {}, {
137
- selectedToolGroups: Array.from(next),
138
- selectedConnectors: selectedConnectors
139
- })
140
- });
141
- }, [handleSetAgentValues, selectedConnectors, selectedToolGroups, values.actions]);
142
- var toggleConnector = useCallback(function (connectorSlug) {
143
- var next = new Set(selectedConnectors);
144
- if (next.has(connectorSlug)) {
145
- next["delete"](connectorSlug);
146
- } else {
147
- next.add(connectorSlug);
148
- }
149
- handleSetAgentValues({
150
- key: 'actions',
151
- value: _objectSpread(_objectSpread({}, values.actions), {}, {
152
- selectedToolGroups: selectedToolGroups,
153
- selectedConnectors: Array.from(next)
154
- })
155
- });
156
- }, [handleSetAgentValues, selectedConnectors, selectedToolGroups, values.actions]);
157
- var toggleActionExpanded = useCallback(function (slug) {
158
- setExpandedActions(function (prev) {
159
- var next = new Set(prev);
160
- if (next.has(slug)) next["delete"](slug);else next.add(slug);
161
- return next;
162
- });
163
- }, []);
164
- var toggleNotionCategory = useCallback(function (categoryKey) {
165
- setExpandedNotionCategories(function (prev) {
166
- var next = new Set(prev);
167
- if (next.has(categoryKey)) next["delete"](categoryKey);else next.add(categoryKey);
168
- return next;
169
- });
170
- }, []);
171
- var isNotionEnabled = selectedConnectorsSet.has(NOTION_CONNECTOR_SLUG);
172
- var notionConnectorState = useMemo(function () {
173
- var _values$actions3;
174
- return (_values$actions3 = values.actions) === null || _values$actions3 === void 0 || (_values$actions3 = _values$actions3.connectorStates) === null || _values$actions3 === void 0 ? void 0 : _values$actions3.find(function (s) {
175
- return s.slug === NOTION_CONNECTOR_SLUG;
176
- });
177
- }, [(_values$actions4 = values.actions) === null || _values$actions4 === void 0 ? void 0 : _values$actions4.connectorStates]);
178
- var notionConnectorBadge = useMemo(function () {
179
- if (!isNotionEnabled) {
180
- return {
181
- tone: 'neutral',
182
- label: t('actionsSection.v2.connectorStatus.inactive')
183
- };
184
- }
185
- if (notionConnectorState) {
186
- if (notionConnectorState.enabled_for_agent) {
187
- return {
188
- tone: 'success',
189
- label: t('actionsSection.v2.connectorStatus.enabled')
190
- };
191
- }
192
- return {
193
- tone: 'pending',
194
- label: t('actionsSection.v2.connectorStatus.enabledPendingAuth')
195
- };
196
- }
197
- return {
198
- tone: 'pending',
199
- label: t('actionsSection.v2.connectorStatus.enabledPendingAuth')
200
- };
201
- }, [isNotionEnabled, notionConnectorState, t]);
202
- useEffect(function () {
203
- if (!isNotionEnabled) {
204
- setExpandedNotionCategories(new Set());
205
- }
206
- }, [isNotionEnabled]);
207
- var corActiveToolsCount = useMemo(function () {
208
- return COR_TOOL_GROUPS.reduce(function (acc, g) {
209
- return acc + (selectedToolGroupsSet.has(g.slug) ? g.tools.length : 0);
210
- }, 0);
211
- }, [selectedToolGroupsSet]);
212
- var truncationMeasureKey = useMemo(function () {
213
- return "".concat(corBlockExpanded ? '1' : '0', "#").concat(_toConsumableArray(expandedActions).sort().join('|'), "#").concat(_toConsumableArray(expandedNotionCategories).sort().join('|'));
214
- }, [corBlockExpanded, expandedActions, expandedNotionCategories]);
215
- var renderToolItem = function renderToolItem(tool) {
216
- return /*#__PURE__*/_jsxs(SCToolItem, {
217
- children: [/*#__PURE__*/_jsx(SCToolKindBadge, {
218
- kind: tool.accessKind,
219
- children: t("actionsSection.v2.accessKind.".concat(tool.accessKind))
220
- }), /*#__PURE__*/_jsxs(SCToolText, {
221
- children: [/*#__PURE__*/_jsx(SCToolName, {
222
- children: tool.name
223
- }), /*#__PURE__*/_jsx(TruncationTooltip, {
224
- title: tool.description,
225
- layoutKey: truncationMeasureKey,
226
- children: function children(textRef) {
227
- return /*#__PURE__*/_jsx(SCToolDescription, {
228
- ref: textRef,
229
- children: tool.description
230
- });
231
- }
232
- })]
233
- })]
234
- }, tool.slug);
235
- };
236
- var renderActionRow = function renderActionRow(entity, action) {
237
- var _TOOL_GROUP_MAP$entit3;
238
- var group = (_TOOL_GROUP_MAP$entit3 = TOOL_GROUP_MAP[entity]) === null || _TOOL_GROUP_MAP$entit3 === void 0 ? void 0 : _TOOL_GROUP_MAP$entit3[action];
239
- if (!group) return null;
240
- var isAvailable = group.available;
241
- var active = isActionActive(entity, action);
242
- var expanded = expandedActions.has(group.slug);
243
- var toolsCount = group.tools.length;
244
- var canExpand = isAvailable && toolsCount > 0;
245
- var isDelete = action === 'delete' && active;
246
- var onHeaderClick = function onHeaderClick() {
247
- if (canExpand) toggleActionExpanded(group.slug);
248
- };
249
- var onToggleClick = function onToggleClick(e) {
250
- e.stopPropagation();
251
- if (isAvailable) toggleEntityAction(entity, action);
252
- };
253
- var headerContent = /*#__PURE__*/_jsxs(SCActionHeader, {
254
- clickable: canExpand,
255
- onClick: onHeaderClick,
256
- children: [/*#__PURE__*/_jsx(SCChevronButton, {
257
- type: "button",
258
- open: expanded,
259
- disabled: !canExpand,
260
- onClick: function onClick(e) {
261
- e.stopPropagation();
262
- if (canExpand) toggleActionExpanded(group.slug);
263
- },
264
- "aria-expanded": expanded,
265
- "aria-label": expanded ? t('actionsSection.v2.hideTools') : t('actionsSection.v2.viewTools'),
266
- children: /*#__PURE__*/_jsx(ChevronDown, {
267
- width: "12px",
268
- height: "12px",
269
- color: "currentColor"
270
- })
271
- }), /*#__PURE__*/_jsxs(SCActionLabelGroup, {
272
- children: [/*#__PURE__*/_jsx(SCActionLabel, {
273
- children: t(ACTION_LABEL_KEYS[action])
274
- }), !isAvailable && /*#__PURE__*/_jsx(SCComingSoonBadge, {
275
- children: t('actionsSection.v2.comingSoon')
276
- }), isAvailable && /*#__PURE__*/_jsx(SCCounter, {
277
- active: active,
278
- children: t('actionsSection.v2.toolsCount', {
279
- count: toolsCount
280
- })
281
- }), isDelete && /*#__PURE__*/_jsx(SCDeleteBadge, {
282
- children: t('actionsSection.v2.deleteWarningInline')
283
- })]
284
- }), /*#__PURE__*/_jsx(SCToggle, {
285
- type: "button",
286
- isActive: active,
287
- disabled: !isAvailable,
288
- onClick: onToggleClick,
289
- "aria-pressed": active,
290
- "aria-label": "".concat(t("actionsSection.entities.".concat(entity)), " \xB7 ").concat(t(ACTION_LABEL_KEYS[action])),
291
- children: /*#__PURE__*/_jsx(SCToggleThumb, {})
292
- })]
293
- });
294
- var row = /*#__PURE__*/_jsxs(SCActionRow, {
295
- disabled: !isAvailable,
296
- children: [headerContent, expanded && canExpand && /*#__PURE__*/_jsx(SCToolsList, {
297
- children: group.tools.map(function (tool) {
298
- return renderToolItem(tool);
299
- })
300
- })]
301
- }, "".concat(entity, "-").concat(action));
302
- if (!isAvailable) {
303
- return /*#__PURE__*/_jsx(Tooltip, {
304
- title: t('actionsSection.v2.comingSoonHint'),
305
- children: /*#__PURE__*/_jsx("div", {
306
- children: row
307
- })
308
- }, "".concat(entity, "-").concat(action));
309
- }
310
- return row;
311
- };
312
- var renderEntityCard = function renderEntityCard(entity) {
313
- var groupsForEntity = ENTITY_ACTION_ORDER.map(function (action) {
314
- var _TOOL_GROUP_MAP$entit4;
315
- return (_TOOL_GROUP_MAP$entit4 = TOOL_GROUP_MAP[entity]) === null || _TOOL_GROUP_MAP$entit4 === void 0 ? void 0 : _TOOL_GROUP_MAP$entit4[action];
316
- }).filter(function (group) {
317
- return Boolean(group);
318
- });
319
- var enabledTools = groupsForEntity.reduce(function (acc, group) {
320
- return acc + (selectedToolGroupsSet.has(group.slug) ? group.tools.length : 0);
321
- }, 0);
322
- var counterActive = enabledTools > 0;
323
- return /*#__PURE__*/_jsxs(SCEntityCard, {
324
- children: [/*#__PURE__*/_jsxs(SCEntityHeader, {
325
- children: [/*#__PURE__*/_jsx(SCEntityTitle, {
326
- children: t("actionsSection.entities.".concat(entity))
327
- }), /*#__PURE__*/_jsx(SCCounter, {
328
- active: counterActive,
329
- children: t('actionsSection.v2.toolsCount', {
330
- count: enabledTools
331
- })
332
- })]
333
- }), ENTITY_ACTION_ORDER.map(function (action) {
334
- return renderActionRow(entity, action);
335
- })]
336
- }, entity);
337
- };
338
- var renderNotionCategory = function renderNotionCategory(category) {
339
- var isOpen = expandedNotionCategories.has(category.key);
340
- var toolsCount = category.tools.length;
341
- return /*#__PURE__*/_jsxs(SCCategoryAccordion, {
342
- children: [/*#__PURE__*/_jsxs(SCCategoryHeader, {
343
- type: "button",
344
- onClick: function onClick() {
345
- return toggleNotionCategory(category.key);
346
- },
347
- "aria-expanded": isOpen,
348
- children: [/*#__PURE__*/_jsx(SCChevronButton, {
349
- as: "span",
350
- open: isOpen,
351
- children: /*#__PURE__*/_jsx(ChevronDown, {
352
- width: "12px",
353
- height: "12px",
354
- color: "currentColor"
355
- })
356
- }), /*#__PURE__*/_jsxs(SCCategoryTextGroup, {
357
- children: [/*#__PURE__*/_jsx(SCCategoryTitle, {
358
- children: category.label
359
- }), /*#__PURE__*/_jsx(TruncationTooltip, {
360
- title: category.description,
361
- layoutKey: truncationMeasureKey,
362
- children: function children(textRef) {
363
- return /*#__PURE__*/_jsx(SCCategoryDescription, {
364
- ref: textRef,
365
- children: category.description
366
- });
367
- }
368
- })]
369
- }), /*#__PURE__*/_jsx(SCCounter, {
370
- active: false,
371
- children: t('actionsSection.v2.notion.categoryToolsCount', {
372
- count: toolsCount
373
- })
374
- })]
375
- }), isOpen && (toolsCount > 0 ? /*#__PURE__*/_jsx(SCToolsList, {
376
- children: category.tools.map(function (tool) {
377
- return renderToolItem(tool);
378
- })
379
- }) : /*#__PURE__*/_jsx(SCEmptyTools, {
380
- children: t('actionsSection.v2.emptyTools')
381
- }))]
382
- }, category.key);
383
- };
384
- return /*#__PURE__*/_jsxs(SCRoot, {
385
- children: [/*#__PURE__*/_jsxs(SCHeader, {
386
- children: [/*#__PURE__*/_jsx(SCTitle, {
387
- children: t('actionsSection.v2.sectionTitle')
388
- }), /*#__PURE__*/_jsx(SCSubtitle, {
389
- children: t('actionsSection.v2.sectionSubtitle')
390
- })]
391
- }), /*#__PURE__*/_jsx(SCSectionLabel, {
392
- children: t('actionsSection.v2.internalBlockTitle')
393
- }), /*#__PURE__*/_jsxs(SCConnectorCard, {
394
- children: [/*#__PURE__*/_jsxs(SCConnectorHeader, {
395
- children: [/*#__PURE__*/_jsxs(SCConnectorIdentity, {
396
- children: [/*#__PURE__*/_jsx(SCConnectorIcon, {
397
- "aria-hidden": true,
398
- children: /*#__PURE__*/_jsx(Category, {
399
- width: 18,
400
- height: 18
401
- })
402
- }), /*#__PURE__*/_jsxs(SCConnectorTextGroup, {
403
- children: [/*#__PURE__*/_jsx(TruncationTooltip, {
404
- title: t('actionsSection.v2.internalBlockTitle'),
405
- layoutKey: truncationMeasureKey,
406
- children: function children(textRef) {
407
- return /*#__PURE__*/_jsx(SCConnectorTitle, {
408
- ref: textRef,
409
- children: t('actionsSection.v2.internalBlockTitle')
410
- });
411
- }
412
- }), /*#__PURE__*/_jsx(TruncationTooltip, {
413
- title: t('actionsSection.v2.internalBlockSubtitle'),
414
- layoutKey: truncationMeasureKey,
415
- children: function children(textRef) {
416
- return /*#__PURE__*/_jsx(SCConnectorTagline, {
417
- ref: textRef,
418
- children: t('actionsSection.v2.internalBlockSubtitle')
419
- });
420
- }
421
- })]
422
- })]
423
- }), /*#__PURE__*/_jsxs(SCConnectorRightGroup, {
424
- children: [/*#__PURE__*/_jsx(SCCounter, {
425
- active: corActiveToolsCount > 0,
426
- children: t('actionsSection.v2.toolsCount', {
427
- count: corActiveToolsCount
428
- })
429
- }), /*#__PURE__*/_jsx(SCToggle, {
430
- type: "button",
431
- isActive: corBlockExpanded,
432
- onClick: function onClick() {
433
- return setCorBlockExpanded(function (v) {
434
- return !v;
435
- });
436
- },
437
- "aria-pressed": corBlockExpanded,
438
- "aria-label": corBlockExpanded ? t('actionsSection.v2.expandCorDetailsAriaOff') : t('actionsSection.v2.expandCorDetailsAriaOn'),
439
- children: /*#__PURE__*/_jsx(SCToggleThumb, {})
440
- })]
441
- })]
442
- }), !corBlockExpanded && /*#__PURE__*/_jsx(SCConnectorHint, {
443
- children: t('actionsSection.v2.corCollapsedHint')
444
- }), corBlockExpanded && /*#__PURE__*/_jsx(SCExpandableBlockBody, {
445
- children: /*#__PURE__*/_jsx(SCEntityList, {
446
- children: ENTITY_ORDER.map(function (entity) {
447
- return renderEntityCard(entity);
448
- })
449
- })
450
- })]
451
- }), /*#__PURE__*/_jsx(SCSectionLabel, {
452
- children: t('actionsSection.v2.externalBlockTitle')
453
- }), /*#__PURE__*/_jsxs(SCConnectorCard, {
454
- children: [/*#__PURE__*/_jsxs(SCConnectorHeader, {
455
- children: [/*#__PURE__*/_jsxs(SCConnectorIdentity, {
456
- children: [/*#__PURE__*/_jsx(SCConnectorIcon, {
457
- "aria-hidden": true,
458
- children: /*#__PURE__*/_jsx(NotionIcon, {
459
- width: 18,
460
- height: 18
461
- })
462
- }), /*#__PURE__*/_jsxs(SCConnectorTextGroup, {
463
- children: [/*#__PURE__*/_jsx(TruncationTooltip, {
464
- title: NOTION_CONNECTOR_CATALOG.name,
465
- layoutKey: truncationMeasureKey,
466
- children: function children(textRef) {
467
- return /*#__PURE__*/_jsx(SCConnectorTitle, {
468
- ref: textRef,
469
- children: NOTION_CONNECTOR_CATALOG.name
470
- });
471
- }
472
- }), /*#__PURE__*/_jsx(TruncationTooltip, {
473
- title: t('actionsSection.v2.notion.tagline'),
474
- layoutKey: truncationMeasureKey,
475
- children: function children(textRef) {
476
- return /*#__PURE__*/_jsx(SCConnectorTagline, {
477
- ref: textRef,
478
- children: t('actionsSection.v2.notion.tagline')
479
- });
480
- }
481
- })]
482
- })]
483
- }), /*#__PURE__*/_jsxs(SCConnectorRightGroup, {
484
- children: [/*#__PURE__*/_jsx(SCStatusPill, {
485
- tone: notionConnectorBadge.tone,
486
- children: notionConnectorBadge.label
487
- }), /*#__PURE__*/_jsx(SCToggle, {
488
- type: "button",
489
- isActive: isNotionEnabled,
490
- onClick: function onClick() {
491
- return toggleConnector(NOTION_CONNECTOR_SLUG);
492
- },
493
- "aria-pressed": isNotionEnabled,
494
- "aria-label": NOTION_CONNECTOR_CATALOG.name,
495
- children: /*#__PURE__*/_jsx(SCToggleThumb, {})
496
- })]
497
- })]
498
- }), !isNotionEnabled && /*#__PURE__*/_jsx(SCConnectorHint, {
499
- children: t('actionsSection.v2.notion.disabledHint')
500
- }), isNotionEnabled && /*#__PURE__*/_jsxs(_Fragment, {
501
- children: [/*#__PURE__*/_jsx(SCConnectorHint, {
502
- children: t('actionsSection.v2.notion.enabledHint')
503
- }), NOTION_CONNECTOR_CATALOG.categories.map(function (category) {
504
- return renderNotionCategory(category);
505
- })]
506
- })]
507
- })]
508
- });
509
- };
510
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwidXNlVHJhbnNsYXRpb24iLCJDYXRlZ29yeSIsIkNoZXZyb25Eb3duIiwiVG9vbHRpcCIsIk5vdGlvbkljb24iLCJ1c2VSZXNpemVMaXN0ZW5lciIsIkFDVElPTl9MQUJFTF9LRVlTIiwiQ09SX1RPT0xfR1JPVVBTIiwiRU5USVRZX0FDVElPTl9PUkRFUiIsIkVOVElUWV9PUkRFUiIsIk5PVElPTl9DT05ORUNUT1JfQ0FUQUxPRyIsIk5PVElPTl9DT05ORUNUT1JfU0xVRyIsIlNDQWN0aW9uSGVhZGVyIiwiU0NBY3Rpb25MYWJlbCIsIlNDQWN0aW9uTGFiZWxHcm91cCIsIlNDQWN0aW9uUm93IiwiU0NDYXRlZ29yeUFjY29yZGlvbiIsIlNDQ2F0ZWdvcnlEZXNjcmlwdGlvbiIsIlNDQ2F0ZWdvcnlIZWFkZXIiLCJTQ0NhdGVnb3J5VGV4dEdyb3VwIiwiU0NDYXRlZ29yeVRpdGxlIiwiU0NDaGV2cm9uQnV0dG9uIiwiU0NDb21pbmdTb29uQmFkZ2UiLCJTQ0Nvbm5lY3RvckNhcmQiLCJTQ0Nvbm5lY3RvckhlYWRlciIsIlNDQ29ubmVjdG9ySGludCIsIlNDQ29ubmVjdG9ySWNvbiIsIlNDQ29ubmVjdG9ySWRlbnRpdHkiLCJTQ0Nvbm5lY3RvclJpZ2h0R3JvdXAiLCJTQ0Nvbm5lY3RvclRhZ2xpbmUiLCJTQ0Nvbm5lY3RvclRleHRHcm91cCIsIlNDQ29ubmVjdG9yVGl0bGUiLCJTQ0NvdW50ZXIiLCJTQ0RlbGV0ZUJhZGdlIiwiU0NFeHBhbmRhYmxlQmxvY2tCb2R5IiwiU0NFbXB0eVRvb2xzIiwiU0NFbnRpdHlDYXJkIiwiU0NFbnRpdHlIZWFkZXIiLCJTQ0VudGl0eUxpc3QiLCJTQ0VudGl0eVRpdGxlIiwiU0NIZWFkZXIiLCJTQ1Jvb3QiLCJTQ1NlY3Rpb25MYWJlbCIsIlNDU3RhdHVzUGlsbCIsIlNDU3VidGl0bGUiLCJTQ1RpdGxlIiwiU0NUb2dnbGUiLCJTQ1RvZ2dsZVRodW1iIiwiU0NUb29sRGVzY3JpcHRpb24iLCJTQ1Rvb2xJdGVtIiwiU0NUb29sS2luZEJhZGdlIiwiU0NUb29sTmFtZSIsIlNDVG9vbFRleHQiLCJTQ1Rvb2xzTGlzdCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkhJRVJBUkNISUNBTF9BQ1RJT05TIiwiYnVpbGRUb29sR3JvdXBNYXAiLCJncm91cHMiLCJtYXAiLCJmb3JFYWNoIiwiZW50aXR5IiwiZ3JvdXAiLCJhY3Rpb24iLCJUT09MX0dST1VQX01BUCIsIlRydW5jYXRpb25Ub29sdGlwIiwiX3JlZiIsInRpdGxlIiwiX3JlZiRsYXlvdXRLZXkiLCJsYXlvdXRLZXkiLCJjaGlsZHJlbiIsInRleHRSZWYiLCJfdXNlUmVzaXplTGlzdGVuZXIiLCJzaG93VG9vbHRpcCIsIkFibUFjdGlvbnNTZWN0aW9uVjIiLCJfcmVmMiIsIl92YWx1ZXMkYWN0aW9ucyIsIl92YWx1ZXMkYWN0aW9uczIiLCJfdmFsdWVzJGFjdGlvbnM0IiwidmFsdWVzIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXMiLCJfdXNlVHJhbnNsYXRpb24iLCJ0Iiwic2VsZWN0ZWRUb29sR3JvdXBzIiwiYWN0aW9ucyIsInNlbGVjdGVkQ29ubmVjdG9ycyIsInNlbGVjdGVkVG9vbEdyb3Vwc1NldCIsIlNldCIsInNlbGVjdGVkQ29ubmVjdG9yc1NldCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImNvckJsb2NrRXhwYW5kZWQiLCJzZXRDb3JCbG9ja0V4cGFuZGVkIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJleHBhbmRlZEFjdGlvbnMiLCJzZXRFeHBhbmRlZEFjdGlvbnMiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImV4cGFuZGVkTm90aW9uQ2F0ZWdvcmllcyIsInNldEV4cGFuZGVkTm90aW9uQ2F0ZWdvcmllcyIsInByZXZDb3JUb29sR3JvdXBDb3VudFJlZiIsInByZXZDb3JCbG9ja0V4cGFuZGVkUmVmIiwibiIsImxlbmd0aCIsInByZXYiLCJjdXJyZW50Iiwid2FzRXhwYW5kZWQiLCJrZXkiLCJ2YWx1ZSIsIl9vYmplY3RTcHJlYWQiLCJpc0FjdGlvbkFjdGl2ZSIsIl9UT09MX0dST1VQX01BUCRlbnRpdCIsImhhcyIsInNsdWciLCJ0b2dnbGVFbnRpdHlBY3Rpb24iLCJfVE9PTF9HUk9VUF9NQVAkZW50aXQyIiwidGFyZ2V0R3JvdXAiLCJhdmFpbGFibGUiLCJuZXh0IiwiZW50aXR5SW5kZXgiLCJpbmRleE9mIiwicHJldmlvdXNFbnRpdGllcyIsInNsaWNlIiwibmV4dEVudGl0aWVzIiwiYWN0aW9uSW5kZXgiLCJpc0N1cnJlbnRseUFjdGl2ZSIsImN1cnJlbnRFbnRpdHkiLCJjdXJyZW50QWN0aW9uIiwiX1RPT0xfR1JPVVBfTUFQJGN1cnJlIiwiX1RPT0xfR1JPVVBfTUFQJGN1cnJlMiIsImFkZCIsIkFycmF5IiwiZnJvbSIsInRvZ2dsZUNvbm5lY3RvciIsImNvbm5lY3RvclNsdWciLCJ0b2dnbGVBY3Rpb25FeHBhbmRlZCIsInRvZ2dsZU5vdGlvbkNhdGVnb3J5IiwiY2F0ZWdvcnlLZXkiLCJpc05vdGlvbkVuYWJsZWQiLCJub3Rpb25Db25uZWN0b3JTdGF0ZSIsIl92YWx1ZXMkYWN0aW9uczMiLCJjb25uZWN0b3JTdGF0ZXMiLCJmaW5kIiwicyIsIm5vdGlvbkNvbm5lY3RvckJhZGdlIiwidG9uZSIsImxhYmVsIiwiZW5hYmxlZF9mb3JfYWdlbnQiLCJjb3JBY3RpdmVUb29sc0NvdW50IiwicmVkdWNlIiwiYWNjIiwiZyIsInRvb2xzIiwidHJ1bmNhdGlvbk1lYXN1cmVLZXkiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzb3J0Iiwiam9pbiIsInJlbmRlclRvb2xJdGVtIiwidG9vbCIsImtpbmQiLCJhY2Nlc3NLaW5kIiwibmFtZSIsImRlc2NyaXB0aW9uIiwicmVmIiwicmVuZGVyQWN0aW9uUm93IiwiX1RPT0xfR1JPVVBfTUFQJGVudGl0MyIsImlzQXZhaWxhYmxlIiwiYWN0aXZlIiwiZXhwYW5kZWQiLCJ0b29sc0NvdW50IiwiY2FuRXhwYW5kIiwiaXNEZWxldGUiLCJvbkhlYWRlckNsaWNrIiwib25Ub2dnbGVDbGljayIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJoZWFkZXJDb250ZW50IiwiY2xpY2thYmxlIiwib25DbGljayIsInR5cGUiLCJvcGVuIiwiZGlzYWJsZWQiLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwiY291bnQiLCJpc0FjdGl2ZSIsInJvdyIsInJlbmRlckVudGl0eUNhcmQiLCJncm91cHNGb3JFbnRpdHkiLCJfVE9PTF9HUk9VUF9NQVAkZW50aXQ0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImVuYWJsZWRUb29scyIsImNvdW50ZXJBY3RpdmUiLCJyZW5kZXJOb3Rpb25DYXRlZ29yeSIsImNhdGVnb3J5IiwiaXNPcGVuIiwiYXMiLCJ2IiwiY2F0ZWdvcmllcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibUFjdGlvbnNTZWN0aW9uVjIvQWJtQWN0aW9uc1NlY3Rpb25WMi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG4gIE1vdXNlRXZlbnQsXG4gIHR5cGUgUmVhY3ROb2RlLFxuICB0eXBlIFJlZk9iamVjdCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2F0ZWdvcnknXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3duJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuXG5pbXBvcnQgeyBOb3Rpb25JY29uIH0gZnJvbSAnLi4vLi4vLi4vYXRvbXMvaWNvbnMvTm90aW9uSWNvbidcblxuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBNb2RhbFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzL2FnZW50TW9kYWwnXG5pbXBvcnQge1xuICBBQ1RJT05fTEFCRUxfS0VZUyxcbiAgQ29ubmVjdG9yVG9vbENhdGVnb3J5LFxuICBDT1JfVE9PTF9HUk9VUFMsXG4gIEVOVElUWV9BQ1RJT05fT1JERVIsXG4gIEVOVElUWV9PUkRFUixcbiAgRW50aXR5QWN0aW9uS2V5LFxuICBFbnRpdHlLZXksXG4gIEVudGl0eVRvb2xHcm91cCxcbiAgTk9USU9OX0NPTk5FQ1RPUl9DQVRBTE9HLFxuICBOT1RJT05fQ09OTkVDVE9SX1NMVUcsXG4gIFRvb2xEZXNjcmlwdG9yLFxufSBmcm9tICcuL2NhdGFsb2cnXG5pbXBvcnQge1xuICBTQ0FjdGlvbkhlYWRlcixcbiAgU0NBY3Rpb25MYWJlbCxcbiAgU0NBY3Rpb25MYWJlbEdyb3VwLFxuICBTQ0FjdGlvblJvdyxcbiAgU0NDYXRlZ29yeUFjY29yZGlvbixcbiAgU0NDYXRlZ29yeURlc2NyaXB0aW9uLFxuICBTQ0NhdGVnb3J5SGVhZGVyLFxuICBTQ0NhdGVnb3J5VGV4dEdyb3VwLFxuICBTQ0NhdGVnb3J5VGl0bGUsXG4gIFNDQ2hldnJvbkJ1dHRvbixcbiAgU0NDb21pbmdTb29uQmFkZ2UsXG4gIFNDQ29ubmVjdG9yQ2FyZCxcbiAgU0NDb25uZWN0b3JIZWFkZXIsXG4gIFNDQ29ubmVjdG9ySGludCxcbiAgU0NDb25uZWN0b3JJY29uLFxuICBTQ0Nvbm5lY3RvcklkZW50aXR5LFxuICBTQ0Nvbm5lY3RvclJpZ2h0R3JvdXAsXG4gIFNDQ29ubmVjdG9yVGFnbGluZSxcbiAgU0NDb25uZWN0b3JUZXh0R3JvdXAsXG4gIFNDQ29ubmVjdG9yVGl0bGUsXG4gIFNDQ291bnRlcixcbiAgU0NEZWxldGVCYWRnZSxcbiAgU0NFeHBhbmRhYmxlQmxvY2tCb2R5LFxuICBTQ0VtcHR5VG9vbHMsXG4gIFNDRW50aXR5Q2FyZCxcbiAgU0NFbnRpdHlIZWFkZXIsXG4gIFNDRW50aXR5TGlzdCxcbiAgU0NFbnRpdHlUaXRsZSxcbiAgU0NIZWFkZXIsXG4gIFNDUm9vdCxcbiAgU0NTZWN0aW9uTGFiZWwsXG4gIFNDU3RhdHVzUGlsbCxcbiAgU0NTdWJ0aXRsZSxcbiAgU0NUaXRsZSxcbiAgU0NUb2dnbGUsXG4gIFNDVG9nZ2xlVGh1bWIsXG4gIFNDVG9vbERlc2NyaXB0aW9uLFxuICBTQ1Rvb2xJdGVtLFxuICBTQ1Rvb2xLaW5kQmFkZ2UsXG4gIFNDVG9vbE5hbWUsXG4gIFNDVG9vbFRleHQsXG4gIFNDVG9vbHNMaXN0LFxufSBmcm9tICcuL0FibUFjdGlvbnNTZWN0aW9uVjIuc3R5bGVzJ1xuXG50eXBlIEFibUFjdGlvbnNTZWN0aW9uVjJQcm9wcyA9IHtcbiAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG59XG5cbmNvbnN0IEhJRVJBUkNISUNBTF9BQ1RJT05TOiBFbnRpdHlBY3Rpb25LZXlbXSA9IFsncmVhZCcsICdlZGl0JywgJ2RlbGV0ZSddXG5cbmNvbnN0IGJ1aWxkVG9vbEdyb3VwTWFwID0gKGdyb3VwczogRW50aXR5VG9vbEdyb3VwW10pOiBSZWNvcmQ8RW50aXR5S2V5LCBSZWNvcmQ8RW50aXR5QWN0aW9uS2V5LCBFbnRpdHlUb29sR3JvdXA+PiA9PiB7XG4gIGNvbnN0IG1hcCA9IHt9IGFzIFJlY29yZDxFbnRpdHlLZXksIFJlY29yZDxFbnRpdHlBY3Rpb25LZXksIEVudGl0eVRvb2xHcm91cD4+XG4gIEVOVElUWV9PUkRFUi5mb3JFYWNoKGVudGl0eSA9PiB7XG4gICAgbWFwW2VudGl0eV0gPSB7fSBhcyBSZWNvcmQ8RW50aXR5QWN0aW9uS2V5LCBFbnRpdHlUb29sR3JvdXA+XG4gIH0pXG4gIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICBtYXBbZ3JvdXAuZW50aXR5XVtncm91cC5hY3Rpb25dID0gZ3JvdXBcbiAgfSlcbiAgcmV0dXJuIG1hcFxufVxuXG5jb25zdCBUT09MX0dST1VQX01BUCA9IGJ1aWxkVG9vbEdyb3VwTWFwKENPUl9UT09MX0dST1VQUylcblxudHlwZSBUcnVuY2F0aW9uVG9vbHRpcFByb3BzID0ge1xuICB0aXRsZTogc3RyaW5nXG4gIC8qKiBSZWNhbGN1bGEgb3ZlcmZsb3cgYWwgY2FtYmlhciBsYXlvdXQgKHAuIGVqLiBleHBhbmQvY29sbGFwc2UgZGUgZmlsYXMpLiAqL1xuICBsYXlvdXRLZXk/OiBzdHJpbmdcbiAgY2hpbGRyZW46ICh0ZXh0UmVmOiBSZWZPYmplY3Q8SFRNTFNwYW5FbGVtZW50PikgPT4gUmVhY3ROb2RlXG59XG5cbmNvbnN0IFRydW5jYXRpb25Ub29sdGlwID0gKHsgdGl0bGUsIGxheW91dEtleSA9ICcnLCBjaGlsZHJlbiB9OiBUcnVuY2F0aW9uVG9vbHRpcFByb3BzKSA9PiB7XG4gIGNvbnN0IHRleHRSZWYgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKVxuICBjb25zdCB7IHNob3dUb29sdGlwIH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmLCBbdGl0bGUsIGxheW91dEtleV0pXG4gIHJldHVybiA8VG9vbHRpcCB0aXRsZT17c2hvd1Rvb2x0aXAgPyB0aXRsZSA6ICcnfT57Y2hpbGRyZW4odGV4dFJlZil9PC9Ub29sdGlwPlxufVxuXG5leHBvcnQgY29uc3QgQWJtQWN0aW9uc1NlY3Rpb25WMiA9ICh7IHZhbHVlcywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgfTogQWJtQWN0aW9uc1NlY3Rpb25WMlByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2FibV9hZ2VudF9zZWN0aW9uJylcblxuICBjb25zdCBzZWxlY3RlZFRvb2xHcm91cHMgPSB2YWx1ZXMuYWN0aW9ucz8uc2VsZWN0ZWRUb29sR3JvdXBzIHx8IFtdXG4gIGNvbnN0IHNlbGVjdGVkQ29ubmVjdG9ycyA9IHZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW11cblxuICBjb25zdCBzZWxlY3RlZFRvb2xHcm91cHNTZXQgPSB1c2VNZW1vKCgpID0+IG5ldyBTZXQoc2VsZWN0ZWRUb29sR3JvdXBzKSwgW3NlbGVjdGVkVG9vbEdyb3Vwc10pXG4gIGNvbnN0IHNlbGVjdGVkQ29ubmVjdG9yc1NldCA9IHVzZU1lbW8oKCkgPT4gbmV3IFNldChzZWxlY3RlZENvbm5lY3RvcnMpLCBbc2VsZWN0ZWRDb25uZWN0b3JzXSlcblxuICBjb25zdCBbY29yQmxvY2tFeHBhbmRlZCwgc2V0Q29yQmxvY2tFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2V4cGFuZGVkQWN0aW9ucywgc2V0RXhwYW5kZWRBY3Rpb25zXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpXG4gIGNvbnN0IFtleHBhbmRlZE5vdGlvbkNhdGVnb3JpZXMsIHNldEV4cGFuZGVkTm90aW9uQ2F0ZWdvcmllc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKVxuICAvKiogRXZpdGEgcmVhYnJpciBlbCBibG9xdWUgc2kgZWwgdXN1YXJpbyBsbyBjZXJyw7MgY29uIGxhIG1pc21hIGNhbnRpZGFkIGRlIHRvb2wgZ3JvdXBzIHNlbGVjY2lvbmFkb3MuICovXG4gIGNvbnN0IHByZXZDb3JUb29sR3JvdXBDb3VudFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICAvKiogUGFyYSBkaXN0aW5ndWlyIGNpZXJyZSBtYW51YWwgZGVsIGJsb3F1ZSAoZGVzdGlsZGFyIENPUikgZGVsIG1vbnRhamUgaW5pY2lhbCBjb2xhcHNhZG8uICovXG4gIGNvbnN0IHByZXZDb3JCbG9ja0V4cGFuZGVkUmVmID0gdXNlUmVmPGJvb2xlYW4gfCBudWxsPihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbiA9IHNlbGVjdGVkVG9vbEdyb3Vwcy5sZW5ndGhcbiAgICBjb25zdCBwcmV2ID0gcHJldkNvclRvb2xHcm91cENvdW50UmVmLmN1cnJlbnRcbiAgICBwcmV2Q29yVG9vbEdyb3VwQ291bnRSZWYuY3VycmVudCA9IG5cblxuICAgIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHByZXYgPT09IG51bGwgJiYgbiA+IDApIHtcbiAgICAgIHNldENvckJsb2NrRXhwYW5kZWQodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocHJldiA9PT0gMCAmJiBuID4gMCkge1xuICAgICAgc2V0Q29yQmxvY2tFeHBhbmRlZCh0cnVlKVxuICAgIH1cbiAgfSwgW3NlbGVjdGVkVG9vbEdyb3Vwcy5sZW5ndGhdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgd2FzRXhwYW5kZWQgPSBwcmV2Q29yQmxvY2tFeHBhbmRlZFJlZi5jdXJyZW50ID09PSB0cnVlXG5cbiAgICBpZiAoIWNvckJsb2NrRXhwYW5kZWQpIHtcbiAgICAgIHNldEV4cGFuZGVkQWN0aW9ucyhuZXcgU2V0KCkpXG4gICAgICBpZiAod2FzRXhwYW5kZWQgJiYgc2VsZWN0ZWRUb29sR3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXMoe1xuICAgICAgICAgIGtleTogJ2FjdGlvbnMnLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAuLi52YWx1ZXMuYWN0aW9ucyxcbiAgICAgICAgICAgIHNlbGVjdGVkVG9vbEdyb3VwczogW10sXG4gICAgICAgICAgICBzZWxlY3RlZENvbm5lY3RvcnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2Q29yQmxvY2tFeHBhbmRlZFJlZi5jdXJyZW50ID0gY29yQmxvY2tFeHBhbmRlZFxuICB9LCBbY29yQmxvY2tFeHBhbmRlZCwgaGFuZGxlU2V0QWdlbnRWYWx1ZXMsIHNlbGVjdGVkQ29ubmVjdG9ycywgc2VsZWN0ZWRUb29sR3JvdXBzLmxlbmd0aCwgdmFsdWVzLmFjdGlvbnNdKVxuXG4gIGNvbnN0IGlzQWN0aW9uQWN0aXZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGVudGl0eTogRW50aXR5S2V5LCBhY3Rpb246IEVudGl0eUFjdGlvbktleSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBUT09MX0dST1VQX01BUFtlbnRpdHldPy5bYWN0aW9uXVxuICAgICAgcmV0dXJuICEhZ3JvdXAgJiYgc2VsZWN0ZWRUb29sR3JvdXBzU2V0Lmhhcyhncm91cC5zbHVnKVxuICAgIH0sXG4gICAgW3NlbGVjdGVkVG9vbEdyb3Vwc1NldF1cbiAgKVxuXG4gIGNvbnN0IHRvZ2dsZUVudGl0eUFjdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChlbnRpdHk6IEVudGl0eUtleSwgYWN0aW9uOiBFbnRpdHlBY3Rpb25LZXkpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldEdyb3VwID0gVE9PTF9HUk9VUF9NQVBbZW50aXR5XT8uW2FjdGlvbl1cbiAgICAgIGlmICghdGFyZ2V0R3JvdXAgfHwgIXRhcmdldEdyb3VwLmF2YWlsYWJsZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHNlbGVjdGVkVG9vbEdyb3VwcylcbiAgICAgIGNvbnN0IGVudGl0eUluZGV4ID0gRU5USVRZX09SREVSLmluZGV4T2YoZW50aXR5KVxuICAgICAgY29uc3QgcHJldmlvdXNFbnRpdGllcyA9IEVOVElUWV9PUkRFUi5zbGljZSgwLCBlbnRpdHlJbmRleCArIDEpXG4gICAgICBjb25zdCBuZXh0RW50aXRpZXMgPSBFTlRJVFlfT1JERVIuc2xpY2UoZW50aXR5SW5kZXgpXG4gICAgICBjb25zdCBhY3Rpb25JbmRleCA9IEhJRVJBUkNISUNBTF9BQ1RJT05TLmluZGV4T2YoYWN0aW9uKVxuICAgICAgY29uc3QgaXNDdXJyZW50bHlBY3RpdmUgPSBuZXh0Lmhhcyh0YXJnZXRHcm91cC5zbHVnKVxuXG4gICAgICBpZiAoaXNDdXJyZW50bHlBY3RpdmUpIHtcbiAgICAgICAgbmV4dEVudGl0aWVzLmZvckVhY2goY3VycmVudEVudGl0eSA9PiB7XG4gICAgICAgICAgSElFUkFSQ0hJQ0FMX0FDVElPTlMuc2xpY2UoYWN0aW9uSW5kZXgpLmZvckVhY2goY3VycmVudEFjdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IFRPT0xfR1JPVVBfTUFQW2N1cnJlbnRFbnRpdHldPy5bY3VycmVudEFjdGlvbl1cbiAgICAgICAgICAgIGlmIChncm91cD8uYXZhaWxhYmxlKSBuZXh0LmRlbGV0ZShncm91cC5zbHVnKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmV2aW91c0VudGl0aWVzLmZvckVhY2goY3VycmVudEVudGl0eSA9PiB7XG4gICAgICAgICAgSElFUkFSQ0hJQ0FMX0FDVElPTlMuc2xpY2UoMCwgYWN0aW9uSW5kZXggKyAxKS5mb3JFYWNoKGN1cnJlbnRBY3Rpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBUT09MX0dST1VQX01BUFtjdXJyZW50RW50aXR5XT8uW2N1cnJlbnRBY3Rpb25dXG4gICAgICAgICAgICBpZiAoZ3JvdXA/LmF2YWlsYWJsZSkgbmV4dC5hZGQoZ3JvdXAuc2x1ZylcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcyh7XG4gICAgICAgIGtleTogJ2FjdGlvbnMnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLnZhbHVlcy5hY3Rpb25zLFxuICAgICAgICAgIHNlbGVjdGVkVG9vbEdyb3VwczogQXJyYXkuZnJvbShuZXh0KSxcbiAgICAgICAgICBzZWxlY3RlZENvbm5lY3RvcnMsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2hhbmRsZVNldEFnZW50VmFsdWVzLCBzZWxlY3RlZENvbm5lY3RvcnMsIHNlbGVjdGVkVG9vbEdyb3VwcywgdmFsdWVzLmFjdGlvbnNdXG4gIClcblxuICBjb25zdCB0b2dnbGVDb25uZWN0b3IgPSB1c2VDYWxsYmFjayhcbiAgICAoY29ubmVjdG9yU2x1Zzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldChzZWxlY3RlZENvbm5lY3RvcnMpXG4gICAgICBpZiAobmV4dC5oYXMoY29ubmVjdG9yU2x1ZykpIHtcbiAgICAgICAgbmV4dC5kZWxldGUoY29ubmVjdG9yU2x1ZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQuYWRkKGNvbm5lY3RvclNsdWcpXG4gICAgICB9XG4gICAgICBoYW5kbGVTZXRBZ2VudFZhbHVlcyh7XG4gICAgICAgIGtleTogJ2FjdGlvbnMnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLnZhbHVlcy5hY3Rpb25zLFxuICAgICAgICAgIHNlbGVjdGVkVG9vbEdyb3VwcyxcbiAgICAgICAgICBzZWxlY3RlZENvbm5lY3RvcnM6IEFycmF5LmZyb20obmV4dCksXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2hhbmRsZVNldEFnZW50VmFsdWVzLCBzZWxlY3RlZENvbm5lY3RvcnMsIHNlbGVjdGVkVG9vbEdyb3VwcywgdmFsdWVzLmFjdGlvbnNdXG4gIClcblxuICBjb25zdCB0b2dnbGVBY3Rpb25FeHBhbmRlZCA9IHVzZUNhbGxiYWNrKChzbHVnOiBzdHJpbmcpID0+IHtcbiAgICBzZXRFeHBhbmRlZEFjdGlvbnMocHJldiA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldChwcmV2KVxuICAgICAgaWYgKG5leHQuaGFzKHNsdWcpKSBuZXh0LmRlbGV0ZShzbHVnKVxuICAgICAgZWxzZSBuZXh0LmFkZChzbHVnKVxuICAgICAgcmV0dXJuIG5leHRcbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCB0b2dnbGVOb3Rpb25DYXRlZ29yeSA9IHVzZUNhbGxiYWNrKChjYXRlZ29yeUtleTogc3RyaW5nKSA9PiB7XG4gICAgc2V0RXhwYW5kZWROb3Rpb25DYXRlZ29yaWVzKHByZXYgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQocHJldilcbiAgICAgIGlmIChuZXh0LmhhcyhjYXRlZ29yeUtleSkpIG5leHQuZGVsZXRlKGNhdGVnb3J5S2V5KVxuICAgICAgZWxzZSBuZXh0LmFkZChjYXRlZ29yeUtleSlcbiAgICAgIHJldHVybiBuZXh0XG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaXNOb3Rpb25FbmFibGVkID0gc2VsZWN0ZWRDb25uZWN0b3JzU2V0LmhhcyhOT1RJT05fQ09OTkVDVE9SX1NMVUcpXG5cbiAgY29uc3Qgbm90aW9uQ29ubmVjdG9yU3RhdGUgPSB1c2VNZW1vKFxuICAgICgpID0+IHZhbHVlcy5hY3Rpb25zPy5jb25uZWN0b3JTdGF0ZXM/LmZpbmQocyA9PiBzLnNsdWcgPT09IE5PVElPTl9DT05ORUNUT1JfU0xVRyksXG4gICAgW3ZhbHVlcy5hY3Rpb25zPy5jb25uZWN0b3JTdGF0ZXNdXG4gIClcblxuICBjb25zdCBub3Rpb25Db25uZWN0b3JCYWRnZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghaXNOb3Rpb25FbmFibGVkKSB7XG4gICAgICByZXR1cm4geyB0b25lOiAnbmV1dHJhbCcgYXMgY29uc3QsIGxhYmVsOiB0KCdhY3Rpb25zU2VjdGlvbi52Mi5jb25uZWN0b3JTdGF0dXMuaW5hY3RpdmUnKSB9XG4gICAgfVxuICAgIGlmIChub3Rpb25Db25uZWN0b3JTdGF0ZSkge1xuICAgICAgaWYgKG5vdGlvbkNvbm5lY3RvclN0YXRlLmVuYWJsZWRfZm9yX2FnZW50KSB7XG4gICAgICAgIHJldHVybiB7IHRvbmU6ICdzdWNjZXNzJyBhcyBjb25zdCwgbGFiZWw6IHQoJ2FjdGlvbnNTZWN0aW9uLnYyLmNvbm5lY3RvclN0YXR1cy5lbmFibGVkJykgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdG9uZTogJ3BlbmRpbmcnIGFzIGNvbnN0LCBsYWJlbDogdCgnYWN0aW9uc1NlY3Rpb24udjIuY29ubmVjdG9yU3RhdHVzLmVuYWJsZWRQZW5kaW5nQXV0aCcpIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgdG9uZTogJ3BlbmRpbmcnIGFzIGNvbnN0LCBsYWJlbDogdCgnYWN0aW9uc1NlY3Rpb24udjIuY29ubmVjdG9yU3RhdHVzLmVuYWJsZWRQZW5kaW5nQXV0aCcpIH1cbiAgfSwgW2lzTm90aW9uRW5hYmxlZCwgbm90aW9uQ29ubmVjdG9yU3RhdGUsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc05vdGlvbkVuYWJsZWQpIHtcbiAgICAgIHNldEV4cGFuZGVkTm90aW9uQ2F0ZWdvcmllcyhuZXcgU2V0KCkpXG4gICAgfVxuICB9LCBbaXNOb3Rpb25FbmFibGVkXSlcblxuICBjb25zdCBjb3JBY3RpdmVUb29sc0NvdW50ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBDT1JfVE9PTF9HUk9VUFMucmVkdWNlKChhY2MsIGcpID0+IGFjYyArIChzZWxlY3RlZFRvb2xHcm91cHNTZXQuaGFzKGcuc2x1ZykgPyBnLnRvb2xzLmxlbmd0aCA6IDApLCAwKSxcbiAgICBbc2VsZWN0ZWRUb29sR3JvdXBzU2V0XVxuICApXG5cbiAgY29uc3QgdHJ1bmNhdGlvbk1lYXN1cmVLZXkgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBgJHtjb3JCbG9ja0V4cGFuZGVkID8gJzEnIDogJzAnfSMke1suLi5leHBhbmRlZEFjdGlvbnNdLnNvcnQoKS5qb2luKCd8Jyl9IyR7Wy4uLmV4cGFuZGVkTm90aW9uQ2F0ZWdvcmllc10uc29ydCgpLmpvaW4oJ3wnKX1gLFxuICAgIFtjb3JCbG9ja0V4cGFuZGVkLCBleHBhbmRlZEFjdGlvbnMsIGV4cGFuZGVkTm90aW9uQ2F0ZWdvcmllc11cbiAgKVxuXG4gIGNvbnN0IHJlbmRlclRvb2xJdGVtID0gKHRvb2w6IFRvb2xEZXNjcmlwdG9yKSA9PiAoXG4gICAgPFNDVG9vbEl0ZW0ga2V5PXt0b29sLnNsdWd9PlxuICAgICAgPFNDVG9vbEtpbmRCYWRnZSBraW5kPXt0b29sLmFjY2Vzc0tpbmR9Pnt0KGBhY3Rpb25zU2VjdGlvbi52Mi5hY2Nlc3NLaW5kLiR7dG9vbC5hY2Nlc3NLaW5kfWApfTwvU0NUb29sS2luZEJhZGdlPlxuICAgICAgPFNDVG9vbFRleHQ+XG4gICAgICAgIDxTQ1Rvb2xOYW1lPnt0b29sLm5hbWV9PC9TQ1Rvb2xOYW1lPlxuICAgICAgICA8VHJ1bmNhdGlvblRvb2x0aXAgdGl0bGU9e3Rvb2wuZGVzY3JpcHRpb259IGxheW91dEtleT17dHJ1bmNhdGlvbk1lYXN1cmVLZXl9PlxuICAgICAgICAgIHt0ZXh0UmVmID0+IDxTQ1Rvb2xEZXNjcmlwdGlvbiByZWY9e3RleHRSZWZ9Pnt0b29sLmRlc2NyaXB0aW9ufTwvU0NUb29sRGVzY3JpcHRpb24+fVxuICAgICAgICA8L1RydW5jYXRpb25Ub29sdGlwPlxuICAgICAgPC9TQ1Rvb2xUZXh0PlxuICAgIDwvU0NUb29sSXRlbT5cbiAgKVxuXG4gIGNvbnN0IHJlbmRlckFjdGlvblJvdyA9IChlbnRpdHk6IEVudGl0eUtleSwgYWN0aW9uOiBFbnRpdHlBY3Rpb25LZXkpID0+IHtcbiAgICBjb25zdCBncm91cCA9IFRPT0xfR1JPVVBfTUFQW2VudGl0eV0/LlthY3Rpb25dXG4gICAgaWYgKCFncm91cCkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBpc0F2YWlsYWJsZSA9IGdyb3VwLmF2YWlsYWJsZVxuICAgIGNvbnN0IGFjdGl2ZSA9IGlzQWN0aW9uQWN0aXZlKGVudGl0eSwgYWN0aW9uKVxuICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kZWRBY3Rpb25zLmhhcyhncm91cC5zbHVnKVxuICAgIGNvbnN0IHRvb2xzQ291bnQgPSBncm91cC50b29scy5sZW5ndGhcbiAgICBjb25zdCBjYW5FeHBhbmQgPSBpc0F2YWlsYWJsZSAmJiB0b29sc0NvdW50ID4gMFxuICAgIGNvbnN0IGlzRGVsZXRlID0gYWN0aW9uID09PSAnZGVsZXRlJyAmJiBhY3RpdmVcblxuICAgIGNvbnN0IG9uSGVhZGVyQ2xpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoY2FuRXhwYW5kKSB0b2dnbGVBY3Rpb25FeHBhbmRlZChncm91cC5zbHVnKVxuICAgIH1cblxuICAgIGNvbnN0IG9uVG9nZ2xlQ2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaWYgKGlzQXZhaWxhYmxlKSB0b2dnbGVFbnRpdHlBY3Rpb24oZW50aXR5LCBhY3Rpb24pXG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyQ29udGVudCA9IChcbiAgICAgIDxTQ0FjdGlvbkhlYWRlciBjbGlja2FibGU9e2NhbkV4cGFuZH0gb25DbGljaz17b25IZWFkZXJDbGlja30+XG4gICAgICAgIDxTQ0NoZXZyb25CdXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBvcGVuPXtleHBhbmRlZH1cbiAgICAgICAgICBkaXNhYmxlZD17IWNhbkV4cGFuZH1cbiAgICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIGlmIChjYW5FeHBhbmQpIHRvZ2dsZUFjdGlvbkV4cGFuZGVkKGdyb3VwLnNsdWcpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtleHBhbmRlZCA/IHQoJ2FjdGlvbnNTZWN0aW9uLnYyLmhpZGVUb29scycpIDogdCgnYWN0aW9uc1NlY3Rpb24udjIudmlld1Rvb2xzJyl9XG4gICAgICAgID5cbiAgICAgICAgICA8Q2hldnJvbkRvd24gd2lkdGg9XCIxMnB4XCIgaGVpZ2h0PVwiMTJweFwiIGNvbG9yPVwiY3VycmVudENvbG9yXCIgLz5cbiAgICAgICAgPC9TQ0NoZXZyb25CdXR0b24+XG5cbiAgICAgICAgPFNDQWN0aW9uTGFiZWxHcm91cD5cbiAgICAgICAgICA8U0NBY3Rpb25MYWJlbD57dChBQ1RJT05fTEFCRUxfS0VZU1thY3Rpb25dKX08L1NDQWN0aW9uTGFiZWw+XG4gICAgICAgICAgeyFpc0F2YWlsYWJsZSAmJiA8U0NDb21pbmdTb29uQmFkZ2U+e3QoJ2FjdGlvbnNTZWN0aW9uLnYyLmNvbWluZ1Nvb24nKX08L1NDQ29taW5nU29vbkJhZGdlPn1cbiAgICAgICAgICB7aXNBdmFpbGFibGUgJiYgKFxuICAgICAgICAgICAgPFNDQ291bnRlciBhY3RpdmU9e2FjdGl2ZX0+e3QoJ2FjdGlvbnNTZWN0aW9uLnYyLnRvb2xzQ291bnQnLCB7IGNvdW50OiB0b29sc0NvdW50IH0pfTwvU0NDb3VudGVyPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzRGVsZXRlICYmIDxTQ0RlbGV0ZUJhZGdlPnt0KCdhY3Rpb25zU2VjdGlvbi52Mi5kZWxldGVXYXJuaW5nSW5saW5lJyl9PC9TQ0RlbGV0ZUJhZGdlPn1cbiAgICAgICAgPC9TQ0FjdGlvbkxhYmVsR3JvdXA+XG5cbiAgICAgICAgPFNDVG9nZ2xlXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaXNBY3RpdmU9e2FjdGl2ZX1cbiAgICAgICAgICBkaXNhYmxlZD17IWlzQXZhaWxhYmxlfVxuICAgICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlQ2xpY2t9XG4gICAgICAgICAgYXJpYS1wcmVzc2VkPXthY3RpdmV9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YCR7dChgYWN0aW9uc1NlY3Rpb24uZW50aXRpZXMuJHtlbnRpdHl9YCl9IMK3ICR7dChBQ1RJT05fTEFCRUxfS0VZU1thY3Rpb25dKX1gfVxuICAgICAgICA+XG4gICAgICAgICAgPFNDVG9nZ2xlVGh1bWIgLz5cbiAgICAgICAgPC9TQ1RvZ2dsZT5cbiAgICAgIDwvU0NBY3Rpb25IZWFkZXI+XG4gICAgKVxuXG4gICAgY29uc3Qgcm93ID0gKFxuICAgICAgPFNDQWN0aW9uUm93IGtleT17YCR7ZW50aXR5fS0ke2FjdGlvbn1gfSBkaXNhYmxlZD17IWlzQXZhaWxhYmxlfT5cbiAgICAgICAge2hlYWRlckNvbnRlbnR9XG4gICAgICAgIHtleHBhbmRlZCAmJiBjYW5FeHBhbmQgJiYgPFNDVG9vbHNMaXN0Pntncm91cC50b29scy5tYXAodG9vbCA9PiByZW5kZXJUb29sSXRlbSh0b29sKSl9PC9TQ1Rvb2xzTGlzdD59XG4gICAgICA8L1NDQWN0aW9uUm93PlxuICAgIClcblxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUb29sdGlwIGtleT17YCR7ZW50aXR5fS0ke2FjdGlvbn1gfSB0aXRsZT17dCgnYWN0aW9uc1NlY3Rpb24udjIuY29taW5nU29vbkhpbnQnKX0+XG4gICAgICAgICAgPGRpdj57cm93fTwvZGl2PlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1xuICB9XG5cbiAgY29uc3QgcmVuZGVyRW50aXR5Q2FyZCA9IChlbnRpdHk6IEVudGl0eUtleSkgPT4ge1xuICAgIGNvbnN0IGdyb3Vwc0ZvckVudGl0eSA9IEVOVElUWV9BQ1RJT05fT1JERVIubWFwKGFjdGlvbiA9PiBUT09MX0dST1VQX01BUFtlbnRpdHldPy5bYWN0aW9uXSkuZmlsdGVyKFxuICAgICAgKGdyb3VwKTogZ3JvdXAgaXMgRW50aXR5VG9vbEdyb3VwID0+IEJvb2xlYW4oZ3JvdXApXG4gICAgKVxuICAgIGNvbnN0IGVuYWJsZWRUb29scyA9IGdyb3Vwc0ZvckVudGl0eS5yZWR1Y2UoXG4gICAgICAoYWNjLCBncm91cCkgPT4gYWNjICsgKHNlbGVjdGVkVG9vbEdyb3Vwc1NldC5oYXMoZ3JvdXAuc2x1ZykgPyBncm91cC50b29scy5sZW5ndGggOiAwKSxcbiAgICAgIDBcbiAgICApXG4gICAgY29uc3QgY291bnRlckFjdGl2ZSA9IGVuYWJsZWRUb29scyA+IDBcblxuICAgIHJldHVybiAoXG4gICAgICA8U0NFbnRpdHlDYXJkIGtleT17ZW50aXR5fT5cbiAgICAgICAgPFNDRW50aXR5SGVhZGVyPlxuICAgICAgICAgIDxTQ0VudGl0eVRpdGxlPnt0KGBhY3Rpb25zU2VjdGlvbi5lbnRpdGllcy4ke2VudGl0eX1gKX08L1NDRW50aXR5VGl0bGU+XG4gICAgICAgICAgPFNDQ291bnRlciBhY3RpdmU9e2NvdW50ZXJBY3RpdmV9Pnt0KCdhY3Rpb25zU2VjdGlvbi52Mi50b29sc0NvdW50JywgeyBjb3VudDogZW5hYmxlZFRvb2xzIH0pfTwvU0NDb3VudGVyPlxuICAgICAgICA8L1NDRW50aXR5SGVhZGVyPlxuICAgICAgICB7RU5USVRZX0FDVElPTl9PUkRFUi5tYXAoYWN0aW9uID0+IHJlbmRlckFjdGlvblJvdyhlbnRpdHksIGFjdGlvbikpfVxuICAgICAgPC9TQ0VudGl0eUNhcmQ+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgcmVuZGVyTm90aW9uQ2F0ZWdvcnkgPSAoY2F0ZWdvcnk6IENvbm5lY3RvclRvb2xDYXRlZ29yeSkgPT4ge1xuICAgIGNvbnN0IGlzT3BlbiA9IGV4cGFuZGVkTm90aW9uQ2F0ZWdvcmllcy5oYXMoY2F0ZWdvcnkua2V5KVxuICAgIGNvbnN0IHRvb2xzQ291bnQgPSBjYXRlZ29yeS50b29scy5sZW5ndGhcbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ2F0ZWdvcnlBY2NvcmRpb24ga2V5PXtjYXRlZ29yeS5rZXl9PlxuICAgICAgICA8U0NDYXRlZ29yeUhlYWRlciB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdG9nZ2xlTm90aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkua2V5KX0gYXJpYS1leHBhbmRlZD17aXNPcGVufT5cbiAgICAgICAgICA8U0NDaGV2cm9uQnV0dG9uIGFzPVwic3BhblwiIG9wZW49e2lzT3Blbn0+XG4gICAgICAgICAgICA8Q2hldnJvbkRvd24gd2lkdGg9XCIxMnB4XCIgaGVpZ2h0PVwiMTJweFwiIGNvbG9yPVwiY3VycmVudENvbG9yXCIgLz5cbiAgICAgICAgICA8L1NDQ2hldnJvbkJ1dHRvbj5cbiAgICAgICAgICA8U0NDYXRlZ29yeVRleHRHcm91cD5cbiAgICAgICAgICAgIDxTQ0NhdGVnb3J5VGl0bGU+e2NhdGVnb3J5LmxhYmVsfTwvU0NDYXRlZ29yeVRpdGxlPlxuICAgICAgICAgICAgPFRydW5jYXRpb25Ub29sdGlwIHRpdGxlPXtjYXRlZ29yeS5kZXNjcmlwdGlvbn0gbGF5b3V0S2V5PXt0cnVuY2F0aW9uTWVhc3VyZUtleX0+XG4gICAgICAgICAgICAgIHt0ZXh0UmVmID0+IDxTQ0NhdGVnb3J5RGVzY3JpcHRpb24gcmVmPXt0ZXh0UmVmfT57Y2F0ZWdvcnkuZGVzY3JpcHRpb259PC9TQ0NhdGVnb3J5RGVzY3JpcHRpb24+fVxuICAgICAgICAgICAgPC9UcnVuY2F0aW9uVG9vbHRpcD5cbiAgICAgICAgICA8L1NDQ2F0ZWdvcnlUZXh0R3JvdXA+XG4gICAgICAgICAgPFNDQ291bnRlciBhY3RpdmU9e2ZhbHNlfT5cbiAgICAgICAgICAgIHt0KCdhY3Rpb25zU2VjdGlvbi52Mi5ub3Rpb24uY2F0ZWdvcnlUb29sc0NvdW50JywgeyBjb3VudDogdG9vbHNDb3VudCB9KX1cbiAgICAgICAgICA8L1NDQ291bnRlcj5cbiAgICAgICAgPC9TQ0NhdGVnb3J5SGVhZGVyPlxuICAgICAgICB7aXNPcGVuICYmXG4gICAgICAgICAgKHRvb2xzQ291bnQgPiAwID8gKFxuICAgICAgICAgICAgPFNDVG9vbHNMaXN0PntjYXRlZ29yeS50b29scy5tYXAodG9vbCA9PiByZW5kZXJUb29sSXRlbSh0b29sKSl9PC9TQ1Rvb2xzTGlzdD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFNDRW1wdHlUb29scz57dCgnYWN0aW9uc1NlY3Rpb24udjIuZW1wdHlUb29scycpfTwvU0NFbXB0eVRvb2xzPlxuICAgICAgICAgICkpfVxuICAgICAgPC9TQ0NhdGVnb3J5QWNjb3JkaW9uPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDUm9vdD5cbiAgICAgIDxTQ0hlYWRlcj5cbiAgICAgICAgPFNDVGl0bGU+e3QoJ2FjdGlvbnNTZWN0aW9uLnYyLnNlY3Rpb25UaXRsZScpfTwvU0NUaXRsZT5cbiAgICAgICAgPFNDU3VidGl0bGU+e3QoJ2FjdGlvbnNTZWN0aW9uLnYyLnNlY3Rpb25TdWJ0aXRsZScpfTwvU0NTdWJ0aXRsZT5cbiAgICAgIDwvU0NIZWFkZXI+XG5cbiAgICAgIDxTQ1NlY3Rpb25MYWJlbD57dCgnYWN0aW9uc1NlY3Rpb24udjIuaW50ZXJuYWxCbG9ja1RpdGxlJyl9PC9TQ1NlY3Rpb25MYWJlbD5cblxuICAgICAgPFNDQ29ubmVjdG9yQ2FyZD5cbiAgICAgICAgPFNDQ29ubmVjdG9ySGVhZGVyPlxuICAgICAgICAgIDxTQ0Nvbm5lY3RvcklkZW50aXR5PlxuICAgICAgICAgICAgPFNDQ29ubmVjdG9ySWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgPENhdGVnb3J5IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgIDwvU0NDb25uZWN0b3JJY29uPlxuICAgICAgICAgICAgPFNDQ29ubmVjdG9yVGV4dEdyb3VwPlxuICAgICAgICAgICAgICA8VHJ1bmNhdGlvblRvb2x0aXAgdGl0bGU9e3QoJ2FjdGlvbnNTZWN0aW9uLnYyLmludGVybmFsQmxvY2tUaXRsZScpfSBsYXlvdXRLZXk9e3RydW5jYXRpb25NZWFzdXJlS2V5fT5cbiAgICAgICAgICAgICAgICB7dGV4dFJlZiA9PiAoXG4gICAgICAgICAgICAgICAgICA8U0NDb25uZWN0b3JUaXRsZSByZWY9e3RleHRSZWZ9Pnt0KCdhY3Rpb25zU2VjdGlvbi52Mi5pbnRlcm5hbEJsb2NrVGl0bGUnKX08L1NDQ29ubmVjdG9yVGl0bGU+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9UcnVuY2F0aW9uVG9vbHRpcD5cbiAgICAgICAgICAgICAgPFRydW5jYXRpb25Ub29sdGlwIHRpdGxlPXt0KCdhY3Rpb25zU2VjdGlvbi52Mi5pbnRlcm5hbEJsb2NrU3VidGl0bGUnKX0gbGF5b3V0S2V5PXt0cnVuY2F0aW9uTWVhc3VyZUtleX0+XG4gICAgICAgICAgICAgICAge3RleHRSZWYgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNDQ29ubmVjdG9yVGFnbGluZSByZWY9e3RleHRSZWZ9Pnt0KCdhY3Rpb25zU2VjdGlvbi52Mi5pbnRlcm5hbEJsb2NrU3VidGl0bGUnKX08L1NDQ29ubmVjdG9yVGFnbGluZT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1RydW5jYXRpb25Ub29sdGlwPlxuICAgICAgICAgICAgPC9TQ0Nvbm5lY3RvclRleHRHcm91cD5cbiAgICAgICAgICA8L1NDQ29ubmVjdG9ySWRlbnRpdHk+XG4gICAgICAgICAgPFNDQ29ubmVjdG9yUmlnaHRHcm91cD5cbiAgICAgICAgICAgIDxTQ0NvdW50ZXIgYWN0aXZlPXtjb3JBY3RpdmVUb29sc0NvdW50ID4gMH0+XG4gICAgICAgICAgICAgIHt0KCdhY3Rpb25zU2VjdGlvbi52Mi50b29sc0NvdW50JywgeyBjb3VudDogY29yQWN0aXZlVG9vbHNDb3VudCB9KX1cbiAgICAgICAgICAgIDwvU0NDb3VudGVyPlxuICAgICAgICAgICAgPFNDVG9nZ2xlXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBpc0FjdGl2ZT17Y29yQmxvY2tFeHBhbmRlZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0Q29yQmxvY2tFeHBhbmRlZCh2ID0+ICF2KX1cbiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPXtjb3JCbG9ja0V4cGFuZGVkfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtcbiAgICAgICAgICAgICAgICBjb3JCbG9ja0V4cGFuZGVkXG4gICAgICAgICAgICAgICAgICA/IHQoJ2FjdGlvbnNTZWN0aW9uLnYyLmV4cGFuZENvckRldGFpbHNBcmlhT2ZmJylcbiAgICAgICAgICAgICAgICAgIDogdCgnYWN0aW9uc1NlY3Rpb24udjIuZXhwYW5kQ29yRGV0YWlsc0FyaWFPbicpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFNDVG9nZ2xlVGh1bWIgLz5cbiAgICAgICAgICAgIDwvU0NUb2dnbGU+XG4gICAgICAgICAgPC9TQ0Nvbm5lY3RvclJpZ2h0R3JvdXA+XG4gICAgICAgIDwvU0NDb25uZWN0b3JIZWFkZXI+XG4gICAgICAgIHshY29yQmxvY2tFeHBhbmRlZCAmJiA8U0NDb25uZWN0b3JIaW50Pnt0KCdhY3Rpb25zU2VjdGlvbi52Mi5jb3JDb2xsYXBzZWRIaW50Jyl9PC9TQ0Nvbm5lY3RvckhpbnQ+fVxuICAgICAgICB7Y29yQmxvY2tFeHBhbmRlZCAmJiAoXG4gICAgICAgICAgPFNDRXhwYW5kYWJsZUJsb2NrQm9keT5cbiAgICAgICAgICAgIDxTQ0VudGl0eUxpc3Q+e0VOVElUWV9PUkRFUi5tYXAoZW50aXR5ID0+IHJlbmRlckVudGl0eUNhcmQoZW50aXR5KSl9PC9TQ0VudGl0eUxpc3Q+XG4gICAgICAgICAgPC9TQ0V4cGFuZGFibGVCbG9ja0JvZHk+XG4gICAgICAgICl9XG4gICAgICA8L1NDQ29ubmVjdG9yQ2FyZD5cblxuICAgICAgPFNDU2VjdGlvbkxhYmVsPnt0KCdhY3Rpb25zU2VjdGlvbi52Mi5leHRlcm5hbEJsb2NrVGl0bGUnKX08L1NDU2VjdGlvbkxhYmVsPlxuXG4gICAgICA8U0NDb25uZWN0b3JDYXJkPlxuICAgICAgICA8U0NDb25uZWN0b3JIZWFkZXI+XG4gICAgICAgICAgPFNDQ29ubmVjdG9ySWRlbnRpdHk+XG4gICAgICAgICAgICA8U0NDb25uZWN0b3JJY29uIGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgICA8Tm90aW9uSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICA8L1NDQ29ubmVjdG9ySWNvbj5cbiAgICAgICAgICAgIDxTQ0Nvbm5lY3RvclRleHRHcm91cD5cbiAgICAgICAgICAgICAgPFRydW5jYXRpb25Ub29sdGlwIHRpdGxlPXtOT1RJT05fQ09OTkVDVE9SX0NBVEFMT0cubmFtZX0gbGF5b3V0S2V5PXt0cnVuY2F0aW9uTWVhc3VyZUtleX0+XG4gICAgICAgICAgICAgICAge3RleHRSZWYgPT4gPFNDQ29ubmVjdG9yVGl0bGUgcmVmPXt0ZXh0UmVmfT57Tk9USU9OX0NPTk5FQ1RPUl9DQVRBTE9HLm5hbWV9PC9TQ0Nvbm5lY3RvclRpdGxlPn1cbiAgICAgICAgICAgICAgPC9UcnVuY2F0aW9uVG9vbHRpcD5cbiAgICAgICAgICAgICAgPFRydW5jYXRpb25Ub29sdGlwIHRpdGxlPXt0KCdhY3Rpb25zU2VjdGlvbi52Mi5ub3Rpb24udGFnbGluZScpfSBsYXlvdXRLZXk9e3RydW5jYXRpb25NZWFzdXJlS2V5fT5cbiAgICAgICAgICAgICAgICB7dGV4dFJlZiA9PiAoXG4gICAgICAgICAgICAgICAgICA8U0NDb25uZWN0b3JUYWdsaW5lIHJlZj17dGV4dFJlZn0+e3QoJ2FjdGlvbnNTZWN0aW9uLnYyLm5vdGlvbi50YWdsaW5lJyl9PC9TQ0Nvbm5lY3RvclRhZ2xpbmU+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9UcnVuY2F0aW9uVG9vbHRpcD5cbiAgICAgICAgICAgIDwvU0NDb25uZWN0b3JUZXh0R3JvdXA+XG4gICAgICAgICAgPC9TQ0Nvbm5lY3RvcklkZW50aXR5PlxuICAgICAgICAgIDxTQ0Nvbm5lY3RvclJpZ2h0R3JvdXA+XG4gICAgICAgICAgICA8U0NTdGF0dXNQaWxsIHRvbmU9e25vdGlvbkNvbm5lY3RvckJhZGdlLnRvbmV9Pntub3Rpb25Db25uZWN0b3JCYWRnZS5sYWJlbH08L1NDU3RhdHVzUGlsbD5cbiAgICAgICAgICAgIDxTQ1RvZ2dsZVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2lzTm90aW9uRW5hYmxlZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlQ29ubmVjdG9yKE5PVElPTl9DT05ORUNUT1JfU0xVRyl9XG4gICAgICAgICAgICAgIGFyaWEtcHJlc3NlZD17aXNOb3Rpb25FbmFibGVkfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtOT1RJT05fQ09OTkVDVE9SX0NBVEFMT0cubmFtZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFNDVG9nZ2xlVGh1bWIgLz5cbiAgICAgICAgICAgIDwvU0NUb2dnbGU+XG4gICAgICAgICAgPC9TQ0Nvbm5lY3RvclJpZ2h0R3JvdXA+XG4gICAgICAgIDwvU0NDb25uZWN0b3JIZWFkZXI+XG5cbiAgICAgICAgeyFpc05vdGlvbkVuYWJsZWQgJiYgPFNDQ29ubmVjdG9ySGludD57dCgnYWN0aW9uc1NlY3Rpb24udjIubm90aW9uLmRpc2FibGVkSGludCcpfTwvU0NDb25uZWN0b3JIaW50Pn1cblxuICAgICAgICB7aXNOb3Rpb25FbmFibGVkICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ29ubmVjdG9ySGludD57dCgnYWN0aW9uc1NlY3Rpb24udjIubm90aW9uLmVuYWJsZWRIaW50Jyl9PC9TQ0Nvbm5lY3RvckhpbnQ+XG4gICAgICAgICAgICB7Tk9USU9OX0NPTk5FQ1RPUl9DQVRBTE9HLmNhdGVnb3JpZXMubWFwKGNhdGVnb3J5ID0+IHJlbmRlck5vdGlvbkNhdGVnb3J5KGNhdGVnb3J5KSl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDQ29ubmVjdG9yQ2FyZD5cbiAgICA8L1NDUm9vdD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU9BLEtBQUssSUFDVkMsV0FBVyxFQUNYQyxTQUFTLEVBQ1RDLE9BQU8sRUFDUEMsTUFBTSxFQUNOQyxRQUFRLFFBSUgsT0FBTztBQUNkLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FB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