@projectcor/maia-components 2.35.6 → 2.36.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 (101) hide show
  1. package/README.md +2 -0
  2. package/lib/components/atoms/ActionableButton.js +1 -6
  3. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  4. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  5. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  7. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  8. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +4 -20
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -18
  10. package/lib/components/atoms/MAIAInput/MAIAInput.js +243 -42
  11. package/lib/components/atoms/MAIAInput/styles.js +41 -44
  12. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
  13. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
  14. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  15. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  16. package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
  17. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  18. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  19. package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
  20. package/lib/components/atoms/icons/index.js +5 -1
  21. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  22. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +5 -16
  23. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +2 -23
  24. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +5 -33
  25. package/lib/components/molecules/ChatAIHome/styles.js +2 -11
  26. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +20 -31
  27. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -7
  28. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +61 -21
  29. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  30. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +1 -8
  31. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +9 -15
  32. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +3 -14
  33. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
  34. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +11 -17
  35. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -14
  36. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  37. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +2 -12
  38. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
  39. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +334 -272
  40. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +132 -109
  41. package/lib/components/molecules/ChatFooter/ChatFooter.js +57 -63
  42. package/lib/components/molecules/ChatFooter/styles.js +6 -12
  43. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  44. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +5 -15
  45. package/lib/components/molecules/Sidebar/Sidebar.js +15 -7
  46. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  47. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +11 -36
  48. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +26 -38
  49. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +430 -209
  50. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +131 -74
  51. package/lib/components/organisms/ChatAI/ChatAI.js +1 -6
  52. package/lib/constants/config.js +1 -4
  53. package/lib/constants/permissions/utils.js +3 -3
  54. package/lib/hooks/useChatManager/useChatManager.js +34 -55
  55. package/lib/hooks/useContextMentions.js +96 -56
  56. package/lib/hooks/useEntitySearch.js +92 -278
  57. package/lib/hooks/useEvent.js +15 -2
  58. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  59. package/lib/hooks/useMentionPopover.js +9 -33
  60. package/lib/hooks/useSkillsCatalog.js +66 -0
  61. package/lib/lang/br/index.js +35 -12
  62. package/lib/lang/en/index.js +35 -12
  63. package/lib/lang/es/index.js +36 -13
  64. package/lib/lang/fr/index.js +36 -13
  65. package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
  66. package/lib/services/maia/Orchestrator/orchestrator.js +11 -5
  67. package/lib/services/maia/Skills/createSkill.js +1 -1
  68. package/lib/services/maia/Skills/getSkills.js +70 -40
  69. package/lib/services/maia/Skills/updateSkill.js +1 -1
  70. package/lib/services/maia/index.js +2 -4
  71. package/lib/services/utils/fetchCOR.js +57 -106
  72. package/lib/services/utils/index.js +1 -2
  73. package/lib/store/faqsStore.types.js +1 -1
  74. package/lib/store/index.js +1 -2
  75. package/lib/store/sessions/sessionStreamManager.js +35 -61
  76. package/lib/store/sessions/sessions.types.js +1 -1
  77. package/lib/store/useChatsStore.js +3 -3
  78. package/lib/test/buttonMock.js +22 -0
  79. package/lib/test/fetchPolyfill.js +160 -0
  80. package/lib/test/fileMock.js +2 -0
  81. package/lib/test/global-context.js +49 -0
  82. package/lib/test/iconMock.js +19 -0
  83. package/lib/test/mockFetch.js +49 -0
  84. package/lib/test/portalRoot.js +13 -0
  85. package/lib/test/styleMock.js +2 -0
  86. package/lib/test/test-utils.js +26 -0
  87. package/lib/test/tooltipMock.js +11 -0
  88. package/lib/types/Chat.js +1 -1
  89. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  90. package/lib/types/skill.js +1 -1
  91. package/lib/utils/contextMentionTriggers.js +2 -5
  92. package/lib/utils/renderContextMentions.js +39 -18
  93. package/package.json +9 -6
  94. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +0 -33
  95. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +0 -47
  96. package/lib/components/molecules/UsageBlockedBanner/index.js +0 -2
  97. package/lib/services/maia/Usage/getUsage.js +0 -45
  98. package/lib/services/maia/Usage/index.js +0 -6
  99. package/lib/services/utils/MaiaApiError.js +0 -34
  100. package/lib/store/useUsageStore.js +0 -108
  101. package/lib/types/usage.js +0 -9
@@ -11,7 +11,6 @@ import { Loader } from '../../atoms/Loader';
11
11
  import { SECTIONS } from '../../../constants/config';
12
12
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
13
13
  import { generateSkill } from '../../../services/maia/Skills/generateSkill';
14
- import { getUsageStoreState } from '../../../store/useUsageStore';
15
14
  import { SCASGCancelButton, SCASGCloseButton, SCASGFooter, SCASGGenerateButton, SCASGHeader, SCASGHeaderTitle, SCASGTextarea, SCASGWrapper } from './AbmSkillGenerateModal.styles';
16
15
 
17
16
  /** Open this modal from anywhere with: document.dispatchEvent(new CustomEvent('abm-skill-generate-open')) */
@@ -21,6 +20,12 @@ var parseSkillName = function parseSkillName(content) {
21
20
  var match = content.match(/^name:\s*(.+)$/m);
22
21
  return match ? match[1].trim() : '';
23
22
  };
23
+ var parseSkillDescription = function parseSkillDescription(content) {
24
+ var frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
25
+ if (!frontmatterMatch) return '';
26
+ var descriptionMatch = frontmatterMatch[1].match(/^description:\s*(.+)$/m);
27
+ return descriptionMatch ? descriptionMatch[1].trim() : '';
28
+ };
24
29
  export var AbmSkillGenerateModal = function AbmSkillGenerateModal() {
25
30
  var _useTranslation = useTranslation([SECTIONS.chatAI]),
26
31
  t = _useTranslation.t;
@@ -47,14 +52,6 @@ export var AbmSkillGenerateModal = function AbmSkillGenerateModal() {
47
52
  }, []);
48
53
  useEffect(function () {
49
54
  var handleOpen = function handleOpen() {
50
- if (getUsageStoreState().blocked) {
51
- var _getUsageStoreState = getUsageStoreState(),
52
- quotaExceededMessage = _getUsageStoreState.quotaExceededMessage;
53
- handleSnackbarError(quotaExceededMessage || t('usageBlocked', {
54
- defaultValue: 'Te quedaste sin usos de IA.'
55
- }));
56
- return;
57
- }
58
55
  setInput('');
59
56
  isOpenRef.current = true;
60
57
  setIsOpen(true);
@@ -63,10 +60,10 @@ export var AbmSkillGenerateModal = function AbmSkillGenerateModal() {
63
60
  return function () {
64
61
  document.removeEventListener(SKILL_GENERATE_OPEN_EVENT, handleOpen);
65
62
  };
66
- }, [handleSnackbarError, t]);
63
+ }, []);
67
64
  var handleGenerate = /*#__PURE__*/function () {
68
65
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
69
- var text, _getUsageStoreState2, quotaExceededMessage, _yield$generateSkill, content, _t;
66
+ var text, _yield$generateSkill, content, _t;
70
67
  return _regeneratorRuntime.wrap(function (_context) {
71
68
  while (1) switch (_context.prev = _context.next) {
72
69
  case 0:
@@ -77,29 +74,19 @@ export var AbmSkillGenerateModal = function AbmSkillGenerateModal() {
77
74
  }
78
75
  return _context.abrupt("return");
79
76
  case 1:
80
- if (!getUsageStoreState().blocked) {
81
- _context.next = 2;
82
- break;
83
- }
84
- _getUsageStoreState2 = getUsageStoreState(), quotaExceededMessage = _getUsageStoreState2.quotaExceededMessage;
85
- handleSnackbarError(quotaExceededMessage || t('usageBlocked', {
86
- defaultValue: 'Te quedaste sin usos de IA.'
87
- }));
88
- return _context.abrupt("return");
89
- case 2:
90
77
  setIsGenerating(true);
91
- _context.prev = 3;
92
- _context.next = 4;
78
+ _context.prev = 2;
79
+ _context.next = 3;
93
80
  return generateSkill(text);
94
- case 4:
81
+ case 3:
95
82
  _yield$generateSkill = _context.sent;
96
83
  content = _yield$generateSkill.content;
97
84
  if (isOpenRef.current) {
98
- _context.next = 5;
85
+ _context.next = 4;
99
86
  break;
100
87
  }
101
88
  return _context.abrupt("return");
102
- case 5:
89
+ case 4:
103
90
  // Hand off to the full editor (write/preview) with the generated content for review + save.
104
91
  document.dispatchEvent(new CustomEvent('abm-skill-modal-set-values', {
105
92
  detail: {
@@ -108,6 +95,7 @@ export var AbmSkillGenerateModal = function AbmSkillGenerateModal() {
108
95
  isEditing: false,
109
96
  general: {
110
97
  name: parseSkillName(content),
98
+ description: parseSkillDescription(content),
111
99
  content: content
112
100
  }
113
101
  },
@@ -116,27 +104,27 @@ export var AbmSkillGenerateModal = function AbmSkillGenerateModal() {
116
104
  }
117
105
  }));
118
106
  handleClose();
119
- _context.next = 8;
107
+ _context.next = 7;
120
108
  break;
121
- case 6:
122
- _context.prev = 6;
123
- _t = _context["catch"](3);
109
+ case 5:
110
+ _context.prev = 5;
111
+ _t = _context["catch"](2);
124
112
  if (isOpenRef.current) {
125
- _context.next = 7;
113
+ _context.next = 6;
126
114
  break;
127
115
  }
128
116
  return _context.abrupt("return");
129
- case 7:
117
+ case 6:
130
118
  handleSnackbarError(t('mySkills.generateError'));
131
- case 8:
132
- _context.prev = 8;
119
+ case 7:
120
+ _context.prev = 7;
133
121
  setIsGenerating(false);
134
- return _context.finish(8);
135
- case 9:
122
+ return _context.finish(7);
123
+ case 8:
136
124
  case "end":
137
125
  return _context.stop();
138
126
  }
139
- }, _callee, null, [[3, 6, 8, 9]]);
127
+ }, _callee, null, [[2, 5, 7, 8]]);
140
128
  }));
141
129
  return function handleGenerate() {
142
130
  return _ref.apply(this, arguments);
@@ -191,4 +179,4 @@ export var AbmSkillGenerateModal = function AbmSkillGenerateModal() {
191
179
  })
192
180
  }), container);
193
181
  };
194
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlUG9ydGFsIiwiQ3Jvc3MiLCJ1c2VUcmFuc2xhdGlvbiIsIkJhY2tkcm9wIiwiTG9hZGVyIiwiU0VDVElPTlMiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJnZW5lcmF0ZVNraWxsIiwiZ2V0VXNhZ2VTdG9yZVN0YXRlIiwiU0NBU0dDYW5jZWxCdXR0b24iLCJTQ0FTR0Nsb3NlQnV0dG9uIiwiU0NBU0dGb290ZXIiLCJTQ0FTR0dlbmVyYXRlQnV0dG9uIiwiU0NBU0dIZWFkZXIiLCJTQ0FTR0hlYWRlclRpdGxlIiwiU0NBU0dUZXh0YXJlYSIsIlNDQVNHV3JhcHBlciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5UIiwicGFyc2VTa2lsbE5hbWUiLCJjb250ZW50IiwibWF0Y2giLCJ0cmltIiwiQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIiwiX3VzZVRyYW5zbGF0aW9uIiwiY2hhdEFJIiwidCIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0dlbmVyYXRpbmciLCJzZXRJc0dlbmVyYXRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlucHV0Iiwic2V0SW5wdXQiLCJpc09wZW5SZWYiLCJoYW5kbGVDbG9zZSIsImN1cnJlbnQiLCJoYW5kbGVPcGVuIiwiYmxvY2tlZCIsIl9nZXRVc2FnZVN0b3JlU3RhdGUiLCJxdW90YUV4Y2VlZGVkTWVzc2FnZSIsImRlZmF1bHRWYWx1ZSIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVHZW5lcmF0ZSIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInRleHQiLCJfZ2V0VXNhZ2VTdG9yZVN0YXRlMiIsIl95aWVsZCRnZW5lcmF0ZVNraWxsIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInNlbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJza2lsbFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImdlbmVyYWwiLCJuYW1lIiwiZmluaXNoIiwic3RvcCIsImFwcGx5IiwiYXJndW1lbnRzIiwiY29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJ6SW5kZXgiLCJvbkNsaWNrIiwiY2hpbGRyZW4iLCJldmVudCIsInN0b3BQcm9wYWdhdGlvbiIsInR5cGUiLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwiYXV0b0ZvY3VzIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZSIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJzaXplIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uLy4uL2F0b21zL0JhY2tkcm9wJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IGdlbmVyYXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZW5lcmF0ZVNraWxsJ1xuaW1wb3J0IHsgZ2V0VXNhZ2VTdG9yZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlVXNhZ2VTdG9yZSdcbmltcG9ydCB7XG4gIFNDQVNHQ2FuY2VsQnV0dG9uLFxuICBTQ0FTR0Nsb3NlQnV0dG9uLFxuICBTQ0FTR0Zvb3RlcixcbiAgU0NBU0dHZW5lcmF0ZUJ1dHRvbixcbiAgU0NBU0dIZWFkZXIsXG4gIFNDQVNHSGVhZGVyVGl0bGUsXG4gIFNDQVNHVGV4dGFyZWEsXG4gIFNDQVNHV3JhcHBlcixcbn0gZnJvbSAnLi9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwuc3R5bGVzJ1xuXG4vKiogT3BlbiB0aGlzIG1vZGFsIGZyb20gYW55d2hlcmUgd2l0aDogZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FibS1za2lsbC1nZW5lcmF0ZS1vcGVuJykpICovXG5leHBvcnQgY29uc3QgU0tJTExfR0VORVJBVEVfT1BFTl9FVkVOVCA9ICdhYm0tc2tpbGwtZ2VuZXJhdGUtb3BlbidcblxuY29uc3QgcGFyc2VTa2lsbE5hbWUgPSAoY29udGVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9ebmFtZTpcXHMqKC4rKSQvbSlcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0udHJpbSgpIDogJydcbn1cblxuZXhwb3J0IGNvbnN0IEFibVNraWxsR2VuZXJhdGVNb2RhbCA9ICgpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lucHV0LCBzZXRJbnB1dF0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgaXNPcGVuUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRJc09wZW4oZmFsc2UpXG4gICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKVxuICAgIHNldElucHV0KCcnKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZU9wZW4gPSAoKSA9PiB7XG4gICAgICBpZiAoZ2V0VXNhZ2VTdG9yZVN0YXRlKCkuYmxvY2tlZCkge1xuICAgICAgICBjb25zdCB7IHF1b3RhRXhjZWVkZWRNZXNzYWdlIH0gPSBnZXRVc2FnZVN0b3JlU3RhdGUoKVxuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHF1b3RhRXhjZWVkZWRNZXNzYWdlIHx8IHQoJ3VzYWdlQmxvY2tlZCcsIHsgZGVmYXVsdFZhbHVlOiAnVGUgcXVlZGFzdGUgc2luIHVzb3MgZGUgSUEuJyB9KSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRJbnB1dCgnJylcbiAgICAgIGlzT3BlblJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0tJTExfR0VORVJBVEVfT1BFTl9FVkVOVCwgaGFuZGxlT3BlbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5ULCBoYW5kbGVPcGVuKVxuICAgIH1cbiAgfSwgW2hhbmRsZVNuYWNrYmFyRXJyb3IsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZUdlbmVyYXRlID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBpbnB1dC50cmltKClcbiAgICBpZiAoIXRleHQgfHwgaXNHZW5lcmF0aW5nKSByZXR1cm5cbiAgICBpZiAoZ2V0VXNhZ2VTdG9yZVN0YXRlKCkuYmxvY2tlZCkge1xuICAgICAgY29uc3QgeyBxdW90YUV4Y2VlZGVkTWVzc2FnZSB9ID0gZ2V0VXNhZ2VTdG9yZVN0YXRlKClcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IocXVvdGFFeGNlZWRlZE1lc3NhZ2UgfHwgdCgndXNhZ2VCbG9ja2VkJywgeyBkZWZhdWx0VmFsdWU6ICdUZSBxdWVkYXN0ZSBzaW4gdXNvcyBkZSBJQS4nIH0pKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldElzR2VuZXJhdGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IGF3YWl0IGdlbmVyYXRlU2tpbGwodGV4dClcbiAgICAgIC8vIFNpIGVsIHVzdWFyaW8gY2VycsOzIGVsIG1vZGFsIG1pZW50cmFzIGdlbmVyYWJhLCBubyBhYnJpciBlbCBlZGl0b3IuXG4gICAgICBpZiAoIWlzT3BlblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgIC8vIEhhbmQgb2ZmIHRvIHRoZSBmdWxsIGVkaXRvciAod3JpdGUvcHJldmlldykgd2l0aCB0aGUgZ2VuZXJhdGVkIGNvbnRlbnQgZm9yIHJldmlldyArIHNhdmUuXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgc2tpbGxWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBnZW5lcmFsOiB7IG5hbWU6IHBhcnNlU2tpbGxOYW1lKGNvbnRlbnQpLCBjb250ZW50IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFpc09wZW5SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLmdlbmVyYXRlRXJyb3InKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPcGVuKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1yb290LWFjdGlvbnMnKVxuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUNsb3NlfT5cbiAgICAgIDxTQ0FTR1dyYXBwZXIgb25DbGljaz17ZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9PlxuICAgICAgICA8U0NBU0dIZWFkZXI+XG4gICAgICAgICAgPFNDQVNHSGVhZGVyVGl0bGU+e3QoJ215U2tpbGxzLmNyZWF0ZVdpdGhNYWlhJyl9PC9TQ0FTR0hlYWRlclRpdGxlPlxuICAgICAgICAgIDxTQ0FTR0Nsb3NlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gYXJpYS1sYWJlbD17dCgnbXlTa2lsbHMuY2xvc2UnKX0+XG4gICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgIDwvU0NBU0dDbG9zZUJ1dHRvbj5cbiAgICAgICAgPC9TQ0FTR0hlYWRlcj5cblxuICAgICAgICA8U0NBU0dUZXh0YXJlYVxuICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdteVNraWxscy5nZW5lcmF0ZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgdmFsdWU9e2lucHV0fVxuICAgICAgICAgIGRpc2FibGVkPXtpc0dlbmVyYXRpbmd9XG4gICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IHNldElucHV0KGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPFNDQVNHRm9vdGVyPlxuICAgICAgICAgIDxTQ0FTR0NhbmNlbEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9IGRpc2FibGVkPXtpc0dlbmVyYXRpbmd9PlxuICAgICAgICAgICAge3QoJ215U2tpbGxzLmNhbmNlbCcpfVxuICAgICAgICAgIDwvU0NBU0dDYW5jZWxCdXR0b24+XG4gICAgICAgICAgPFNDQVNHR2VuZXJhdGVCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUdlbmVyYXRlfSBkaXNhYmxlZD17IWlucHV0LnRyaW0oKSB8fCBpc0dlbmVyYXRpbmd9PlxuICAgICAgICAgICAge2lzR2VuZXJhdGluZyA/IDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz4gOiB0KCdteVNraWxscy5jcmVhdGVXaXRoTWFpYScpfVxuICAgICAgICAgIDwvU0NBU0dHZW5lcmF0ZUJ1dHRvbj5cbiAgICAgICAgPC9TQ0FTR0Zvb3Rlcj5cbiAgICAgIDwvU0NBU0dXcmFwcGVy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
182
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlUG9ydGFsIiwiQ3Jvc3MiLCJ1c2VUcmFuc2xhdGlvbiIsIkJhY2tkcm9wIiwiTG9hZGVyIiwiU0VDVElPTlMiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJnZW5lcmF0ZVNraWxsIiwiU0NBU0dDYW5jZWxCdXR0b24iLCJTQ0FTR0Nsb3NlQnV0dG9uIiwiU0NBU0dGb290ZXIiLCJTQ0FTR0dlbmVyYXRlQnV0dG9uIiwiU0NBU0dIZWFkZXIiLCJTQ0FTR0hlYWRlclRpdGxlIiwiU0NBU0dUZXh0YXJlYSIsIlNDQVNHV3JhcHBlciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5UIiwicGFyc2VTa2lsbE5hbWUiLCJjb250ZW50IiwibWF0Y2giLCJ0cmltIiwicGFyc2VTa2lsbERlc2NyaXB0aW9uIiwiZnJvbnRtYXR0ZXJNYXRjaCIsImRlc2NyaXB0aW9uTWF0Y2giLCJBYm1Ta2lsbEdlbmVyYXRlTW9kYWwiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzR2VuZXJhdGluZyIsInNldElzR2VuZXJhdGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaW5wdXQiLCJzZXRJbnB1dCIsImlzT3BlblJlZiIsImhhbmRsZUNsb3NlIiwiY3VycmVudCIsImhhbmRsZU9wZW4iLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlR2VuZXJhdGUiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ0ZXh0IiwiX3lpZWxkJGdlbmVyYXRlU2tpbGwiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYWJydXB0Iiwic2VudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsInNraWxsVmFsdWVzIiwidmFsdWVzIiwiaXNFZGl0aW5nIiwiZ2VuZXJhbCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImZpbmlzaCIsInN0b3AiLCJhcHBseSIsImFyZ3VtZW50cyIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiekluZGV4Iiwib25DbGljayIsImNoaWxkcmVuIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJ0eXBlIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsImF1dG9Gb2N1cyIsInBsYWNlaG9sZGVyIiwidmFsdWUiLCJkaXNhYmxlZCIsIm9uQ2hhbmdlIiwidGFyZ2V0Iiwic2l6ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgQmFja2Ryb3AgfSBmcm9tICcuLi8uLi9hdG9tcy9CYWNrZHJvcCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyBnZW5lcmF0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZ2VuZXJhdGVTa2lsbCdcbmltcG9ydCB7XG4gIFNDQVNHQ2FuY2VsQnV0dG9uLFxuICBTQ0FTR0Nsb3NlQnV0dG9uLFxuICBTQ0FTR0Zvb3RlcixcbiAgU0NBU0dHZW5lcmF0ZUJ1dHRvbixcbiAgU0NBU0dIZWFkZXIsXG4gIFNDQVNHSGVhZGVyVGl0bGUsXG4gIFNDQVNHVGV4dGFyZWEsXG4gIFNDQVNHV3JhcHBlcixcbn0gZnJvbSAnLi9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwuc3R5bGVzJ1xuXG4vKiogT3BlbiB0aGlzIG1vZGFsIGZyb20gYW55d2hlcmUgd2l0aDogZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FibS1za2lsbC1nZW5lcmF0ZS1vcGVuJykpICovXG5leHBvcnQgY29uc3QgU0tJTExfR0VORVJBVEVfT1BFTl9FVkVOVCA9ICdhYm0tc2tpbGwtZ2VuZXJhdGUtb3BlbidcblxuY29uc3QgcGFyc2VTa2lsbE5hbWUgPSAoY29udGVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9ebmFtZTpcXHMqKC4rKSQvbSlcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0udHJpbSgpIDogJydcbn1cblxuY29uc3QgcGFyc2VTa2lsbERlc2NyaXB0aW9uID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxzKlxcbihbXFxzXFxTXSo/KVxcbi0tLS8pXG4gIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkgcmV0dXJuICcnXG4gIGNvbnN0IGRlc2NyaXB0aW9uTWF0Y2ggPSBmcm9udG1hdHRlck1hdGNoWzFdLm1hdGNoKC9eZGVzY3JpcHRpb246XFxzKiguKykkL20pXG4gIHJldHVybiBkZXNjcmlwdGlvbk1hdGNoID8gZGVzY3JpcHRpb25NYXRjaFsxXS50cmltKCkgOiAnJ1xufVxuXG5leHBvcnQgY29uc3QgQWJtU2tpbGxHZW5lcmF0ZU1vZGFsID0gKCkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0XSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBpc09wZW5SZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldElzT3BlbihmYWxzZSlcbiAgICBzZXRJc0dlbmVyYXRpbmcoZmFsc2UpXG4gICAgc2V0SW5wdXQoJycpXG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlT3BlbiA9ICgpID0+IHtcbiAgICAgIHNldElucHV0KCcnKVxuICAgICAgaXNPcGVuUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5ULCBoYW5kbGVPcGVuKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNLSUxMX0dFTkVSQVRFX09QRU5fRVZFTlQsIGhhbmRsZU9wZW4pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVHZW5lcmF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gaW5wdXQudHJpbSgpXG4gICAgaWYgKCF0ZXh0IHx8IGlzR2VuZXJhdGluZykgcmV0dXJuXG4gICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gYXdhaXQgZ2VuZXJhdGVTa2lsbCh0ZXh0KVxuICAgICAgLy8gU2kgZWwgdXN1YXJpbyBjZXJyw7MgZWwgbW9kYWwgbWllbnRyYXMgZ2VuZXJhYmEsIG5vIGFicmlyIGVsIGVkaXRvci5cbiAgICAgIGlmICghaXNPcGVuUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgLy8gSGFuZCBvZmYgdG8gdGhlIGZ1bGwgZWRpdG9yICh3cml0ZS9wcmV2aWV3KSB3aXRoIHRoZSBnZW5lcmF0ZWQgY29udGVudCBmb3IgcmV2aWV3ICsgc2F2ZS5cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBza2lsbFZhbHVlczoge1xuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlU2tpbGxOYW1lKGNvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHBhcnNlU2tpbGxEZXNjcmlwdGlvbihjb250ZW50KSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWlzT3BlblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMuZ2VuZXJhdGVFcnJvcicpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0dlbmVyYXRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc09wZW4pIHJldHVybiBudWxsXG5cbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLXJvb3QtYWN0aW9ucycpXG4gIGlmICghY29udGFpbmVyKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPEJhY2tkcm9wIHpJbmRleD17MTExMn0gb25DbGljaz17aGFuZGxlQ2xvc2V9PlxuICAgICAgPFNDQVNHV3JhcHBlciBvbkNsaWNrPXtldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKX0+XG4gICAgICAgIDxTQ0FTR0hlYWRlcj5cbiAgICAgICAgICA8U0NBU0dIZWFkZXJUaXRsZT57dCgnbXlTa2lsbHMuY3JlYXRlV2l0aE1haWEnKX08L1NDQVNHSGVhZGVyVGl0bGU+XG4gICAgICAgICAgPFNDQVNHQ2xvc2VCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSBhcmlhLWxhYmVsPXt0KCdteVNraWxscy5jbG9zZScpfT5cbiAgICAgICAgICAgIDxDcm9zcyBjb2xvcj1cIiNhNmE2YTZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgPC9TQ0FTR0Nsb3NlQnV0dG9uPlxuICAgICAgICA8L1NDQVNHSGVhZGVyPlxuXG4gICAgICAgIDxTQ0FTR1RleHRhcmVhXG4gICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ215U2tpbGxzLmdlbmVyYXRlUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICB2YWx1ZT17aW5wdXR9XG4gICAgICAgICAgZGlzYWJsZWQ9e2lzR2VuZXJhdGluZ31cbiAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gc2V0SW5wdXQoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgLz5cblxuICAgICAgICA8U0NBU0dGb290ZXI+XG4gICAgICAgICAgPFNDQVNHQ2FuY2VsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbG9zZX0gZGlzYWJsZWQ9e2lzR2VuZXJhdGluZ30+XG4gICAgICAgICAgICB7dCgnbXlTa2lsbHMuY2FuY2VsJyl9XG4gICAgICAgICAgPC9TQ0FTR0NhbmNlbEJ1dHRvbj5cbiAgICAgICAgICA8U0NBU0dHZW5lcmF0ZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlR2VuZXJhdGV9IGRpc2FibGVkPXshaW5wdXQudHJpbSgpIHx8IGlzR2VuZXJhdGluZ30+XG4gICAgICAgICAgICB7aXNHZW5lcmF0aW5nID8gPExvYWRlciBzaXplPVwic21hbGxcIiAvPiA6IHQoJ215U2tpbGxzLmNyZWF0ZVdpdGhNYWlhJyl9XG4gICAgICAgICAgPC9TQ0FTR0dlbmVyYXRlQnV0dG9uPlxuICAgICAgICA8L1NDQVNHRm9vdGVyPlxuICAgICAgPC9TQ0FTR1dyYXBwZXI+XG4gICAgPC9CYWNrZHJvcD4sXG4gICAgY29udGFpbmVyXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxLQUFLLFFBQVEsd0NBQXdD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