UNPKG

botframework-webchat-component

Version:
204 lines (200 loc) 43.4 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _botframeworkWebchatCore = require("botframework-webchat-core"); var _classnames = _interopRequireDefault(require("classnames")); var _mdastUtilFromMarkdown = require("mdast-util-from-markdown"); var _react = _interopRequireWildcard(require("react")); var _useRefFrom = require("use-ref-from"); var _index = require("../../../LinkDefinition/index"); var _dereferenceBlankNodes = _interopRequireDefault(require("../../../Utils/JSONLinkedData/dereferenceBlankNodes")); var _useRenderMarkdownAsHTML = _interopRequireDefault(require("../../../hooks/useRenderMarkdownAsHTML")); var _useStyleSet3 = _interopRequireDefault(require("../../../hooks/useStyleSet")); var _useShowModal = _interopRequireDefault(require("../../../providers/ModalDialog/useShowModal")); var _CitationModalContent = _interopRequireDefault(require("./CitationModalContent")); var _MessageSensitivityLabel = _interopRequireDefault(require("./MessageSensitivityLabel")); var _isHTMLButtonElement = _interopRequireDefault(require("./isHTMLButtonElement")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer; function isCitationURL(url) { var _onErrorResumeNext; return ((_onErrorResumeNext = (0, _botframeworkWebchatCore.onErrorResumeNext)(function () { return new URL(url); })) === null || _onErrorResumeNext === void 0 ? void 0 : _onErrorResumeNext.protocol) === 'cite:'; } var MarkdownTextContent = /*#__PURE__*/(0, _react.memo)(function (_ref) { var activity = _ref.activity, markdown = _ref.markdown; var _useStyleSet = (0, _useStyleSet3.default)(), _useStyleSet2 = _slicedToArray(_useStyleSet, 1), _useStyleSet2$ = _useStyleSet2[0], citationModalDialogStyleSet = _useStyleSet2$.citationModalDialog, renderMarkdownStyleSet = _useStyleSet2$.renderMarkdown, textContentStyleSet = _useStyleSet2$.textContent; var localize = useLocalizer(); var graph = (0, _react.useMemo)(function () { return (0, _dereferenceBlankNodes.default)(activity.entities || []); }, [activity.entities]); var renderMarkdownAsHTML = (0, _useRenderMarkdownAsHTML.default)('message activity'); var showModal = (0, _useShowModal.default)(); var messageThing = (0, _react.useMemo)(function () { return (0, _botframeworkWebchatCore.getOrgSchemaMessage)(graph); }, [graph]); var citationModalDialogLabel = localize('CITATION_MODEL_DIALOG_ALT'); if (!renderMarkdownAsHTML) { throw new Error('botframework-webchat: assert failed for renderMarkdownAsHTML'); } var dangerouslySetInnerHTML = (0, _react.useMemo)(function () { return { __html: markdown ? renderMarkdownAsHTML(markdown) : '' }; }, [renderMarkdownAsHTML, markdown]); var markdownDefinitions = (0, _react.useMemo)(function () { return (0, _mdastUtilFromMarkdown.fromMarkdown)(markdown).children.filter(function (node) { return node.type === 'definition'; }); }, [markdown]); var showClaimModal = (0, _react.useCallback)(function (title, text, altText) { showModal(function () { return /*#__PURE__*/_react.default.createElement(_CitationModalContent.default, { headerText: title, markdown: text }); }, { 'aria-label': altText || title || citationModalDialogLabel, className: (0, _classnames.default)('webchat__citation-modal-dialog', citationModalDialogStyleSet) }); }, [citationModalDialogStyleSet, citationModalDialogLabel, showModal]); var entries = (0, _react.useMemo)(function () { return Object.freeze(markdownDefinitions.map(function (markdownDefinition) { var _messageThing$citatio; var messageCitation = messageThing === null || messageThing === void 0 ? void 0 : (_messageThing$citatio = messageThing.citation) === null || _messageThing$citatio === void 0 ? void 0 : _messageThing$citatio.map(_botframeworkWebchatCore.parseClaim).find(function (_ref2) { var position = _ref2.position; return '' + position === markdownDefinition.identifier; }); if (messageCitation) { return { claim: messageCitation, key: markdownDefinition.url, handleClick: messageCitation !== null && messageCitation !== void 0 && messageCitation.appearance && !messageCitation.appearance.url ? function () { var _messageCitation$appe; return showClaimModal((_messageCitation$appe = messageCitation.appearance.name) !== null && _messageCitation$appe !== void 0 ? _messageCitation$appe : markdownDefinition.title, messageCitation.appearance.text, messageCitation.alternateName); } : undefined, markdownDefinition: markdownDefinition, url: messageCitation !== null && messageCitation !== void 0 && messageCitation.appearance ? messageCitation.appearance.url : markdownDefinition.url }; } var rootLevelClaim = graph.filter(function (_ref3) { var type = _ref3.type; return type === 'https://schema.org/Claim'; }).map(_botframeworkWebchatCore.parseClaim).find(function (_ref4) { var id = _ref4['@id']; return id === markdownDefinition.url; }); if (rootLevelClaim) { return { claim: rootLevelClaim, key: markdownDefinition.url, handleClick: isCitationURL(rootLevelClaim['@id']) ? function () { var _rootLevelClaim$name; return showClaimModal((_rootLevelClaim$name = rootLevelClaim.name) !== null && _rootLevelClaim$name !== void 0 ? _rootLevelClaim$name : markdownDefinition.title, rootLevelClaim.text, rootLevelClaim.alternateName); } : undefined, markdownDefinition: markdownDefinition }; } return { key: markdownDefinition.url, markdownDefinition: markdownDefinition, url: markdownDefinition.url }; })); }, [graph, markdownDefinitions, messageThing, showClaimModal]); var entriesRef = (0, _useRefFrom.useRefFrom)(entries); var handleClick = (0, _react.useCallback)(function (event) { // Find out what <button> is being clicked. var targetElement = event.target; var buttonElement = (0, _isHTMLButtonElement.default)(targetElement) ? targetElement : targetElement.closest('button'); if (!buttonElement || !targetElement.contains(buttonElement)) { return; } var entry = entriesRef.current.find(function (_ref5) { var key = _ref5.key; return key === buttonElement.value; }); if (entry !== null && entry !== void 0 && entry.handleClick) { event.preventDefault(); event.stopPropagation(); entry.handleClick(); } }, [entriesRef]); var messageSensitivityLabelProps = (0, _react.useMemo)(function () { var usageInfo = messageThing === null || messageThing === void 0 ? void 0 : messageThing.usageInfo; if (usageInfo) { var _usageInfo$keywords; var pattern = usageInfo.pattern; var encryptionStatus = !!((_usageInfo$keywords = usageInfo.keywords) !== null && _usageInfo$keywords !== void 0 && _usageInfo$keywords.find(function (keyword) { return keyword === 'encrypted-content'; })); return { color: pattern && pattern.inDefinedTermSet === 'https://www.w3.org/TR/css-color-4/' && pattern.name === 'color' && pattern.termCode, isEncrypted: encryptionStatus, name: usageInfo.name, title: usageInfo.description }; } }, [messageThing]); // The main text of the citation entry (e.g. the title of the document). Used as the content of the main link and, if it exists, the header of the popup window. var getEntryMainText = function getEntryMainText(entry) { var _ref6, _entry$claim$name, _entry$claim, _entry$claim2, _entry$claim2$appeara; return (_ref6 = (_entry$claim$name = (_entry$claim = entry.claim) === null || _entry$claim === void 0 ? void 0 : _entry$claim.name) !== null && _entry$claim$name !== void 0 ? _entry$claim$name : (_entry$claim2 = entry.claim) === null || _entry$claim2 === void 0 ? void 0 : (_entry$claim2$appeara = _entry$claim2.appearance) === null || _entry$claim2$appeara === void 0 ? void 0 : _entry$claim2$appeara.name) !== null && _ref6 !== void 0 ? _ref6 : entry.markdownDefinition.title; }; // Optional alternate name for the entry, used as a subtitle beneath the link var getEntryBadgeName = function getEntryBadgeName(entry) { var _entry$claim3, _entry$claim3$appeara, _entry$claim3$appeara2; return (_entry$claim3 = entry.claim) === null || _entry$claim3 === void 0 ? void 0 : (_entry$claim3$appeara = _entry$claim3.appearance) === null || _entry$claim3$appeara === void 0 ? void 0 : (_entry$claim3$appeara2 = _entry$claim3$appeara.usageInfo) === null || _entry$claim3$appeara2 === void 0 ? void 0 : _entry$claim3$appeara2.name; }; // Secondary text describing the citation, used in the a11y description (i.e. the div's title attribute) var getEntryDescription = function getEntryDescription(entry) { var _entry$claim4, _entry$claim4$appeara, _entry$claim4$appeara2; return (_entry$claim4 = entry.claim) === null || _entry$claim4 === void 0 ? void 0 : (_entry$claim4$appeara = _entry$claim4.appearance) === null || _entry$claim4$appeara === void 0 ? void 0 : (_entry$claim4$appeara2 = _entry$claim4$appeara.usageInfo) === null || _entry$claim4$appeara2 === void 0 ? void 0 : _entry$claim4$appeara2.description; }; return /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)('webchat__text-content', 'webchat__text-content--is-markdown', textContentStyleSet + '') }, /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)('webchat__text-content__markdown', renderMarkdownStyleSet + '') // eslint-disable-next-line react/no-danger , dangerouslySetInnerHTML: dangerouslySetInnerHTML, onClick: handleClick }), !!entries.length && /*#__PURE__*/_react.default.createElement(_index.LinkDefinitions, { accessoryComponentType: messageSensitivityLabelProps && _MessageSensitivityLabel.default, accessoryProps: messageSensitivityLabelProps }, entries.map(function (entry) { var _getEntryBadgeName, _getEntryDescription; return /*#__PURE__*/_react.default.createElement(_index.LinkDefinitionItem, { badgeName: getEntryBadgeName(entry), badgeTitle: "".concat((_getEntryBadgeName = getEntryBadgeName(entry)) !== null && _getEntryBadgeName !== void 0 ? _getEntryBadgeName : '', "\n\n").concat((_getEntryDescription = getEntryDescription(entry)) !== null && _getEntryDescription !== void 0 ? _getEntryDescription : '').trim(), identifier: entry.markdownDefinition.label, key: entry.key, onClick: entry.handleClick, text: getEntryMainText(entry), url: entry.url }); }))); }); MarkdownTextContent.displayName = 'MarkdownTextContent'; var _default = MarkdownTextContent; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfYm90ZnJhbWV3b3JrV2ViY2hhdENvcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWRhc3RVdGlsRnJvbU1hcmtkb3duIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdXNlUmVmRnJvbSIsIl9pbmRleCIsIl9kZXJlZmVyZW5jZUJsYW5rTm9kZXMiLCJfdXNlUmVuZGVyTWFya2Rvd25Bc0hUTUwiLCJfdXNlU3R5bGVTZXQzIiwiX3VzZVNob3dNb2RhbCIsIl9DaXRhdGlvbk1vZGFsQ29udGVudCIsIl9NZXNzYWdlU2Vuc2l0aXZpdHlMYWJlbCIsIl9pc0hUTUxCdXR0b25FbGVtZW50IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJfc2xpY2VkVG9BcnJheSIsImFyciIsImkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibGVuIiwibGVuZ3RoIiwiYXJyMiIsIl9pIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJfYXJyIiwiX24iLCJfZCIsIl9zIiwiX2UiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImVyciIsImlzQXJyYXkiLCJ1c2VMb2NhbGl6ZXIiLCJob29rcyIsImlzQ2l0YXRpb25VUkwiLCJ1cmwiLCJfb25FcnJvclJlc3VtZU5leHQiLCJvbkVycm9yUmVzdW1lTmV4dCIsIlVSTCIsInByb3RvY29sIiwiTWFya2Rvd25UZXh0Q29udGVudCIsIm1lbW8iLCJfcmVmIiwiYWN0aXZpdHkiLCJtYXJrZG93biIsIl91c2VTdHlsZVNldCIsInVzZVN0eWxlU2V0IiwiX3VzZVN0eWxlU2V0MiIsIl91c2VTdHlsZVNldDIkIiwiY2l0YXRpb25Nb2RhbERpYWxvZ1N0eWxlU2V0IiwiY2l0YXRpb25Nb2RhbERpYWxvZyIsInJlbmRlck1hcmtkb3duU3R5bGVTZXQiLCJyZW5kZXJNYXJrZG93biIsInRleHRDb250ZW50U3R5bGVTZXQiLCJ0ZXh0Q29udGVudCIsImxvY2FsaXplIiwiZ3JhcGgiLCJ1c2VNZW1vIiwiZGVyZWZlcmVuY2VCbGFua05vZGVzIiwiZW50aXRpZXMiLCJyZW5kZXJNYXJrZG93bkFzSFRNTCIsInVzZVJlbmRlck1hcmtkb3duQXNIVE1MIiwic2hvd01vZGFsIiwidXNlU2hvd01vZGFsIiwibWVzc2FnZVRoaW5nIiwiZ2V0T3JnU2NoZW1hTWVzc2FnZSIsImNpdGF0aW9uTW9kYWxEaWFsb2dMYWJlbCIsIkVycm9yIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJtYXJrZG93bkRlZmluaXRpb25zIiwiZnJvbU1hcmtkb3duIiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJub2RlIiwidHlwZSIsInNob3dDbGFpbU1vZGFsIiwidXNlQ2FsbGJhY2siLCJ0aXRsZSIsInRleHQiLCJhbHRUZXh0IiwiY3JlYXRlRWxlbWVudCIsImhlYWRlclRleHQiLCJjbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiZW50cmllcyIsImZyZWV6ZSIsIm1hcCIsIm1hcmtkb3duRGVmaW5pdGlvbiIsIl9tZXNzYWdlVGhpbmckY2l0YXRpbyIsIm1lc3NhZ2VDaXRhdGlvbiIsImNpdGF0aW9uIiwicGFyc2VDbGFpbSIsImZpbmQiLCJfcmVmMiIsInBvc2l0aW9uIiwiaWRlbnRpZmllciIsImNsYWltIiwiaGFuZGxlQ2xpY2siLCJhcHBlYXJhbmNlIiwiX21lc3NhZ2VDaXRhdGlvbiRhcHBlIiwiYWx0ZXJuYXRlTmFtZSIsInVuZGVmaW5lZCIsInJvb3RMZXZlbENsYWltIiwiX3JlZjMiLCJfcmVmNCIsImlkIiwiX3Jvb3RMZXZlbENsYWltJG5hbWUiLCJlbnRyaWVzUmVmIiwidXNlUmVmRnJvbSIsImV2ZW50IiwidGFyZ2V0RWxlbWVudCIsInRhcmdldCIsImJ1dHRvbkVsZW1lbnQiLCJpc0hUTUxCdXR0b25FbGVtZW50IiwiY2xvc2VzdCIsImNvbnRhaW5zIiwiZW50cnkiLCJjdXJyZW50IiwiX3JlZjUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIm1lc3NhZ2VTZW5zaXRpdml0eUxhYmVsUHJvcHMiLCJ1c2FnZUluZm8iLCJfdXNhZ2VJbmZvJGtleXdvcmRzIiwicGF0dGVybiIsImVuY3J5cHRpb25TdGF0dXMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJjb2xvciIsImluRGVmaW5lZFRlcm1TZXQiLCJ0ZXJtQ29kZSIsImlzRW5jcnlwdGVkIiwiZGVzY3JpcHRpb24iLCJnZXRFbnRyeU1haW5UZXh0IiwiX3JlZjYiLCJfZW50cnkkY2xhaW0kbmFtZSIsIl9lbnRyeSRjbGFpbSIsIl9lbnRyeSRjbGFpbTIiLCJfZW50cnkkY2xhaW0yJGFwcGVhcmEiLCJnZXRFbnRyeUJhZGdlTmFtZSIsIl9lbnRyeSRjbGFpbTMiLCJfZW50cnkkY2xhaW0zJGFwcGVhcmEiLCJfZW50cnkkY2xhaW0zJGFwcGVhcmEyIiwiZ2V0RW50cnlEZXNjcmlwdGlvbiIsIl9lbnRyeSRjbGFpbTQiLCJfZW50cnkkY2xhaW00JGFwcGVhcmEiLCJfZW50cnkkY2xhaW00JGFwcGVhcmEyIiwib25DbGljayIsIkxpbmtEZWZpbml0aW9ucyIsImFjY2Vzc29yeUNvbXBvbmVudFR5cGUiLCJNZXNzYWdlU2Vuc2l0aXZpdHlMYWJlbCIsImFjY2Vzc29yeVByb3BzIiwiX2dldEVudHJ5QmFkZ2VOYW1lIiwiX2dldEVudHJ5RGVzY3JpcHRpb24iLCJMaW5rRGVmaW5pdGlvbkl0ZW0iLCJiYWRnZU5hbWUiLCJiYWRnZVRpdGxlIiwiY29uY2F0IiwidHJpbSIsImxhYmVsIiwiZGlzcGxheU5hbWUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9BdHRhY2htZW50L1RleHQvcHJpdmF0ZS9NYXJrZG93blRleHRDb250ZW50LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob29rcyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWFwaSc7XG5pbXBvcnQge1xuICBnZXRPcmdTY2hlbWFNZXNzYWdlLFxuICBvbkVycm9yUmVzdW1lTmV4dCxcbiAgcGFyc2VDbGFpbSxcbiAgdHlwZSBPcmdTY2hlbWFDbGFpbSxcbiAgdHlwZSBXZWJDaGF0QWN0aXZpdHlcbn0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB0eXBlIHsgRGVmaW5pdGlvbiB9IGZyb20gJ21kYXN0JztcbmltcG9ydCB7IGZyb21NYXJrZG93biB9IGZyb20gJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bic7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHR5cGUgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWZGcm9tIH0gZnJvbSAndXNlLXJlZi1mcm9tJztcblxuaW1wb3J0IHsgTGlua0RlZmluaXRpb25JdGVtLCBMaW5rRGVmaW5pdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9MaW5rRGVmaW5pdGlvbi9pbmRleCc7XG5pbXBvcnQgZGVyZWZlcmVuY2VCbGFua05vZGVzIGZyb20gJy4uLy4uLy4uL1V0aWxzL0pTT05MaW5rZWREYXRhL2RlcmVmZXJlbmNlQmxhbmtOb2Rlcyc7XG5pbXBvcnQgdXNlUmVuZGVyTWFya2Rvd25Bc0hUTUwgZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVuZGVyTWFya2Rvd25Bc0hUTUwnO1xuaW1wb3J0IHVzZVN0eWxlU2V0IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0eWxlU2V0JztcbmltcG9ydCB1c2VTaG93TW9kYWwgZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL01vZGFsRGlhbG9nL3VzZVNob3dNb2RhbCc7XG5pbXBvcnQgeyB0eXBlIFByb3BzT2YgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9wc09mJztcbmltcG9ydCBDaXRhdGlvbk1vZGFsQ29udGV4dCBmcm9tICcuL0NpdGF0aW9uTW9kYWxDb250ZW50JztcbmltcG9ydCBNZXNzYWdlU2Vuc2l0aXZpdHlMYWJlbCwgeyB0eXBlIE1lc3NhZ2VTZW5zaXRpdml0eUxhYmVsUHJvcHMgfSBmcm9tICcuL01lc3NhZ2VTZW5zaXRpdml0eUxhYmVsJztcbmltcG9ydCBpc0hUTUxCdXR0b25FbGVtZW50IGZyb20gJy4vaXNIVE1MQnV0dG9uRWxlbWVudCc7XG5cbmNvbnN0IHsgdXNlTG9jYWxpemVyIH0gPSBob29rcztcblxudHlwZSBFbnRyeSA9IHtcbiAgY2xhaW0/OiBPcmdTY2hlbWFDbGFpbSB8IHVuZGVmaW5lZDtcbiAgaGFuZGxlQ2xpY2s/OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGtleTogc3RyaW5nO1xuICBtYXJrZG93bkRlZmluaXRpb246IERlZmluaXRpb247XG4gIHVybD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbnR5cGUgUHJvcHMgPSBSZWFkb25seTx7XG4gIGFjdGl2aXR5OiBXZWJDaGF0QWN0aXZpdHk7XG4gIG1hcmtkb3duOiBzdHJpbmc7XG59PjtcblxuZnVuY3Rpb24gaXNDaXRhdGlvblVSTCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gb25FcnJvclJlc3VtZU5leHQoKCkgPT4gbmV3IFVSTCh1cmwpKT8ucHJvdG9jb2wgPT09ICdjaXRlOic7XG59XG5cbmNvbnN0IE1hcmtkb3duVGV4dENvbnRlbnQgPSBtZW1vKCh7IGFjdGl2aXR5LCBtYXJrZG93biB9OiBQcm9wcykgPT4ge1xuICBjb25zdCBbXG4gICAge1xuICAgICAgY2l0YXRpb25Nb2RhbERpYWxvZzogY2l0YXRpb25Nb2RhbERpYWxvZ1N0eWxlU2V0LFxuICAgICAgcmVuZGVyTWFya2Rvd246IHJlbmRlck1hcmtkb3duU3R5bGVTZXQsXG4gICAgICB0ZXh0Q29udGVudDogdGV4dENvbnRlbnRTdHlsZVNldFxuICAgIH1cbiAgXSA9IHVzZVN0eWxlU2V0KCk7XG4gIGNvbnN0IGxvY2FsaXplID0gdXNlTG9jYWxpemVyKCk7XG4gIGNvbnN0IGdyYXBoID0gdXNlTWVtbygoKSA9PiBkZXJlZmVyZW5jZUJsYW5rTm9kZXMoYWN0aXZpdHkuZW50aXRpZXMgfHwgW10pLCBbYWN0aXZpdHkuZW50aXRpZXNdKTtcbiAgY29uc3QgcmVuZGVyTWFya2Rvd25Bc0hUTUwgPSB1c2VSZW5kZXJNYXJrZG93bkFzSFRNTCgnbWVzc2FnZSBhY3Rpdml0eScpO1xuICBjb25zdCBzaG93TW9kYWwgPSB1c2VTaG93TW9kYWwoKTtcblxuICBjb25zdCBtZXNzYWdlVGhpbmcgPSB1c2VNZW1vKCgpID0+IGdldE9yZ1NjaGVtYU1lc3NhZ2UoZ3JhcGgpLCBbZ3JhcGhdKTtcblxuICBjb25zdCBjaXRhdGlvbk1vZGFsRGlhbG9nTGFiZWwgPSBsb2NhbGl6ZSgnQ0lUQVRJT05fTU9ERUxfRElBTE9HX0FMVCcpO1xuXG4gIGlmICghcmVuZGVyTWFya2Rvd25Bc0hUTUwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JvdGZyYW1ld29yay13ZWJjaGF0OiBhc3NlcnQgZmFpbGVkIGZvciByZW5kZXJNYXJrZG93bkFzSFRNTCcpO1xuICB9XG5cbiAgY29uc3QgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7IF9faHRtbDogbWFya2Rvd24gPyByZW5kZXJNYXJrZG93bkFzSFRNTChtYXJrZG93bikgOiAnJyB9KSxcbiAgICBbcmVuZGVyTWFya2Rvd25Bc0hUTUwsIG1hcmtkb3duXVxuICApO1xuXG4gIGNvbnN0IG1hcmtkb3duRGVmaW5pdGlvbnMgPSB1c2VNZW1vKFxuICAgICgpID0+IGZyb21NYXJrZG93bihtYXJrZG93bikuY2hpbGRyZW4uZmlsdGVyKChub2RlKTogbm9kZSBpcyBEZWZpbml0aW9uID0+IG5vZGUudHlwZSA9PT0gJ2RlZmluaXRpb24nKSxcbiAgICBbbWFya2Rvd25dXG4gICk7XG5cbiAgY29uc3Qgc2hvd0NsYWltTW9kYWwgPSB1c2VDYWxsYmFjayhcbiAgICAodGl0bGUsIHRleHQsIGFsdFRleHQpID0+IHtcbiAgICAgIHNob3dNb2RhbCgoKSA9PiA8Q2l0YXRpb25Nb2RhbENvbnRleHQgaGVhZGVyVGV4dD17dGl0bGV9IG1hcmtkb3duPXt0ZXh0fSAvPiwge1xuICAgICAgICAnYXJpYS1sYWJlbCc6IGFsdFRleHQgfHwgdGl0bGUgfHwgY2l0YXRpb25Nb2RhbERpYWxvZ0xhYmVsLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3dlYmNoYXRfX2NpdGF0aW9uLW1vZGFsLWRpYWxvZycsIGNpdGF0aW9uTW9kYWxEaWFsb2dTdHlsZVNldClcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2NpdGF0aW9uTW9kYWxEaWFsb2dTdHlsZVNldCwgY2l0YXRpb25Nb2RhbERpYWxvZ0xhYmVsLCBzaG93TW9kYWxdXG4gICk7XG5cbiAgY29uc3QgZW50cmllcyA9IHVzZU1lbW88cmVhZG9ubHkgRW50cnlbXT4oXG4gICAgKCkgPT5cbiAgICAgIE9iamVjdC5mcmVlemUoXG4gICAgICAgIG1hcmtkb3duRGVmaW5pdGlvbnMubWFwPEVudHJ5PihtYXJrZG93bkRlZmluaXRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDaXRhdGlvbiA9IG1lc3NhZ2VUaGluZz8uY2l0YXRpb25cbiAgICAgICAgICAgID8ubWFwKHBhcnNlQ2xhaW0pXG4gICAgICAgICAgICAuZmluZCgoeyBwb3NpdGlvbiB9KSA9PiAnJyArIHBvc2l0aW9uID09PSBtYXJrZG93bkRlZmluaXRpb24uaWRlbnRpZmllcik7XG5cbiAgICAgICAgICBpZiAobWVzc2FnZUNpdGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjbGFpbTogbWVzc2FnZUNpdGF0aW9uLFxuICAgICAgICAgICAgICBrZXk6IG1hcmtkb3duRGVmaW5pdGlvbi51cmwsXG4gICAgICAgICAgICAgIGhhbmRsZUNsaWNrOlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VDaXRhdGlvbj8uYXBwZWFyYW5jZSAmJiAhbWVzc2FnZUNpdGF0aW9uLmFwcGVhcmFuY2UudXJsXG4gICAgICAgICAgICAgICAgICA/ICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2hvd0NsYWltTW9kYWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQ2l0YXRpb24uYXBwZWFyYW5jZS5uYW1lID8/IG1hcmtkb3duRGVmaW5pdGlvbi50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VDaXRhdGlvbi5hcHBlYXJhbmNlLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQ2l0YXRpb24uYWx0ZXJuYXRlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBtYXJrZG93bkRlZmluaXRpb24sXG4gICAgICAgICAgICAgIHVybDogbWVzc2FnZUNpdGF0aW9uPy5hcHBlYXJhbmNlID8gbWVzc2FnZUNpdGF0aW9uLmFwcGVhcmFuY2UudXJsIDogbWFya2Rvd25EZWZpbml0aW9uLnVybFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByb290TGV2ZWxDbGFpbSA9IGdyYXBoXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ2h0dHBzOi8vc2NoZW1hLm9yZy9DbGFpbScpXG4gICAgICAgICAgICAubWFwKHBhcnNlQ2xhaW0pXG4gICAgICAgICAgICAuZmluZCgoeyAnQGlkJzogaWQgfSkgPT4gaWQgPT09IG1hcmtkb3duRGVmaW5pdGlvbi51cmwpO1xuXG4gICAgICAgICAgaWYgKHJvb3RMZXZlbENsYWltKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjbGFpbTogcm9vdExldmVsQ2xhaW0sXG4gICAgICAgICAgICAgIGtleTogbWFya2Rvd25EZWZpbml0aW9uLnVybCxcbiAgICAgICAgICAgICAgaGFuZGxlQ2xpY2s6IGlzQ2l0YXRpb25VUkwocm9vdExldmVsQ2xhaW1bJ0BpZCddKVxuICAgICAgICAgICAgICAgID8gKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2hvd0NsYWltTW9kYWwoXG4gICAgICAgICAgICAgICAgICAgICAgcm9vdExldmVsQ2xhaW0ubmFtZSA/PyBtYXJrZG93bkRlZmluaXRpb24udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgcm9vdExldmVsQ2xhaW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICByb290TGV2ZWxDbGFpbS5hbHRlcm5hdGVOYW1lXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbWFya2Rvd25EZWZpbml0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrZXk6IG1hcmtkb3duRGVmaW5pdGlvbi51cmwsXG4gICAgICAgICAgICBtYXJrZG93bkRlZmluaXRpb24sXG4gICAgICAgICAgICB1cmw6IG1hcmtkb3duRGVmaW5pdGlvbi51cmxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICBbZ3JhcGgsIG1hcmtkb3duRGVmaW5pdGlvbnMsIG1lc3NhZ2VUaGluZywgc2hvd0NsYWltTW9kYWxdXG4gICk7XG5cbiAgY29uc3QgZW50cmllc1JlZiA9IHVzZVJlZkZyb20oZW50cmllcyk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjazxNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD4+KFxuICAgIGV2ZW50ID0+IHtcbiAgICAgIC8vIEZpbmQgb3V0IHdoYXQgPGJ1dHRvbj4gaXMgYmVpbmcgY2xpY2tlZC5cbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBidXR0b25FbGVtZW50OiBIVE1MQnV0dG9uRWxlbWVudCB8IHVuZGVmaW5lZCA9IGlzSFRNTEJ1dHRvbkVsZW1lbnQodGFyZ2V0RWxlbWVudClcbiAgICAgICAgPyB0YXJnZXRFbGVtZW50XG4gICAgICAgIDogKHRhcmdldEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uJykgYXMgSFRNTEJ1dHRvbkVsZW1lbnQgfCB1bmRlZmluZWQpO1xuXG4gICAgICBpZiAoIWJ1dHRvbkVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQuY29udGFpbnMoYnV0dG9uRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNSZWYuY3VycmVudC5maW5kKCh7IGtleSB9KSA9PiBrZXkgPT09IGJ1dHRvbkVsZW1lbnQudmFsdWUpO1xuXG4gICAgICBpZiAoZW50cnk/LmhhbmRsZUNsaWNrKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGVudHJ5LmhhbmRsZUNsaWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbZW50cmllc1JlZl1cbiAgKTtcblxuICBjb25zdCBtZXNzYWdlU2Vuc2l0aXZpdHlMYWJlbFByb3BzID0gdXNlTWVtbzxQcm9wc09mPHR5cGVvZiBNZXNzYWdlU2Vuc2l0aXZpdHlMYWJlbD4gfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICBjb25zdCB1c2FnZUluZm8gPSBtZXNzYWdlVGhpbmc/LnVzYWdlSW5mbztcblxuICAgIGlmICh1c2FnZUluZm8pIHtcbiAgICAgIGNvbnN0IHsgcGF0dGVybiB9ID0gdXNhZ2VJbmZvO1xuICAgICAgY29uc3QgZW5jcnlwdGlvblN0YXR1cyA9ICEhdXNhZ2VJbmZvLmtleXdvcmRzPy5maW5kKGtleXdvcmQgPT4ga2V5d29yZCA9PT0gJ2VuY3J5cHRlZC1jb250ZW50Jyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOlxuICAgICAgICAgIHBhdHRlcm4gJiZcbiAgICAgICAgICBwYXR0ZXJuLmluRGVmaW5lZFRlcm1TZXQgPT09ICdodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvJyAmJlxuICAgICAgICAgIHBhdHRlcm4ubmFtZSA9PT0gJ2NvbG9yJyAmJlxuICAgICAgICAgIHBhdHRlcm4udGVybUNvZGUsXG4gICAgICAgIGlzRW5jcnlwdGVkOiBlbmNyeXB0aW9uU3RhdHVzLFxuICAgICAgICBuYW1lOiB1c2FnZUluZm8ubmFtZSxcbiAgICAgICAgdGl0bGU6IHVzYWdlSW5mby5kZXNjcmlwdGlvblxuICAgICAgfTtcbiAgICB9XG4gIH0sIFttZXNzYWdlVGhpbmddKTtcblxuICAvLyBUaGUgbWFpbiB0ZXh0IG9mIHRoZSBjaXRhdGlvbiBlbnRyeSAoZS5nLiB0aGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50KS4gVXNlZCBhcyB0aGUgY29udGVudCBvZiB0aGUgbWFpbiBsaW5rIGFuZCwgaWYgaXQgZXhpc3RzLCB0aGUgaGVhZGVyIG9mIHRoZSBwb3B1cCB3aW5kb3cuXG4gIGNvbnN0IGdldEVudHJ5TWFpblRleHQgPSAoZW50cnk6IEVudHJ5KSA9PlxuICAgIGVudHJ5LmNsYWltPy5uYW1lID8/IGVudHJ5LmNsYWltPy5hcHBlYXJhbmNlPy5uYW1lID8/IGVudHJ5Lm1hcmtkb3duRGVmaW5pdGlvbi50aXRsZTtcblxuICAvLyBPcHRpb25hbCBhbHRlcm5hdGUgbmFtZSBmb3IgdGhlIGVudHJ5LCB1c2VkIGFzIGEgc3VidGl0bGUgYmVuZWF0aCB0aGUgbGlua1xuICBjb25zdCBnZXRFbnRyeUJhZGdlTmFtZSA9IChlbnRyeTogRW50cnkpID0+IGVudHJ5LmNsYWltPy5hcHBlYXJhbmNlPy51c2FnZUluZm8/Lm5hbWU7XG5cbiAgLy8gU2Vjb25kYXJ5IHRleHQgZGVzY3JpYmluZyB0aGUgY2l0YXRpb24sIHVzZWQgaW4gdGhlIGExMXkgZGVzY3JpcHRpb24gKGkuZS4gdGhlIGRpdidzIHRpdGxlIGF0dHJpYnV0ZSlcbiAgY29uc3QgZ2V0RW50cnlEZXNjcmlwdGlvbiA9IChlbnRyeTogRW50cnkpID0+IGVudHJ5LmNsYWltPy5hcHBlYXJhbmNlPy51c2FnZUluZm8/LmRlc2NyaXB0aW9uO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKCd3ZWJjaGF0X190ZXh0LWNvbnRlbnQnLCAnd2ViY2hhdF9fdGV4dC1jb250ZW50LS1pcy1tYXJrZG93bicsIHRleHRDb250ZW50U3R5bGVTZXQgKyAnJyl9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoJ3dlYmNoYXRfX3RleHQtY29udGVudF9fbWFya2Rvd24nLCByZW5kZXJNYXJrZG93blN0eWxlU2V0ICsgJycpfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGFuZ2VyXG4gICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtkYW5nZXJvdXNseVNldElubmVySFRNTH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICAvPlxuICAgICAgeyEhZW50cmllcy5sZW5ndGggJiYgKFxuICAgICAgICA8TGlua0RlZmluaXRpb25zPE1lc3NhZ2VTZW5zaXRpdml0eUxhYmVsUHJvcHM+XG4gICAgICAgICAgYWNjZXNzb3J5Q29tcG9uZW50VHlwZT17bWVzc2FnZVNlbnNpdGl2aXR5TGFiZWxQcm9wcyAmJiBNZXNzYWdlU2Vuc2l0aXZpdHlMYWJlbH1cbiAgICAgICAgICBhY2Nlc3NvcnlQcm9wcz17bWVzc2FnZVNlbnNpdGl2aXR5TGFiZWxQcm9wc31cbiAgICAgICAgPlxuICAgICAgICAgIHtlbnRyaWVzLm1hcChlbnRyeSA9PiAoXG4gICAgICAgICAgICA8TGlua0RlZmluaXRpb25JdGVtXG4gICAgICAgICAgICAgIGJhZGdlTmFtZT17Z2V0RW50cnlCYWRnZU5hbWUoZW50cnkpfVxuICAgICAgICAgICAgICBiYWRnZVRpdGxlPXtgJHtnZXRFbnRyeUJhZGdlTmFtZShlbnRyeSkgPz8gJyd9XFxuXFxuJHtnZXRFbnRyeURlc2NyaXB0aW9uKGVudHJ5KSA/PyAnJ31gLnRyaW0oKX1cbiAgICAgICAgICAgICAgaWRlbnRpZmllcj17ZW50cnkubWFya2Rvd25EZWZpbml0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBrZXk9e2VudHJ5LmtleX1cbiAgICAgICAgICAgICAgb25DbGljaz17ZW50cnkuaGFuZGxlQ2xpY2t9XG4gICAgICAgICAgICAgIHRleHQ9e2dldEVudHJ5TWFpblRleHQoZW50cnkpfVxuICAgICAgICAgICAgICB1cmw9e2VudHJ5LnVybH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvTGlua0RlZmluaXRpb25zPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG5NYXJrZG93blRleHRDb250ZW50LmRpc3BsYXlOYW1lID0gJ01hcmtkb3duVGV4dENvbnRlbnQnO1xuXG5leHBvcnQg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