@projectcor/maia-components 2.35.4-0 → 2.35.4-1

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 (105) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +4 -63
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +3 -31
  4. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +4 -16
  5. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +1 -12
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -127
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  8. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  9. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +19 -2
  10. package/lib/components/atoms/MAIAInput/MAIAInput.js +17 -234
  11. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +2 -84
  12. package/lib/components/atoms/MAIAInput/styles.js +11 -15
  13. package/lib/components/atoms/icons/SkillsNavIcon.js +7 -4
  14. package/lib/components/atoms/icons/index.js +1 -5
  15. package/lib/components/index.js +2 -1
  16. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +11 -34
  17. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +9 -7
  18. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +8 -4
  19. package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
  20. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -60
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +69 -70
  22. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +242 -333
  23. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +104 -131
  24. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -15
  25. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +8 -1
  26. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  27. package/lib/components/molecules/Sidebar/Sidebar.js +32 -34
  28. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  29. package/lib/components/molecules/Sidebar/Sidebar.spec.js +22 -2
  30. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +12 -21
  31. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +1 -8
  32. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +184 -430
  33. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +22 -78
  34. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +72 -132
  35. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +484 -0
  36. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
  37. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  38. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  39. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  40. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  41. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +217 -0
  42. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +102 -0
  43. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +147 -0
  44. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  45. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  46. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  47. package/lib/components/organisms/ChatAIPage/pageHomeMockCards.js +17 -0
  48. package/lib/constants/config.js +4 -1
  49. package/lib/constants/permissions/index.js +2 -2
  50. package/lib/constants/permissions/utils.js +6 -3
  51. package/lib/dev/DevMaiaPage.js +30 -0
  52. package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
  53. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
  54. package/lib/hooks/useChatManager/useChatManager.js +4 -5
  55. package/lib/hooks/useContextMentions.js +56 -96
  56. package/lib/hooks/useEntitySearch.js +278 -92
  57. package/lib/hooks/useEvent.js +2 -15
  58. package/lib/hooks/useEvent.spec.js +2 -7
  59. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  60. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  61. package/lib/hooks/useMentionAllowedTypes.js +25 -9
  62. package/lib/hooks/useMentionAllowedTypes.spec.js +15 -4
  63. package/lib/hooks/useMentionPopover.js +33 -9
  64. package/lib/index.js +5 -2
  65. package/lib/lang/br/index.js +32 -39
  66. package/lib/lang/en/index.js +32 -39
  67. package/lib/lang/es/index.js +33 -40
  68. package/lib/lang/fr/index.js +32 -39
  69. package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
  70. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +3 -3
  71. package/lib/services/maia/Orchestrator/orchestrator.js +3 -6
  72. package/lib/services/maia/Skills/createSkill.js +1 -1
  73. package/lib/services/maia/Skills/createSkill.spec.js +5 -14
  74. package/lib/services/maia/Skills/getSkills.js +40 -70
  75. package/lib/services/maia/Skills/updateSkill.js +1 -1
  76. package/lib/services/maia/Skills/updateSkill.spec.js +4 -11
  77. package/lib/styles/cascade.js +29 -3
  78. package/lib/styles/transitions.js +3 -1
  79. package/lib/types/agentModal.js +1 -1
  80. package/lib/types/global.d.js +1 -1
  81. package/lib/types/skill.js +1 -1
  82. package/lib/utils/contextMentionTriggers.js +5 -2
  83. package/lib/utils/contextMentionTriggers.spec.js +6 -8
  84. package/lib/utils/maiaPageRoute.js +24 -0
  85. package/lib/utils/maiaPageRoute.spec.js +23 -0
  86. package/lib/utils/normalizeAgentConnectors.js +16 -44
  87. package/lib/utils/normalizeAgentConnectors.spec.js +13 -43
  88. package/lib/utils/renderContextMentions.js +18 -39
  89. package/package.json +1 -1
  90. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +0 -208
  91. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  92. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +0 -77
  93. package/lib/components/atoms/SkillsDropdown/index.js +0 -2
  94. package/lib/components/atoms/icons/PlusIcon.js +0 -29
  95. package/lib/components/atoms/icons/SkillCreatedByIcon.js +0 -20
  96. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +0 -23
  97. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +0 -23
  98. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -77
  99. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  100. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -95
  101. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -96
  102. package/lib/hooks/useSkillsCatalog.js +0 -66
  103. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  104. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -72
  105. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
@@ -3,7 +3,6 @@ import styled, { css } from 'styled-components';
3
3
  import { CONTEXT_MENTION_CHIP_CLASS } from '../types/contextMention';
4
4
  import { MENTION_CHIP_COLORS, MENTION_CHIP_NON_TASK_HOVER_BG } from '../components/atoms/ContextMentionChip/ContextMentionChip.styles';
5
5
  import { SlashCommandChip } from '../components/atoms/SlashCommandChip';
6
- import { SCSlashChip } from '../components/atoms/SlashCommandChip/SlashCommandChip.styles';
7
6
  import { SLASH_COMMAND_MARKER_REGEX } from './slashCommandMarker';
8
7
  import { VIOLET_IA_COLORS } from '../styles/config';
9
8
  import { SCTaskLink } from '../components/molecules/ChatAIMessages/newStyles';
@@ -94,20 +93,6 @@ var splitLabelFirstWord = function splitLabelFirstWord(label) {
94
93
  rest: normalized.slice(firstWhitespaceIdx)
95
94
  };
96
95
  };
97
-
98
- /** Las skills se muestran como `#nombre`, con el mismo estilo que los slash commands. */
99
- var formatSkillLabel = function formatSkillLabel(label) {
100
- return "#".concat(label.trim().replace(/^(@\/|#)/, ''));
101
- };
102
- var SkillInlineChip = function SkillInlineChip(_ref) {
103
- var label = _ref.label;
104
- return /*#__PURE__*/_jsx(SCSlashChip, {
105
- className: CONTEXT_MENTION_CHIP_CLASS,
106
- "data-mention-type": "skill",
107
- "data-mention-surface": "chat",
108
- children: formatSkillLabel(label)
109
- });
110
- };
111
96
  var INLINE_MENTION_HOVER_BG = {
112
97
  project: VIOLET_IA_COLORS[100]
113
98
  };
@@ -122,30 +107,30 @@ var inlineMentionHoverCss = function inlineMentionHoverCss(type, isClickable) {
122
107
  var SCInlineMention = styled.span.withConfig({
123
108
  displayName: "renderContextMentions__SCInlineMention",
124
109
  componentId: "sc-f3uz3m-0"
125
- })(["display:inline;padding:2px 4px;margin:0 1px;border-radius:4px;font-family:var(--cor-typography-font-family,'Work Sans');font-weight:500;font-size:inherit;line-height:inherit;background:", ";color:", ";white-space:normal;overflow-wrap:break-word;word-break:break-word;cursor:", ";text-decoration:none;box-sizing:border-box;&:hover{", "}"], function (_ref2) {
110
+ })(["display:inline;padding:2px 4px;margin:0 1px;border-radius:4px;font-family:var(--cor-typography-font-family,'Work Sans');font-weight:500;font-size:inherit;line-height:inherit;background:", ";color:", ";white-space:normal;overflow-wrap:break-word;word-break:break-word;cursor:", ";text-decoration:none;box-sizing:border-box;&:hover{", "}"], function (_ref) {
126
111
  var _MENTION_CHIP_COLORS$;
127
- var $type = _ref2.$type;
112
+ var $type = _ref.$type;
128
113
  return ((_MENTION_CHIP_COLORS$ = MENTION_CHIP_COLORS[$type]) !== null && _MENTION_CHIP_COLORS$ !== void 0 ? _MENTION_CHIP_COLORS$ : MENTION_CHIP_COLORS.user).bg;
129
- }, function (_ref3) {
114
+ }, function (_ref2) {
130
115
  var _MENTION_CHIP_COLORS$2;
131
- var $type = _ref3.$type;
116
+ var $type = _ref2.$type;
132
117
  return ((_MENTION_CHIP_COLORS$2 = MENTION_CHIP_COLORS[$type]) !== null && _MENTION_CHIP_COLORS$2 !== void 0 ? _MENTION_CHIP_COLORS$2 : MENTION_CHIP_COLORS.user).fg;
133
- }, function (_ref4) {
134
- var $isClickable = _ref4.$isClickable;
118
+ }, function (_ref3) {
119
+ var $isClickable = _ref3.$isClickable;
135
120
  return $isClickable ? 'pointer' : 'default';
136
- }, function (_ref5) {
137
- var $type = _ref5.$type,
138
- $isClickable = _ref5.$isClickable;
121
+ }, function (_ref4) {
122
+ var $type = _ref4.$type,
123
+ $isClickable = _ref4.$isClickable;
139
124
  return inlineMentionHoverCss($type, $isClickable);
140
125
  });
141
126
  var SCInlineMentionIcon = styled.span.withConfig({
142
127
  displayName: "renderContextMentions__SCInlineMentionIcon",
143
128
  componentId: "sc-f3uz3m-1"
144
- })(["display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;margin-right:2px;width:", ";height:", ";"], function (_ref6) {
145
- var $task = _ref6.$task;
129
+ })(["display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;margin-right:2px;width:", ";height:", ";"], function (_ref5) {
130
+ var $task = _ref5.$task;
146
131
  return $task ? '16px' : '14px';
147
- }, function (_ref7) {
148
- var $task = _ref7.$task;
132
+ }, function (_ref6) {
133
+ var $task = _ref6.$task;
149
134
  return $task ? '16px' : '14px';
150
135
  });
151
136
  var SCInlineMentionIconRow = styled.span.withConfig({
@@ -171,9 +156,6 @@ export var renderMentionLink = function renderMentionLink(href, children) {
171
156
  type = _parseMentionProtocol.type,
172
157
  id = _parseMentionProtocol.id;
173
158
  var label = mentionChildrenToLabel(children);
174
- if (type === 'skill') return /*#__PURE__*/_jsx(SkillInlineChip, {
175
- label: label
176
- });
177
159
  var isTask = type === 'task';
178
160
  var iconSize = isTask ? 16 : 14;
179
161
  var taskUrl = "/tasks/".concat(id, "/detail");
@@ -281,14 +263,11 @@ var getMentionUrl = function getMentionUrl(type, id) {
281
263
  return null;
282
264
  }
283
265
  };
284
- var MentionChip = function MentionChip(_ref8) {
285
- var type = _ref8.type,
286
- id = _ref8.id,
287
- label = _ref8.label;
266
+ var MentionChip = function MentionChip(_ref7) {
267
+ var type = _ref7.type,
268
+ id = _ref7.id,
269
+ label = _ref7.label;
288
270
  var normalizedLabel = normalizeContextMentionLabel(label);
289
- if (type === 'skill') return /*#__PURE__*/_jsx(SkillInlineChip, {
290
- label: normalizedLabel
291
- });
292
271
  var url = getMentionUrl(type, id);
293
272
  var isClickable = !!url;
294
273
  var isTask = type === 'task';
@@ -417,4 +396,4 @@ export var renderTextWithMentions = function renderTextWithMentions(text) {
417
396
  if (lastIdx < text.length) out.push(text.slice(lastIdx));
418
397
  return out;
419
398
  };
420
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJjc3MiLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsIk1FTlRJT05fQ0hJUF9DT0xPUlMiLCJNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkciLCJTbGFzaENvbW1hbmRDaGlwIiwiU0NTbGFzaENoaXAiLCJTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCIsIlZJT0xFVF9JQV9DT0xPUlMiLCJTQ1Rhc2tMaW5rIiwiZ2V0Q29udGV4dE1lbnRpb25JY29uIiwibm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCIsIm9wZW5UYXNrSW5Db3JQYW5lbCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIk1FTlRJT05fTUFSS0VSX1JFR0VYIiwiTUFJQV9NRU5USU9OX1BST1RPQ09MIiwiSU5DT01QTEVURV9NRU5USU9OX01BUktFUl9SRUdFWCIsIklOQ09NUExFVEVfU0xBU0hfTUFSS0VSX1JFR0VYIiwiQUxMT1dFRF9UWVBFUyIsInBhcnNlTWVudGlvblByb3RvY29sSHJlZiIsImhyZWYiLCJyZXN0Iiwic2xpY2UiLCJsZW5ndGgiLCJzbGFzaElkeCIsImluZGV4T2YiLCJyYXdUeXBlIiwicmF3SWQiLCJpZCIsImRlY29kZVVSSUNvbXBvbmVudCIsIl91bnVzZWQiLCJ0eXBlIiwiaW5jbHVkZXMiLCJzZXJpYWxpemVNZW50aW9uIiwibWVudGlvbiIsImNvbmNhdCIsImxhYmVsIiwidHJhbnNmb3JtTWVudGlvbk1hcmtlcnMiLCJ0ZXh0IiwicmVwbGFjZSIsIl9tIiwic2FmZUxhYmVsIiwiU3RyaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWVudGlvbkNoaWxkcmVuVG9MYWJlbCIsImNoaWxkcmVuIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiYyIsImpvaW4iLCJzcGxpdExhYmVsRmlyc3RXb3JkIiwibm9ybWFsaXplZCIsInRyaW0iLCJmaXJzdFdvcmQiLCJmaXJzdFdoaXRlc3BhY2VJZHgiLCJzZWFyY2giLCJmb3JtYXRTa2lsbExhYmVsIiwiU2tpbGxJbmxpbmVDaGlwIiwiX3JlZiIsImNsYXNzTmFtZSIsIklOTElORV9NRU5USU9OX0hPVkVSX0JHIiwicHJvamVjdCIsImlubGluZU1lbnRpb25Ib3ZlckNzcyIsImlzQ2xpY2thYmxlIiwiX0lOTElORV9NRU5USU9OX0hPVkVSIiwiYmciLCJTQ0lubGluZU1lbnRpb24iLCJzcGFuIiwid2l0aENvbmZpZyIsImRpc3BsYXlOYW1lIiwiY29tcG9uZW50SWQiLCJfcmVmMiIsIl9NRU5USU9OX0NISVBfQ09MT1JTJCIsIiR0eXBlIiwidXNlciIsIl9yZWYzIiwiX01FTlRJT05fQ0hJUF9DT0xPUlMkMiIsImZnIiwiX3JlZjQiLCIkaXNDbGlja2FibGUiLCJfcmVmNSIsIlNDSW5saW5lTWVudGlvbkljb24iLCJfcmVmNiIsIiR0YXNrIiwiX3JlZjciLCJTQ0lubGluZU1lbnRpb25JY29uUm93IiwiU0NJbmxpbmVNZW50aW9uV29yZCIsIlNDSW5saW5lTWVudGlvblJlc3QiLCJyZW5kZXJNZW50aW9uTGluayIsInN0YXJ0c1dpdGgiLCJfcGFyc2VNZW50aW9uUHJvdG9jb2wiLCJpc1Rhc2siLCJpY29uU2l6ZSIsInRhc2tVcmwiLCJoYW5kbGVUYXNrQ2xpY2siLCJlIiwibWV0YUtleSIsImN0cmxLZXkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRhc2tLZXlEb3duIiwia2V5Iiwib25DbGljayIsIm9uS2V5RG93biIsImlzUHJvamVjdCIsInByb2plY3RVcmwiLCJzaG93SWNvbiIsIl9zcGxpdExhYmVsRmlyc3RXb3JkIiwiaGFuZGxlUHJvamVjdENsaWNrIiwid2luZG93Iiwib3BlbiIsInVuZGVmaW5lZCIsInJvbGUiLCJ0YWJJbmRleCIsInN0cmlwTWVudGlvbk1hcmtlcnMiLCJfdHlwZSIsIl9pZCIsImZvcm1hdENoYXRMaXN0VGl0bGVNZW50aW9ucyIsIndpdGhvdXRNZW50aW9ucyIsInNsYXNoUmVnZXgiLCJSZWdFeHAiLCJzb3VyY2UiLCJ3aXRob3V0U2xhc2giLCJ3aXRob3V0SW5jb21wbGV0ZVNsYXNoIiwiZ2V0TWVudGlvblVybCIsIk1lbnRpb25DaGlwIiwiX3JlZjgiLCJub3JtYWxpemVkTGFiZWwiLCJ1cmwiLCJfc3BsaXRMYWJlbEZpcnN0V29yZDIiLCJoYW5kbGVDbGljayIsImhhbmRsZUtleURvd24iLCJoYXNJbmxpbmVNYXJrZXJzIiwiY29sbGVjdElubGluZU1hcmtlcnMiLCJtYXJrZXJzIiwibGFzdEluZGV4IiwibSIsImV4ZWMiLCJfbTIiLCJfbTMiLCJfc2xpY2VkVG9BcnJheSIsInB1c2giLCJraW5kIiwiaW5kZXgiLCJzIiwic29ydCIsImEiLCJiIiwicmVuZGVyVGV4dFdpdGhNZW50aW9ucyIsIm91dCIsImxhc3RJZHgiLCJmb3JFYWNoIiwibWFya2VyIiwiaW5saW5lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBSZWFjdEVsZW1lbnQsIE1vdXNlRXZlbnQsIEtleWJvYXJkRXZlbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBzdHlsZWQsIHsgY3NzIH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb24sIENPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQge1xuICBNRU5USU9OX0NISVBfQ09MT1JTLFxuICBNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkcsXG59IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25DaGlwL0NvbnRleHRNZW50aW9uQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTbGFzaENvbW1hbmRDaGlwIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9TbGFzaENvbW1hbmRDaGlwJ1xuaW1wb3J0IHsgU0NTbGFzaENoaXAgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL1NsYXNoQ29tbWFuZENoaXAvU2xhc2hDb21tYW5kQ2hpcC5zdHlsZXMnXG5pbXBvcnQgeyBTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWCB9IGZyb20gJy4vc2xhc2hDb21tYW5kTWFya2VyJ1xuaW1wb3J0IHsgVklPTEVUX0lBX0NPTE9SUyB9IGZyb20gJy4uL3N0eWxlcy9jb25maWcnXG5pbXBvcnQgeyBTQ1Rhc2tMaW5rIH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvbmV3U3R5bGVzJ1xuaW1wb3J0IHsgZ2V0Q29udGV4dE1lbnRpb25JY29uIH0gZnJvbSAnLi9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbCB9IGZyb20gJy4vY29udGV4dE1lbnRpb25MYWJlbCdcbmltcG9ydCB7IG9wZW5UYXNrSW5Db3JQYW5lbCB9IGZyb20gJy4vb3BlblRhc2tJbkNvclBhbmVsJ1xuXG4vKipcbiAqIEZvcm1hdG8gZGVsIG1hcmNhZG9yIHF1ZSB2aWFqYSBlbiBlbCB0ZXh0byBkZWwgbWVuc2FqZTpcbiAqICAgW1ttZW50aW9uOjx0eXBlPjo8aWQ+fDxsYWJlbD5dXVxuICpcbiAqIEVsIGVkaXRvciBsbyBlbWl0ZSBjdWFuZG8gc2VyaWFsaXphIGVsIGNvbnRlbnRlZGl0YWJsZSwgZWwgYmFja2VuZCBsb1xuICogcGVyc2lzdGUgdGFsIGN1YWwgeSBhbCByZW5kZXJpemFyIHNlIHRyYW5zZm9ybWEgZW4gdW4gbGluayBtYXJrZG93biBjb25cbiAqIHVuIHByb3RvY29sbyBwcm9waW8gcXVlIGBDdXN0b21MaW5rYCBpbnRlcmNlcHRhIHkgZGlidWphIGNvbW8gc3BhblxuICogZXN0aWxhZG8uXG4gKlxuICogUG9yIHNlcGFyYWRvLCBsYSBtZXRhZGF0YSBgY29udGV4dF9tZXNzYWdlYCBsbGV2YSBsb3MgdmFsb3JlcyBsaW1waW9zXG4gKiAoaWQgKyBuYW1lKSBwYXJhIHF1ZSBlbCBiYWNrZW5kIHB1ZWRhIGludGVycHJldGFyIGxhcyBlbnRpZGFkZXMgc2luXG4gKiB0ZW5lciBxdWUgcGFyc2VhciBlbCB0ZXh0by5cbiAqL1xuLyoqXG4gKiBMYWJlbCBwdWVkZSBjb250ZW5lciBgXWAgKGVqOiBcIltFZHVjYXRlXUJsb2cgUG9zdCAuLi5cIiksIHBvciBlc29cbiAqIHNlIGNhcHR1cmEgZGUgZm9ybWEgbGF6eSBoYXN0YSBlbCBjaWVycmUgcmVhbCBgXV1gLlxuICovXG5leHBvcnQgY29uc3QgTUVOVElPTl9NQVJLRVJfUkVHRVggPSAvXFxbXFxbbWVudGlvbjooY2xpZW50fHByb2plY3R8dGFza3x1c2VyfG1jcHxza2lsbCk6KFtefFxcXV0rKVxcfChbXFxzXFxTXSo/KVxcXVxcXS9nXG5leHBvcnQgY29uc3QgTUFJQV9NRU5USU9OX1BST1RPQ09MID0gJ21haWEtbWVudGlvbjovLydcbmNvbnN0IElOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVggPSAvXFxbXFxbbWVudGlvbjpbXFxzXFxTXSokL1xuY29uc3QgSU5DT01QTEVURV9TTEFTSF9NQVJLRVJfUkVHRVggPSAvXFxbXFxbc2xhc2hfY29tbWFuZDpbXnxcXF1dK1xcfChbXFxzXFxTXSopJC9cblxuY29uc3QgQUxMT1dFRF9UWVBFUzogQ29udGV4dEVudGl0eVR5cGVbXSA9IFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzaycsICd1c2VyJywgJ21jcCcsICdza2lsbCddXG5cbmNvbnN0IHBhcnNlTWVudGlvblByb3RvY29sSHJlZiA9IChocmVmOiBzdHJpbmcpOiB7IHR5cGU6IENvbnRleHRFbnRpdHlUeXBlOyBpZDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCByZXN0ID0gaHJlZi5zbGljZShNQUlBX01FTlRJT05fUFJPVE9DT0wubGVuZ3RoKVxuICBjb25zdCBzbGFzaElkeCA9IHJlc3QuaW5kZXhPZignLycpXG4gIGNvbnN0IHJhd1R5cGUgPSBzbGFzaElkeCA+PSAwID8gcmVzdC5zbGljZSgwLCBzbGFzaElkeCkgOiByZXN0XG4gIGNvbnN0IHJhd0lkID0gc2xhc2hJZHggPj0gMCA/IHJlc3Quc2xpY2Uoc2xhc2hJZHggKyAxKSA6ICcnXG4gIGxldCBpZCA9ICcnXG4gIHRyeSB7XG4gICAgaWQgPSByYXdJZCA/IGRlY29kZVVSSUNvbXBvbmVudChyYXdJZCkgOiAnJ1xuICB9IGNhdGNoIHtcbiAgICBpZCA9IHJhd0lkXG4gIH1cbiAgY29uc3QgdHlwZSA9IEFMTE9XRURfVFlQRVMuaW5jbHVkZXMocmF3VHlwZSBhcyBDb250ZXh0RW50aXR5VHlwZSkgPyAocmF3VHlwZSBhcyBDb250ZXh0RW50aXR5VHlwZSkgOiAndXNlcidcbiAgcmV0dXJuIHsgdHlwZSwgaWQgfVxufVxuXG4vKiogR2VuZXJhIGVsIG1hcmNhZG9yIHBhcmEgdW4gbWVudGlvbiBkYWRvLiBMbyB1c2EgZWwgZWRpdG9yIGFsIHNlcmlhbGl6YXIuICovXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplTWVudGlvbiA9IChtZW50aW9uOiBDb250ZXh0TWVudGlvbik6IHN0cmluZyA9PlxuICBgW1ttZW50aW9uOiR7bWVudGlvbi50eXBlfToke21lbnRpb24uaWR9fCR7bWVudGlvbi5sYWJlbH1dXWBcblxuLyoqXG4gKiBDb252aWVydGUgY2FkYSBgW1ttZW50aW9uOi4uLl1dYCBlbiB1biBsaW5rIG1hcmtkb3duIGNvbiBwcm90b2NvbG8gcHJvcGlvXG4gKiBwYXJhIHF1ZSBTdHJlYW1kb3duIGxvIGVtaXRhIGNvbW8gYDxhPmAgeSBgQ3VzdG9tTGlua2AgbG8gaW50ZXJjZXB0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHRleHRcbiAgcmV0dXJuIHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCB0eXBlLCBpZCwgbGFiZWwpID0+IHtcbiAgICBjb25zdCBzYWZlTGFiZWwgPSBTdHJpbmcobGFiZWwpLnJlcGxhY2UoL1tcXFxcXFxdXS9nLCAnXFxcXCQmJylcbiAgICByZXR1cm4gYFske3NhZmVMYWJlbH1dKCR7TUFJQV9NRU5USU9OX1BST1RPQ09MfSR7dHlwZX0vJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkKSl9KWBcbiAgfSlcbn1cblxuY29uc3QgbWVudGlvbkNoaWxkcmVuVG9MYWJlbCA9IChjaGlsZHJlbjogUmVhY3ROb2RlKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZycpIHJldHVybiBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKGNoaWxkcmVuKVxuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCB8fCBjaGlsZHJlbiA9PT0gZmFsc2UpIHJldHVybiAnJ1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChjaGlsZHJlbi5tYXAoYyA9PiAodHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6ICcnKSkuam9pbignJykpXG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoU3RyaW5nKGNoaWxkcmVuKSlcbn1cblxuY29uc3Qgc3BsaXRMYWJlbEZpcnN0V29yZCA9IChsYWJlbDogc3RyaW5nKTogeyBmaXJzdFdvcmQ6IHN0cmluZzsgcmVzdDogc3RyaW5nIH0gPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChsYWJlbCkudHJpbSgpXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIHsgZmlyc3RXb3JkOiAnJywgcmVzdDogJycgfVxuICBjb25zdCBmaXJzdFdoaXRlc3BhY2VJZHggPSBub3JtYWxpemVkLnNlYXJjaCgvXFxzLylcbiAgaWYgKGZpcnN0V2hpdGVzcGFjZUlkeCA8IDApIHJldHVybiB7IGZpcnN0V29yZDogbm9ybWFsaXplZCwgcmVzdDogJycgfVxuICByZXR1cm4ge1xuICAgIGZpcnN0V29yZDogbm9ybWFsaXplZC5zbGljZSgwLCBmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICAgIHJlc3Q6IG5vcm1hbGl6ZWQuc2xpY2UoZmlyc3RXaGl0ZXNwYWNlSWR4KSxcbiAgfVxufVxuXG4vKiogTGFzIHNraWxscyBzZSBtdWVzdHJhbiBjb21vIGAjbm9tYnJlYCwgY29uIGVsIG1pc21vIGVzdGlsbyBxdWUgbG9zIHNsYXNoIGNvbW1hbmRzLiAqL1xuY29uc3QgZm9ybWF0U2tpbGxMYWJlbCA9IChsYWJlbDogc3RyaW5nKTogc3RyaW5nID0+IGAjJHtsYWJlbC50cmltKCkucmVwbGFjZSgvXihAXFwvfCMpLywgJycpfWBcblxuY29uc3QgU2tpbGxJbmxpbmVDaGlwID0gKHsgbGFiZWwgfTogeyBsYWJlbDogc3RyaW5nIH0pOiBSZWFjdEVsZW1lbnQgPT4gKFxuICA8U0NTbGFzaENoaXAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU30gZGF0YS1tZW50aW9uLXR5cGU9XCJza2lsbFwiIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiPlxuICAgIHtmb3JtYXRTa2lsbExhYmVsKGxhYmVsKX1cbiAgPC9TQ1NsYXNoQ2hpcD5cbilcblxuY29uc3QgSU5MSU5FX01FTlRJT05fSE9WRVJfQkc6IFBhcnRpYWw8UmVjb3JkPENvbnRleHRFbnRpdHlUeXBlLCBzdHJpbmc+PiA9IHtcbiAgcHJvamVjdDogVklPTEVUX0lBX0NPTE9SU1sxMDBdLFxufVxuXG5jb25zdCBpbmxpbmVNZW50aW9uSG92ZXJDc3MgPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIGlzQ2xpY2thYmxlPzogYm9vbGVhbikgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3NraWxsJykgcmV0dXJuIGNzc2BgXG4gIGNvbnN0IGJnID0gSU5MSU5FX01FTlRJT05fSE9WRVJfQkdbdHlwZV0gPz8gTUVOVElPTl9DSElQX05PTl9UQVNLX0hPVkVSX0JHXG4gIHJldHVybiBjc3NgXG4gICAgYmFja2dyb3VuZDogJHtiZ307XG4gICAgb3BhY2l0eTogJHtpc0NsaWNrYWJsZSA/IDAuOTUgOiAxfTtcbiAgYFxufVxuXG4vKiogU3BhbiBpbmxpbmUgZXN0aWxhZG8gKG1lbmNpb25lcyBuby10YXNrIGVuIGNoYXQpLiAqL1xuY29uc3QgU0NJbmxpbmVNZW50aW9uID0gc3R5bGVkLnNwYW48eyAkdHlwZTogQ29udGV4dEVudGl0eVR5cGU7ICRpc0NsaWNrYWJsZT86IGJvb2xlYW4gfT5gXG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgbWFyZ2luOiAwIDFweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmb250LWZhbWlseTogdmFyKC0tY29yLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICdXb3JrIFNhbnMnKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgYmFja2dyb3VuZDogJHsoeyAkdHlwZSB9KSA9PiAoTUVOVElPTl9DSElQX0NPTE9SU1skdHlwZV0gPz8gTUVOVElPTl9DSElQX0NPTE9SUy51c2VyKS5iZ307XG4gIGNvbG9yOiAkeyh7ICR0eXBlIH0pID0+IChNRU5USU9OX0NISVBfQ09MT1JTWyR0eXBlXSA/PyBNRU5USU9OX0NISVBfQ09MT1JTLnVzZXIpLmZnfTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgY3Vyc29yOiAkeyh7ICRpc0NsaWNrYWJsZSB9KSA9PiAoJGlzQ2xpY2thYmxlID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnKX07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAmOmhvdmVyIHtcbiAgICAkeyh7ICR0eXBlLCAkaXNDbGlja2FibGUgfSkgPT4gaW5saW5lTWVudGlvbkhvdmVyQ3NzKCR0eXBlLCAkaXNDbGlja2FibGUpfVxuICB9XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvbkljb24gPSBzdHlsZWQuc3Bhbjx7ICR0YXNrPzogYm9vbGVhbiB9PmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgd2lkdGg6ICR7KHsgJHRhc2sgfSkgPT4gKCR0YXNrID8gJzE2cHgnIDogJzE0cHgnKX07XG4gIGhlaWdodDogJHsoeyAkdGFzayB9KSA9PiAoJHRhc2sgPyAnMTZweCcgOiAnMTRweCcpfTtcbmBcblxuY29uc3QgU0NJbmxpbmVNZW50aW9uSWNvblJvdyA9IHN0eWxlZC5zcGFuYFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuYFxuXG5jb25zdCBTQ0lubGluZU1lbnRpb25Xb3JkID0gc3R5bGVkLnNwYW5gXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvblJlc3QgPSBzdHlsZWQuc3BhbmBcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbmBcblxuLyoqXG4gKiBTaSBlbCBocmVmIGNvcnJlc3BvbmRlIGFsIHByb3RvY29sbyBkZSBtZW50aW9uLCBkZXZ1ZWx2ZSB1biBub2RvIGVzdGlsYWRvIHBvciB0aXBvLlxuICogTGFzIHRhcmVhcyB1c2FuIGA8YT5gIGNvbW8gbG9zIGVubGFjZXMgZGUgdGFyZWEgZGVsIGFnZW50ZSAoYC5oYXMtdGFzay1saW5rc2ApLlxuICovXG5leHBvcnQgY29uc3QgcmVuZGVyTWVudGlvbkxpbmsgPSAoaHJlZjogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGlsZHJlbjogUmVhY3ROb2RlKTogUmVhY3ROb2RlIHwgbnVsbCA9PiB7XG4gIGlmICghaHJlZiB8fCAhaHJlZi5zdGFydHNXaXRoKE1BSUFfTUVOVElPTl9QUk9UT0NPTCkpIHJldHVybiBudWxsXG4gIGNvbnN0IHsgdHlwZSwgaWQgfSA9IHBhcnNlTWVudGlvblByb3RvY29sSHJlZihocmVmKVxuICBjb25zdCBsYWJlbCA9IG1lbnRpb25DaGlsZHJlblRvTGFiZWwoY2hpbGRyZW4pXG4gIGlmICh0eXBlID09PSAnc2tpbGwnKSByZXR1cm4gPFNraWxsSW5saW5lQ2hpcCBsYWJlbD17bGFiZWx9IC8+XG4gIGNvbnN0IGlzVGFzayA9IHR5cGUgPT09ICd0YXNrJ1xuICBjb25zdCBpY29uU2l6ZSA9IGlzVGFzayA/IDE2IDogMTRcbiAgY29uc3QgdGFza1VybCA9IGAvdGFza3MvJHtpZH0vZGV0YWlsYFxuXG4gIGNvbnN0IGhhbmRsZVRhc2tDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgb3BlblRhc2tJbkNvclBhbmVsKGlkLCAnZGV0YWlsJylcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRhc2tLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ICE9PSAnRW50ZXInICYmIGUua2V5ICE9PSAnICcpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIG9wZW5UYXNrSW5Db3JQYW5lbChpZCwgJ2RldGFpbCcpXG4gIH1cblxuICBpZiAoaXNUYXNrKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ1Rhc2tMaW5rXG4gICAgICAgIGhyZWY9e3Rhc2tVcmx9XG4gICAgICAgIGNsYXNzTmFtZT17Q09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1N9XG4gICAgICAgIGRhdGEtY29yLWxpbms9XCJ0YXNrXCJcbiAgICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhc2tDbGlja31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVUYXNrS2V5RG93bn1cbiAgICAgID5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9TQ1Rhc2tMaW5rPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBwcm9qZWN0VXJsID0gaXNQcm9qZWN0ID8gYC9wcm9qZWN0cy8ke2lkfS9kYXNoYm9hcmRgIDogbnVsbFxuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgeyBmaXJzdFdvcmQsIHJlc3QgfSA9IHNwbGl0TGFiZWxGaXJzdFdvcmQobGFiZWwpXG5cbiAgY29uc3QgaGFuZGxlUHJvamVjdENsaWNrID0gKGU6IE1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghcHJvamVjdFVybCkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHdpbmRvdy5vcGVuKHByb2plY3RVcmwsICdfYmxhbmsnKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNQcm9qZWN0fVxuICAgICAgY2xhc3NOYW1lPXtDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTU31cbiAgICAgIGRhdGEtbWVudGlvbi10eXBlPXt0eXBlfVxuICAgICAgZGF0YS1tZW50aW9uLXN1cmZhY2U9XCJjaGF0XCJcbiAgICAgIG9uQ2xpY2s9e2lzUHJvamVjdCA/IGhhbmRsZVByb2plY3RDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzUHJvamVjdCA/ICdidXR0b24nIDogdW5kZWZpbmVkfVxuICAgICAgdGFiSW5kZXg9e2lzUHJvamVjdCA/IDAgOiB1bmRlZmluZWR9XG4gICAgPlxuICAgICAge3Nob3dJY29uID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uUm93PlxuICAgICAgICAgICAgPFNDSW5saW5lTWVudGlvbkljb24gJHRhc2s9e2lzVGFza30+XG4gICAgICAgICAgICAgIHtnZXRDb250ZXh0TWVudGlvbkljb24odHlwZSwgTUVOVElPTl9DSElQX0NPTE9SU1t0eXBlXS5mZywgaWQsIGljb25TaXplKX1cbiAgICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvbj5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25Xb3JkPntmaXJzdFdvcmR9PC9TQ0lubGluZU1lbnRpb25Xb3JkPlxuICAgICAgICAgIDwvU0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICB7cmVzdCA/IDxTQ0lubGluZU1lbnRpb25SZXN0PntyZXN0fTwvU0NJbmxpbmVNZW50aW9uUmVzdD4gOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgeyFzaG93SWNvbiA/IGxhYmVsIDogbnVsbH1cbiAgICA8L1NDSW5saW5lTWVudGlvbj5cbiAgKVxufVxuXG4vKiogUXVpdGEgbG9zIG1hcmtlcnMgZGVsIHRleHRvLCBkZWphbmRvIHNvbG8gYGxhYmVsYC4gw5p0aWwgcGFyYSBmYWxsYmFjayBwbGFuby4gKi9cbmV4cG9ydCBjb25zdCBzdHJpcE1lbnRpb25NYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICB0ZXh0LnJlcGxhY2UoTUVOVElPTl9NQVJLRVJfUkVHRVgsIChfbSwgX3R5cGUsIF9pZCwgbGFiZWwpID0+IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoU3RyaW5nKGxhYmVsKSkpXG5cbi8qKlxuICogVMOtdHVsb3MgZGUgY29udmVyc2FjacOzbiAocC4gZWouIGBsYXN0X3F1ZXN0aW9uYCBkZXJpdmFkbyBkZWwgcHJpbWVyIG1lbnNhamUpIHB1ZWRlblxuICogaW5jbHVpciBlbCB0ZXh0byBzZXJpYWxpemFkbyBgW1ttZW50aW9uOnR5cGU6aWR8bGFiZWxdXWAuIFBhcmEgc2lkZWJhciB5IGxpc3RhZG9zLFxuICogcmVlbXBsYXphIGNhZGEgYmxvcXVlIHBvciBgbGFiZWxgIGVuIHRleHRvIHBsYW5vLCBzaW4gZWwgbWFyY2Fkb3IgY3J1ZG8uXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRDaGF0TGlzdFRpdGxlTWVudGlvbnMgPSAodGV4dDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gIGlmICh0ZXh0ID09IG51bGwgfHwgdGV4dCA9PT0gJycpIHJldHVybiB0ZXh0ID8/ICcnXG4gIGNvbnN0IHdpdGhvdXRNZW50aW9ucyA9IHRleHQucmVwbGFjZShNRU5USU9OX01BUktFUl9SRUdFWCwgKF9tLCBfdHlwZSwgX2lkLCBsYWJlbCkgPT5cbiAgICBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKFN0cmluZyhsYWJlbCkudHJpbSgpKVxuICApXG4gIGNvbnN0IHNsYXNoUmVnZXggPSBuZXcgUmVnRXhwKFNMQVNIX0NPTU1BTkRfTUFSS0VSX1JFR0VYLnNvdXJjZSwgJ2cnKVxuICBjb25zdCB3aXRob3V0U2xhc2ggPSB3aXRob3V0TWVudGlvbnMucmVwbGFjZShzbGFzaFJlZ2V4LCAoX20sIF9pZCwgbGFiZWwpID0+IGAvJHtTdHJpbmcobGFiZWwpLnRyaW0oKX1gKVxuICBjb25zdCB3aXRob3V0SW5jb21wbGV0ZVNsYXNoID0gd2l0aG91dFNsYXNoLnJlcGxhY2UoXG4gICAgSU5DT01QTEVURV9TTEFTSF9NQVJLRVJfUkVHRVgsXG4gICAgKF9tLCBsYWJlbCkgPT4gYC8ke1N0cmluZyhsYWJlbCkudHJpbSgpfWBcbiAgKVxuICByZXR1cm4gd2l0aG91dEluY29tcGxldGVTbGFzaC5yZXBsYWNlKElOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVgsICcnKS50cmltKClcbn1cblxuLyoqIEdlbmVyYSBsYSBVUkwgZGUgbmF2ZWdhY2nDs24gcGFyYSB1biBtZW50aW9uIHNlZ8O6biBzdSB0aXBvLiAqL1xuY29uc3QgZ2V0TWVudGlvblVybCA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgaWQ6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjbGllbnQnOlxuICAgICAgcmV0dXJuIGAvY2xpZW50cy8ke2lkfWBcbiAgICBjYXNlICdwcm9qZWN0JzpcbiAgICAgIHJldHVybiBgL3Byb2plY3RzLyR7aWR9L2Rhc2hib2FyZGBcbiAgICBjYXNlICd0YXNrJzpcbiAgICAgIHJldHVybiBgL3Rhc2tzLyR7aWR9L2RldGFpbGBcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiBudWxsIC8vIExvcyB1c2VycyBubyBzb24gY2xpY2tlYWJsZXNcbiAgICBjYXNlICdtY3AnOlxuICAgICAgcmV0dXJuIG51bGxcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBNZW50aW9uQ2hpcCA9ICh7IHR5cGUsIGlkLCBsYWJlbCB9OiB7IHR5cGU6IENvbnRleHRFbnRpdHlUeXBlOyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZExhYmVsID0gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChsYWJlbClcbiAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHJldHVybiA8U2tpbGxJbmxpbmVDaGlwIGxhYmVsPXtub3JtYWxpemVkTGFiZWx9IC8+XG4gIGNvbnN0IHVybCA9IGdldE1lbnRpb25VcmwodHlwZSwgaWQpXG4gIGNvbnN0IGlzQ2xpY2thYmxlID0gISF1cmxcbiAgY29uc3QgaXNUYXNrID0gdHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IHsgZmlyc3RXb3JkLCByZXN0IH0gPSBzcGxpdExhYmVsRmlyc3RXb3JkKG5vcm1hbGl6ZWRMYWJlbClcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50IHwgSFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghaXNDbGlja2FibGUgfHwgIXVybCkgcmV0dXJuXG4gICAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgICAgaWYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpIHJldHVyblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQgfCBIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFpc0NsaWNrYWJsZSB8fCB0eXBlICE9PSAndGFzaycpIHJldHVyblxuICAgIGlmIChlLmtleSAhPT0gJ0VudGVyJyAmJiBlLmtleSAhPT0gJyAnKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgIHJldHVybiAoXG4gICAgICA8U0NUYXNrTGlua1xuICAgICAgICBocmVmPXt1cmwgPz8gJyMnfVxuICAgICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgICBkYXRhLWNvci1saW5rPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi10eXBlPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIHtub3JtYWxpemVkTGFiZWx9XG4gICAgICA8L1NDVGFza0xpbms+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNDbGlja2FibGV9XG4gICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICBkYXRhLW1lbnRpb24tc3VyZmFjZT1cImNoYXRcIlxuICAgICAgb25DbGljaz17aXNDbGlja2FibGUgPyBoYW5kbGVDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzQ2xpY2thYmxlID8gJ2J1dHRvbicgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17aXNDbGlja2FibGUgPyAwIDogdW5kZWZpbmVkfVxuICAgID5cbiAgICAgIHtzaG93SWNvbiA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uICR0YXNrPXtpc1Rhc2t9PlxuICAgICAgICAgICAgICB7Z2V0Q29udGV4dE1lbnRpb25JY29uKHR5cGUsIE1FTlRJT05fQ0hJUF9DT0xPUlNbdHlwZV0uZmcsIGlkLCBpY29uU2l6ZSl9XG4gICAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb24+XG4gICAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uV29yZD57Zmlyc3RXb3JkfTwvU0NJbmxpbmVNZW50aW9uV29yZD5cbiAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb25Sb3c+XG4gICAgICAgICAge3Jlc3QgPyA8U0NJbmxpbmVNZW50aW9uUmVzdD57cmVzdH08L1NDSW5saW5lTWVudGlvblJlc3Q+IDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHshc2hvd0ljb24gPyBub3JtYWxpemVkTGFiZWwgOiBudWxsfVxuICAgIDwvU0NJbmxpbmVNZW50aW9uPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBoYXNJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdGV4dC5pbmNsdWRlcygnW1ttZW50aW9uOicpIHx8IHRleHQuaW5jbHVkZXMoJ1tbc2xhc2hfY29tbWFuZDonKVxufVxuXG50eXBlIElubGluZU1hcmtlciA9XG4gIHwgeyBraW5kOiAnbWVudGlvbic7IGluZGV4OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyOyB0eXBlOiBDb250ZXh0RW50aXR5VHlwZTsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnc2xhc2gnOyBpbmRleDogbnVtYmVyOyBsZW5ndGg6IG51bWJlcjsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG5cbmNvbnN0IGNvbGxlY3RJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IElubGluZU1hcmtlcltdID0+IHtcbiAgY29uc3QgbWFya2VyczogSW5saW5lTWFya2VyW10gPSBbXVxuXG4gIE1FTlRJT05fTUFSS0VSX1JFR0VYLmxhc3RJbmRleCA9IDBcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIHdoaWxlIChtKSB7XG4gICAgY29uc3QgWywgcmF3VHlwZSwgaWQsIGxhYmVsXSA9IG1cbiAgICBjb25zdCB0eXBlID0gQUxMT1dFRF9UWVBFUy5pbmNsdWRlcyhyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA/IChyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA6ICd1c2VyJ1xuICAgIG1hcmtlcnMucHVzaCh7IGtpbmQ6ICdtZW50aW9uJywgaW5kZXg6IG0uaW5kZXgsIGxlbmd0aDogbVswXS5sZW5ndGgsIHR5cGUsIGlkLCBsYWJlbCB9KVxuICAgIG0gPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIH1cblxuICBjb25zdCBzbGFzaFJlZ2V4ID0gbmV3IFJlZ0V4cChTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWC5zb3VyY2UsICdnJylcbiAgbGV0IHM6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBzbGFzaFJlZ2V4LmV4ZWModGV4dClcbiAgd2hpbGUgKHMpIHtcbiAgICBtYXJrZXJzLnB1c2goeyBraW5kOiAnc2xhc2gnLCBpbmRleDogcy5pbmRleCwgbGVuZ3RoOiBzWzBdLmxlbmd0aCwgaWQ6IHNbMV0sIGxhYmVsOiBzWzJdIH0pXG4gICAgcyA9IHNsYXNoUmVnZXguZXhlYyh0ZXh0KVxuICB9XG5cbiAgcmV0dXJuIG1hcmtlcnMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpXG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJUZXh0V2l0aE1lbnRpb25zID0gKHRleHQ6IHN0cmluZyk6IEFycmF5PHN0cmluZyB8IFJlYWN0RWxlbWVudD4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBbdGV4dF1cbiAgY29uc3QgbWFya2VycyA9IGNvbGxlY3RJbmxpbmVNYXJrZXJzKHRleHQpXG4gIGlmIChtYXJrZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFt0ZXh0XVxuXG4gIGNvbnN0IG91dDogQXJyYXk8c3RyaW5nIHwgUmVhY3RFbGVtZW50PiA9IFtdXG4gIGxldCBsYXN0SWR4ID0gMFxuICBtYXJrZXJzLmZvckVhY2gobWFya2VyID0+IHtcbiAgICBpZiAobWFya2VyLmluZGV4ID4gbGFzdElkeCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4LCBtYXJrZXIuaW5kZXgpKVxuICAgIGlmIChtYXJrZXIua2luZCA9PT0gJ21lbnRpb24nKSB7XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgPE1lbnRpb25DaGlwXG4gICAgICAgICAga2V5PXtgbWVudGlvbi0ke21hcmtlci5pbmRleH0tJHttYXJrZXIudHlwZX0tJHttYXJrZXIuaWR9YH1cbiAgICAgICAgICB0eXBlPXttYXJrZXIudHlwZX1cbiAgICAgICAgICBpZD17bWFya2VyLmlkfVxuICAgICAgICAgIGxhYmVsPXttYXJrZXIubGFiZWx9XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKDxTbGFzaENvbW1hbmRDaGlwIGtleT17YHNsYXNoLSR7bWFya2VyLmluZGV4fS0ke21hcmtlci5pZH1gfSBsYWJlbD17bWFya2VyLmxhYmVsfSBpbmxpbmU9e2ZhbHNlfSAvPilcbiAgICB9XG4gICAgbGFzdElkeCA9IG1hcmtlci5pbmRleCArIG1hcmtlci5sZW5ndGhcbiAgfSlcbiAgaWYgKGxhc3RJZHggPCB0ZXh0Lmxlbmd0aCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4KSlcbiAgcmV0dXJuIG91dFxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBT0EsTUFBTSxJQUFJQyxHQUFHLFFBQVEsbUJBQW1CO0FBQy9DLFNBQTRDQywwQkFBMEIsUUFBUSx5QkFBeUI7QUFDdkcsU0FDRUMsbUJBQW1CLEVBQ25CQyw4QkFBOEIsUUFDekIsa0VBQWtFO0FBQ3pFLFNBQVNDLGdCQUFnQixRQUFRLHNDQUFzQztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsOERBQThEO0FBQzFGLFNBQVNDLDBCQUEwQixRQUFRLHNCQUFzQjtBQUNq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
399
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJjc3MiLCJDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyIsIk1FTlRJT05fQ0hJUF9DT0xPUlMiLCJNRU5USU9OX0NISVBfTk9OX1RBU0tfSE9WRVJfQkciLCJTbGFzaENvbW1hbmRDaGlwIiwiU0xBU0hfQ09NTUFORF9NQVJLRVJfUkVHRVgiLCJWSU9MRVRfSUFfQ09MT1JTIiwiU0NUYXNrTGluayIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwiLCJvcGVuVGFza0luQ29yUGFuZWwiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJNRU5USU9OX01BUktFUl9SRUdFWCIsIk1BSUFfTUVOVElPTl9QUk9UT0NPTCIsIklOQ09NUExFVEVfTUVOVElPTl9NQVJLRVJfUkVHRVgiLCJJTkNPTVBMRVRFX1NMQVNIX01BUktFUl9SRUdFWCIsIkFMTE9XRURfVFlQRVMiLCJwYXJzZU1lbnRpb25Qcm90b2NvbEhyZWYiLCJocmVmIiwicmVzdCIsInNsaWNlIiwibGVuZ3RoIiwic2xhc2hJZHgiLCJpbmRleE9mIiwicmF3VHlwZSIsInJhd0lkIiwiaWQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJfdW51c2VkIiwidHlwZSIsImluY2x1ZGVzIiwic2VyaWFsaXplTWVudGlvbiIsIm1lbnRpb24iLCJjb25jYXQiLCJsYWJlbCIsInRyYW5zZm9ybU1lbnRpb25NYXJrZXJzIiwidGV4dCIsInJlcGxhY2UiLCJfbSIsInNhZmVMYWJlbCIsIlN0cmluZyIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1lbnRpb25DaGlsZHJlblRvTGFiZWwiLCJjaGlsZHJlbiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImMiLCJqb2luIiwic3BsaXRMYWJlbEZpcnN0V29yZCIsIm5vcm1hbGl6ZWQiLCJ0cmltIiwiZmlyc3RXb3JkIiwiZmlyc3RXaGl0ZXNwYWNlSWR4Iiwic2VhcmNoIiwiSU5MSU5FX01FTlRJT05fSE9WRVJfQkciLCJwcm9qZWN0IiwiaW5saW5lTWVudGlvbkhvdmVyQ3NzIiwiaXNDbGlja2FibGUiLCJfSU5MSU5FX01FTlRJT05fSE9WRVIiLCJiZyIsIlNDSW5saW5lTWVudGlvbiIsInNwYW4iLCJ3aXRoQ29uZmlnIiwiZGlzcGxheU5hbWUiLCJjb21wb25lbnRJZCIsIl9yZWYiLCJfTUVOVElPTl9DSElQX0NPTE9SUyQiLCIkdHlwZSIsInVzZXIiLCJfcmVmMiIsIl9NRU5USU9OX0NISVBfQ09MT1JTJDIiLCJmZyIsIl9yZWYzIiwiJGlzQ2xpY2thYmxlIiwiX3JlZjQiLCJTQ0lubGluZU1lbnRpb25JY29uIiwiX3JlZjUiLCIkdGFzayIsIl9yZWY2IiwiU0NJbmxpbmVNZW50aW9uSWNvblJvdyIsIlNDSW5saW5lTWVudGlvbldvcmQiLCJTQ0lubGluZU1lbnRpb25SZXN0IiwicmVuZGVyTWVudGlvbkxpbmsiLCJzdGFydHNXaXRoIiwiX3BhcnNlTWVudGlvblByb3RvY29sIiwiaXNUYXNrIiwiaWNvblNpemUiLCJ0YXNrVXJsIiwiaGFuZGxlVGFza0NsaWNrIiwiZSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVUYXNrS2V5RG93biIsImtleSIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJvbktleURvd24iLCJpc1Byb2plY3QiLCJwcm9qZWN0VXJsIiwic2hvd0ljb24iLCJfc3BsaXRMYWJlbEZpcnN0V29yZCIsImhhbmRsZVByb2plY3RDbGljayIsIndpbmRvdyIsIm9wZW4iLCJ1bmRlZmluZWQiLCJyb2xlIiwidGFiSW5kZXgiLCJzdHJpcE1lbnRpb25NYXJrZXJzIiwiX3R5cGUiLCJfaWQiLCJmb3JtYXRDaGF0TGlzdFRpdGxlTWVudGlvbnMiLCJ3aXRob3V0TWVudGlvbnMiLCJzbGFzaFJlZ2V4IiwiUmVnRXhwIiwic291cmNlIiwid2l0aG91dFNsYXNoIiwid2l0aG91dEluY29tcGxldGVTbGFzaCIsImdldE1lbnRpb25VcmwiLCJNZW50aW9uQ2hpcCIsIl9yZWY3Iiwibm9ybWFsaXplZExhYmVsIiwidXJsIiwiX3NwbGl0TGFiZWxGaXJzdFdvcmQyIiwiaGFuZGxlQ2xpY2siLCJoYW5kbGVLZXlEb3duIiwiaGFzSW5saW5lTWFya2VycyIsImNvbGxlY3RJbmxpbmVNYXJrZXJzIiwibWFya2VycyIsImxhc3RJbmRleCIsIm0iLCJleGVjIiwiX20yIiwiX20zIiwiX3NsaWNlZFRvQXJyYXkiLCJwdXNoIiwia2luZCIsImluZGV4IiwicyIsInNvcnQiLCJhIiwiYiIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJvdXQiLCJsYXN0SWR4IiwiZm9yRWFjaCIsIm1hcmtlciIsImlubGluZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZW5kZXJDb250ZXh0TWVudGlvbnMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0Tm9kZSwgUmVhY3RFbGVtZW50LCBNb3VzZUV2ZW50LCBLZXlib2FyZEV2ZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgc3R5bGVkLCB7IGNzcyB9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uLCBDT05URVhUX01FTlRJT05fQ0hJUF9DTEFTUyB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHtcbiAgTUVOVElPTl9DSElQX0NPTE9SUyxcbiAgTUVOVElPTl9DSElQX05PTl9UQVNLX0hPVkVSX0JHLFxufSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uQ2hpcC9Db250ZXh0TWVudGlvbkNoaXAuc3R5bGVzJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kQ2hpcCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvU2xhc2hDb21tYW5kQ2hpcCdcbmltcG9ydCB7IFNMQVNIX0NPTU1BTkRfTUFSS0VSX1JFR0VYIH0gZnJvbSAnLi9zbGFzaENvbW1hbmRNYXJrZXInXG5pbXBvcnQgeyBWSU9MRVRfSUFfQ09MT1JTIH0gZnJvbSAnLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7IFNDVGFza0xpbmsgfSBmcm9tICcuLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9uZXdTdHlsZXMnXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsIH0gZnJvbSAnLi9jb250ZXh0TWVudGlvbkxhYmVsJ1xuaW1wb3J0IHsgb3BlblRhc2tJbkNvclBhbmVsIH0gZnJvbSAnLi9vcGVuVGFza0luQ29yUGFuZWwnXG5cbi8qKlxuICogRm9ybWF0byBkZWwgbWFyY2Fkb3IgcXVlIHZpYWphIGVuIGVsIHRleHRvIGRlbCBtZW5zYWplOlxuICogICBbW21lbnRpb246PHR5cGU+OjxpZD58PGxhYmVsPl1dXG4gKlxuICogRWwgZWRpdG9yIGxvIGVtaXRlIGN1YW5kbyBzZXJpYWxpemEgZWwgY29udGVudGVkaXRhYmxlLCBlbCBiYWNrZW5kIGxvXG4gKiBwZXJzaXN0ZSB0YWwgY3VhbCB5IGFsIHJlbmRlcml6YXIgc2UgdHJhbnNmb3JtYSBlbiB1biBsaW5rIG1hcmtkb3duIGNvblxuICogdW4gcHJvdG9jb2xvIHByb3BpbyBxdWUgYEN1c3RvbUxpbmtgIGludGVyY2VwdGEgeSBkaWJ1amEgY29tbyBzcGFuXG4gKiBlc3RpbGFkby5cbiAqXG4gKiBQb3Igc2VwYXJhZG8sIGxhIG1ldGFkYXRhIGBjb250ZXh0X21lc3NhZ2VgIGxsZXZhIGxvcyB2YWxvcmVzIGxpbXBpb3NcbiAqIChpZCArIG5hbWUpIHBhcmEgcXVlIGVsIGJhY2tlbmQgcHVlZGEgaW50ZXJwcmV0YXIgbGFzIGVudGlkYWRlcyBzaW5cbiAqIHRlbmVyIHF1ZSBwYXJzZWFyIGVsIHRleHRvLlxuICovXG4vKipcbiAqIExhYmVsIHB1ZWRlIGNvbnRlbmVyIGBdYCAoZWo6IFwiW0VkdWNhdGVdQmxvZyBQb3N0IC4uLlwiKSwgcG9yIGVzb1xuICogc2UgY2FwdHVyYSBkZSBmb3JtYSBsYXp5IGhhc3RhIGVsIGNpZXJyZSByZWFsIGBdXWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRU5USU9OX01BUktFUl9SRUdFWCA9IC9cXFtcXFttZW50aW9uOihjbGllbnR8cHJvamVjdHx0YXNrfHVzZXJ8bWNwfHNraWxsKTooW158XFxdXSspXFx8KFtcXHNcXFNdKj8pXFxdXFxdL2dcbmV4cG9ydCBjb25zdCBNQUlBX01FTlRJT05fUFJPVE9DT0wgPSAnbWFpYS1tZW50aW9uOi8vJ1xuY29uc3QgSU5DT01QTEVURV9NRU5USU9OX01BUktFUl9SRUdFWCA9IC9cXFtcXFttZW50aW9uOltcXHNcXFNdKiQvXG5jb25zdCBJTkNPTVBMRVRFX1NMQVNIX01BUktFUl9SRUdFWCA9IC9cXFtcXFtzbGFzaF9jb21tYW5kOltefFxcXV0rXFx8KFtcXHNcXFNdKikkL1xuXG5jb25zdCBBTExPV0VEX1RZUEVTOiBDb250ZXh0RW50aXR5VHlwZVtdID0gWydjbGllbnQnLCAncHJvamVjdCcsICd0YXNrJywgJ3VzZXInLCAnbWNwJywgJ3NraWxsJ11cblxuY29uc3QgcGFyc2VNZW50aW9uUHJvdG9jb2xIcmVmID0gKGhyZWY6IHN0cmluZyk6IHsgdHlwZTogQ29udGV4dEVudGl0eVR5cGU7IGlkOiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IHJlc3QgPSBocmVmLnNsaWNlKE1BSUFfTUVOVElPTl9QUk9UT0NPTC5sZW5ndGgpXG4gIGNvbnN0IHNsYXNoSWR4ID0gcmVzdC5pbmRleE9mKCcvJylcbiAgY29uc3QgcmF3VHlwZSA9IHNsYXNoSWR4ID49IDAgPyByZXN0LnNsaWNlKDAsIHNsYXNoSWR4KSA6IHJlc3RcbiAgY29uc3QgcmF3SWQgPSBzbGFzaElkeCA+PSAwID8gcmVzdC5zbGljZShzbGFzaElkeCArIDEpIDogJydcbiAgbGV0IGlkID0gJydcbiAgdHJ5IHtcbiAgICBpZCA9IHJhd0lkID8gZGVjb2RlVVJJQ29tcG9uZW50KHJhd0lkKSA6ICcnXG4gIH0gY2F0Y2gge1xuICAgIGlkID0gcmF3SWRcbiAgfVxuICBjb25zdCB0eXBlID0gQUxMT1dFRF9UWVBFUy5pbmNsdWRlcyhyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA/IChyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA6ICd1c2VyJ1xuICByZXR1cm4geyB0eXBlLCBpZCB9XG59XG5cbi8qKiBHZW5lcmEgZWwgbWFyY2Fkb3IgcGFyYSB1biBtZW50aW9uIGRhZG8uIExvIHVzYSBlbCBlZGl0b3IgYWwgc2VyaWFsaXphci4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVNZW50aW9uID0gKG1lbnRpb246IENvbnRleHRNZW50aW9uKTogc3RyaW5nID0+XG4gIGBbW21lbnRpb246JHttZW50aW9uLnR5cGV9OiR7bWVudGlvbi5pZH18JHttZW50aW9uLmxhYmVsfV1dYFxuXG4vKipcbiAqIENvbnZpZXJ0ZSBjYWRhIGBbW21lbnRpb246Li4uXV1gIGVuIHVuIGxpbmsgbWFya2Rvd24gY29uIHByb3RvY29sbyBwcm9waW9cbiAqIHBhcmEgcXVlIFN0cmVhbWRvd24gbG8gZW1pdGEgY29tbyBgPGE+YCB5IGBDdXN0b21MaW5rYCBsbyBpbnRlcmNlcHRlLlxuICovXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtTWVudGlvbk1hcmtlcnMgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dFxuICByZXR1cm4gdGV4dC5yZXBsYWNlKE1FTlRJT05fTUFSS0VSX1JFR0VYLCAoX20sIHR5cGUsIGlkLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IHNhZmVMYWJlbCA9IFN0cmluZyhsYWJlbCkucmVwbGFjZSgvW1xcXFxcXF1dL2csICdcXFxcJCYnKVxuICAgIHJldHVybiBgWyR7c2FmZUxhYmVsfV0oJHtNQUlBX01FTlRJT05fUFJPVE9DT0x9JHt0eXBlfS8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaWQpKX0pYFxuICB9KVxufVxuXG5jb25zdCBtZW50aW9uQ2hpbGRyZW5Ub0xhYmVsID0gKGNoaWxkcmVuOiBSZWFjdE5vZGUpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykgcmV0dXJuIG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwoY2hpbGRyZW4pXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsIHx8IGNoaWxkcmVuID09PSBmYWxzZSkgcmV0dXJuICcnXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIHJldHVybiBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKGNoaWxkcmVuLm1hcChjID0+ICh0eXBlb2YgYyA9PT0gJ3N0cmluZycgPyBjIDogJycpKS5qb2luKCcnKSlcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChTdHJpbmcoY2hpbGRyZW4pKVxufVxuXG5jb25zdCBzcGxpdExhYmVsRmlyc3RXb3JkID0gKGxhYmVsOiBzdHJpbmcpOiB7IGZpcnN0V29yZDogc3RyaW5nOyByZXN0OiBzdHJpbmcgfSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKGxhYmVsKS50cmltKClcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4geyBmaXJzdFdvcmQ6ICcnLCByZXN0OiAnJyB9XG4gIGNvbnN0IGZpcnN0V2hpdGVzcGFjZUlkeCA9IG5vcm1hbGl6ZWQuc2VhcmNoKC9cXHMvKVxuICBpZiAoZmlyc3RXaGl0ZXNwYWNlSWR4IDwgMCkgcmV0dXJuIHsgZmlyc3RXb3JkOiBub3JtYWxpemVkLCByZXN0OiAnJyB9XG4gIHJldHVybiB7XG4gICAgZmlyc3RXb3JkOiBub3JtYWxpemVkLnNsaWNlKDAsIGZpcnN0V2hpdGVzcGFjZUlkeCksXG4gICAgcmVzdDogbm9ybWFsaXplZC5zbGljZShmaXJzdFdoaXRlc3BhY2VJZHgpLFxuICB9XG59XG5cbmNvbnN0IElOTElORV9NRU5USU9OX0hPVkVSX0JHOiBQYXJ0aWFsPFJlY29yZDxDb250ZXh0RW50aXR5VHlwZSwgc3RyaW5nPj4gPSB7XG4gIHByb2plY3Q6IFZJT0xFVF9JQV9DT0xPUlNbMTAwXSxcbn1cblxuY29uc3QgaW5saW5lTWVudGlvbkhvdmVyQ3NzID0gKHR5cGU6IENvbnRleHRFbnRpdHlUeXBlLCBpc0NsaWNrYWJsZT86IGJvb2xlYW4pID0+IHtcbiAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHJldHVybiBjc3NgYFxuICBjb25zdCBiZyA9IElOTElORV9NRU5USU9OX0hPVkVSX0JHW3R5cGVdID8/IE1FTlRJT05fQ0hJUF9OT05fVEFTS19IT1ZFUl9CR1xuICByZXR1cm4gY3NzYFxuICAgIGJhY2tncm91bmQ6ICR7Ymd9O1xuICAgIG9wYWNpdHk6ICR7aXNDbGlja2FibGUgPyAwLjk1IDogMX07XG4gIGBcbn1cblxuLyoqIFNwYW4gaW5saW5lIGVzdGlsYWRvIChtZW5jaW9uZXMgbm8tdGFzayBlbiBjaGF0KS4gKi9cbmNvbnN0IFNDSW5saW5lTWVudGlvbiA9IHN0eWxlZC5zcGFuPHsgJHR5cGU6IENvbnRleHRFbnRpdHlUeXBlOyAkaXNDbGlja2FibGU/OiBib29sZWFuIH0+YFxuICBkaXNwbGF5OiBpbmxpbmU7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIG1hcmdpbjogMCAxcHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWNvci10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCAnV29yayBTYW5zJyk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGJhY2tncm91bmQ6ICR7KHsgJHR5cGUgfSkgPT4gKE1FTlRJT05fQ0hJUF9DT0xPUlNbJHR5cGVdID8/IE1FTlRJT05fQ0hJUF9DT0xPUlMudXNlcikuYmd9O1xuICBjb2xvcjogJHsoeyAkdHlwZSB9KSA9PiAoTUVOVElPTl9DSElQX0NPTE9SU1skdHlwZV0gPz8gTUVOVElPTl9DSElQX0NPTE9SUy51c2VyKS5mZ307XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIGN1cnNvcjogJHsoeyAkaXNDbGlja2FibGUgfSkgPT4gKCRpc0NsaWNrYWJsZSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0Jyl9O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgJjpob3ZlciB7XG4gICAgJHsoeyAkdHlwZSwgJGlzQ2xpY2thYmxlIH0pID0+IGlubGluZU1lbnRpb25Ib3ZlckNzcygkdHlwZSwgJGlzQ2xpY2thYmxlKX1cbiAgfVxuYFxuXG5jb25zdCBTQ0lubGluZU1lbnRpb25JY29uID0gc3R5bGVkLnNwYW48eyAkdGFzaz86IGJvb2xlYW4gfT5gXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gIHdpZHRoOiAkeyh7ICR0YXNrIH0pID0+ICgkdGFzayA/ICcxNnB4JyA6ICcxNHB4Jyl9O1xuICBoZWlnaHQ6ICR7KHsgJHRhc2sgfSkgPT4gKCR0YXNrID8gJzE2cHgnIDogJzE0cHgnKX07XG5gXG5cbmNvbnN0IFNDSW5saW5lTWVudGlvbkljb25Sb3cgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG1heC13aWR0aDogMTAwJTtcbmBcblxuY29uc3QgU0NJbmxpbmVNZW50aW9uV29yZCA9IHN0eWxlZC5zcGFuYFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuYFxuXG5jb25zdCBTQ0lubGluZU1lbnRpb25SZXN0ID0gc3R5bGVkLnNwYW5gXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5gXG5cbi8qKlxuICogU2kgZWwgaHJlZiBjb3JyZXNwb25kZSBhbCBwcm90b2NvbG8gZGUgbWVudGlvbiwgZGV2dWVsdmUgdW4gbm9kbyBlc3RpbGFkbyBwb3IgdGlwby5cbiAqIExhcyB0YXJlYXMgdXNhbiBgPGE+YCBjb21vIGxvcyBlbmxhY2VzIGRlIHRhcmVhIGRlbCBhZ2VudGUgKGAuaGFzLXRhc2stbGlua3NgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbmRlck1lbnRpb25MaW5rID0gKGhyZWY6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2hpbGRyZW46IFJlYWN0Tm9kZSk6IFJlYWN0Tm9kZSB8IG51bGwgPT4ge1xuICBpZiAoIWhyZWYgfHwgIWhyZWYuc3RhcnRzV2l0aChNQUlBX01FTlRJT05fUFJPVE9DT0wpKSByZXR1cm4gbnVsbFxuICBjb25zdCB7IHR5cGUsIGlkIH0gPSBwYXJzZU1lbnRpb25Qcm90b2NvbEhyZWYoaHJlZilcbiAgY29uc3QgbGFiZWwgPSBtZW50aW9uQ2hpbGRyZW5Ub0xhYmVsKGNoaWxkcmVuKVxuICBjb25zdCBpc1Rhc2sgPSB0eXBlID09PSAndGFzaydcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IHRhc2tVcmwgPSBgL3Rhc2tzLyR7aWR9L2RldGFpbGBcblxuICBjb25zdCBoYW5kbGVUYXNrQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQW5jaG9yRWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSkgcmV0dXJuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIG9wZW5UYXNrSW5Db3JQYW5lbChpZCwgJ2RldGFpbCcpXG4gIH1cblxuICBjb25zdCBoYW5kbGVUYXNrS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSAhPT0gJ0VudGVyJyAmJiBlLmtleSAhPT0gJyAnKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICB9XG5cbiAgaWYgKGlzVGFzaykge1xuICAgIHJldHVybiAoXG4gICAgICA8U0NUYXNrTGlua1xuICAgICAgICBocmVmPXt0YXNrVXJsfVxuICAgICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgICBkYXRhLWNvci1saW5rPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi10eXBlPXt0eXBlfVxuICAgICAgICBkYXRhLW1lbnRpb24tc3VyZmFjZT1cImNoYXRcIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVUYXNrQ2xpY2t9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlVGFza0tleURvd259XG4gICAgICA+XG4gICAgICAgIHtsYWJlbH1cbiAgICAgIDwvU0NUYXNrTGluaz5cbiAgICApXG4gIH1cblxuICBjb25zdCBpc1Byb2plY3QgPSB0eXBlID09PSAncHJvamVjdCdcbiAgY29uc3QgcHJvamVjdFVybCA9IGlzUHJvamVjdCA/IGAvcHJvamVjdHMvJHtpZH0vZGFzaGJvYXJkYCA6IG51bGxcbiAgY29uc3Qgc2hvd0ljb24gPSAhaXNQcm9qZWN0XG4gIGNvbnN0IHsgZmlyc3RXb3JkLCByZXN0IH0gPSBzcGxpdExhYmVsRmlyc3RXb3JkKGxhYmVsKVxuXG4gIGNvbnN0IGhhbmRsZVByb2plY3RDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICBpZiAoIXByb2plY3RVcmwpIHJldHVyblxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB3aW5kb3cub3Blbihwcm9qZWN0VXJsLCAnX2JsYW5rJylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDSW5saW5lTWVudGlvblxuICAgICAgJHR5cGU9e3R5cGV9XG4gICAgICAkaXNDbGlja2FibGU9e2lzUHJvamVjdH1cbiAgICAgIGNsYXNzTmFtZT17Q09OVEVYVF9NRU5USU9OX0NISVBfQ0xBU1N9XG4gICAgICBkYXRhLW1lbnRpb24tdHlwZT17dHlwZX1cbiAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICBvbkNsaWNrPXtpc1Byb2plY3QgPyBoYW5kbGVQcm9qZWN0Q2xpY2sgOiB1bmRlZmluZWR9XG4gICAgICByb2xlPXtpc1Byb2plY3QgPyAnYnV0dG9uJyA6IHVuZGVmaW5lZH1cbiAgICAgIHRhYkluZGV4PXtpc1Byb2plY3QgPyAwIDogdW5kZWZpbmVkfVxuICAgID5cbiAgICAgIHtzaG93SWNvbiA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uICR0YXNrPXtpc1Rhc2t9PlxuICAgICAgICAgICAgICB7Z2V0Q29udGV4dE1lbnRpb25JY29uKHR5cGUsIE1FTlRJT05fQ0hJUF9DT0xPUlNbdHlwZV0uZmcsIGlkLCBpY29uU2l6ZSl9XG4gICAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb24+XG4gICAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uV29yZD57Zmlyc3RXb3JkfTwvU0NJbmxpbmVNZW50aW9uV29yZD5cbiAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb25Sb3c+XG4gICAgICAgICAge3Jlc3QgPyA8U0NJbmxpbmVNZW50aW9uUmVzdD57cmVzdH08L1NDSW5saW5lTWVudGlvblJlc3Q+IDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHshc2hvd0ljb24gPyBsYWJlbCA6IG51bGx9XG4gICAgPC9TQ0lubGluZU1lbnRpb24+XG4gIClcbn1cblxuLyoqIFF1aXRhIGxvcyBtYXJrZXJzIGRlbCB0ZXh0bywgZGVqYW5kbyBzb2xvIGBsYWJlbGAuIMOadGlsIHBhcmEgZmFsbGJhY2sgcGxhbm8uICovXG5leHBvcnQgY29uc3Qgc3RyaXBNZW50aW9uTWFya2VycyA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgdGV4dC5yZXBsYWNlKE1FTlRJT05fTUFSS0VSX1JFR0VYLCAoX20sIF90eXBlLCBfaWQsIGxhYmVsKSA9PiBub3JtYWxpemVDb250ZXh0TWVudGlvbkxhYmVsKFN0cmluZyhsYWJlbCkpKVxuXG4vKipcbiAqIFTDrXR1bG9zIGRlIGNvbnZlcnNhY2nDs24gKHAuIGVqLiBgbGFzdF9xdWVzdGlvbmAgZGVyaXZhZG8gZGVsIHByaW1lciBtZW5zYWplKSBwdWVkZW5cbiAqIGluY2x1aXIgZWwgdGV4dG8gc2VyaWFsaXphZG8gYFtbbWVudGlvbjp0eXBlOmlkfGxhYmVsXV1gLiBQYXJhIHNpZGViYXIgeSBsaXN0YWRvcyxcbiAqIHJlZW1wbGF6YSBjYWRhIGJsb3F1ZSBwb3IgYGxhYmVsYCBlbiB0ZXh0byBwbGFubywgc2luIGVsIG1hcmNhZG9yIGNydWRvLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0Q2hhdExpc3RUaXRsZU1lbnRpb25zID0gKHRleHQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICBpZiAodGV4dCA9PSBudWxsIHx8IHRleHQgPT09ICcnKSByZXR1cm4gdGV4dCA/PyAnJ1xuICBjb25zdCB3aXRob3V0TWVudGlvbnMgPSB0ZXh0LnJlcGxhY2UoTUVOVElPTl9NQVJLRVJfUkVHRVgsIChfbSwgX3R5cGUsIF9pZCwgbGFiZWwpID0+XG4gICAgbm9ybWFsaXplQ29udGV4dE1lbnRpb25MYWJlbChTdHJpbmcobGFiZWwpLnRyaW0oKSlcbiAgKVxuICBjb25zdCBzbGFzaFJlZ2V4ID0gbmV3IFJlZ0V4cChTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWC5zb3VyY2UsICdnJylcbiAgY29uc3Qgd2l0aG91dFNsYXNoID0gd2l0aG91dE1lbnRpb25zLnJlcGxhY2Uoc2xhc2hSZWdleCwgKF9tLCBfaWQsIGxhYmVsKSA9PiBgLyR7U3RyaW5nKGxhYmVsKS50cmltKCl9YClcbiAgY29uc3Qgd2l0aG91dEluY29tcGxldGVTbGFzaCA9IHdpdGhvdXRTbGFzaC5yZXBsYWNlKFxuICAgIElOQ09NUExFVEVfU0xBU0hfTUFSS0VSX1JFR0VYLFxuICAgIChfbSwgbGFiZWwpID0+IGAvJHtTdHJpbmcobGFiZWwpLnRyaW0oKX1gXG4gIClcbiAgcmV0dXJuIHdpdGhvdXRJbmNvbXBsZXRlU2xhc2gucmVwbGFjZShJTkNPTVBMRVRFX01FTlRJT05fTUFSS0VSX1JFR0VYLCAnJykudHJpbSgpXG59XG5cbi8qKiBHZW5lcmEgbGEgVVJMIGRlIG5hdmVnYWNpw7NuIHBhcmEgdW4gbWVudGlvbiBzZWfDum4gc3UgdGlwby4gKi9cbmNvbnN0IGdldE1lbnRpb25VcmwgPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIGlkOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnY2xpZW50JzpcbiAgICAgIHJldHVybiBgL2NsaWVudHMvJHtpZH1gXG4gICAgY2FzZSAncHJvamVjdCc6XG4gICAgICByZXR1cm4gYC9wcm9qZWN0cy8ke2lkfS9kYXNoYm9hcmRgXG4gICAgY2FzZSAndGFzayc6XG4gICAgICByZXR1cm4gYC90YXNrcy8ke2lkfS9kZXRhaWxgXG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gbnVsbCAvLyBMb3MgdXNlcnMgbm8gc29uIGNsaWNrZWFibGVzXG4gICAgY2FzZSAnbWNwJzpcbiAgICAgIHJldHVybiBudWxsXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY29uc3QgTWVudGlvbkNoaXAgPSAoeyB0eXBlLCBpZCwgbGFiZWwgfTogeyB0eXBlOiBDb250ZXh0RW50aXR5VHlwZTsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRMYWJlbCA9IG5vcm1hbGl6ZUNvbnRleHRNZW50aW9uTGFiZWwobGFiZWwpXG4gIGNvbnN0IHVybCA9IGdldE1lbnRpb25VcmwodHlwZSwgaWQpXG4gIGNvbnN0IGlzQ2xpY2thYmxlID0gISF1cmxcbiAgY29uc3QgaXNUYXNrID0gdHlwZSA9PT0gJ3Rhc2snXG4gIGNvbnN0IGlzUHJvamVjdCA9IHR5cGUgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93SWNvbiA9ICFpc1Byb2plY3RcbiAgY29uc3QgaWNvblNpemUgPSBpc1Rhc2sgPyAxNiA6IDE0XG4gIGNvbnN0IHsgZmlyc3RXb3JkLCByZXN0IH0gPSBzcGxpdExhYmVsRmlyc3RXb3JkKG5vcm1hbGl6ZWRMYWJlbClcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50IHwgSFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIGlmICghaXNDbGlja2FibGUgfHwgIXVybCkgcmV0dXJuXG4gICAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgICAgaWYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpIHJldHVyblxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQgfCBIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKCFpc0NsaWNrYWJsZSB8fCB0eXBlICE9PSAndGFzaycpIHJldHVyblxuICAgIGlmIChlLmtleSAhPT0gJ0VudGVyJyAmJiBlLmtleSAhPT0gJyAnKSByZXR1cm5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFza0luQ29yUGFuZWwoaWQsICdkZXRhaWwnKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgIHJldHVybiAoXG4gICAgICA8U0NUYXNrTGlua1xuICAgICAgICBocmVmPXt1cmwgPz8gJyMnfVxuICAgICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgICBkYXRhLWNvci1saW5rPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi10eXBlPVwidGFza1wiXG4gICAgICAgIGRhdGEtbWVudGlvbi1zdXJmYWNlPVwiY2hhdFwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIHtub3JtYWxpemVkTGFiZWx9XG4gICAgICA8L1NDVGFza0xpbms+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NJbmxpbmVNZW50aW9uXG4gICAgICAkdHlwZT17dHlwZX1cbiAgICAgICRpc0NsaWNrYWJsZT17aXNDbGlja2FibGV9XG4gICAgICBjbGFzc05hbWU9e0NPTlRFWFRfTUVOVElPTl9DSElQX0NMQVNTfVxuICAgICAgZGF0YS1tZW50aW9uLXR5cGU9e3R5cGV9XG4gICAgICBkYXRhLW1lbnRpb24tc3VyZmFjZT1cImNoYXRcIlxuICAgICAgb25DbGljaz17aXNDbGlja2FibGUgPyBoYW5kbGVDbGljayA6IHVuZGVmaW5lZH1cbiAgICAgIHJvbGU9e2lzQ2xpY2thYmxlID8gJ2J1dHRvbicgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17aXNDbGlja2FibGUgPyAwIDogdW5kZWZpbmVkfVxuICAgID5cbiAgICAgIHtzaG93SWNvbiA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uSWNvblJvdz5cbiAgICAgICAgICAgIDxTQ0lubGluZU1lbnRpb25JY29uICR0YXNrPXtpc1Rhc2t9PlxuICAgICAgICAgICAgICB7Z2V0Q29udGV4dE1lbnRpb25JY29uKHR5cGUsIE1FTlRJT05fQ0hJUF9DT0xPUlNbdHlwZV0uZmcsIGlkLCBpY29uU2l6ZSl9XG4gICAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb24+XG4gICAgICAgICAgICA8U0NJbmxpbmVNZW50aW9uV29yZD57Zmlyc3RXb3JkfTwvU0NJbmxpbmVNZW50aW9uV29yZD5cbiAgICAgICAgICA8L1NDSW5saW5lTWVudGlvbkljb25Sb3c+XG4gICAgICAgICAge3Jlc3QgPyA8U0NJbmxpbmVNZW50aW9uUmVzdD57cmVzdH08L1NDSW5saW5lTWVudGlvblJlc3Q+IDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHshc2hvd0ljb24gPyBub3JtYWxpemVkTGFiZWwgOiBudWxsfVxuICAgIDwvU0NJbmxpbmVNZW50aW9uPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBoYXNJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdGV4dC5pbmNsdWRlcygnW1ttZW50aW9uOicpIHx8IHRleHQuaW5jbHVkZXMoJ1tbc2xhc2hfY29tbWFuZDonKVxufVxuXG50eXBlIElubGluZU1hcmtlciA9XG4gIHwgeyBraW5kOiAnbWVudGlvbic7IGluZGV4OiBudW1iZXI7IGxlbmd0aDogbnVtYmVyOyB0eXBlOiBDb250ZXh0RW50aXR5VHlwZTsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnc2xhc2gnOyBpbmRleDogbnVtYmVyOyBsZW5ndGg6IG51bWJlcjsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9XG5cbmNvbnN0IGNvbGxlY3RJbmxpbmVNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IElubGluZU1hcmtlcltdID0+IHtcbiAgY29uc3QgbWFya2VyczogSW5saW5lTWFya2VyW10gPSBbXVxuXG4gIE1FTlRJT05fTUFSS0VSX1JFR0VYLmxhc3RJbmRleCA9IDBcbiAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIHdoaWxlIChtKSB7XG4gICAgY29uc3QgWywgcmF3VHlwZSwgaWQsIGxhYmVsXSA9IG1cbiAgICBjb25zdCB0eXBlID0gQUxMT1dFRF9UWVBFUy5pbmNsdWRlcyhyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA/IChyYXdUeXBlIGFzIENvbnRleHRFbnRpdHlUeXBlKSA6ICd1c2VyJ1xuICAgIG1hcmtlcnMucHVzaCh7IGtpbmQ6ICdtZW50aW9uJywgaW5kZXg6IG0uaW5kZXgsIGxlbmd0aDogbVswXS5sZW5ndGgsIHR5cGUsIGlkLCBsYWJlbCB9KVxuICAgIG0gPSBNRU5USU9OX01BUktFUl9SRUdFWC5leGVjKHRleHQpXG4gIH1cblxuICBjb25zdCBzbGFzaFJlZ2V4ID0gbmV3IFJlZ0V4cChTTEFTSF9DT01NQU5EX01BUktFUl9SRUdFWC5zb3VyY2UsICdnJylcbiAgbGV0IHM6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBzbGFzaFJlZ2V4LmV4ZWModGV4dClcbiAgd2hpbGUgKHMpIHtcbiAgICBtYXJrZXJzLnB1c2goeyBraW5kOiAnc2xhc2gnLCBpbmRleDogcy5pbmRleCwgbGVuZ3RoOiBzWzBdLmxlbmd0aCwgaWQ6IHNbMV0sIGxhYmVsOiBzWzJdIH0pXG4gICAgcyA9IHNsYXNoUmVnZXguZXhlYyh0ZXh0KVxuICB9XG5cbiAgcmV0dXJuIG1hcmtlcnMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpXG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJUZXh0V2l0aE1lbnRpb25zID0gKHRleHQ6IHN0cmluZyk6IEFycmF5PHN0cmluZyB8IFJlYWN0RWxlbWVudD4gPT4ge1xuICBpZiAoIXRleHQpIHJldHVybiBbdGV4dF1cbiAgY29uc3QgbWFya2VycyA9IGNvbGxlY3RJbmxpbmVNYXJrZXJzKHRleHQpXG4gIGlmIChtYXJrZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFt0ZXh0XVxuXG4gIGNvbnN0IG91dDogQXJyYXk8c3RyaW5nIHwgUmVhY3RFbGVtZW50PiA9IFtdXG4gIGxldCBsYXN0SWR4ID0gMFxuICBtYXJrZXJzLmZvckVhY2gobWFya2VyID0+IHtcbiAgICBpZiAobWFya2VyLmluZGV4ID4gbGFzdElkeCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4LCBtYXJrZXIuaW5kZXgpKVxuICAgIGlmIChtYXJrZXIua2luZCA9PT0gJ21lbnRpb24nKSB7XG4gICAgICBvdXQucHVzaChcbiAgICAgICAgPE1lbnRpb25DaGlwXG4gICAgICAgICAga2V5PXtgbWVudGlvbi0ke21hcmtlci5pbmRleH0tJHttYXJrZXIudHlwZX0tJHttYXJrZXIuaWR9YH1cbiAgICAgICAgICB0eXBlPXttYXJrZXIudHlwZX1cbiAgICAgICAgICBpZD17bWFya2VyLmlkfVxuICAgICAgICAgIGxhYmVsPXttYXJrZXIubGFiZWx9XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5wdXNoKDxTbGFzaENvbW1hbmRDaGlwIGtleT17YHNsYXNoLSR7bWFya2VyLmluZGV4fS0ke21hcmtlci5pZH1gfSBsYWJlbD17bWFya2VyLmxhYmVsfSBpbmxpbmU9e2ZhbHNlfSAvPilcbiAgICB9XG4gICAgbGFzdElkeCA9IG1hcmtlci5pbmRleCArIG1hcmtlci5sZW5ndGhcbiAgfSlcbiAgaWYgKGxhc3RJZHggPCB0ZXh0Lmxlbmd0aCkgb3V0LnB1c2godGV4dC5zbGljZShsYXN0SWR4KSlcbiAgcmV0dXJuIG91dFxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBT0EsTUFBTSxJQUFJQyxHQUFHLFFBQVEsbUJBQW1CO0FBQy9DLFNBQTRDQywwQkFBMEIsUUFBUSx5QkFBeUI7QUFDdkcsU0FDRUMsbUJBQW1CLEVBQ25CQyw4QkFBOEIsUUFDekIsa0VBQWtFO0FBQ3pFLFNBQVNDLGdCQUFnQixRQUFRLHNDQUFzQztBQUN2RSxTQUFTQywwQkFBMEIsUUFBUSxzQkFBc0I7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ25ELFNBQVNDLFVBQVUsUUFBUSxrREFBa0Q7QUFDN0UsU0FBU0MscUJBQXFCLFFBQVEsdUJBQXVCO0FBQzdELFNBQVNDLDRCQUE0QixRQUFRLHVCQUF1QjtBQUNwRSxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBc0I7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQUlBLE9BQU8sSUFBTUMsb0JBQW9CLEdBQUcsNkVBQTZFO0FBQ2pILE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsaUJBQWlCO0FBQ3RELElBQU1DLCtCQUErQixHQUFHLHNCQUFzQjtBQUM5RCxJQUFNQyw2QkFBNkIsR0FBRyx1Q0FBdUM7QUFFN0UsSUFBTUMsYUFBa0MsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0FBRWhHLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLElBQVksRUFBOEM7RUFDMUYsSUFBTUMsSUFBSSxHQUFHRCxJQUFJLENBQUNFLEtBQUssQ0FBQ1AscUJBQXFCLENBQUNRLE1BQU0sQ0FBQztFQUNyRCxJQUFNQyxRQUFRLEdBQUdILElBQUksQ0FBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQztFQUNsQyxJQUFNQyxPQUFPLEdBQUdGLFFBQVEsSUFBSSxDQUFDLEdBQUdILElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUMsRUFBRUUsUUFBUSxDQUFDLEdBQUdILElBQUk7RUFDOUQsSUFBTU0sS0FBSyxHQUFHSCxRQUFRLElBQUksQ0FBQyxHQUFHSCxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUU7RUFDM0QsSUFBSUksRUFBRSxHQUFHLEVBQUU7RUFDWCxJQUFJO0lBQ0ZBLEVBQUUsR0FBR0QsS0FBSyxHQUFHRSxrQkFBa0IsQ0FBQ0YsS0FBSyxDQUFDLEdBQUcsRUFBRTtFQUM3QyxDQUFDLENBQUMsT0FBQUcsT0FBQSxFQUFNO0lBQ05GLEVBQUUsR0FBR0QsS0FBSztFQUNaO0VBQ0EsSUFBTUksSUFBSSxHQUFHYixhQUFhLENBQUNjLFFBQVEsQ0FBQ04sT0FBNEIsQ0FBQyxHQUFJQSxPQUFPLEdBQXlCLE1BQU07RUFDM0csT0FBTztJQUFFSyxJQUFJLEVBQUpBLElBQUk7SUFBRUgsRUFBRSxFQUFGQTtFQUFHLENBQUM7QUFDckIsQ0FBQzs7QUFFRDtBQUNBLE9BQU8sSUFBTUssZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSUMsT0FBdUI7RUFBQSxvQkFBQUMsTUFBQSxDQUN6Q0QsT0FBTyxDQUFDSCxJQUFJLE9BQUFJLE1BQUEsQ0FBSUQsT0FBTyxDQUFDTixFQUFFLE9BQUFPLE1BQUEsQ0FBSUQsT0FBTyxDQUFDRSxLQUFLO0FBQUEsQ0FBSTs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUlDLElBQVksRUFBYTtFQUMvRCxJQUFJLENBQUNBLElBQUksRUFBRSxPQUFPQSxJQUFJO0VBQ3RCLE9BQU9BLElBQUksQ0FBQ0MsT0FBTyxDQUFDekIsb0JBQW9CLEVBQUUsVUFBQzBCLEVBQUUsRUFBRVQsSUFBSSxFQUFFSCxFQUFFLEVBQUVRLEtBQUssRUFBSztJQUNqRSxJQUFNSyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ04sS0FBSyxDQUFDLENBQUNHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQzFELFdBQUFKLE1BQUEsQ0FBV00sU0FBUyxRQUFBTixNQUFBLENBQUtwQixxQkFBcUIsRUFBQW9CLE1BQUEsQ0FBR0osSUFBSSxPQUFBSSxNQUFBLENBQUlRLGtCQUFrQixDQUFDRCxNQUFNLENBQUNkLEVBQUUsQ0FBQyxDQUFDO0VBQ3pGLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxJQUFNZ0Isc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSUMsUUFBbUIsRUFBYTtFQUM5RCxJQUFJLE9BQU9BLFFBQVEsS0FBSyxRQUFRLEVBQUUsT0FBT3ZDLDRCQUE0QixDQUFDdUMsUUFBUSxDQUFDO0VBQy9FLElBQUlBLFFBQVEsSUFBSSxJQUFJLElBQUlBLFFBQVEsS0FBSyxLQUFLLEVBQUUsT0FBTyxFQUFFO0VBQ3JELElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixRQUFRLENBQUMsRUFBRTtJQUMzQixPQUFPdkMsNEJBQTRCLENBQUN1QyxRQUFRLENBQUNHLEdBQUcsQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSyxPQUFPQSxDQUFDLEtBQUssUUFBUSxHQUFHQSxDQUFDLEdBQUcsRUFBRTtJQUFBLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDbkc7RUFDQSxPQUFPNUMsNEJBQTRCLENBQUNvQyxNQUFNLENBQUNHLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxJQUFNTSxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJZixLQUFhLEVBQTBDO0VBQ2xGLElBQU1nQixVQUFVLEdBQUc5Qyw0QkFBNEIsQ0FBQzhCLEtBQUssQ0FBQyxDQUFDaUIsSUFBSSxDQUFDLENBQUM7RUFDN0QsSUFBSSxDQUFDRCxVQUFVLEVBQUUsT0FBTztJQUFFRSxTQUFTLEVBQUUsRUFBRTtJQUFFakMsSUFBSSxFQUFFO0VBQUcsQ0FBQztFQUNuRCxJQUFNa0Msa0JBQWtCLEdBQUdILFVBQVUsQ0FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQztFQUNsRCxJQUFJRCxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsT0FBTztJQUFFRCxTQUFTLEVBQUVGLFVBQVU7SUFBRS9CLElBQUksRUFBRTtFQUFHLENBQUM7RUFDdEUsT0FBTztJQUNMaUMsU0FBUyxFQUFFRixVQUFVLENBQUM5QixLQUFLLENBQUMsQ0FBQyxFQUFFaUMsa0JBQWtCLENBQUM7SUFDbERsQyxJQUFJLEVBQUUrQixVQUFVLENBQUM5QixLQUFLLENBQUNpQyxrQkFBa0I7RUFDM0MsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFNRSx1QkFBbUUsR0FBRztFQUMxRUMsT0FBTyxFQUFFdkQsZ0JBQWdCLENBQUMsR0FBRztBQUMvQixDQUFDO0FBRUQsSUFBTXdELHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUk1QixJQUF1QixFQUFFNkIsV0FBcUIsRUFBSztFQUFBLElBQUFDLHFCQUFBO0VBQ2hGLElBQUk5QixJQUFJLEtBQUssT0FBTyxFQUFFLE9BQU9sQyxHQUFHO0VBQ2hDLElBQU1pRSxFQUFFLElBQUFELHFCQUFBLEdBQUdKLHVCQUF1QixDQUFDMUIsSUFBSSxDQUFDLGNBQUE4QixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJN0QsOEJBQThCO0VBQzFFLE9BQU9ILEdBQUcsb0NBQ01pRSxFQUFFLEVBQ0xGLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUVyQyxDQUFDOztBQUVEO0FBQ0EsSUFBTUcsZUFBZSxHQUFHbkUsTUFBTSxDQUFDb0UsSUFBSSxDQUFBQyxVQUFBO0VBQUFDLFdBQUE7RUFBQUMsV0FBQTtBQUFBLHdWQVNuQixVQUFBQyxJQUFBO0VBQUEsSUFBQUMscUJBQUE7RUFBQSxJQUFHQyxLQUFLLEdBQUFGLElBQUEsQ0FBTEUsS0FBSztFQUFBLE9BQU8sRUFBQUQscUJBQUEsR0FBQ3RFLG1CQUFtQixDQUFDdUUsS0FBSyxDQUFDLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUl0RSxtQkFBbUIsQ0FBQ3dFLElBQUksRUFBRVQsRUFBRTtBQUFBLEdBQy9FLFVBQUFVLEtBQUE7RUFBQSxJQUFBQyxzQkFBQTtFQUFBLElBQUdILEtBQUssR0FBQUUsS0FBQSxDQUFMRixLQUFLO0VBQUEsT0FBTyxFQUFBRyxzQkFBQSxHQUFDMUUsbUJBQW1CLENBQUN1RSxLQUFLLENBQUMsY0FBQUcsc0JBQUEsY0FBQUEsc0JBQUEsR0FBSTFFLG1CQUFtQixDQUFDd0UsSUFBSSxFQUFFRyxFQUFFO0FBQUEsR0FJekUsVUFBQUMsS0FBQTtFQUFBLElBQUdDLFlBQVksR0FBQUQsS0FBQSxDQUFaQyxZQUFZO0VBQUEsT0FBUUEsWUFBWSxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQUEsQ0FBQyxFQUtsRSxVQUFBQyxLQUFBO0VBQUEsSUFBR1AsS0FBSyxHQUFBTyxLQUFBLENBQUxQLEtBQUs7SUFBRU0sWUFBWSxHQUFBQyxLQUFBLENBQVpELFlBQVk7RUFBQSxPQUFPakIscUJBQXFCLENBQUNXLEtBQUssRUFBRU0sWUFBWSxDQUFDO0FBQUEsRUFFNUU7QUFFRCxJQUFNRSxtQkFBbUIsR0FBR2xGLE1BQU0sQ0FBQ29FLElBQUksQ0FBQUMsVUFBQTtFQUFBQyxXQUFBO0VBQUFDLFdBQUE7QUFBQSxxSUFNNUIsVUFBQVksS0FBQTtFQUFBLElBQUdDLEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO0VBQUEsT0FBUUEsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNO0FBQUEsQ0FBQyxFQUN2QyxVQUFBQyxLQUFBO0VBQUEsSUFBR0QsS0FBSyxHQUFBQyxLQUFBLENBQUxELEtBQUs7RUFBQSxPQUFRQSxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU07QUFBQSxDQUFDLENBQ25EO0FBRUQsSUFBTUUsc0JBQXNCLEdBQUd0RixNQUFNLENBQUNvRSxJQUFJLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsdUdBTXpDO0FBRUQsSUFBTWdCLG1CQUFtQixHQUFHdkYsTUFBTSxDQUFDb0UsSUFBSSxDQUFBQyxVQUFBO0VBQUFDLFdBQUE7RUFBQUMsV0FBQTtBQUFBLGlEQUd0QztBQUVELElBQU1pQixtQkFBbUIsR0FBR3hGLE1BQU0sQ0FBQ29FLElBQUksQ0FBQUMsVUFBQTtFQUFBQyxXQUFBO0VBQUFDLFdBQUE7QUFBQSw4QkFFdEM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1rQixpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFJakUsSUFBd0IsRUFBRXlCLFFBQW1CLEVBQXVCO0VBQ3BHLElBQUksQ0FBQ3pCLElBQUksSUFBSSxDQUFDQSxJQUFJLENBQUNrRSxVQUFVLENBQUN2RSxxQkFBcUIsQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUNqRSxJQUFBd0UscUJBQUEsR0FBcUJwRSx3QkFBd0IsQ0FBQ0MsSUFBSSxDQUFDO0lBQTNDVyxJQUFJLEdBQUF3RCxxQkFBQSxDQUFKeEQsSUFBSTtJQUFFSCxFQUFFLEdBQUEyRCxxQkFBQSxDQUFGM0QsRUFBRTtFQUNoQixJQUFNUSxLQUFLLEdBQUdRLHNCQUFzQixDQUFDQyxRQUFRLENBQUM7RUFDOUMsSUFBTTJDLE1BQU0sR0FBR3pELElBQUksS0FBSyxNQUFNO0VBQzlCLElBQU0wRCxRQUFRLEdBQUdELE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRTtFQUNqQyxJQUFNRSxPQUFPLGFBQUF2RCxNQUFBLENBQWFQLEVBQUUsWUFBUztFQUVyQyxJQUFNK0QsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJQyxDQUFnQyxFQUFLO0lBQzVELElBQUlBLENBQUMsQ0FBQ0MsT0FBTyxJQUFJRCxDQUFDLENBQUNFLE9BQU8sRUFBRTtJQUM1QkYsQ0FBQyxDQUFDRyxjQUFjLENBQUMsQ0FBQztJQUNsQkgsQ0FBQyxDQUFDSSxlQUFlLENBQUMsQ0FBQztJQUNuQnpGLGtCQUFrQixDQUFDcUIsRUFBRSxFQUFFLFFBQVEsQ0FBQztFQUNsQyxDQUFDO0VBRUQsSUFBTXFFLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlMLENBQW1DLEVBQUs7SUFDakUsSUFBSUEsQ0FBQyxDQUFDTSxHQUFHLEtBQUssT0FBTyxJQUFJTixDQUFDLENBQUNNLEdBQUcsS0FBSyxHQUFHLEVBQUU7SUFDeENOLENBQUMsQ0FBQ0csY0FBYyxDQUFDLENBQUM7SUFDbEJ4RixrQkFBa0IsQ0FBQ3FCLEVBQUUsRUFBRSxRQUFRLENBQUM7RUFDbEMsQ0FBQztFQUVELElBQUk0RCxNQUFNLEVBQUU7SUFDVixvQkFDRS9FLElBQUEsQ0FBQ0wsVUFBVTtNQUNUZ0IsSUFBSSxFQUFFc0UsT0FBUTtNQUNkUyxTQUFTLEVBQUVyRywwQkFBMkI7TUFDdEMsaUJBQWMsTUFBTTtNQUNwQixxQkFBbUJpQyxJQUFLO01BQ3hCLHdCQUFxQixNQUFNO01BQzNCcUUsT0FBTyxFQUFFVCxlQUFnQjtNQUN6QlUsU0FBUyxFQUFFSixpQkFBa0I7TUFBQXBELFFBQUEsRUFFNUJUO0lBQUssQ0FDSSxDQUFDO0VBRWpCO0VBRUEsSUFBTWtFLFNBQVMsR0FBR3ZFLElBQUksS0FBSyxTQUFTO0VBQ3BDLElBQU13RSxVQUFVLEdBQUdELFNBQVMsZ0JBQUFuRSxNQUFBLENBQWdCUCxFQUFFLGtCQUFlLElBQUk7RUFDakUsSUFBTTRFLFFBQVEsR0FBRyxDQUFDRixTQUFTO0VBQzNCLElBQUFHLG9CQUFBLEdBQTRCdEQsbUJBQW1CLENBQUNmLEtBQUssQ0FBQztJQUE5Q2tCLFNBQVMsR0FBQW1ELG9CQUFBLENBQVRuRCxTQUFTO0lBQUVqQyxJQUFJLEdBQUFvRixvQkFBQSxDQUFKcEYsSUFBSTtFQUV2QixJQUFNcUYsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSWQsQ0FBOEIsRUFBSztJQUM3RCxJQUFJLENBQUNXLFVBQVUsRUFBRTtJQUNqQlgsQ0FBQyxDQUFDRyxjQUFjLENBQUMsQ0FBQztJQUNsQkgsQ0FBQyxDQUFDSSxlQUFlLENBQUMsQ0FBQztJQUNuQlcsTUFBTSxDQUFDQyxJQUFJLENBQUNMLFVBQVUsRUFBRSxRQUFRLENBQUM7RUFDbkMsQ0FBQztFQUVELG9CQUNFNUYsS0FBQSxDQUFDb0QsZUFBZTtJQUNkTyxLQUFLLEVBQUV2QyxJQUFLO0lBQ1o2QyxZQUFZLEVBQUUwQixTQUFVO0lBQ3hCSCxTQUFTLEVBQUVyRywwQkFBMkI7SUFDdEMscUJBQW1CaUMsSUFBSztJQUN4Qix3QkFBcUIsTUFBTTtJQUMzQnFFLE9BQU8sRUFBRUUsU0FBUyxHQUFHSSxrQkFBa0IsR0FBR0csU0FBVTtJQUNwREMsSUFBSSxFQUFFUixTQUFTLEdBQUcsUUFBUSxHQUFHTyxTQUFVO0lBQ3ZDRSxRQUFRLEVBQUVULFNBQVMsR0FBRyxDQUFDLEdBQUdPLFNBQVU7SUFBQWhFLFFBQUEsR0FFbkMyRCxRQUFRLGdCQUNQN0YsS0FBQSxDQUFBRSxTQUFBO01BQUFnQyxRQUFBLGdCQUNFbEMsS0FBQSxDQUFDdUUsc0JBQXNCO1FBQUFyQyxRQUFBLGdCQUNyQnBDLElBQUEsQ0FBQ3FFLG1CQUFtQjtVQUFDRSxLQUFLLEVBQUVRLE1BQU87VUFBQTNDLFFBQUEsRUFDaEN4QyxxQkFBcUIsQ0FBQzBCLElBQUksRUFBRWhDLG1CQUFtQixDQUFDZ0MsSUFBSSxDQUFDLENBQUMyQyxFQUFFLEVBQUU5QyxFQUFFLEVBQUU2RCxRQUFRO1FBQUMsQ0FDckQsQ0FBQyxlQUN0QmhGLElBQUEsQ0FBQzBFLG1CQUFtQjtVQUFBdEMsUUFBQSxFQUFFUztRQUFTLENBQXNCLENBQUM7TUFBQSxDQUNoQyxDQUFDLEVBQ3hCakMsSUFBSSxnQkFBR1osSUFBQSxDQUFDMkUsbUJBQW1CO1FBQUF2QyxRQUFBLEVBQUV4QjtNQUFJLENBQXNCLENBQUMsR0FBRyxJQUFJO0lBQUEsQ0FDaEUsQ0FBQyxHQUNELElBQUksRUFDUCxDQUFDbUYsUUFBUSxHQUFHcEUsS0FBSyxHQUFHLElBQUk7RUFBQSxDQUNWLENBQUM7QUFFdEIsQ0FBQzs7QUFFRDtBQUNBLE9BQU8sSUFBTTRFLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUkxRSxJQUFZO0VBQUEsT0FDOUNBLElBQUksQ0FBQ0MsT0FBTyxDQUFDekIsb0JBQW9CLEVBQUUsVUFBQzBCLEVBQUUsRUFBRXlFLEtBQUssRUFBRUMsR0FBRyxFQUFFOUUsS0FBSztJQUFBLE9BQUs5Qiw0QkFBNEIsQ0FBQ29DLE1BQU0sQ0FBQ04sS0FBSyxDQUFDLENBQUM7RUFBQSxFQUFDO0FBQUE7O0FBRTVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU0rRSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJN0UsSUFBK0IsRUFBYTtFQUN0RixJQUFJQSxJQUFJLElBQUksSUFBSSxJQUFJQSxJQUFJLEtBQUssRUFBRSxFQUFFLE9BQU9BLElBQUksYUFBSkEsSUFBSSxjQUFKQSxJQUFJLEdBQUksRUFBRTtFQUNsRCxJQUFNOEUsZUFBZSxHQUFHOUUsSUFBSSxDQUFDQyxPQUFPLENBQUN6QixvQkFBb0IsRUFBRSxVQUFDMEIsRUFBRSxFQUFFeUUsS0FBSyxFQUFFQyxHQUFHLEVBQUU5RSxLQUFLO0lBQUEsT0FDL0U5Qiw0QkFBNEIsQ0FBQ29DLE1BQU0sQ0FBQ04sS0FBSyxDQUFDLENBQUNpQixJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQUEsQ0FDcEQsQ0FBQztFQUNELElBQU1nRSxVQUFVLEdBQUcsSUFBSUMsTUFBTSxDQUFDcEgsMEJBQTBCLENBQUNxSCxNQUFNLEVBQUUsR0FBRyxDQUFDO0VBQ3JFLElBQU1DLFlBQVksR0FBR0osZUFBZSxDQUFDN0UsT0FBTyxDQUFDOEUsVUFBVSxFQUFFLFVBQUM3RSxFQUFFLEVBQUUwRSxHQUFHLEVBQUU5RSxLQUFLO0lBQUEsV0FBQUQsTUFBQSxDQUFTTyxNQUFNLENBQUNOLEtBQUssQ0FBQyxDQUFDaUIsSUFBSSxDQUFDLENBQUM7RUFBQSxDQUFFLENBQUM7RUFDeEcsSUFBTW9FLHNCQUFzQixHQUFHRCxZQUFZLENBQUNqRixPQUFPLENBQ2pEdEIsNkJBQTZCLEVBQzdCLFVBQUN1QixFQUFFLEVBQUVKLEtBQUs7SUFBQSxXQUFBRCxNQUFBLENBQVNPLE1BQU0sQ0FBQ04sS0FBSyxDQUFDLENBQUNpQixJQUFJLENBQUMsQ0FBQztFQUFBLENBQ3pDLENBQUM7RUFDRCxPQUFPb0Usc0JBQXNCLENBQUNsRixPQUFPLENBQUN2QiwrQkFBK0IsRUFBRSxFQUFFLENBQUMsQ0FBQ3FDLElBQUksQ0FBQyxDQUFDO0FBQ25GLENBQUM7O0FBRUQ7QUFDQSxJQUFNcUUsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJM0YsSUFBdUIsRUFBRUgsRUFBbUIsRUFBb0I7RUFDckYsUUFBUUcsSUFBSTtJQUNWLEtBQUssUUFBUTtNQUNYLG1CQUFBSSxNQUFBLENBQW1CUCxFQUFFO0lBQ3ZCLEtBQUssU0FBUztNQUNaLG9CQUFBTyxNQUFBLENBQW9CUCxFQUFFO0lBQ3hCLEtBQUssTUFBTTtNQUNULGlCQUFBTyxNQUFBLENBQWlCUCxFQUFFO0lBQ3JCLEtBQUssTUFBTTtNQUNULE9BQU8sSUFBSTtJQUFDO0lBQ2QsS0FBSyxLQUFLO01BQ1IsT0FBTyxJQUFJO0lBQ2I7TUFDRSxPQUFPLElBQUk7RUFDZjtBQUNGLENBQUM7QUFFRCxJQUFNK0YsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUFDLEtBQUEsRUFBb0Y7RUFBQSxJQUE5RTdGLElBQUksR0FBQTZGLEtBQUEsQ0FBSjdGLElBQUk7SUFBRUgsRUFBRSxHQUFBZ0csS0FBQSxDQUFGaEcsRUFBRTtJQUFFUSxLQUFLLEdBQUF3RixLQUFBLENBQUx4RixLQUFLO0VBQ3BDLElBQU15RixlQUFlLEdBQUd2SCw0QkFBNEIsQ0FBQzhCLEtBQUssQ0FBQztFQUMzRCxJQUFNMEYsR0FBRyxHQUFHSixhQUFhLENBQUMzRixJQUFJLEVBQUVILEVBQUUsQ0FBQztFQUNuQyxJQUFNZ0MsV0FBVyxHQUFHLENBQUMsQ0FBQ2tFLEdBQUc7RUFDekIsSUFBTXRDLE1BQU0sR0FBR3pELElBQUksS0FBSyxNQUFNO0VBQzlCLElBQU11RSxTQUFTLEdBQUd2RSxJQUFJLEtBQUssU0FBUztFQUNwQyxJQUFNeUUsUUFBUSxHQUFHLENBQUNGLFNBQVM7RUFDM0IsSUFBTWIsUUFBUSxHQUFHRCxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDakMsSUFBQXVDLHFCQUFBLEdBQTRCNUUsbUJBQW1CLENBQUMwRSxlQUFlLENBQUM7SUFBeER2RSxTQUFTLEdBQUF5RSxxQkFBQSxDQUFUekUsU0FBUztJQUFFakMsSUFBSSxHQUFBMEcscUJBQUEsQ0FBSjFHLElBQUk7RUFFdkIsSUFBTTJHLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJcEMsQ0FBa0QsRUFBSztJQUMxRSxJQUFJLENBQUNoQyxXQUFXLElBQUksQ0FBQ2tFLEdBQUcsRUFBRTtJQUMxQixJQUFJL0YsSUFBSSxLQUFLLE1BQU0sRUFBRTtNQUNuQixJQUFJNkQsQ0FBQyxDQUFDQyxPQUFPLElBQUlELENBQUMsQ0FBQ0UsT0FBTyxFQUFFO01BQzVCRixDQUFDLENBQUNHLGNBQWMsQ0FBQyxDQUFDO01BQ2xCSCxDQUFDLENBQUNJLGVBQWUsQ0FBQyxDQUFDO01BQ25CekYsa0JBQWtCLENBQUNxQixFQUFFLEVBQUUsUUFBUSxDQUFDO01BQ2hDO0lBQ0Y7SUFDQWdFLENBQUMsQ0FBQ0csY0FBYyxDQUFDLENBQUM7SUFDbEJZLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDa0IsR0FBRyxFQUFFLFFBQVEsQ0FBQztFQUM1QixDQUFDO0VBRUQsSUFBTUcsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJckMsQ0FBcUQsRUFBSztJQUMvRSxJQUFJLENBQUNoQyxXQUFXLElBQUk3QixJQUFJLEtBQUssTUFBTSxFQUFFO0lBQ3JDLElBQUk2RCxDQUFDLENBQUNNLEdBQUcsS0FBSyxPQUFPLElBQUlOLENBQUMsQ0FBQ00sR0FBRyxLQUFLLEdBQUcsRUFBRTtJQUN4Q04sQ0FBQyxDQUFDRyxjQUFjLENBQUMsQ0FBQztJQUNsQnhGLGtCQUFrQixDQUFDcUIsRUFBRSxFQUFFLFFBQVEsQ0FBQztFQUNsQyxDQUFDO0VBRUQsSUFBSUcsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUNuQixvQkFDRXRCLElBQUEsQ0FBQ0wsVUFBVTtNQUNUZ0IsSUFBSSxFQUFFMEcsR0FBRyxhQUFIQSxHQUFHLGNBQUhBLEdBQUcsR0FBSSxHQUFJO01BQ2pCM0IsU0FBUyxFQUFFckcsMEJBQTJCO01BQ3RDLGlCQUFjLE1BQU07TUFDcEIscUJBQWtCLE1BQU07TUFDeEIsd0JBQXFCLE1BQU07TUFDM0JzRyxPQUFPLEVBQUU0QixXQUFZO01BQ3JCM0IsU0FBUyxFQUFFNEIsYUFBYztNQUFBcEYsUUFBQSxFQUV4QmdGO0lBQWUsQ0FDTixDQUFDO0VBRWpCO0VBRUEsb0JBQ0VsSCxLQUFBLENBQUNvRCxlQUFlO0lBQ2RPLEtBQUssRUFBRXZDLElBQUs7SUFDWjZDLFlBQVksRUFBRWhCLFdBQVk7SUFDMUJ1QyxTQUFTLEVBQUVyRywwQkFBMkI7SUFDdEMscUJBQW1CaUMsSUFBSztJQUN4Qix3QkFBcUIsTUFBTTtJQUMzQnFFLE9BQU8sRUFBRXhDLFdBQVcsR0FBR29FLFdBQVcsR0FBR25CLFNBQVU7SUFDL0NDLElBQUksRUFBRWxELFdBQVcsR0FBRyxRQUFRLEdBQUdpRCxTQUFVO0lBQ3pDRSxRQUFRLEVBQUVuRCxXQUFXLEdBQUcsQ0FBQyxHQUFHaUQsU0FBVTtJQUFBaEUsUUFBQSxHQUVyQzJELFFBQVEsZ0JBQ1A3RixLQUFBLENBQUFFLFNBQUE7TUFBQWdDLFFBQUEsZ0JBQ0VsQyxLQUFBLENBQUN1RSxzQkFBc0I7UUFBQXJDLFFBQUEsZ0JBQ3JCcEMsSUFBQSxDQUFDcUUsbUJBQW1CO1VBQUNFLEtBQUssRUFBRVEsTUFBTztVQUFBM0MsUUFBQSxFQUNoQ3hDLHFCQUFxQixDQUFDMEIsSUFBSSxFQUFFaEMsbUJBQW1CLENBQUNnQyxJQUFJLENBQUMsQ0FBQzJDLEVBQUUsRUFBRTlDLEVBQUUsRUFBRTZELFFBQVE7UUFBQyxDQUNyRCxDQUFDLGVBQ3RCaEYsSUFBQSxDQUFDMEUsbUJBQW1CO1VBQUF0QyxRQUFBLEVBQUVTO1FBQVMsQ0FBc0IsQ0FBQztNQUFBLENBQ2hDLENBQUMsRUFDeEJqQyxJQUFJLGdCQUFHWixJQUFBLENBQUMyRSxtQkFBbUI7UUFBQXZDLFFBQUEsRUFBRXhCO01BQUksQ0FBc0IsQ0FBQyxHQUFHLElBQUk7SUFBQSxDQUNoRSxDQUFDLEdBQ0QsSUFBSSxFQUNQLENBQUNtRixRQUFRLEdBQUdxQixlQUFlLEdBQUcsSUFBSTtFQUFBLENBQ3BCLENBQUM7QUFFdEIsQ0FBQztBQUVELE9BQU8sSUFBTUssZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSTVGLElBQVksRUFBYztFQUN6RCxJQUFJLENBQUNBLElBQUksRUFBRSxPQUFPLEtBQUs7RUFDdkIsT0FBT0EsSUFBSSxDQUFDTixRQUFRLENBQUMsWUFBWSxDQUFDLElBQUlNLElBQUksQ0FBQ04sUUFBUSxDQUFDLGtCQUFrQixDQUFDO0FBQ3pFLENBQUM7QUFNRCxJQUFNbUcsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSTdGLElBQVksRUFBcUI7RUFDN0QsSUFBTThGLE9BQXVCLEdBQUcsRUFBRTtFQUVsQ3RILG9CQUFvQixDQUFDdUgsU0FBUyxHQUFHLENBQUM7RUFDbEMsSUFBSUMsQ0FBeUIsR0FBR3hILG9CQUFvQixDQUFDeUgsSUFBSSxDQUFDakcsSUFBSSxDQUFDO0VBQy9ELE9BQU9nRyxDQUFDLEVBQUU7SUFDUixJQUFBRSxHQUFBLEdBQStCRixDQUFDO01BQUFHLEdBQUEsR0FBQUMsY0FBQSxDQUFBRixHQUFBO01BQXZCOUcsT0FBTyxHQUFBK0csR0FBQTtNQUFFN0csRUFBRSxHQUFBNkcsR0FBQTtNQUFFckcsS0FBSyxHQUFBcUcsR0FBQTtJQUMzQixJQUFNMUcsSUFBSSxHQUFHYixhQUFhLENBQUNjLFFBQVEsQ0FBQ04sT0FBNEIsQ0FBQyxHQUFJQSxPQUFPLEdBQXlCLE1BQU07SUFDM0cwRyxPQUFPLENBQUNPLElBQUksQ0FBQztNQUFFQyxJQUFJLEVBQUUsU0FBUztNQUFFQyxLQUFLLEVBQUVQLENBQUMsQ0FBQ08sS0FBSztNQUFFdEgsTUFBTSxFQUFFK0csQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL0csTUFBTTtNQUFFUSxJQUFJLEVBQUpBLElBQUk7TUFBRUgsRUFBRSxFQUFGQSxFQUFFO01BQUVRLEtBQUssRUFBTEE7SUFBTSxDQUFDLENBQUM7SUFDdkZrRyxDQUFDLEdBQUd4SCxvQkFBb0IsQ0FBQ3lILElBQUksQ0FBQ2pHLElBQUksQ0FBQztFQUNyQztFQUVBLElBQU0rRSxVQUFVLEdBQUcsSUFBSUMsTUFBTSxDQUFDcEgsMEJBQTBCLENBQUNxSCxNQUFNLEVBQUUsR0FBRyxDQUFDO0VBQ3JFLElBQUl1QixDQUF5QixHQUFHekIsVUFBVSxDQUFDa0IsSUFBSSxDQUFDakcsSUFBSSxDQUFDO0VBQ3JELE9BQU93RyxDQUFDLEVBQUU7SUFDUlYsT0FBTyxDQUFDTyxJQUFJLENBQUM7TUFBRUMsSUFBSSxFQUFFLE9BQU87TUFBRUMsS0FBSyxFQUFFQyxDQUFDLENBQUNELEtBQUs7TUFBRXRILE1BQU0sRUFBRXVILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZILE1BQU07TUFBRUssRUFBRSxFQUFFa0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUFFMUcsS0FBSyxFQUFFMEcsQ0FBQyxDQUFDLENBQUM7SUFBRSxDQUFDLENBQUM7SUFDM0ZBLENBQUMsR0FBR3pCLFVBQVUsQ0FBQ2tCLElBQUksQ0FBQ2pHLElBQUksQ0FBQztFQUMzQjtFQUVBLE9BQU84RixPQUFPLENBQUNXLElBQUksQ0FBQyxVQUFDQyxDQUFDLEVBQUVDLENBQUM7SUFBQSxPQUFLRCxDQUFDLENBQUNILEtBQUssR0FBR0ksQ0FBQyxDQUFDSixLQUFLO0VBQUEsRUFBQztBQUNsRCxDQUFDO0FBRUQsT0FBTyxJQUFNSyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJNUcsSUFBWSxFQUFtQztFQUNwRixJQUFJLENBQUNBLElBQUksRUFBRSxPQUFPLENBQUNBLElBQUksQ0FBQztFQUN4QixJQUFNOEYsT0FBTyxHQUFHRCxvQkFBb0IsQ0FBQzdGLElBQUksQ0FBQztFQUMxQyxJQUFJOEYsT0FBTyxDQUFDN0csTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUNlLElBQUksQ0FBQztFQUV2QyxJQUFNNkcsR0FBaUMsR0FBRyxFQUFFO0VBQzVDLElBQUlDLE9BQU8sR0FBRyxDQUFDO0VBQ2ZoQixPQUFPLENBQUNpQixPQUFPLENBQUMsVUFBQUMsTUFBTSxFQUFJO0lBQ3hCLElBQUlBLE1BQU0sQ0FBQ1QsS0FBSyxHQUFHTyxPQUFPLEVBQUVELEdBQUcsQ0FBQ1IsSUFBSSxDQUFDckcsSUFBSSxDQUFDaEIsS0FBSyxDQUFDOEgsT0FBTyxFQUFFRSxNQUFNLENBQUNULEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLElBQUlTLE1BQU0sQ0FBQ1YsSUFBSSxLQUFLLFNBQVMsRUFBRTtNQUM3Qk8sR0FBRyxDQUFDUixJQUFJLGNBQ05sSSxJQUFBLENBQUNrSCxXQUFXO1FBRVY1RixJQUFJLEVBQUV1SCxNQUFNLENBQUN2SCxJQUFLO1FBQ2xCSCxFQUFFLEVBQUUwSCxNQUFNLENBQUMxSCxFQUFHO1FBQ2RRLEtBQUssRUFBRWtILE1BQU0sQ0FBQ2xIO01BQU0sY0FBQUQsTUFBQSxDQUhKbUgsTUFBTSxDQUFDVCxLQUFLLE9BQUExRyxNQUFBLENBQUltSCxNQUFNLENBQUN2SCxJQUFJLE9BQUFJLE1BQUEsQ0FBSW1ILE1BQU0sQ0FBQzFILEVBQUUsQ0FJekQsQ0FDSCxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ0x1SCxHQUFHLENBQUNSLElBQUksY0FBQ2xJLElBQUEsQ0FBQ1IsZ0JBQWdCO1FBQTRDbUMsS0FBSyxFQUFFa0gsTUFBTSxDQUFDbEgsS0FBTTtRQUFDbUgsTUFBTSxFQUFFO01BQU0sWUFBQXBILE1BQUEsQ0FBaEVtSCxNQUFNLENBQUNULEtBQUssT0FBQTFHLE1BQUEsQ0FBSW1ILE1BQU0sQ0FBQzFILEVBQUUsQ0FBeUMsQ0FBQyxDQUFDO0lBQy9HO0lBQ0F3SCxPQUFPLEdBQUdFLE1BQU0sQ0FBQ1QsS0FBSyxHQUFHUyxNQUFNLENBQUMvSCxNQUFNO0VBQ3hDLENBQUMsQ0FBQztFQUNGLElBQUk2SCxPQUFPLEdBQUc5RyxJQUFJLENBQUNmLE1BQU0sRUFBRTRILEdBQUcsQ0FBQ1IsSUFBSSxDQUFDckcsSUFBSSxDQUFDaEIsS0FBSyxDQUFDOEgsT0FBTyxDQUFDLENBQUM7RUFDeEQsT0FBT0QsR0FBRztBQUNaLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcor/maia-components",
3
- "version": "2.35.4-0",
3
+ "version": "2.35.4-1",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {
@@ -1,208 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
- import { useEffect, useMemo, useRef, useState } from 'react';
6
- import { InformationCircle } from '@projectcor/icons/lib/components/InformationCircle';
7
- import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
8
- import { useT } from '../../../hooks/useT';
9
- import { PlusIcon } from '../icons/PlusIcon';
10
- import { Skeleton } from '../Skeleton/Skeleton';
11
- import { SCSKDAnchor, SCSKDCreateHeader, SCSKDCreateInfoIcon, SCSKDCreateRow, SCSKDDivider, SCSKDDropdown, SCSKDItem, SCSKDItemSubtitle, SCSKDItemTitle, SCSKDList, SCSKDMatchHighlight, SCSKDSkeletonList, SCSKDStateMessage } from './SkillsDropdown.styles';
12
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
- var renderWithHighlight = function renderWithHighlight(text, query) {
14
- var needle = query.trim().toLowerCase();
15
- if (!needle) return text;
16
- var haystack = text.toLowerCase();
17
- if (haystack.indexOf(needle) === -1) return text;
18
- var parts = [];
19
- var cursor = 0;
20
- var nextIdx = haystack.indexOf(needle, cursor);
21
- var chunkKey = 0;
22
- while (nextIdx !== -1) {
23
- if (nextIdx > cursor) parts.push(text.slice(cursor, nextIdx));
24
- parts.push(/*#__PURE__*/_jsx(SCSKDMatchHighlight, {
25
- children: text.slice(nextIdx, nextIdx + needle.length)
26
- }, "m-".concat(chunkKey)));
27
- chunkKey += 1;
28
- cursor = nextIdx + needle.length;
29
- nextIdx = haystack.indexOf(needle, cursor);
30
- }
31
- if (cursor < text.length) parts.push(text.slice(cursor));
32
- return parts;
33
- };
34
- export var SkillsDropdown = function SkillsDropdown(_ref) {
35
- var skills = _ref.skills,
36
- query = _ref.query,
37
- _ref$loading = _ref.loading,
38
- loading = _ref$loading === void 0 ? false : _ref$loading,
39
- _ref$error = _ref.error,
40
- error = _ref$error === void 0 ? false : _ref$error,
41
- _ref$canCreate = _ref.canCreate,
42
- canCreate = _ref$canCreate === void 0 ? false : _ref$canCreate,
43
- onSelect = _ref.onSelect,
44
- onCreate = _ref.onCreate,
45
- onClose = _ref.onClose,
46
- bottom = _ref.bottom,
47
- left = _ref.left,
48
- maxHeight = _ref.maxHeight,
49
- zIndex = _ref.zIndex,
50
- anchorRef = _ref.anchorRef;
51
- var _useT = useT(),
52
- t = _useT.t;
53
- var _useState = useState(0),
54
- _useState2 = _slicedToArray(_useState, 2),
55
- highlightedIndex = _useState2[0],
56
- setHighlightedIndex = _useState2[1];
57
- var dropdownRef = useRef(null);
58
- var itemRefs = useRef([]);
59
- var filtered = useMemo(function () {
60
- var normalized = query.trim().toLowerCase();
61
- if (!normalized) return skills;
62
- return skills.filter(function (s) {
63
- return s.name.toLowerCase().includes(normalized);
64
- });
65
- }, [skills, query]);
66
- useEffect(function () {
67
- setHighlightedIndex(0);
68
- }, [query]);
69
- useEffect(function () {
70
- itemRefs.current = itemRefs.current.slice(0, filtered.length);
71
- }, [filtered.length]);
72
- useEffect(function () {
73
- var handlePointerDownOutside = function handlePointerDownOutside(mouseEvent) {
74
- var _dropdownRef$current, _anchorRef$current;
75
- var target = mouseEvent.target;
76
- if (!target) return;
77
- if ((_dropdownRef$current = dropdownRef.current) !== null && _dropdownRef$current !== void 0 && _dropdownRef$current.contains(target)) return;
78
- if (anchorRef !== null && anchorRef !== void 0 && (_anchorRef$current = anchorRef.current) !== null && _anchorRef$current !== void 0 && _anchorRef$current.contains(target)) return;
79
- onClose();
80
- };
81
- document.addEventListener('mousedown', handlePointerDownOutside);
82
- return function () {
83
- return document.removeEventListener('mousedown', handlePointerDownOutside);
84
- };
85
- }, [onClose, anchorRef]);
86
- useEffect(function () {
87
- var scrollHighlightedIntoView = function scrollHighlightedIntoView(index) {
88
- requestAnimationFrame(function () {
89
- var _itemRefs$current$ind;
90
- (_itemRefs$current$ind = itemRefs.current[index]) === null || _itemRefs$current$ind === void 0 || _itemRefs$current$ind.scrollIntoView({
91
- block: 'nearest'
92
- });
93
- });
94
- };
95
- var handler = function handler(e) {
96
- if (e.key === 'ArrowDown') {
97
- e.preventDefault();
98
- var next = filtered.length ? (highlightedIndex + 1) % filtered.length : 0;
99
- setHighlightedIndex(next);
100
- scrollHighlightedIntoView(next);
101
- } else if (e.key === 'ArrowUp') {
102
- e.preventDefault();
103
- var _next = filtered.length ? (highlightedIndex - 1 + filtered.length) % filtered.length : 0;
104
- setHighlightedIndex(_next);
105
- scrollHighlightedIntoView(_next);
106
- } else if (e.key === 'Enter') {
107
- if (filtered[highlightedIndex]) {
108
- e.preventDefault();
109
- e.stopPropagation();
110
- onSelect(filtered[highlightedIndex]);
111
- }
112
- } else if (e.key === 'Escape') {
113
- e.preventDefault();
114
- onClose();
115
- }
116
- };
117
- document.addEventListener('keydown', handler, true);
118
- return function () {
119
- return document.removeEventListener('keydown', handler, true);
120
- };
121
- }, [filtered, highlightedIndex, onSelect, onClose]);
122
- var renderBody = function renderBody() {
123
- if (loading) {
124
- return /*#__PURE__*/_jsx(SCSKDSkeletonList, {
125
- children: [0, 1, 2].map(function (i) {
126
- return /*#__PURE__*/_jsx(Skeleton, {
127
- variant: "text",
128
- height: 20,
129
- width: i === 0 ? '70%' : '55%'
130
- }, i);
131
- })
132
- });
133
- }
134
- if (error) {
135
- return /*#__PURE__*/_jsx(SCSKDStateMessage, {
136
- children: t('mySkills.dropdownError')
137
- });
138
- }
139
- if (filtered.length === 0) {
140
- return /*#__PURE__*/_jsx(SCSKDStateMessage, {
141
- children: t('mySkills.dropdownEmpty')
142
- });
143
- }
144
- return /*#__PURE__*/_jsx(SCSKDList, {
145
- children: filtered.map(function (skill, index) {
146
- return /*#__PURE__*/_jsxs(SCSKDItem, {
147
- ref: function ref(el) {
148
- itemRefs.current[index] = el;
149
- },
150
- $index: index,
151
- $highlighted: index === highlightedIndex,
152
- onMouseEnter: function onMouseEnter() {
153
- return setHighlightedIndex(index);
154
- },
155
- onClick: function onClick() {
156
- return onSelect(skill);
157
- },
158
- type: "button",
159
- children: [/*#__PURE__*/_jsx(SCSKDItemTitle, {
160
- children: renderWithHighlight("#".concat(skill.name), query)
161
- }), skill.description && /*#__PURE__*/_jsx(SCSKDItemSubtitle, {
162
- children: skill.description
163
- })]
164
- }, skill.id);
165
- })
166
- });
167
- };
168
- return /*#__PURE__*/_jsx(SCSKDAnchor, {
169
- $bottom: bottom,
170
- $left: left,
171
- $maxHeight: maxHeight,
172
- $zIndex: zIndex,
173
- onMouseDown: function onMouseDown(e) {
174
- return e.stopPropagation();
175
- },
176
- children: /*#__PURE__*/_jsxs(SCSKDDropdown, {
177
- ref: dropdownRef,
178
- children: [canCreate && onCreate && /*#__PURE__*/_jsxs(_Fragment, {
179
- children: [/*#__PURE__*/_jsxs(SCSKDCreateHeader, {
180
- children: [/*#__PURE__*/_jsxs(SCSKDCreateRow, {
181
- type: "button",
182
- onClick: onCreate,
183
- children: [/*#__PURE__*/_jsx(PlusIcon, {
184
- width: 16,
185
- height: 16
186
- }), t('mySkills.dropdownCreate')]
187
- }), /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
188
- title: t('mySkills.infoTooltip')
189
- }, zIndex != null ? {
190
- zIndex: zIndex + 1
191
- } : {}), {}, {
192
- children: /*#__PURE__*/_jsx(SCSKDCreateInfoIcon, {
193
- "aria-label": t('mySkills.infoTooltip'),
194
- children: /*#__PURE__*/_jsx(InformationCircle, {
195
- color: "#808080",
196
- width: 20,
197
- height: 20
198
- })
199
- })
200
- }))]
201
- }), /*#__PURE__*/_jsx(SCSKDDivider, {
202
- children: /*#__PURE__*/_jsx("span", {})
203
- })]
204
- }), renderBody()]
205
- })
206
- });
207
- };
208
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJJbmZvcm1hdGlvbkNpcmNsZSIsIlRvb2x0aXAiLCJ1c2VUIiwiUGx1c0ljb24iLCJTa2VsZXRvbiIsIlNDU0tEQW5jaG9yIiwiU0NTS0RDcmVhdGVIZWFkZXIiLCJTQ1NLRENyZWF0ZUluZm9JY29uIiwiU0NTS0RDcmVhdGVSb3ciLCJTQ1NLRERpdmlkZXIiLCJTQ1NLRERyb3Bkb3duIiwiU0NTS0RJdGVtIiwiU0NTS0RJdGVtU3VidGl0bGUiLCJTQ1NLREl0ZW1UaXRsZSIsIlNDU0tETGlzdCIsIlNDU0tETWF0Y2hIaWdobGlnaHQiLCJTQ1NLRFNrZWxldG9uTGlzdCIsIlNDU0tEU3RhdGVNZXNzYWdlIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwicmVuZGVyV2l0aEhpZ2hsaWdodCIsInRleHQiLCJxdWVyeSIsIm5lZWRsZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImhheXN0YWNrIiwiaW5kZXhPZiIsInBhcnRzIiwiY3Vyc29yIiwibmV4dElkeCIsImNodW5rS2V5IiwicHVzaCIsInNsaWNlIiwiY2hpbGRyZW4iLCJsZW5ndGgiLCJjb25jYXQiLCJTa2lsbHNEcm9wZG93biIsIl9yZWYiLCJza2lsbHMiLCJfcmVmJGxvYWRpbmciLCJsb2FkaW5nIiwiX3JlZiRlcnJvciIsImVycm9yIiwiX3JlZiRjYW5DcmVhdGUiLCJjYW5DcmVhdGUiLCJvblNlbGVjdCIsIm9uQ3JlYXRlIiwib25DbG9zZSIsImJvdHRvbSIsImxlZnQiLCJtYXhIZWlnaHQiLCJ6SW5kZXgiLCJhbmNob3JSZWYiLCJfdXNlVCIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoaWdobGlnaHRlZEluZGV4Iiwic2V0SGlnaGxpZ2h0ZWRJbmRleCIsImRyb3Bkb3duUmVmIiwiaXRlbVJlZnMiLCJmaWx0ZXJlZCIsIm5vcm1hbGl6ZWQiLCJmaWx0ZXIiLCJzIiwibmFtZSIsImluY2x1ZGVzIiwiY3VycmVudCIsImhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSIsIm1vdXNlRXZlbnQiLCJfZHJvcGRvd25SZWYkY3VycmVudCIsIl9hbmNob3JSZWYkY3VycmVudCIsInRhcmdldCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNjcm9sbEhpZ2hsaWdodGVkSW50b1ZpZXciLCJpbmRleCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIl9pdGVtUmVmcyRjdXJyZW50JGluZCIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCJoYW5kbGVyIiwiZSIsImtleSIsInByZXZlbnREZWZhdWx0IiwibmV4dCIsInN0b3BQcm9wYWdhdGlvbiIsInJlbmRlckJvZHkiLCJtYXAiLCJpIiwidmFyaWFudCIsImhlaWdodCIsIndpZHRoIiwic2tpbGwiLCJyZWYiLCJlbCIsIiRpbmRleCIsIiRoaWdobGlnaHRlZCIsIm9uTW91c2VFbnRlciIsIm9uQ2xpY2siLCJ0eXBlIiwiZGVzY3JpcHRpb24iLCJpZCIsIiRib3R0b20iLCIkbGVmdCIsIiRtYXhIZWlnaHQiLCIkekluZGV4Iiwib25Nb3VzZURvd24iLCJfb2JqZWN0U3ByZWFkIiwidGl0bGUiLCJjb2xvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1NraWxsc0Ryb3Bkb3duL1NraWxsc0Ryb3Bkb3duLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEluZm9ybWF0aW9uQ2lyY2xlIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvSW5mb3JtYXRpb25DaXJjbGUnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgdHlwZSB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IFBsdXNJY29uIH0gZnJvbSAnLi4vaWNvbnMvUGx1c0ljb24nXG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uL1NrZWxldG9uL1NrZWxldG9uJ1xuaW1wb3J0IHtcbiAgU0NTS0RBbmNob3IsXG4gIFNDU0tEQ3JlYXRlSGVhZGVyLFxuICBTQ1NLRENyZWF0ZUluZm9JY29uLFxuICBTQ1NLRENyZWF0ZVJvdyxcbiAgU0NTS0REaXZpZGVyLFxuICBTQ1NLRERyb3Bkb3duLFxuICBTQ1NLREl0ZW0sXG4gIFNDU0tESXRlbVN1YnRpdGxlLFxuICBTQ1NLREl0ZW1UaXRsZSxcbiAgU0NTS0RMaXN0LFxuICBTQ1NLRE1hdGNoSGlnaGxpZ2h0LFxuICBTQ1NLRFNrZWxldG9uTGlzdCxcbiAgU0NTS0RTdGF0ZU1lc3NhZ2UsXG59IGZyb20gJy4vU2tpbGxzRHJvcGRvd24uc3R5bGVzJ1xuXG50eXBlIFNraWxsc0Ryb3Bkb3duUHJvcHMgPSB7XG4gIHNraWxsczogU2tpbGxbXVxuICBxdWVyeTogc3RyaW5nXG4gIGxvYWRpbmc/OiBib29sZWFuXG4gIGVycm9yPzogYm9vbGVhblxuICBjYW5DcmVhdGU/OiBib29sZWFuXG4gIG9uU2VsZWN0OiAoc2tpbGw6IFNraWxsKSA9PiB2b2lkXG4gIG9uQ3JlYXRlPzogKCkgPT4gdm9pZFxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIGJvdHRvbTogbnVtYmVyXG4gIGxlZnQ6IG51bWJlclxuICBtYXhIZWlnaHQ/OiBudW1iZXJcbiAgekluZGV4PzogbnVtYmVyXG4gIC8qKiBOb2RvIGFuY2xhIChwLiBlai4gYm90w7NuIGRlIHNraWxscyk6IGNsaWNrcyBhaMOtIG5vIGNpZXJyYW4gZWwgbWVuw7ouICovXG4gIGFuY2hvclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG59XG5cbmNvbnN0IHJlbmRlcldpdGhIaWdobGlnaHQgPSAodGV4dDogc3RyaW5nLCBxdWVyeTogc3RyaW5nKTogUmVhY3ROb2RlID0+IHtcbiAgY29uc3QgbmVlZGxlID0gcXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgaWYgKCFuZWVkbGUpIHJldHVybiB0ZXh0XG4gIGNvbnN0IGhheXN0YWNrID0gdGV4dC50b0xvd2VyQ2FzZSgpXG4gIGlmIChoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgPT09IC0xKSByZXR1cm4gdGV4dFxuXG4gIGNvbnN0IHBhcnRzOiBSZWFjdE5vZGVbXSA9IFtdXG4gIGxldCBjdXJzb3IgPSAwXG4gIGxldCBuZXh0SWR4ID0gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUsIGN1cnNvcilcbiAgbGV0IGNodW5rS2V5ID0gMFxuICB3aGlsZSAobmV4dElkeCAhPT0gLTEpIHtcbiAgICBpZiAobmV4dElkeCA+IGN1cnNvcikgcGFydHMucHVzaCh0ZXh0LnNsaWNlKGN1cnNvciwgbmV4dElkeCkpXG4gICAgcGFydHMucHVzaChcbiAgICAgIDxTQ1NLRE1hdGNoSGlnaGxpZ2h0IGtleT17YG0tJHtjaHVua0tleX1gfT57dGV4dC5zbGljZShuZXh0SWR4LCBuZXh0SWR4ICsgbmVlZGxlLmxlbmd0aCl9PC9TQ1NLRE1hdGNoSGlnaGxpZ2h0PlxuICAgIClcbiAgICBjaHVua0tleSArPSAxXG4gICAgY3Vyc29yID0gbmV4dElkeCArIG5lZWRsZS5sZW5ndGhcbiAgICBuZXh0SWR4ID0gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUsIGN1cnNvcilcbiAgfVxuICBpZiAoY3Vyc29yIDwgdGV4dC5sZW5ndGgpIHBhcnRzLnB1c2godGV4dC5zbGljZShjdXJzb3IpKVxuICByZXR1cm4gcGFydHNcbn1cblxuZXhwb3J0IGNvbnN0IFNraWxsc0Ryb3Bkb3duID0gKHtcbiAgc2tpbGxzLFxuICBxdWVyeSxcbiAgbG9hZGluZyA9IGZhbHNlLFxuICBlcnJvciA9IGZhbHNlLFxuICBjYW5DcmVhdGUgPSBmYWxzZSxcbiAgb25TZWxlY3QsXG4gIG9uQ3JlYXRlLFxuICBvbkNsb3NlLFxuICBib3R0b20sXG4gIGxlZnQsXG4gIG1heEhlaWdodCxcbiAgekluZGV4LFxuICBhbmNob3JSZWYsXG59OiBTa2lsbHNEcm9wZG93blByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IFtoaWdobGlnaHRlZEluZGV4LCBzZXRIaWdobGlnaHRlZEluZGV4XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IGRyb3Bkb3duUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBpdGVtUmVmcyA9IHVzZVJlZjwoSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsKVtdPihbXSlcblxuICBjb25zdCBmaWx0ZXJlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBxdWVyeS50cmltKCkudG9Mb3dlckNhc2UoKVxuICAgIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIHNraWxsc1xuICAgIHJldHVybiBza2lsbHMuZmlsdGVyKHMgPT4gcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZCkpXG4gIH0sIFtza2lsbHMsIHF1ZXJ5XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEhpZ2hsaWdodGVkSW5kZXgoMClcbiAgfSwgW3F1ZXJ5XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGl0ZW1SZWZzLmN1cnJlbnQgPSBpdGVtUmVmcy5jdXJyZW50LnNsaWNlKDAsIGZpbHRlcmVkLmxlbmd0aClcbiAgfSwgW2ZpbHRlcmVkLmxlbmd0aF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUgPSAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgTm9kZSB8IG51bGxcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm5cbiAgICAgIGlmIChkcm9wZG93blJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGlmIChhbmNob3JSZWY/LmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgb25DbG9zZSgpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gIH0sIFtvbkNsb3NlLCBhbmNob3JSZWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsSGlnaGxpZ2h0ZWRJbnRvVmlldyA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpdGVtUmVmcy5jdXJyZW50W2luZGV4XT8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgbmV4dCA9IGZpbHRlcmVkLmxlbmd0aCA/IChoaWdobGlnaHRlZEluZGV4ICsgMSkgJSBmaWx0ZXJlZC5sZW5ndGggOiAwXG4gICAgICAgIHNldEhpZ2hsaWdodGVkSW5kZXgobmV4dClcbiAgICAgICAgc2Nyb2xsSGlnaGxpZ2h0ZWRJbnRvVmlldyhuZXh0KVxuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjb25zdCBuZXh0ID0gZmlsdGVyZWQubGVuZ3RoID8gKGhpZ2hsaWdodGVkSW5kZXggLSAxICsgZmlsdGVyZWQubGVuZ3RoKSAlIGZpbHRlcmVkLmxlbmd0aCA6IDBcbiAgICAgICAgc2V0SGlnaGxpZ2h0ZWRJbmRleChuZXh0KVxuICAgICAgICBzY3JvbGxIaWdobGlnaHRlZEludG9WaWV3KG5leHQpXG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGlmIChmaWx0ZXJlZFtoaWdobGlnaHRlZEluZGV4XSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvblNlbGVjdChmaWx0ZXJlZFtoaWdobGlnaHRlZEluZGV4XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIG9uQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlciwgdHJ1ZSlcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZXIsIHRydWUpXG4gIH0sIFtmaWx0ZXJlZCwgaGlnaGxpZ2h0ZWRJbmRleCwgb25TZWxlY3QsIG9uQ2xvc2VdKVxuXG4gIGNvbnN0IHJlbmRlckJvZHkgPSAoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ1NLRFNrZWxldG9uTGlzdD5cbiAgICAgICAgICB7WzAsIDEsIDJdLm1hcChpID0+IChcbiAgICAgICAgICAgIDxTa2VsZXRvbiBrZXk9e2l9IHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsyMH0gd2lkdGg9e2kgPT09IDAgPyAnNzAlJyA6ICc1NSUnfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NDU0tEU2tlbGV0b25MaXN0PlxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIDxTQ1NLRFN0YXRlTWVzc2FnZT57dCgnbXlTa2lsbHMuZHJvcGRvd25FcnJvcicpfTwvU0NTS0RTdGF0ZU1lc3NhZ2U+XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDxTQ1NLRFN0YXRlTWVzc2FnZT57dCgnbXlTa2lsbHMuZHJvcGRvd25FbXB0eScpfTwvU0NTS0RTdGF0ZU1lc3NhZ2U+XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ1NLRExpc3Q+XG4gICAgICAgIHtmaWx0ZXJlZC5tYXAoKHNraWxsLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxTQ1NLREl0ZW1cbiAgICAgICAgICAgIGtleT17c2tpbGwuaWR9XG4gICAgICAgICAgICByZWY9e2VsID0+IHtcbiAgICAgICAgICAgICAgaXRlbVJlZnMuY3VycmVudFtpbmRleF0gPSBlbFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICRpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAkaGlnaGxpZ2h0ZWQ9e2luZGV4ID09PSBoaWdobGlnaHRlZEluZGV4fVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRIaWdobGlnaHRlZEluZGV4KGluZGV4KX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uU2VsZWN0KHNraWxsKX1cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTQ1NLREl0ZW1UaXRsZT57cmVuZGVyV2l0aEhpZ2hsaWdodChgIyR7c2tpbGwubmFtZX1gLCBxdWVyeSl9PC9TQ1NLREl0ZW1UaXRsZT5cbiAgICAgICAgICAgIHtza2lsbC5kZXNjcmlwdGlvbiAmJiA8U0NTS0RJdGVtU3VidGl0bGU+e3NraWxsLmRlc2NyaXB0aW9ufTwvU0NTS0RJdGVtU3VidGl0bGU+fVxuICAgICAgICAgIDwvU0NTS0RJdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvU0NTS0RMaXN0PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDU0tEQW5jaG9yXG4gICAgICAkYm90dG9tPXtib3R0b219XG4gICAgICAkbGVmdD17bGVmdH1cbiAgICAgICRtYXhIZWlnaHQ9e21heEhlaWdodH1cbiAgICAgICR6SW5kZXg9e3pJbmRleH1cbiAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgPlxuICAgICAgPFNDU0tERHJvcGRvd24gcmVmPXtkcm9wZG93blJlZn0+XG4gICAgICAgIHtjYW5DcmVhdGUgJiYgb25DcmVhdGUgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8U0NTS0RDcmVhdGVIZWFkZXI+XG4gICAgICAgICAgICAgIDxTQ1NLRENyZWF0ZVJvdyB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DcmVhdGV9PlxuICAgICAgICAgICAgICAgIDxQbHVzSWNvbiB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRyb3Bkb3duQ3JlYXRlJyl9XG4gICAgICAgICAgICAgIDwvU0NTS0RDcmVhdGVSb3c+XG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdteVNraWxscy5pbmZvVG9vbHRpcCcpfSB7Li4uKHpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHpJbmRleCArIDEgfSA6IHt9KX0+XG4gICAgICAgICAgICAgICAgPFNDU0tEQ3JlYXRlSW5mb0ljb24gYXJpYS1sYWJlbD17dCgnbXlTa2lsbHMuaW5mb1Rvb2x0aXAnKX0+XG4gICAgICAgICAgICAgICAgICA8SW5mb3JtYXRpb25DaXJjbGUgY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgIDwvU0NTS0RDcmVhdGVJbmZvSWNvbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9TQ1NLRENyZWF0ZUhlYWRlcj5cbiAgICAgICAgICAgIDxTQ1NLRERpdmlkZXI+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICA8L1NDU0tERGl2aWRlcj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge3JlbmRlckJvZHkoKX1cbiAgICAgIDwvU0NTS0REcm9wZG93bj5cbiAgICA8L1NDU0tEQW5jaG9yPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxTQUFvQkEsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUF3QixPQUFPO0FBQ3ZGLFNBQVNDLGlCQUFpQixRQUFRLG9EQUFvRDtBQUN0RixTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBRXRFLFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsUUFBUSxRQUFRLG1CQUFtQjtBQUM1QyxTQUFTQyxRQUFRLFFBQVEsc0JBQXNCO0FBQy9DLFNBQ0VDLFdBQVcsRUFDWEMsaUJBQWlCLEVBQ2pCQyxtQkFBbUIsRUFDbkJDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLFNBQVMsRUFDVEMsbUJBQW1CLEVBQ25CQyxpQkFBaUIsRUFDakJDLGlCQUFpQixRQUNaLHlCQUF5QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBbUJoQyxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJQyxJQUFZLEVBQUVDLEtBQWEsRUFBZ0I7RUFDdEUsSUFBTUMsTUFBTSxHQUFHRCxLQUFLLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUNDLFdB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