@projectcor/maia-components 2.49.0-beta.1 → 2.49.0

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 (124) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
  4. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
  5. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
  6. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
  7. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
  8. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
  9. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  10. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  11. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
  12. package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
  13. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  14. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  15. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
  16. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
  17. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
  18. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
  19. package/lib/components/atoms/MAIAInput/MAIAInput.js +127 -176
  20. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
  21. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
  22. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  23. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  24. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +3 -4
  25. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +3 -11
  26. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  27. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +2 -3
  28. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  29. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
  30. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
  31. package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
  32. package/lib/components/atoms/TextArea/TextArea.js +11 -20
  33. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  34. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
  35. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
  36. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
  37. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
  38. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
  39. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  40. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  41. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
  42. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +197 -233
  43. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
  44. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +209 -235
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +515 -4
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +228 -344
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
  50. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +36 -33
  51. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
  52. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
  53. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
  54. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
  55. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  56. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  57. package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
  58. package/lib/components/molecules/Sidebar/Sidebar.js +25 -22
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
  60. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +309 -643
  61. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
  62. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
  63. package/lib/constants/formatExtensions.js +7 -8
  64. package/lib/dev/DevReasoningTimeline.js +8 -50
  65. package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
  66. package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
  67. package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
  68. package/lib/hooks/useChatManager/useChatManager.js +267 -741
  69. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
  70. package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
  71. package/lib/hooks/useClientSearch.helpers.js +36 -0
  72. package/lib/hooks/useClientSearch.js +4 -32
  73. package/lib/hooks/useContextMentions.helpers.js +212 -0
  74. package/lib/hooks/useContextMentions.js +5 -223
  75. package/lib/hooks/useContextMentions.types.js +2 -0
  76. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  77. package/lib/hooks/useContextPinPopover.js +16 -75
  78. package/lib/hooks/useEntitySearch.helpers.js +407 -0
  79. package/lib/hooks/useEntitySearch.js +52 -436
  80. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  81. package/lib/hooks/useMentionPopover.js +9 -35
  82. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  83. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  84. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
  85. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
  86. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  87. package/lib/hooks/useProjectSearch.js +4 -58
  88. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  89. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  90. package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
  91. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  92. package/lib/hooks/useRecentClientsSearch.js +4 -32
  93. package/lib/lang/br/index.js +1 -7
  94. package/lib/lang/en/index.js +1 -7
  95. package/lib/lang/es/index.js +1 -7
  96. package/lib/lang/fr/index.js +1 -7
  97. package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
  98. package/lib/services/maia/Agents/getAgents.js +90 -282
  99. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  100. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  101. package/lib/services/utils/mapChatMessages.helpers.js +223 -0
  102. package/lib/services/utils/mapChatMessages.js +25 -254
  103. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  104. package/lib/store/sessions/sessionNotifications.js +35 -41
  105. package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
  106. package/lib/store/sessions/sessionStreamManager.js +172 -236
  107. package/lib/test/mockSseStream.js +121 -0
  108. package/lib/test/streamdownCodeMock.js +6 -0
  109. package/lib/test/streamdownMock.js +12 -0
  110. package/lib/types/Chat.js +1 -1
  111. package/lib/types/agentModal.js +1 -1
  112. package/lib/types/reasoning.js +1 -1
  113. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  114. package/lib/utils/imagePreprocessor.js +12 -37
  115. package/lib/utils/renderContextMentions.helpers.js +110 -0
  116. package/lib/utils/renderContextMentions.js +4 -110
  117. package/lib/utils/streamActivityMessages.helpers.js +222 -0
  118. package/lib/utils/streamActivityMessages.js +4 -221
  119. package/package.json +2 -2
  120. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
  121. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
  122. package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
  123. package/lib/types/contextCompaction.js +0 -48
  124. package/lib/types/jest-dom.d.js +0 -2
@@ -9,8 +9,8 @@ import { CONTEXT_MENTION_CHIP_CLASS } from '../../../types/contextMention';
9
9
  import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
10
10
  import { normalizeContextMentionLabel } from '../../../utils/contextMentionLabel';
11
11
  import { openTaskInCorPanel } from '../../../utils/openTaskInCorPanel';
12
- import { SLASH_COMMAND_CHIP_BASE_STYLE } from '../SlashCommandChip/SlashCommandChip.styles';
13
12
  import { applyMentionChipStyles, MENTION_CHIP_COLORS } from './ContextMentionChip.styles';
13
+ import { buildSkillMentionChipElement, buildUserMentionTooltipElement, splitLabelFirstWord } from './buildChipElement.helpers';
14
14
  var EDITABLE_NON_TASK_LABEL_STYLE = {
15
15
  display: 'inline',
16
16
  lineHeight: '20px',
@@ -45,22 +45,6 @@ var createEditableMentionLabelEl = function createEditableMentionLabelEl(isTask,
45
45
  style: EDITABLE_TASK_LABEL_STYLE
46
46
  }, mentionLabel);
47
47
  };
48
- var splitLabelFirstWord = function splitLabelFirstWord(label) {
49
- var normalized = label.trim();
50
- if (!normalized) return {
51
- firstWord: '',
52
- rest: ''
53
- };
54
- var firstWhitespaceIdx = normalized.search(/\s/);
55
- if (firstWhitespaceIdx < 0) return {
56
- firstWord: normalized,
57
- rest: ''
58
- };
59
- return {
60
- firstWord: normalized.slice(0, firstWhitespaceIdx),
61
- rest: normalized.slice(firstWhitespaceIdx)
62
- };
63
- };
64
48
  var EditableMentionChip = function EditableMentionChip(_ref) {
65
49
  var mention = _ref.mention;
66
50
  var mentionLabel = normalizeContextMentionLabel(mention.label);
@@ -118,213 +102,6 @@ var EditableMentionChip = function EditableMentionChip(_ref) {
118
102
  style: restStyle
119
103
  }, rest) : null);
120
104
  };
121
- var initialsFromName = function initialsFromName(name) {
122
- var _parts$2;
123
- var trimmed = name.trim();
124
- if (!trimmed) return '?';
125
- var parts = trimmed.split(/\s+/).filter(Boolean);
126
- if (parts.length >= 2) {
127
- var _parts$0$charAt, _parts$, _parts$charAt, _parts;
128
- var first = (_parts$0$charAt = (_parts$ = parts[0]) === null || _parts$ === void 0 ? void 0 : _parts$.charAt(0)) !== null && _parts$0$charAt !== void 0 ? _parts$0$charAt : '';
129
- var last = (_parts$charAt = (_parts = parts[parts.length - 1]) === null || _parts === void 0 ? void 0 : _parts.charAt(0)) !== null && _parts$charAt !== void 0 ? _parts$charAt : '';
130
- return "".concat(first).concat(last).toUpperCase();
131
- }
132
- var single = (_parts$2 = parts[0]) !== null && _parts$2 !== void 0 ? _parts$2 : '';
133
- return single.length >= 2 ? single.slice(0, 2).toUpperCase() : (single.charAt(0) || '?').toUpperCase();
134
- };
135
- var TOOLTIP_FONT = "var(--cor-typography-font-family, 'Work Sans')";
136
- var TOOLTIP_SECONDARY_COLOR = 'var(--Text-Secondary-Dark, #666)';
137
- var TOOLTIP_SECONDARY_STYLE = {
138
- fontFamily: TOOLTIP_FONT,
139
- fontSize: '14px',
140
- fontWeight: '400',
141
- lineHeight: '20px',
142
- color: TOOLTIP_SECONDARY_COLOR
143
- };
144
- var normalizeTrimmedString = function normalizeTrimmedString(value) {
145
- if (typeof value !== 'string') return '';
146
- return value.trim();
147
- };
148
-
149
- /** Ancho mínimo del tooltip (incl. padding horizontal 8+8). */
150
- var USER_TOOLTIP_MIN_WIDTH_PX = 292;
151
- /** Padding horizontal total del tooltip. */
152
- var USER_TOOLTIP_PAD_X_PX = 16;
153
- /** Avatar 24px + gap 8px respecto a la columna de texto. */
154
- var USER_TOOLTIP_AVATAR_GAP_PX = 32;
155
- /**
156
- * Ancho máximo de la fila nombre | posición: mismo hueco que con tooltip fijo 292px,
157
- * para que solo el email ensanche el contenedor.
158
- */
159
- var USER_TOOLTIP_NAME_ROW_MAX_PX = USER_TOOLTIP_MIN_WIDTH_PX - USER_TOOLTIP_PAD_X_PX - USER_TOOLTIP_AVATAR_GAP_PX;
160
- /**
161
- * Tope de ancho del nombre en la fila: por debajo del máximo de fila para que el ellipsis
162
- * del nombre aparezca antes y quede más espacio visible para posición/cargo.
163
- */
164
- var USER_TOOLTIP_NAME_MAX_WIDTH_PX = Math.floor(USER_TOOLTIP_NAME_ROW_MAX_PX * 0.42);
165
- var createUserTooltipEl = function createUserTooltipEl(mention) {
166
- var label = mention.label,
167
- metadata = mention.metadata;
168
- var picture = typeof (metadata === null || metadata === void 0 ? void 0 : metadata.picture) === 'string' ? metadata.picture : null;
169
- var positionName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.positionName);
170
- var positionLine = positionName || i18n.t('contextMention.userNoPosition', {
171
- defaultValue: 'Sin posición'
172
- });
173
- var email = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.email);
174
- /** Misma fuente que `ContextMentionItem` (avatar): nombre de query, no el label del chip (ej. "Yo"). */
175
- var metadataName = normalizeTrimmedString(metadata === null || metadata === void 0 ? void 0 : metadata.name);
176
- var nameForInitials = (metadataName || normalizeTrimmedString(label) || '?').trim();
177
- var tooltip = document.createElement('div');
178
- Object.assign(tooltip.style, {
179
- position: 'fixed',
180
- zIndex: '9999',
181
- minWidth: "".concat(USER_TOOLTIP_MIN_WIDTH_PX, "px"),
182
- width: 'max-content',
183
- maxWidth: 'min(560px, calc(100vw - 24px))',
184
- padding: '12px 8px',
185
- display: 'flex',
186
- flexDirection: 'column',
187
- alignItems: 'flex-start',
188
- borderRadius: '4px',
189
- border: '1px solid var(--Color-Light-Gray, #E0E0E0)',
190
- background: '#FFF',
191
- boxShadow: '0 1px 4px 0 rgba(0,0,0,0.08), 0 1px 4px 0 rgba(0,0,0,0.04)',
192
- boxSizing: 'border-box',
193
- pointerEvents: 'none',
194
- overflow: 'hidden'
195
- });
196
- var row = document.createElement('div');
197
- Object.assign(row.style, {
198
- display: 'flex',
199
- alignItems: 'center',
200
- gap: '8px',
201
- width: 'max-content',
202
- maxWidth: '100%',
203
- minWidth: '0'
204
- });
205
-
206
- // Avatar circular (foto o iniciales)
207
- var avatarWrap = document.createElement('div');
208
- Object.assign(avatarWrap.style, {
209
- width: '24px',
210
- height: '24px',
211
- minWidth: '24px',
212
- borderRadius: '24px',
213
- overflow: 'hidden',
214
- display: 'flex',
215
- alignItems: 'center',
216
- justifyContent: 'center',
217
- /** Mismo fondo que `SCMUserAvatarFallback` en la fila de usuario del modal. */
218
- background: 'var(--cor-color-grey-200, #e0e0e0)',
219
- flexShrink: '0'
220
- });
221
- var initials = initialsFromName(nameForInitials);
222
- var createInitialsFallback = function createInitialsFallback() {
223
- var fb = document.createElement('span');
224
- fb.textContent = initials;
225
- Object.assign(fb.style, {
226
- fontSize: '10px',
227
- fontWeight: '600',
228
- /** Mismo color que `SCMUserAvatarFallback` en la fila de usuario del modal. */
229
- color: 'var(--cor-color-text-secondary, #666)',
230
- lineHeight: '1',
231
- fontFamily: TOOLTIP_FONT
232
- });
233
- return fb;
234
- };
235
- if (picture) {
236
- var img = document.createElement('img');
237
- img.src = picture;
238
- img.alt = '';
239
- img.draggable = false;
240
- Object.assign(img.style, {
241
- width: '24px',
242
- height: '24px',
243
- objectFit: 'cover',
244
- display: 'block',
245
- borderRadius: '24px'
246
- });
247
- img.onerror = function () {
248
- img.remove();
249
- avatarWrap.appendChild(createInitialsFallback());
250
- };
251
- avatarWrap.appendChild(img);
252
- } else {
253
- avatarWrap.appendChild(createInitialsFallback());
254
- }
255
-
256
- // Columna de info: ancho = max(fila nombre, email); sin forzar 244px si el contenido es más corto.
257
- var infoCol = document.createElement('div');
258
- Object.assign(infoCol.style, {
259
- display: 'flex',
260
- flexDirection: 'column',
261
- justifyContent: 'center',
262
- alignItems: 'flex-start',
263
- gap: '2px',
264
- minWidth: '0',
265
- width: 'max-content',
266
- maxWidth: '100%'
267
- });
268
-
269
- // Fila: nombre | posición — max-content para no dejar hueco entre nombre corto y el pipe (evitar flex 50/50).
270
- var nameRow = document.createElement('div');
271
- Object.assign(nameRow.style, {
272
- display: 'flex',
273
- alignItems: 'flex-start',
274
- gap: '4px',
275
- minWidth: '0',
276
- width: 'max-content',
277
- maxWidth: "".concat(USER_TOOLTIP_NAME_ROW_MAX_PX, "px")
278
- });
279
- var nameSpan = document.createElement('span');
280
- nameSpan.textContent = label;
281
- Object.assign(nameSpan.style, {
282
- flex: '0 1 auto',
283
- minWidth: '0',
284
- maxWidth: "".concat(USER_TOOLTIP_NAME_MAX_WIDTH_PX, "px"),
285
- overflow: 'hidden',
286
- textOverflow: 'ellipsis',
287
- whiteSpace: 'nowrap',
288
- color: 'var(--Text-Primary-Dark, #20201F)',
289
- fontFamily: TOOLTIP_FONT,
290
- fontSize: '14px',
291
- fontWeight: '500',
292
- lineHeight: '130%'
293
- });
294
- nameRow.appendChild(nameSpan);
295
- var sep = document.createElement('span');
296
- sep.textContent = '|';
297
- Object.assign(sep.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
298
- flexShrink: '0'
299
- }));
300
- nameRow.appendChild(sep);
301
- var posSpan = document.createElement('span');
302
- posSpan.textContent = positionLine;
303
- Object.assign(posSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
304
- flex: '0 1 auto',
305
- minWidth: '0',
306
- overflow: 'hidden',
307
- textOverflow: 'ellipsis',
308
- whiteSpace: 'nowrap'
309
- }));
310
- nameRow.appendChild(posSpan);
311
- infoCol.appendChild(nameRow);
312
- if (email) {
313
- var emailSpan = document.createElement('span');
314
- emailSpan.textContent = email;
315
- Object.assign(emailSpan.style, _objectSpread(_objectSpread({}, TOOLTIP_SECONDARY_STYLE), {}, {
316
- whiteSpace: 'nowrap',
317
- maxWidth: '100%',
318
- overflow: 'hidden',
319
- textOverflow: 'ellipsis'
320
- }));
321
- infoCol.appendChild(emailSpan);
322
- }
323
- row.appendChild(avatarWrap);
324
- row.appendChild(infoCol);
325
- tooltip.appendChild(row);
326
- return tooltip;
327
- };
328
105
 
329
106
  /**
330
107
  * Crea un `<span>` atómico listo para insertarse dentro del contenteditable
@@ -335,45 +112,26 @@ var createUserTooltipEl = function createUserTooltipEl(mention) {
335
112
  * `applyMentionChipStyles`, asegurando una única fuente de verdad visual.
336
113
  */
337
114
  export var buildChipElement = function buildChipElement(mention) {
115
+ if (mention.type === 'skill') {
116
+ return buildSkillMentionChipElement(mention);
117
+ }
338
118
  var chip = document.createElement('span');
339
119
  chip.setAttribute('contenteditable', 'false');
340
120
  chip.setAttribute('data-mention-chip', 'true');
341
121
  chip.className = CONTEXT_MENTION_CHIP_CLASS;
342
122
  chip.setAttribute('data-mention-type', mention.type);
343
123
  chip.setAttribute('data-mention-surface', 'editor');
344
-
345
- // Las skills se ven como los slash commands (texto plano `#nombre`), no como chip con fondo.
346
- if (mention.type === 'skill') {
347
- Object.assign(chip.style, SLASH_COMMAND_CHIP_BASE_STYLE, {
348
- boxSizing: 'border-box',
349
- maxWidth: '100%'
350
- });
351
- chip.textContent = normalizeContextMentionLabel(mention.label);
352
- return chip;
353
- }
354
124
  applyMentionChipStyles(chip, mention.type);
355
- var isTask = mention.type === 'task';
356
- var common = {
125
+ Object.assign(chip.style, {
357
126
  boxSizing: 'border-box',
358
127
  verticalAlign: 'baseline',
359
128
  overflow: 'visible',
360
- maxWidth: '100%'
361
- };
362
- if (isTask) {
363
- Object.assign(chip.style, common, {
364
- lineHeight: '20px',
365
- height: 'auto',
366
- minHeight: 'auto',
367
- maxHeight: 'none'
368
- });
369
- } else {
370
- Object.assign(chip.style, common, {
371
- lineHeight: '20px',
372
- height: 'auto',
373
- minHeight: 'auto',
374
- maxHeight: 'none'
375
- });
376
- }
129
+ maxWidth: '100%',
130
+ lineHeight: '20px',
131
+ height: 'auto',
132
+ minHeight: 'auto',
133
+ maxHeight: 'none'
134
+ });
377
135
  var mountNode = document.createElement('span');
378
136
  mountNode.style.display = 'inline';
379
137
  mountNode.style.maxWidth = '100%';
@@ -429,7 +187,9 @@ export var buildChipElement = function buildChipElement(mention) {
429
187
  };
430
188
  chip.addEventListener('mouseenter', function () {
431
189
  if (tooltipEl) return;
432
- tooltipEl = createUserTooltipEl(mention);
190
+ tooltipEl = buildUserMentionTooltipElement(mention, function (key, opts) {
191
+ return i18n.t(key, opts);
192
+ });
433
193
  var rect = chip.getBoundingClientRect();
434
194
  var left = Math.max(8, Math.min(window.innerWidth - 300, rect.left));
435
195
  tooltipEl.style.top = "".concat(rect.top, "px");
@@ -442,4 +202,4 @@ export var buildChipElement = function buildChipElement(mention) {
442
202
  }
443
203
  return chip;
444
204
  };
445
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSIsImFwcGx5TWVudGlvbkNoaXBTdHlsZXMiLCJNRU5USU9OX0NISVBfQ09MT1JTIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwic3BsaXRMYWJlbEZpcnN0V29yZCIsImxhYmVsIiwibm9ybWFsaXplZCIsInRyaW0iLCJmaXJzdFdvcmQiLCJyZXN0IiwiZmlyc3RXaGl0ZXNwYWNlSWR4Iiwic2VhcmNoIiwic2xpY2UiLCJFZGl0YWJsZU1lbnRpb25DaGlwIiwiX3JlZiIsIm1lbnRpb24iLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJsZWFkaW5nU3R5bGUiLCJhbGlnbkl0ZW1zIiwibGVhZGluZ1dvcmRTdHlsZSIsIl9vYmplY3RTcHJlYWQiLCJyZXN0U3R5bGUiLCJtYXJnaW5SaWdodCIsIndpZHRoIiwiaWQiLCJpbml0aWFsc0Zyb21OYW1lIiwibmFtZSIsIl9wYXJ0cyQyIiwidHJpbW1lZCIsInBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiX3BhcnRzJDAkY2hhckF0IiwiX3BhcnRzJCIsIl9wYXJ0cyRjaGFyQXQiLCJfcGFydHMiLCJmaXJzdCIsImNoYXJBdCIsImxhc3QiLCJjb25jYXQiLCJ0b1VwcGVyQ2FzZSIsInNpbmdsZSIsIlRPT0xUSVBfRk9OVCIsIlRPT0xUSVBfU0VDT05EQVJZX0NPTE9SIiwiVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUiLCJmb250RmFtaWx5Iiwibm9ybWFsaXplVHJpbW1lZFN0cmluZyIsInZhbHVlIiwiVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCIsIlVTRVJfVE9PTFRJUF9QQURfWF9QWCIsIlVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYIiwiVVNFUl9UT09MVElQX05BTUVfUk9XX01BWF9QWCIsIlVTRVJfVE9PTFRJUF9OQU1FX01BWF9XSURUSF9QWCIsIk1hdGgiLCJmbG9vciIsImNyZWF0ZVVzZXJUb29sdGlwRWwiLCJtZXRhZGF0YSIsInBpY3R1cmUiLCJwb3NpdGlvbk5hbWUiLCJwb3NpdGlvbkxpbmUiLCJ0IiwiZGVmYXVsdFZhbHVlIiwiZW1haWwiLCJtZXRhZGF0YU5hbWUiLCJuYW1lRm9ySW5pdGlhbHMiLCJ0b29sdGlwIiwiZG9jdW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJ6SW5kZXgiLCJwYWRkaW5nIiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsImJhY2tncm91bmQiLCJib3hTaGFkb3ciLCJwb2ludGVyRXZlbnRzIiwib3ZlcmZsb3ciLCJyb3ciLCJnYXAiLCJhdmF0YXJXcmFwIiwiaGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJmbGV4U2hyaW5rIiwiaW5pdGlhbHMiLCJjcmVhdGVJbml0aWFsc0ZhbGxiYWNrIiwiZmIiLCJ0ZXh0Q29udGVudCIsImltZyIsInNyYyIsImFsdCIsImRyYWdnYWJsZSIsIm9iamVjdEZpdCIsIm9uZXJyb3IiLCJyZW1vdmUiLCJhcHBlbmRDaGlsZCIsImluZm9Db2wiLCJuYW1lUm93IiwibmFtZVNwYW4iLCJmbGV4IiwidGV4dE92ZXJmbG93Iiwic2VwIiwicG9zU3BhbiIsImVtYWlsU3BhbiIsImJ1aWxkQ2hpcEVsZW1lbnQiLCJjaGlwIiwic2V0QXR0cmlidXRlIiwiY2xhc3NOYW1lIiwiY29tbW9uIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwicm9vdCIsInJlbmRlciIsImN1cnNvciIsIm9uY2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ3aW5kb3ciLCJvcGVuIiwidG9vbHRpcEVsIiwiY2hpcFJlbW92ZWRPYnNlcnZlciIsInJlbW92ZVVzZXJUb29sdGlwIiwiX2NoaXBSZW1vdmVkT2JzZXJ2ZXIiLCJkaXNjb25uZWN0Iiwid2F0Y2hDaGlwUmVtb3ZlZEZyb21Eb20iLCJfY2hpcFJlbW92ZWRPYnNlcnZlcjIiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwiTXV0YXRpb25PYnNlcnZlciIsImlzQ29ubmVjdGVkIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxlZnQiLCJtYXgiLCJtaW4iLCJpbm5lcldpZHRoIiwidG9wIiwidHJhbnNmb3JtIiwiYm9keSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uQ2hpcC9idWlsZENoaXBFbGVtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi9sYW5nJ1xuaW1wb3J0IHsgQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1MsIENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uTGFiZWwnXG5pbXBvcnQgeyBvcGVuVGFza0luQ29yUGFuZWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9vcGVuVGFza0luQ29yUGFuZWwnXG5pbXBvcnQgeyBTTEFTSF9DT01NQU5EX0NISVBfQkFTRV9TVFlMRSB9IGZyb20gJy4uL1NsYXNoQ29tbWFuZENoaXAvU2xhc2hDb21tYW5kQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBhcHBseU1lbnRpb25DaGlwU3R5bGVzLCBNRU5USU9OX0NISVBfQ09MT1JTIH0gZnJvbSAnLi9Db250ZXh0TWVudGlvbkNoaXAuc3R5bGVzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG5jb25zdCBzcGxpdExhYmVsRmlyc3RXb3JkID0gKGxhYmVsOiBzdHJpbmcpOiB7IGZpcnN0V29yZDogc3RyaW5nOyByZXN0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYWJlbC50cmltKClcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4geyBmaXJzdFdvcmQ6ICcnLCByZXN0OiAnJyB9XG4gIGNvbnN0IGZpcnN0V2hpdGVzcGFjZUlkeCA9IG5vcm1hbGl6ZWQuc2VhcmNoKC9cXHMvKVxuICBpZiAoZmlyc3RXaGl0ZXNwYWNlSWR4IDwgMCkgcmV0dXJuIHsgZmlyc3RXb3JkOiBub3JtYWxpemVkLCByZXN0OiAnJyB9XG4gIHJldHVybiB7XG4gICAgZmlyc3RXb3JkOiBub3JtYWxpemVkLnNsaWNlKDAsIGZpcnN0V2hpdGVzcGFjZUlkeCksXG4gICAgcmVzdDogbm9ybWFsaXplZC5zbGljZShmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICB9XG59XG5cbnR5cGUgRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzID0ge1xuICBtZW50aW9uOiBDb250ZXh0TWVudGlvblxufVxuXG5jb25zdCBFZGl0YWJsZU1lbnRpb25DaGlwID0gKHsgbWVudGlvbiB9OiBFZGl0YWJsZU1lbnRpb25DaGlwUHJvcHMpID0+IHtcbiAgY29uc3QgbWVudGlvbkxhYmVsID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChtZW50aW9uLmxhYmVsKVxuICBjb25zdCBpY29uQ29sb3IgPSBNRU5USU9OX0NISVBfQ09MT1JTW21lbnRpb24udHlwZV0uZmdcbiAgY29uc3QgaXNUYXNrID0gbWVudGlvbi50eXBlID09PSAndGFzaydcbiAgY29uc3QgaXNQcm9qZWN0ID0gbWVudGlvbi50eXBlID09PSAncHJvamVjdCdcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IGxhYmVsRWwgPSBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsKGlzVGFzaywgbWVudGlvbkxhYmVsKVxuXG4gIGNvbnN0IG91dGVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdiYXNlbGluZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfVxuXG4gIGlmIChpc1Rhc2sgfHwgaXNQcm9qZWN0KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBvdXRlclN0eWxlIH0sIGxhYmVsRWwpXG4gIH1cblxuICBjb25zdCB7IGZpcnN0V29yZCwgcmVzdCB9ID0gc3BsaXRMYWJlbEZpcnN0V29yZChtZW50aW9uTGFiZWwpXG4gIGNvbnN0IGxlYWRpbmdTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cbiAgY29uc3QgbGVhZGluZ1dvcmRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi5FRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRSxcbiAgICBkaXNwbGF5OiAnaW5saW5lJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfVxuICBjb25zdCByZXN0U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIH1cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAnc3BhbicsXG4gICAgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LFxuICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAnc3BhbicsXG4gICAgICB7IHN0eWxlOiBsZWFkaW5nU3R5bGUgfSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQ6ICcycHgnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogJzEnLFxuICAgICAgICAgICAgd2lkdGg6ICcxNHB4JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBnZXRDb250ZXh0TWVudGlvbkljb24obWVudGlvbi50eXBlLCBpY29uQ29sb3IsIG1lbnRpb24uaWQsIGljb25TaXplKVxuICAgICAgKSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7IHN0eWxlOiBsZWFkaW5nV29yZFN0eWxlIH0sIGZpcnN0V29yZClcbiAgICApLFxuICAgIHJlc3QgPyBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogcmVzdFN0eWxlIH0sIHJlc3QpIDogbnVsbFxuICApXG59XG5cbmNvbnN0IGluaXRpYWxzRnJvbU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IG5hbWUudHJpbSgpXG4gIGlmICghdHJpbW1lZCkgcmV0dXJuICc/J1xuICBjb25zdCBwYXJ0cyA9IHRyaW1tZWQuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbilcbiAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgY29uc3QgZmlyc3QgPSBwYXJ0c1swXT8uY2hhckF0KDApID8/ICcnXG4gICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdPy5jaGFyQXQoMCkgPz8gJydcbiAgICByZXR1cm4gYCR7Zmlyc3R9JHtsYXN0fWAudG9VcHBlckNhc2UoKVxuICB9XG4gIGNvbnN0IHNpbmdsZSA9IHBhcnRzWzBdID8/ICcnXG4gIHJldHVybiBzaW5nbGUubGVuZ3RoID49IDIgPyBzaW5nbGUuc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKSA6IChzaW5nbGUuY2hhckF0KDApIHx8ICc/JykudG9VcHBlckNhc2UoKVxufVxuXG5jb25zdCBUT09MVElQX0ZPTlQgPSBgdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKWBcbmNvbnN0IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SID0gJ3ZhcigtLVRleHQtU2Vjb25kYXJ5LURhcmssICM2NjYpJ1xuY29uc3QgVE9PTFRJUF9TRUNPTkRBUllfU1RZTEUgPSB7XG4gIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgZm9udFNpemU6ICcxNHB4JyxcbiAgZm9udFdlaWdodDogJzQwMCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgY29sb3I6IFRPT0xUSVBfU0VDT05EQVJZX0NPTE9SLFxufVxuXG5jb25zdCBub3JtYWxpemVUcmltbWVkU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJ1xuICByZXR1cm4gdmFsdWUudHJpbSgpXG59XG5cbi8qKiBBbmNobyBtw61uaW1vIGRlbCB0b29sdGlwIChpbmNsLiBwYWRkaW5nIGhvcml6b250YWwgOCs4KS4gKi9cbmNvbnN0IFVTRVJfVE9PTFRJUF9NSU5fV0lEVEhfUFggPSAyOTJcbi8qKiBQYWRkaW5nIGhvcml6b250YWwgdG90YWwgZGVsIHRvb2x0aXAuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfUEFEX1hfUFggPSAxNlxuLyoqIEF2YXRhciAyNHB4ICsgZ2FwIDhweCByZXNwZWN0byBhIGxhIGNvbHVtbmEgZGUgdGV4dG8uICovXG5jb25zdCBVU0VSX1RPT0xUSVBfQVZBVEFSX0dBUF9QWCA9IDMyXG4vKipcbiAqIEFuY2hvIG3DoXhpbW8gZGUgbGEgZmlsYSBub21icmUgfCBwb3NpY2nDs246IG1pc21vIGh1ZWNvIHF1ZSBjb24gdG9vbHRpcCBmaWpvIDI5MnB4LFxuICogcGFyYSBxdWUgc29sbyBlbCBlbWFpbCBlbnNhbmNoZSBlbCBjb250ZW5lZG9yLlxuICovXG5jb25zdCBVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYID0gVVNFUl9UT09MVElQX01JTl9XSURUSF9QWCAtIFVTRVJfVE9PTFRJUF9QQURfWF9QWCAtIFVTRVJfVE9PTFRJUF9BVkFUQVJfR0FQX1BYXG4vKipcbiAqIFRvcGUgZGUgYW5jaG8gZGVsIG5vbWJyZSBlbiBsYSBmaWxhOiBwb3IgZGViYWpvIGRlbCBtw6F4aW1vIGRlIGZpbGEgcGFyYSBxdWUgZWwgZWxsaXBzaXNcbiAqIGRlbCBub21icmUgYXBhcmV6Y2EgYW50ZXMgeSBxdWVkZSBtw6FzIGVzcGFjaW8gdmlzaWJsZSBwYXJhIHBvc2ljacOzbi9jYXJnby5cbiAqL1xuY29uc3QgVVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYID0gTWF0aC5mbG9vcihVU0VSX1RPT0xUSVBfTkFNRV9ST1dfTUFYX1BYICogMC40MilcblxuY29uc3QgY3JlYXRlVXNlclRvb2x0aXBFbCA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IEhUTUxFbGVtZW50ID0+IHtcbiAgY29uc3QgeyBsYWJlbCwgbWV0YWRhdGEgfSA9IG1lbnRpb25cbiAgY29uc3QgcGljdHVyZSA9IHR5cGVvZiBtZXRhZGF0YT8ucGljdHVyZSA9PT0gJ3N0cmluZycgPyBtZXRhZGF0YS5waWN0dXJlIDogbnVsbFxuICBjb25zdCBwb3NpdGlvbk5hbWUgPSBub3JtYWxpemVUcmltbWVkU3RyaW5nKG1ldGFkYXRhPy5wb3NpdGlvbk5hbWUpXG4gIGNvbnN0IHBvc2l0aW9uTGluZSA9XG4gICAgcG9zaXRpb25OYW1lIHx8XG4gICAgaTE4bi50KCdjb250ZXh0TWVudGlvbi51c2VyTm9Qb3NpdGlvbicsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogJ1NpbiBwb3NpY2nDs24nLFxuICAgIH0pXG4gIGNvbnN0IGVtYWlsID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8uZW1haWwpXG4gIC8qKiBNaXNtYSBmdWVudGUgcXVlIGBDb250ZXh0TWVudGlvbkl0ZW1gIChhdmF0YXIpOiBub21icmUgZGUgcXVlcnksIG5vIGVsIGxhYmVsIGRlbCBjaGlwIChlai4gXCJZb1wiKS4gKi9cbiAgY29uc3QgbWV0YWRhdGFOYW1lID0gbm9ybWFsaXplVHJpbW1lZFN0cmluZyhtZXRhZGF0YT8ubmFtZSlcbiAgY29uc3QgbmFtZUZvckluaXRpYWxzID0gKG1ldGFkYXRhTmFtZSB8fCBub3JtYWxpemVUcmltbWVkU3RyaW5nKGxhYmVsKSB8fCAnPycpLnRyaW0oKVxuXG4gIGNvbnN0IHRvb2x0aXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKHRvb2x0aXAuc3R5bGUsIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB6SW5kZXg6ICc5OTk5JyxcbiAgICBtaW5XaWR0aDogYCR7VVNFUl9UT09MVElQX01JTl9XSURUSF9QWH1weGAsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICdtaW4oNTYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSknLFxuICAgIHBhZGRpbmc6ICcxMnB4IDhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCB2YXIoLS1Db2xvci1MaWdodC1HcmF5LCAjRTBFMEUwKScsXG4gICAgYmFja2dyb3VuZDogJyNGRkYnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wOCksIDAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4wNCknLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH0pXG5cbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihyb3cuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICB3aWR0aDogJ21heC1jb250ZW50JyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gIH0pXG5cbiAgLy8gQXZhdGFyIGNpcmN1bGFyIChmb3RvIG8gaW5pY2lhbGVzKVxuICBjb25zdCBhdmF0YXJXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihhdmF0YXJXcmFwLnN0eWxlLCB7XG4gICAgd2lkdGg6ICcyNHB4JyxcbiAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICBtaW5XaWR0aDogJzI0cHgnLFxuICAgIGJvcmRlclJhZGl1czogJzI0cHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIC8qKiBNaXNtbyBmb25kbyBxdWUgYFNDTVVzZXJBdmF0YXJGYWxsYmFja2AgZW4gbGEgZmlsYSBkZSB1c3VhcmlvIGRlbCBtb2RhbC4gKi9cbiAgICBiYWNrZ3JvdW5kOiAndmFyKC0tY29yLWNvbG9yLWdyZXktMjAwLCAjZTBlMGUwKScsXG4gICAgZmxleFNocmluazogJzAnLFxuICB9KVxuXG4gIGNvbnN0IGluaXRpYWxzID0gaW5pdGlhbHNGcm9tTmFtZShuYW1lRm9ySW5pdGlhbHMpXG5cbiAgY29uc3QgY3JlYXRlSW5pdGlhbHNGYWxsYmFjayA9ICgpOiBIVE1MRWxlbWVudCA9PiB7XG4gICAgY29uc3QgZmIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBmYi50ZXh0Q29udGVudCA9IGluaXRpYWxzXG4gICAgT2JqZWN0LmFzc2lnbihmYi5zdHlsZSwge1xuICAgICAgZm9udFNpemU6ICcxMHB4JyxcbiAgICAgIGZvbnRXZWlnaHQ6ICc2MDAnLFxuICAgICAgLyoqIE1pc21vIGNvbG9yIHF1ZSBgU0NNVXNlckF2YXRhckZhbGxiYWNrYCBlbiBsYSBmaWxhIGRlIHVzdWFyaW8gZGVsIG1vZGFsLiAqL1xuICAgICAgY29sb3I6ICd2YXIoLS1jb3ItY29sb3ItdGV4dC1zZWNvbmRhcnksICM2NjYpJyxcbiAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgIGZvbnRGYW1pbHk6IFRPT0xUSVBfRk9OVCxcbiAgICB9KVxuICAgIHJldHVybiBmYlxuICB9XG5cbiAgaWYgKHBpY3R1cmUpIHtcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKVxuICAgIGltZy5zcmMgPSBwaWN0dXJlXG4gICAgaW1nLmFsdCA9ICcnXG4gICAgaW1nLmRyYWdnYWJsZSA9IGZhbHNlXG4gICAgT2JqZWN0LmFzc2lnbihpbWcuc3R5bGUsIHtcbiAgICAgIHdpZHRoOiAnMjRweCcsXG4gICAgICBoZWlnaHQ6ICcyNHB4JyxcbiAgICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICB9KVxuICAgIGltZy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaW1nLnJlbW92ZSgpXG4gICAgICBhdmF0YXJXcmFwLmFwcGVuZENoaWxkKGNyZWF0ZUluaXRpYWxzRmFsbGJhY2soKSlcbiAgICB9XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChpbWcpXG4gIH0gZWxzZSB7XG4gICAgYXZhdGFyV3JhcC5hcHBlbmRDaGlsZChjcmVhdGVJbml0aWFsc0ZhbGxiYWNrKCkpXG4gIH1cblxuICAvLyBDb2x1bW5hIGRlIGluZm86IGFuY2hvID0gbWF4KGZpbGEgbm9tYnJlLCBlbWFpbCk7IHNpbiBmb3J6YXIgMjQ0cHggc2kgZWwgY29udGVuaWRvIGVzIG3DoXMgY29ydG8uXG4gIGNvbnN0IGluZm9Db2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBPYmplY3QuYXNzaWduKGluZm9Db2wuc3R5bGUsIHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICcycHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSlcblxuICAvLyBGaWxhOiBub21icmUgfCBwb3NpY2nDs24g4oCUIG1heC1jb250ZW50IHBhcmEgbm8gZGVqYXIgaHVlY28gZW50cmUgbm9tYnJlIGNvcnRvIHkgZWwgcGlwZSAoZXZpdGFyIGZsZXggNTAvNTApLlxuICBjb25zdCBuYW1lUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgT2JqZWN0LmFzc2lnbihuYW1lUm93LnN0eWxlLCB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICBnYXA6ICc0cHgnLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgd2lkdGg6ICdtYXgtY29udGVudCcsXG4gICAgbWF4V2lkdGg6IGAke1VTRVJfVE9PTFRJUF9OQU1FX1JPV19NQVhfUFh9cHhgLFxuICB9KVxuXG4gIGNvbnN0IG5hbWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIG5hbWVTcGFuLnRleHRDb250ZW50ID0gbGFiZWxcbiAgT2JqZWN0LmFzc2lnbihuYW1lU3Bhbi5zdHlsZSwge1xuICAgIGZsZXg6ICcwIDEgYXV0bycsXG4gICAgbWluV2lkdGg6ICcwJyxcbiAgICBtYXhXaWR0aDogYCR7VVNFUl9UT09MVElQX05BTUVfTUFYX1dJRFRIX1BYfXB4YCxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGNvbG9yOiAndmFyKC0tVGV4dC1QcmltYXJ5LURhcmssICMyMDIwMUYpJyxcbiAgICBmb250RmFtaWx5OiBUT09MVElQX0ZPTlQsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICBsaW5lSGVpZ2h0OiAnMTMwJScsXG4gIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQobmFtZVNwYW4pXG5cbiAgY29uc3Qgc2VwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIHNlcC50ZXh0Q29udGVudCA9ICd8J1xuICBPYmplY3QuYXNzaWduKHNlcC5zdHlsZSwgeyAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSwgZmxleFNocmluazogJzAnIH0pXG4gIG5hbWVSb3cuYXBwZW5kQ2hpbGQoc2VwKVxuXG4gIGNvbnN0IHBvc1NwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgcG9zU3Bhbi50ZXh0Q29udGVudCA9IHBvc2l0aW9uTGluZVxuICBPYmplY3QuYXNzaWduKHBvc1NwYW4uc3R5bGUsIHtcbiAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICBmbGV4OiAnMCAxIGF1dG8nLFxuICAgIG1pbldpZHRoOiAnMCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfSlcbiAgbmFtZVJvdy5hcHBlbmRDaGlsZChwb3NTcGFuKVxuXG4gIGluZm9Db2wuYXBwZW5kQ2hpbGQobmFtZVJvdylcblxuICBpZiAoZW1haWwpIHtcbiAgICBjb25zdCBlbWFpbFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgICBlbWFpbFNwYW4udGV4dENvbnRlbnQgPSBlbWFpbFxuICAgIE9iamVjdC5hc3NpZ24oZW1haWxTcGFuLnN0eWxlLCB7XG4gICAgICAuLi5UT09MVElQX1NFQ09OREFSWV9TVFlMRSxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB9KVxuICAgIGluZm9Db2wuYXBwZW5kQ2hpbGQoZW1haWxTcGFuKVxuICB9XG5cbiAgcm93LmFwcGVuZENoaWxkKGF2YXRhcldyYXApXG4gIHJvdy5hcHBlbmRDaGlsZChpbmZvQ29sKVxuICB0b29sdGlwLmFwcGVuZENoaWxkKHJvdylcblxuICByZXR1cm4gdG9vbHRpcFxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgY29uc3QgY2hpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJylcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1jaGlwJywgJ3RydWUnKVxuICBjaGlwLmNsYXNzTmFtZSA9IENPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tdHlwZScsIG1lbnRpb24udHlwZSlcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1zdXJmYWNlJywgJ2VkaXRvcicpXG5cbiAgLy8gTGFzIHNraWxscyBzZSB2ZW4gY29tbyBsb3Mgc2xhc2ggY29tbWFuZHMgKHRleHRvIHBsYW5vIGAjbm9tYnJlYCksIG5vIGNvbW8gY2hpcCBjb24gZm9uZG8uXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICdza2lsbCcpIHtcbiAgICBPYmplY3QuYXNzaWduKGNoaXAuc3R5bGUsIFNMQVNIX0NPTU1BTkRfQ0hJUF9CQVNFX1NUWUxFLCB7IGJveFNpemluZzogJ2JvcmRlci1ib3gnLCBtYXhXaWR0aDogJzEwMCUnIH0pXG4gICAgY2hpcC50ZXh0Q29udGVudCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgICByZXR1cm4gY2hpcFxuICB9XG5cbiAgYXBwbHlNZW50aW9uQ2hpcFN0eWxlcyhjaGlwLCBtZW50aW9uLnR5cGUpXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgfSBhcyBjb25zdFxuICBpZiAoaXNUYXNrKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCBjb21tb24sIHtcbiAgICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgbWluSGVpZ2h0OiAnYXV0bycsXG4gICAgICBtYXhIZWlnaHQ6ICdub25lJyxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIE9iamVjdC5hc3NpZ24oY2hpcC5zdHlsZSwgY29tbW9uLCB7XG4gICAgICBsaW5lSGVpZ2h0OiAnMjBweCcsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgICAgbWF4SGVpZ2h0OiAnbm9uZScsXG4gICAgfSlcbiAgfVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gY3JlYXRlVXNlclRvb2x0aXBFbChtZW50aW9uKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLDZCQUE2QixRQUFRLDZDQUE2QztBQUMzRixTQUFTQyxzQkFBc0IsRUFBRUMsbUJBQW1CLFFBQVEsNkJBQTZCO0FBRXpGLElBQU1DLDZCQUE0QyxHQUFHO0VBQ25EQyxPQUFPLEVBQUUsUUFBUTtFQUNqQkMsVUFBVSxFQUFFLE1BQU07RUFDbEJDLFNBQVMsRUFBRSxVQUFVO0VBQ3JCQyxRQUFRLEVBQUUsQ0FBQztF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
205
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVFbGVtZW50IiwiZmx1c2hTeW5jIiwiY3JlYXRlUm9vdCIsImkxOG4iLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJhcHBseU1lbnRpb25DaGlwU3R5bGVzIiwiTUVOVElPTl9DSElQX0NPTE9SUyIsImJ1aWxkU2tpbGxNZW50aW9uQ2hpcEVsZW1lbnQiLCJidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQiLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwiRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUiLCJkaXNwbGF5IiwibGluZUhlaWdodCIsImFsaWduU2VsZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3dXcmFwIiwid29yZEJyZWFrIiwiRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwiY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbCIsImlzVGFzayIsIm1lbnRpb25MYWJlbCIsInN0eWxlIiwiRWRpdGFibGVNZW50aW9uQ2hpcCIsIl9yZWYiLCJtZW50aW9uIiwibGFiZWwiLCJpY29uQ29sb3IiLCJ0eXBlIiwiZmciLCJpc1Byb2plY3QiLCJpY29uU2l6ZSIsImxhYmVsRWwiLCJvdXRlclN0eWxlIiwicG9zaXRpb24iLCJib3hTaXppbmciLCJ2ZXJ0aWNhbEFsaWduIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQiLCJmaXJzdFdvcmQiLCJyZXN0IiwibGVhZGluZ1N0eWxlIiwiYWxpZ25JdGVtcyIsImxlYWRpbmdXb3JkU3R5bGUiLCJfb2JqZWN0U3ByZWFkIiwicmVzdFN0eWxlIiwibWFyZ2luUmlnaHQiLCJ3aWR0aCIsImlkIiwiYnVpbGRDaGlwRWxlbWVudCIsImNoaXAiLCJkb2N1bWVudCIsInNldEF0dHJpYnV0ZSIsImNsYXNzTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsIm92ZXJmbG93IiwiaGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibW91bnROb2RlIiwiYXBwZW5kQ2hpbGQiLCJyb290IiwicmVuZGVyIiwiY3Vyc29yIiwib25jbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIndpbmRvdyIsIm9wZW4iLCJjb25jYXQiLCJ0b29sdGlwRWwiLCJjaGlwUmVtb3ZlZE9ic2VydmVyIiwicmVtb3ZlVXNlclRvb2x0aXAiLCJfY2hpcFJlbW92ZWRPYnNlcnZlciIsImRpc2Nvbm5lY3QiLCJyZW1vdmUiLCJ3YXRjaENoaXBSZW1vdmVkRnJvbURvbSIsIl9jaGlwUmVtb3ZlZE9ic2VydmVyMiIsInBhcmVudCIsInBhcmVudE5vZGUiLCJNdXRhdGlvbk9ic2VydmVyIiwiaXNDb25uZWN0ZWQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJrZXkiLCJvcHRzIiwidCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsZWZ0IiwiTWF0aCIsIm1heCIsIm1pbiIsImlubmVyV2lkdGgiLCJ0b3AiLCJ0cmFuc2Zvcm0iLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25DaGlwL2J1aWxkQ2hpcEVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgdHlwZSBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCdcbmltcG9ydCBpMThuIGZyb20gJy4uLy4uLy4uL2xhbmcnXG5pbXBvcnQgeyBDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUywgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY29udGV4dE1lbnRpb25MYWJlbCdcbmltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL29wZW5UYXNrSW5Db3JQYW5lbCdcbmltcG9ydCB7IGFwcGx5TWVudGlvbkNoaXBTdHlsZXMsIE1FTlRJT05fQ0hJUF9DT0xPUlMgfSBmcm9tICcuL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQge1xuICBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50LFxuICBidWlsZFVzZXJNZW50aW9uVG9vbHRpcEVsZW1lbnQsXG4gIHNwbGl0TGFiZWxGaXJzdFdvcmQsXG59IGZyb20gJy4vYnVpbGRDaGlwRWxlbWVudC5oZWxwZXJzJ1xuXG5jb25zdCBFRElUQUJMRV9OT05fVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgYWxpZ25TZWxmOiAnYmFzZWxpbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXG4gIG92ZXJmbG93V3JhcDogJ2JyZWFrLXdvcmQnLFxuICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbn1cblxuLyoqIFRleHRvIGRlIHRhcmVhOiBzaW4gYm9yZGUgaW5mZXJpb3I7IGVsIGFzcGVjdG8gZGUgZW5sYWNlIGxvIGRhIGVsIENTUyBnbG9iYWwgKDo6YmVmb3JlICsgY29sb3IpLiAqL1xuY29uc3QgRURJVEFCTEVfVEFTS19MQUJFTF9TVFlMRTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogJ2lubGluZScsXG4gIGZvbnRTaXplOiAnMTRweCcsXG4gIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgZm9udFdlaWdodDogJzYwMCcsXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gIG1pbldpZHRoOiAwLFxuICBtYXhXaWR0aDogJzEwMCUnLFxuICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYnJlYWstd29yZCcsXG4gIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxufVxuXG5jb25zdCBjcmVhdGVFZGl0YWJsZU1lbnRpb25MYWJlbEVsID0gKGlzVGFzazogYm9vbGVhbiwgbWVudGlvbkxhYmVsOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFpc1Rhc2spIHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFIH0sIG1lbnRpb25MYWJlbClcbiAgfVxuICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IEVESVRBQkxFX1RBU0tfTEFCRUxfU1RZTEUgfSwgbWVudGlvbkxhYmVsKVxufVxuXG50eXBlIEVkaXRhYmxlTWVudGlvbkNoaXBQcm9wcyA9IHtcbiAgbWVudGlvbjogQ29udGV4dE1lbnRpb25cbn1cblxuY29uc3QgRWRpdGFibGVNZW50aW9uQ2hpcCA9ICh7IG1lbnRpb24gfTogRWRpdGFibGVNZW50aW9uQ2hpcFByb3BzKSA9PiB7XG4gIGNvbnN0IG1lbnRpb25MYWJlbCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobWVudGlvbi5sYWJlbClcbiAgY29uc3QgaWNvbkNvbG9yID0gTUVOVElPTl9DSElQX0NPTE9SU1ttZW50aW9uLnR5cGVdLmZnXG4gIGNvbnN0IGlzVGFzayA9IG1lbnRpb24udHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IG1lbnRpb24udHlwZSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IGljb25TaXplID0gaXNUYXNrID8gMTYgOiAxNFxuICBjb25zdCBsYWJlbEVsID0gY3JlYXRlRWRpdGFibGVNZW50aW9uTGFiZWxFbChpc1Rhc2ssIG1lbnRpb25MYWJlbClcblxuICBjb25zdCBvdXRlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIGxpbmVIZWlnaHQ6ICcyMHB4JyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnYmFzZWxpbmUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gIH1cblxuICBpZiAoaXNUYXNrIHx8IGlzUHJvamVjdCkge1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogb3V0ZXJTdHlsZSB9LCBsYWJlbEVsKVxuICB9XG5cbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobWVudGlvbkxhYmVsKVxuICBjb25zdCBsZWFkaW5nU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICB9XG4gIGNvbnN0IGxlYWRpbmdXb3JkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uRURJVEFCTEVfTk9OX1RBU0tfTEFCRUxfU1RZTEUsXG4gICAgZGlzcGxheTogJ2lubGluZScsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIH1cbiAgY29uc3QgcmVzdFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLkVESVRBQkxFX05PTl9UQVNLX0xBQkVMX1NUWUxFLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgJ3NwYW4nLFxuICAgIHsgc3R5bGU6IG91dGVyU3R5bGUgfSxcbiAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgJ3NwYW4nLFxuICAgICAgeyBzdHlsZTogbGVhZGluZ1N0eWxlIH0sXG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMnB4JyxcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTRweCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKG1lbnRpb24udHlwZSwgaWNvbkNvbG9yLCBtZW50aW9uLmlkLCBpY29uU2l6ZSlcbiAgICAgICksXG4gICAgICBjcmVhdGVFbGVtZW50KCdzcGFuJywgeyBzdHlsZTogbGVhZGluZ1dvcmRTdHlsZSB9LCBmaXJzdFdvcmQpXG4gICAgKSxcbiAgICByZXN0ID8gY3JlYXRlRWxlbWVudCgnc3BhbicsIHsgc3R5bGU6IHJlc3RTdHlsZSB9LCByZXN0KSA6IG51bGxcbiAgKVxufVxuXG4vKipcbiAqIENyZWEgdW4gYDxzcGFuPmAgYXTDs21pY28gbGlzdG8gcGFyYSBpbnNlcnRhcnNlIGRlbnRybyBkZWwgY29udGVudGVkaXRhYmxlXG4gKiBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yYC4gU2UgbWFyY2EgY29uIGxvcyBgZGF0YS1tZW50aW9uKmAgbmVjZXNhcmlvcyBwYXJhXG4gKiBxdWUgYHVzZUNvbnRleHRNZW50aW9ucy5zZXJpYWxpemUoKWAgcHVlZGEgdm9sdmVyIGEgZXh0cmFlciBsYSBtZW50aW9uLlxuICpcbiAqIENvbXBhcnRlIGxvcyBlc3RpbG9zIGNvbiBlbCBjb21wb25lbnRlIGBDb250ZXh0TWVudGlvbkNoaXBgIHZpYVxuICogYGFwcGx5TWVudGlvbkNoaXBTdHlsZXNgLCBhc2VndXJhbmRvIHVuYSDDum5pY2EgZnVlbnRlIGRlIHZlcmRhZCB2aXN1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENoaXBFbGVtZW50ID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogSFRNTFNwYW5FbGVtZW50ID0+IHtcbiAgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiBidWlsZFNraWxsTWVudGlvbkNoaXBFbGVtZW50KG1lbnRpb24pXG4gIH1cblxuICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gIGNoaXAuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLWNoaXAnLCAndHJ1ZScpXG4gIGNoaXAuY2xhc3NOYW1lID0gQ09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1NcbiAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICBjaGlwLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLXN1cmZhY2UnLCAnZWRpdG9yJylcblxuICBhcHBseU1lbnRpb25DaGlwU3R5bGVzKGNoaXAsIG1lbnRpb24udHlwZSlcbiAgT2JqZWN0LmFzc2lnbihjaGlwLnN0eWxlLCB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgdmVydGljYWxBbGlnbjogJ2Jhc2VsaW5lJyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgbGluZUhlaWdodDogJzIwcHgnLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIG1pbkhlaWdodDogJ2F1dG8nLFxuICAgIG1heEhlaWdodDogJ25vbmUnLFxuICB9KVxuICBjb25zdCBtb3VudE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJylcbiAgbW91bnROb2RlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJ1xuICBtb3VudE5vZGUuc3R5bGUubWF4V2lkdGggPSAnMTAwJSdcbiAgbW91bnROb2RlLnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnYmFzZWxpbmUnXG4gIG1vdW50Tm9kZS5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgY2hpcC5hcHBlbmRDaGlsZChtb3VudE5vZGUpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KG1vdW50Tm9kZSlcblxuICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgIHJvb3QucmVuZGVyKGNyZWF0ZUVsZW1lbnQoRWRpdGFibGVNZW50aW9uQ2hpcCwgeyBtZW50aW9uIH0pKVxuICB9KVxuXG4gIGlmIChtZW50aW9uLnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNoaXAuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInXG4gICAgY2hpcC5vbmNsaWNrID0gZSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIG9wZW5UYXNrSW5Db3JQYW5lbChtZW50aW9uLmlkLCAnZGV0YWlsJylcbiAgICB9XG4gIH0gZWxzZSBpZiAobWVudGlvbi50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBjaGlwLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJ1xuICAgIGNoaXAub25jbGljayA9IGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB3aW5kb3cub3BlbihgL3Byb2plY3RzLyR7bWVudGlvbi5pZH0vZGFzaGJvYXJkYCwgJ19ibGFuaycpXG4gICAgfVxuICB9IGVsc2UgaWYgKG1lbnRpb24udHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgbGV0IHRvb2x0aXBFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICAgIGxldCBjaGlwUmVtb3ZlZE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHJlbW92ZVVzZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbnVsbFxuICAgICAgaWYgKHRvb2x0aXBFbCkge1xuICAgICAgICB0b29sdGlwRWwucmVtb3ZlKClcbiAgICAgICAgdG9vbHRpcEVsID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTaSBlbCBjaGlwIHNlIGJvcnJhIGRlbCBlZGl0b3IgKEJhY2tzcGFjZSwgZXRjLikgbm8gc2llbXByZSBoYXkgYG1vdXNlbGVhdmVgOyBjZXJyYXIgZWwgdG9vbHRpcC4gKi9cbiAgICBjb25zdCB3YXRjaENoaXBSZW1vdmVkRnJvbURvbSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaXAucGFyZW50Tm9kZVxuICAgICAgaWYgKCFwYXJlbnQpIHJldHVyblxuICAgICAgY2hpcFJlbW92ZWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICBpZiAoIWNoaXAuaXNDb25uZWN0ZWQpIHJlbW92ZVVzZXJUb29sdGlwKClcbiAgICAgIH0pXG4gICAgICBjaGlwUmVtb3ZlZE9ic2VydmVyLm9ic2VydmUocGFyZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGNoaXAuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGlmICh0b29sdGlwRWwpIHJldHVyblxuICAgICAgdG9vbHRpcEVsID0gYnVpbGRVc2VyTWVudGlvblRvb2x0aXBFbGVtZW50KG1lbnRpb24sIChrZXksIG9wdHMpID0+IGkxOG4udChrZXksIG9wdHMpKVxuICAgICAgY29uc3QgcmVjdCA9IGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCAtIDMwMCwgcmVjdC5sZWZ0KSlcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHRvb2x0aXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWShjYWxjKC0xMDAlIC0gNHB4KSknXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBFbClcbiAgICAgIHdhdGNoQ2hpcFJlbW92ZWRGcm9tRG9tKClcbiAgICB9KVxuXG4gICAgY2hpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgcmVtb3ZlVXNlclRvb2x0aXApXG4gIH1cblxuICByZXR1cm4gY2hpcFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxhQUFhLFFBQTRCLE9BQU87QUFDekQsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFDckMsU0FBU0MsVUFBVSxRQUFRLGtCQUFrQjtBQUM3QyxPQUFPQyxJQUFJLE1BQU0sZUFBZTtBQUNoQyxTQUFTQywwQkFBMEIsUUFBd0IsK0JBQStCO0FBQzFGLFNBQVNDLHFCQUFxQixRQUFRLG9DQUFvQztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxvQ0FBb0M7QUFDakYsU0FBU0Msa0JBQWtCLFFBQVEsbUNBQW1DO0FBQ3RFLFNBQVNDLHNCQUFzQixFQUFFQyxtQkFBbUIsUUFBUSw2QkFBNkI7QUFDekYsU0FDRUMsNEJBQTRCLEVBQzVCQyw4QkFBOEIsRUFDOUJDLG1CQUFtQixRQUNkLDRCQUE0QjtBQUVuQyxJQUFNQyw2QkFBNEMsR0FB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
@@ -0,0 +1,59 @@
1
+ /** Espacio previo al insertar @, / o # cuando el caret no está en un límite válido. */
2
+ export var resolvePreviousCharBeforeCaret = function resolvePreviousCharBeforeCaret(startContainer, startOffset) {
3
+ if (startContainer.nodeType === Node.TEXT_NODE && startOffset > 0) {
4
+ return startContainer.data.charAt(startOffset - 1);
5
+ }
6
+ return '';
7
+ };
8
+ export var shouldMergeAtSignWithPreviousSibling = function shouldMergeAtSignWithPreviousSibling(prefix, previousSibling) {
9
+ return prefix === '' && (previousSibling === null || previousSibling === void 0 ? void 0 : previousSibling.nodeType) === Node.TEXT_NODE && previousSibling.data.endsWith('@');
10
+ };
11
+ export var resolveTriggerInsertPrefix = function resolveTriggerInsertPrefix(previousChar) {
12
+ if (previousChar && !/[\s([{@]/.test(previousChar)) {
13
+ return ' ';
14
+ }
15
+ return '';
16
+ };
17
+ export var shouldEvaluatePlaceholderTruncation = function shouldEvaluatePlaceholderTruncation(placeholder, serializedText) {
18
+ var _placeholder$trim;
19
+ var trimmed = (_placeholder$trim = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim !== void 0 ? _placeholder$trim : '';
20
+ if (!trimmed) return false;
21
+ return serializedText.trim() === '';
22
+ };
23
+ export var isEditorVisuallyMultiline = function isEditorVisuallyMultiline(editorHeight, lineHeight) {
24
+ if (!editorHeight || !lineHeight) return false;
25
+ return editorHeight > lineHeight * 1.5;
26
+ };
27
+ export var shouldNormalizeEmptyEditorDom = function shouldNormalizeEmptyEditorDom(textContent) {
28
+ var _textContent$trim;
29
+ return ((_textContent$trim = textContent === null || textContent === void 0 ? void 0 : textContent.trim()) !== null && _textContent$trim !== void 0 ? _textContent$trim : '') === '';
30
+ };
31
+ export var shouldShowPlaceholderTooltip = function shouldShowPlaceholderTooltip(logicalEmpty, placeholderTruncated, placeholder) {
32
+ var _placeholder$trim2;
33
+ var trimmed = (_placeholder$trim2 = placeholder === null || placeholder === void 0 ? void 0 : placeholder.trim()) !== null && _placeholder$trim2 !== void 0 ? _placeholder$trim2 : '';
34
+ return logicalEmpty && placeholderTruncated && trimmed.length > 0;
35
+ };
36
+ export var isPlaceholderTruncatedInEditor = function isPlaceholderTruncatedInEditor(editor, placeholder) {
37
+ var trimmed = placeholder.trim();
38
+ if (!trimmed) {
39
+ return false;
40
+ }
41
+ var clientWidth = editor.clientWidth;
42
+ if (clientWidth <= 4) {
43
+ return false;
44
+ }
45
+ var styles = window.getComputedStyle(editor);
46
+ var ctx = document.createElement('canvas').getContext('2d');
47
+ if (!ctx) {
48
+ return false;
49
+ }
50
+ ctx.font = "".concat(styles.fontWeight, " ").concat(styles.fontSize, " ").concat(styles.fontFamily);
51
+ var measured = ctx.measureText(trimmed).width;
52
+ var paddingLeft = parseFloat(styles.paddingLeft) || 0;
53
+ var paddingRight = parseFloat(styles.paddingRight) || 0;
54
+ var borderLeft = parseFloat(styles.borderLeftWidth) || 0;
55
+ var borderRight = parseFloat(styles.borderRightWidth) || 0;
56
+ var available = Math.max(0, clientWidth - paddingLeft - paddingRight - borderLeft - borderRight);
57
+ return measured > available + 1;
58
+ };
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvbHZlUHJldmlvdXNDaGFyQmVmb3JlQ2FyZXQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0Iiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwiZGF0YSIsImNoYXJBdCIsInNob3VsZE1lcmdlQXRTaWduV2l0aFByZXZpb3VzU2libGluZyIsInByZWZpeCIsInByZXZpb3VzU2libGluZyIsImVuZHNXaXRoIiwicmVzb2x2ZVRyaWdnZXJJbnNlcnRQcmVmaXgiLCJwcmV2aW91c0NoYXIiLCJ0ZXN0Iiwic2hvdWxkRXZhbHVhdGVQbGFjZWhvbGRlclRydW5jYXRpb24iLCJwbGFjZWhvbGRlciIsInNlcmlhbGl6ZWRUZXh0IiwiX3BsYWNlaG9sZGVyJHRyaW0iLCJ0cmltbWVkIiwidHJpbSIsImlzRWRpdG9yVmlzdWFsbHlNdWx0aWxpbmUiLCJlZGl0b3JIZWlnaHQiLCJsaW5lSGVpZ2h0Iiwic2hvdWxkTm9ybWFsaXplRW1wdHlFZGl0b3JEb20iLCJ0ZXh0Q29udGVudCIsIl90ZXh0Q29udGVudCR0cmltIiwic2hvdWxkU2hvd1BsYWNlaG9sZGVyVG9vbHRpcCIsImxvZ2ljYWxFbXB0eSIsInBsYWNlaG9sZGVyVHJ1bmNhdGVkIiwiX3BsYWNlaG9sZGVyJHRyaW0yIiwibGVuZ3RoIiwiaXNQbGFjZWhvbGRlclRydW5jYXRlZEluRWRpdG9yIiwiZWRpdG9yIiwiY2xpZW50V2lkdGgiLCJzdHlsZXMiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwiY3R4IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiZ2V0Q29udGV4dCIsImZvbnQiLCJjb25jYXQiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJmb250RmFtaWx5IiwibWVhc3VyZWQiLCJtZWFzdXJlVGV4dCIsIndpZHRoIiwicGFkZGluZ0xlZnQiLCJwYXJzZUZsb2F0IiwicGFkZGluZ1JpZ2h0IiwiYm9yZGVyTGVmdCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRXaWR0aCIsImF2YWlsYWJsZSIsIk1hdGgiLCJtYXgiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9Db250ZXh0TWVudGlvbkVkaXRvci9Db250ZXh0TWVudGlvbkVkaXRvci5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBFc3BhY2lvIHByZXZpbyBhbCBpbnNlcnRhciBALCAvIG8gIyBjdWFuZG8gZWwgY2FyZXQgbm8gZXN0w6EgZW4gdW4gbMOtbWl0ZSB2w6FsaWRvLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVQcmV2aW91c0NoYXJCZWZvcmVDYXJldCA9IChzdGFydENvbnRhaW5lcjogTm9kZSwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgJiYgc3RhcnRPZmZzZXQgPiAwKSB7XG4gICAgcmV0dXJuIChzdGFydENvbnRhaW5lciBhcyBUZXh0KS5kYXRhLmNoYXJBdChzdGFydE9mZnNldCAtIDEpXG4gIH1cbiAgcmV0dXJuICcnXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRNZXJnZUF0U2lnbldpdGhQcmV2aW91c1NpYmxpbmcgPSAoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwcmV2aW91c1NpYmxpbmc6IE5vZGUgfCBudWxsXG4pOiBwcmV2aW91c1NpYmxpbmcgaXMgVGV4dCA9PlxuICBwcmVmaXggPT09ICcnICYmIHByZXZpb3VzU2libGluZz8ubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIChwcmV2aW91c1NpYmxpbmcgYXMgVGV4dCkuZGF0YS5lbmRzV2l0aCgnQCcpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlVHJpZ2dlckluc2VydFByZWZpeCA9IChwcmV2aW91c0NoYXI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmIChwcmV2aW91c0NoYXIgJiYgIS9bXFxzKFt7QF0vLnRlc3QocHJldmlvdXNDaGFyKSkge1xuICAgIHJldHVybiAnICdcbiAgfVxuICByZXR1cm4gJydcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEV2YWx1YXRlUGxhY2Vob2xkZXJUcnVuY2F0aW9uID0gKFxuICBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZXJpYWxpemVkVGV4dDogc3RyaW5nXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IHBsYWNlaG9sZGVyPy50cmltKCkgPz8gJydcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIHNlcmlhbGl6ZWRUZXh0LnRyaW0oKSA9PT0gJydcbn1cblxuZXhwb3J0IGNvbnN0IGlzRWRpdG9yVmlzdWFsbHlNdWx0aWxpbmUgPSAoZWRpdG9ySGVpZ2h0OiBudW1iZXIsIGxpbmVIZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWVkaXRvckhlaWdodCB8fCAhbGluZUhlaWdodCkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBlZGl0b3JIZWlnaHQgPiBsaW5lSGVpZ2h0ICogMS41XG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGROb3JtYWxpemVFbXB0eUVkaXRvckRvbSA9ICh0ZXh0Q29udGVudDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgKHRleHRDb250ZW50Py50cmltKCkgPz8gJycpID09PSAnJ1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1BsYWNlaG9sZGVyVG9vbHRpcCA9IChcbiAgbG9naWNhbEVtcHR5OiBib29sZWFuLFxuICBwbGFjZWhvbGRlclRydW5jYXRlZDogYm9vbGVhbixcbiAgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBwbGFjZWhvbGRlcj8udHJpbSgpID8/ICcnXG4gIHJldHVybiBsb2dpY2FsRW1wdHkgJiYgcGxhY2Vob2xkZXJUcnVuY2F0ZWQgJiYgdHJpbW1lZC5sZW5ndGggPiAwXG59XG5cbmV4cG9ydCBjb25zdCBpc1BsYWNlaG9sZGVyVHJ1bmNhdGVkSW5FZGl0b3IgPSAoZWRpdG9yOiBIVE1MRWxlbWVudCwgcGxhY2Vob2xkZXI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB0cmltbWVkID0gcGxhY2Vob2xkZXIudHJpbSgpXG4gIGlmICghdHJpbW1lZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IHsgY2xpZW50V2lkdGggfSA9IGVkaXRvclxuICBpZiAoY2xpZW50V2lkdGggPD0gNCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3Qgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWRpdG9yKVxuICBjb25zdCBjdHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpXG4gIGlmICghY3R4KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY3R4LmZvbnQgPSBgJHtzdHlsZXMuZm9udFdlaWdodH0gJHtzdHlsZXMuZm9udFNpemV9ICR7c3R5bGVzLmZvbnRGYW1pbHl9YFxuICBjb25zdCBtZWFzdXJlZCA9IGN0eC5tZWFzdXJlVGV4dCh0cmltbWVkKS53aWR0aFxuXG4gIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChzdHlsZXMucGFkZGluZ0xlZnQpIHx8IDBcbiAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZXMucGFkZGluZ1JpZ2h0KSB8fCAwXG4gIGNvbnN0IGJvcmRlckxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5ib3JkZXJMZWZ0V2lkdGgpIHx8IDBcbiAgY29uc3QgYm9yZGVyUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlcy5ib3JkZXJSaWdodFdpZHRoKSB8fCAwXG4gIGNvbnN0IGF2YWlsYWJsZSA9IE1hdGgubWF4KDAsIGNsaWVudFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQgLSBib3JkZXJMZWZ0IC0g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