botframework-webchat-component
Version:
React component of botframework-webchat
163 lines (159 loc) • 25.1 kB
JavaScript
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 _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _Context = _interopRequireDefault(require("./private/Context"));
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 }; }
/* eslint complexity: ["error", 50] */
var RovingTabIndexComposer = function RovingTabIndexComposer(_ref) {
var children = _ref.children,
onEscapeKey = _ref.onEscapeKey,
orientation = _ref.orientation;
var activeItemIndexRef = (0, _react.useRef)(0);
var itemRefsRef = (0, _react.useRef)([]);
var refreshTabIndices = (0, _react.useCallback)(function () {
var activeItemIndex = activeItemIndexRef.current;
itemRefsRef.current.forEach(function (_ref2, index) {
var current = _ref2.current;
current === null || current === void 0 ? void 0 : current.setAttribute('tabindex', activeItemIndex === index ? '0' : '-1');
});
}, [activeItemIndexRef]);
var setActiveItemIndex = (0, _react.useCallback)(function (valueOrFunction) {
var _itemRefsRef$current$;
// All calls to this function is expected to be under event handlers (post-rendering).
var nextActiveItemIndex;
if (typeof valueOrFunction === 'number') {
nextActiveItemIndex = valueOrFunction;
} else {
nextActiveItemIndex = valueOrFunction(activeItemIndexRef.current);
}
// If the index points to no item, fallback to the first item.
// This make sure at least one of the item in the container is selected.
if (nextActiveItemIndex && !((_itemRefsRef$current$ = itemRefsRef.current[+nextActiveItemIndex]) !== null && _itemRefsRef$current$ !== void 0 && _itemRefsRef$current$.current)) {
nextActiveItemIndex = 0;
}
if (activeItemIndexRef.current !== nextActiveItemIndex) {
var _itemRefsRef$current$2, _itemRefsRef$current$3;
activeItemIndexRef.current = nextActiveItemIndex;
refreshTabIndices();
(_itemRefsRef$current$2 = itemRefsRef.current[+nextActiveItemIndex]) === null || _itemRefsRef$current$2 === void 0 ? void 0 : (_itemRefsRef$current$3 = _itemRefsRef$current$2.current) === null || _itemRefsRef$current$3 === void 0 ? void 0 : _itemRefsRef$current$3.focus();
}
}, [activeItemIndexRef, itemRefsRef, refreshTabIndices]);
var handleFocus = (0, _react.useCallback)(function (event) {
var target = event.target;
var index = itemRefsRef.current.findIndex(function (_ref3) {
var current = _ref3.current;
return current === target;
});
~index && setActiveItemIndex(index);
}, [itemRefsRef, setActiveItemIndex]);
var handleKeyDown = (0, _react.useCallback)(function (event) {
var key = event.key;
var vertical = orientation === 'vertical';
switch (key) {
case 'ArrowDown':
case 'ArrowRight':
case 'Down': // IE11
case 'Right':
// IE11
if (vertical && key === 'ArrowRight' || !vertical && key === 'ArrowDown') {
return;
}
setActiveItemIndex(function (value) {
// The `itemRefsRef` array could be a sparse array.
// Thus, the next item may not be immediately next to the current one.
var itemIndices = itemRefsRef.current.map(function (_, index) {
return index;
});
var nextIndex = itemIndices.indexOf(value) + 1;
if (nextIndex >= itemIndices.length) {
return itemIndices[0];
}
return itemIndices[+nextIndex];
});
break;
case 'ArrowLeft':
case 'ArrowUp':
case 'Left': // IE11
case 'Up':
// IE11
if (vertical && key === 'ArrowLeft' || !vertical && key === 'ArrowUp') {
return;
}
setActiveItemIndex(function (value) {
// The `itemRefsRef` array could be a sparse array.
// Thus, the next item may not be immediately next to the current one.
var itemIndices = itemRefsRef.current.map(function (_, index) {
return index;
});
var nextIndex = itemIndices.indexOf(value) - 1;
if (nextIndex < 0) {
return itemIndices[itemIndices.length - 1];
}
return itemIndices[+nextIndex];
});
break;
case 'Home':
setActiveItemIndex(0);
break;
case 'End':
setActiveItemIndex(Infinity);
break;
case 'Escape':
if (!onEscapeKey) {
// If the "onEscapeKey" prop is not passed, don't call preventDefault() and stopPropagation().
return;
}
onEscapeKey();
break;
default:
return;
}
event.preventDefault();
event.stopPropagation();
}, [setActiveItemIndex, onEscapeKey, orientation]);
var itemEffector = (0, _react.useCallback)(function (ref, index) {
var current = ref.current;
itemRefsRef.current[+index] = ref;
current.addEventListener('focus', handleFocus);
current.addEventListener('keydown', handleKeyDown);
current.setAttribute('tabindex', activeItemIndexRef.current === index ? '0' : '-1');
return function () {
current.removeEventListener('focus', handleFocus);
current.removeEventListener('keydown', handleKeyDown);
delete itemRefsRef.current[+index];
};
}, [activeItemIndexRef, handleFocus, handleKeyDown]);
var contextValue = (0, _react.useMemo)(function () {
return {
itemEffector: itemEffector
};
}, [itemEffector]);
// This hook run on every render to rectify `activeItemIndexRef`.
// So it will always point to an existing item or first item if available.
(0, _react.useEffect)(function () {
setActiveItemIndex(function (value) {
return value;
});
});
return /*#__PURE__*/_react.default.createElement(_Context.default.Provider, {
value: contextValue
}, children);
};
RovingTabIndexComposer.defaultProps = {
onEscapeKey: undefined,
orientation: 'horizontal'
};
RovingTabIndexComposer.propTypes = {
onEscapeKey: _propTypes.default.func,
orientation: _propTypes.default.oneOf(['horizontal', 'vertical'])
};
var _default = RovingTabIndexComposer;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9Db250ZXh0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJSb3ZpbmdUYWJJbmRleENvbXBvc2VyIiwiX3JlZiIsImNoaWxkcmVuIiwib25Fc2NhcGVLZXkiLCJvcmllbnRhdGlvbiIsImFjdGl2ZUl0ZW1JbmRleFJlZiIsInVzZVJlZiIsIml0ZW1SZWZzUmVmIiwicmVmcmVzaFRhYkluZGljZXMiLCJ1c2VDYWxsYmFjayIsImFjdGl2ZUl0ZW1JbmRleCIsImN1cnJlbnQiLCJmb3JFYWNoIiwiX3JlZjIiLCJpbmRleCIsInNldEF0dHJpYnV0ZSIsInNldEFjdGl2ZUl0ZW1JbmRleCIsInZhbHVlT3JGdW5jdGlvbiIsIl9pdGVtUmVmc1JlZiRjdXJyZW50JCIsIm5leHRBY3RpdmVJdGVtSW5kZXgiLCJfaXRlbVJlZnNSZWYkY3VycmVudCQyIiwiX2l0ZW1SZWZzUmVmJGN1cnJlbnQkMyIsImZvY3VzIiwiaGFuZGxlRm9jdXMiLCJldmVudCIsInRhcmdldCIsImZpbmRJbmRleCIsIl9yZWYzIiwiaGFuZGxlS2V5RG93biIsInZlcnRpY2FsIiwidmFsdWUiLCJpdGVtSW5kaWNlcyIsIm1hcCIsIl8iLCJuZXh0SW5kZXgiLCJpbmRleE9mIiwibGVuZ3RoIiwiSW5maW5pdHkiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIml0ZW1FZmZlY3RvciIsInJlZiIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29udGV4dFZhbHVlIiwidXNlTWVtbyIsInVzZUVmZmVjdCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImZ1bmMiLCJvbmVPZiIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9Sb3ZpbmdUYWJJbmRleC9Sb3ZpbmdUYWJJbmRleENvbXBvc2VyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgY29tcGxleGl0eTogW1wiZXJyb3JcIiwgNTBdICovXG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgUm92aW5nVGFiSW5kZXhDb250ZXh0IGZyb20gJy4vcHJpdmF0ZS9Db250ZXh0JztcblxuaW1wb3J0IHR5cGUgeyBGQywgTXV0YWJsZVJlZk9iamVjdCwgUHJvcHNXaXRoQ2hpbGRyZW4gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IFJvdmluZ1RhYkluZGV4Q29udGV4dFR5cGUgfSBmcm9tICcuL3ByaXZhdGUvQ29udGV4dCc7XG5cbnR5cGUgSXRlbVJlZiA9IE11dGFibGVSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ+O1xuXG50eXBlIFJvdmluZ1RhYkluZGV4Q29udGV4dFByb3BzID0gUHJvcHNXaXRoQ2hpbGRyZW48e1xuICBvbkVzY2FwZUtleT86ICgpID0+IHZvaWQ7XG4gIG9yaWVudGF0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbn0+O1xuXG5jb25zdCBSb3ZpbmdUYWJJbmRleENvbXBvc2VyOiBGQzxSb3ZpbmdUYWJJbmRleENvbnRleHRQcm9wcz4gPSAoeyBjaGlsZHJlbiwgb25Fc2NhcGVLZXksIG9yaWVudGF0aW9uIH0pID0+IHtcbiAgY29uc3QgYWN0aXZlSXRlbUluZGV4UmVmID0gdXNlUmVmKDApO1xuICBjb25zdCBpdGVtUmVmc1JlZiA9IHVzZVJlZjxJdGVtUmVmW10+KFtdKTtcblxuICBjb25zdCByZWZyZXNoVGFiSW5kaWNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB7IGN1cnJlbnQ6IGFjdGl2ZUl0ZW1JbmRleCB9ID0gYWN0aXZlSXRlbUluZGV4UmVmO1xuXG4gICAgaXRlbVJlZnNSZWYuY3VycmVudC5mb3JFYWNoKCh7IGN1cnJlbnQgfSwgaW5kZXgpID0+IHtcbiAgICAgIGN1cnJlbnQ/LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBhY3RpdmVJdGVtSW5kZXggPT09IGluZGV4ID8gJzAnIDogJy0xJyk7XG4gICAgfSk7XG4gIH0sIFthY3RpdmVJdGVtSW5kZXhSZWZdKTtcblxuICBjb25zdCBzZXRBY3RpdmVJdGVtSW5kZXggPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWVPckZ1bmN0aW9uOiBudW1iZXIgfCAoKHZhbHVlOiBudW1iZXIpID0+IG51bWJlcikpID0+IHtcbiAgICAgIC8vIEFsbCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHVuZGVyIGV2ZW50IGhhbmRsZXJzIChwb3N0LXJlbmRlcmluZykuXG4gICAgICBsZXQgbmV4dEFjdGl2ZUl0ZW1JbmRleDtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZU9yRnVuY3Rpb24gPT09ICdudW1iZXInKSB7XG4gICAgICAgIG5leHRBY3RpdmVJdGVtSW5kZXggPSB2YWx1ZU9yRnVuY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0QWN0aXZlSXRlbUluZGV4ID0gdmFsdWVPckZ1bmN0aW9uKGFjdGl2ZUl0ZW1JbmRleFJlZi5jdXJyZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGluZGV4IHBvaW50cyB0byBubyBpdGVtLCBmYWxsYmFjayB0byB0aGUgZmlyc3QgaXRlbS5cbiAgICAgIC8vIFRoaXMgbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBvZiB0aGUgaXRlbSBpbiB0aGUgY29udGFpbmVyIGlzIHNlbGVjdGVkLlxuICAgICAgaWYgKG5leHRBY3RpdmVJdGVtSW5kZXggJiYgIWl0ZW1SZWZzUmVmLmN1cnJlbnRbK25leHRBY3RpdmVJdGVtSW5kZXhdPy5jdXJyZW50KSB7XG4gICAgICAgIG5leHRBY3RpdmVJdGVtSW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0aXZlSXRlbUluZGV4UmVmLmN1cnJlbnQgIT09IG5leHRBY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4UmVmLmN1cnJlbnQgPSBuZXh0QWN0aXZlSXRlbUluZGV4O1xuXG4gICAgICAgIHJlZnJlc2hUYWJJbmRpY2VzKCk7XG4gICAgICAgIGl0ZW1SZWZzUmVmLmN1cnJlbnRbK25leHRBY3RpdmVJdGVtSW5kZXhdPy5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2FjdGl2ZUl0ZW1JbmRleFJlZiwgaXRlbVJlZnNSZWYsIHJlZnJlc2hUYWJJbmRpY2VzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlQ2FsbGJhY2soXG4gICAgZXZlbnQgPT4ge1xuICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICBjb25zdCBpbmRleCA9IGl0ZW1SZWZzUmVmLmN1cnJlbnQuZmluZEluZGV4KCh7IGN1cnJlbnQgfSkgPT4gY3VycmVudCA9PT0gdGFyZ2V0KTtcblxuICAgICAgfmluZGV4ICYmIHNldEFjdGl2ZUl0ZW1JbmRleChpbmRleCk7XG4gICAgfSxcbiAgICBbaXRlbVJlZnNSZWYsIHNldEFjdGl2ZUl0ZW1JbmRleF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2s8KGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkPihcbiAgICBldmVudCA9PiB7XG4gICAgICBjb25zdCB7IGtleSB9ID0gZXZlbnQ7XG4gICAgICBjb25zdCB2ZXJ0aWNhbCA9IG9yaWVudGF0aW9uID09PSAndmVydGljYWwnO1xuXG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgY2FzZSAnRG93bic6IC8vIElFMTFcbiAgICAgICAgY2FzZSAnUmlnaHQnOiAvLyBJRTExXG4gICAgICAgICAgaWYgKCh2ZXJ0aWNhbCAmJiBrZXkgPT09ICdBcnJvd1JpZ2h0JykgfHwgKCF2ZXJ0aWNhbCAmJiBrZXkgPT09ICdBcnJvd0Rvd24nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldEFjdGl2ZUl0ZW1JbmRleCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAvLyBUaGUgYGl0ZW1SZWZzUmVmYCBhcnJheSBjb3VsZCBiZSBhIHNwYXJzZSBhcnJheS5cbiAgICAgICAgICAgIC8vIFRodXMsIHRoZSBuZXh0IGl0ZW0gbWF5IG5vdCBiZSBpbW1lZGlhdGVseSBuZXh0IHRvIHRoZSBjdXJyZW50IG9uZS5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRpY2VzID0gaXRlbVJlZnNSZWYuY3VycmVudC5tYXAoKF8sIGluZGV4KSA9PiBpbmRleCk7XG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpdGVtSW5kaWNlcy5pbmRleE9mKHZhbHVlKSArIDE7XG5cbiAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPj0gaXRlbUluZGljZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtSW5kaWNlc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1JbmRpY2VzWytuZXh0SW5kZXhdO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGNhc2UgJ0xlZnQnOiAvLyBJRTExXG4gICAgICAgIGNhc2UgJ1VwJzogLy8gSUUxMVxuICAgICAgICAgIGlmICgodmVydGljYWwgJiYga2V5ID09PSAnQXJyb3dMZWZ0JykgfHwgKCF2ZXJ0aWNhbCAmJiBrZXkgPT09ICdBcnJvd1VwJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXRBY3RpdmVJdGVtSW5kZXgodmFsdWUgPT4ge1xuICAgICAgICAgICAgLy8gVGhlIGBpdGVtUmVmc1JlZmAgYXJyYXkgY291bGQgYmUgYSBzcGFyc2UgYXJyYXkuXG4gICAgICAgICAgICAvLyBUaHVzLCB0aGUgbmV4dCBpdGVtIG1heSBub3QgYmUgaW1tZWRpYXRlbHkgbmV4dCB0byB0aGUgY3VycmVudCBvbmUuXG4gICAgICAgICAgICBjb25zdCBpdGVtSW5kaWNlcyA9IGl0ZW1SZWZzUmVmLmN1cnJlbnQubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gaXRlbUluZGljZXMuaW5kZXhPZih2YWx1ZSkgLSAxO1xuXG4gICAgICAgICAgICBpZiAobmV4dEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbUluZGljZXNbaXRlbUluZGljZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpdGVtSW5kaWNlc1srbmV4dEluZGV4XTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgIHNldEFjdGl2ZUl0ZW1JbmRleCgwKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgIHNldEFjdGl2ZUl0ZW1JbmRleChJbmZpbml0eSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICBpZiAoIW9uRXNjYXBlS2V5KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgXCJvbkVzY2FwZUtleVwiIHByb3AgaXMgbm90IHBhc3NlZCwgZG9uJ3QgY2FsbCBwcmV2ZW50RGVmYXVsdCgpIGFuZCBzdG9wUHJvcGFnYXRpb24oKS5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvbkVzY2FwZUtleSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBbc2V0QWN0aXZlSXRlbUluZGV4LCBvbkVzY2FwZUtleSwgb3JpZW50YXRpb25dXG4gICk7XG5cbiAgY29uc3QgaXRlbUVmZmVjdG9yID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlZiwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHsgY3VycmVudCB9ID0gcmVmO1xuXG4gICAgICBpdGVtUmVmc1JlZi5jdXJyZW50WytpbmRleF0gPSByZWY7XG5cbiAgICAgIGN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBoYW5kbGVGb2N1cyk7XG4gICAgICBjdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKTtcblxuICAgICAgY3VycmVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgYWN0aXZlSXRlbUluZGV4UmVmLmN1cnJlbnQgPT09IGluZGV4ID8gJzAnIDogJy0xJyk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBoYW5kbGVGb2N1cyk7XG4gICAgICAgIGN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuXG4gICAgICAgIGRlbGV0ZSBpdGVtUmVmc1JlZi5jdXJyZW50WytpbmRleF07XG4gICAgICB9O1xuICAgIH0sXG4gICAgW2FjdGl2ZUl0ZW1JbmRleFJlZiwgaGFuZGxlRm9jdXMsIGhhbmRsZUtleURvd25dXG4gICk7XG5cbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbzxSb3ZpbmdUYWJJbmRleENvbnRleHRUeXBlPihcbiAgICAoKSA9PiAoe1xuICAgICAgaXRlbUVmZmVjdG9yXG4gICAgfSksXG4gICAgW2l0ZW1FZmZlY3Rvcl1cbiAgKTtcblxuICAvLyBUaGlzIGhvb2sgcnVuIG9uIGV2ZXJ5IHJlbmRlciB0byByZWN0aWZ5IGBhY3RpdmVJdGVtSW5kZXhSZWZgLlxuICAvLyBTbyBpdCB3aWxsIGFsd2F5cyBwb2ludCB0byBhbiBleGlzdGluZyBpdGVtIG9yIGZpcnN0IGl0ZW0gaWYgYXZhaWxhYmxlLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEFjdGl2ZUl0ZW1JbmRleCh2YWx1ZSA9PiB2YWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiA8Um92aW5nVGFiSW5kZXhDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PntjaGlsZHJlbn08L1JvdmluZ1RhYkluZGV4Q29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5Sb3ZpbmdUYWJJbmRleENvbXBvc2VyLmRlZmF1bHRQcm9wcyA9IHtcbiAgb25Fc2NhcGVLZXk6IHVuZGVmaW5lZCxcbiAgb3JpZW50YXRpb246ICdob3Jpem9udGFsJ1xufTtcblxuUm92aW5nVGFiSW5kZXhDb21wb3Nlci5wcm9wVHlwZXMgPSB7XG4gIG9uRXNjYXBlS2V5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb3JpZW50YXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2hvcml6b250YWwnLCAndmVydGljYWwnXSlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvdmluZ1RhYkluZGV4Q29tcG9zZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFBc0QsU0FBQUkseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxXQUFBLFdBQUFBLFdBQUEsR0FBQUcsZ0JBQUEsR0FBQUQsaUJBQUEsS0FBQUYsV0FBQTtBQUFBLFNBQUFILHdCQUFBTyxHQUFBLEVBQUFKLFdBQUEsU0FBQUEsV0FBQSxJQUFBSSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxXQUFBRCxHQUFBLFFBQUFBLEdBQUEsYUFBQUUsT0FBQSxDQUFBRixHQUFBLHlCQUFBQSxHQUFBLDRCQUFBRyxPQUFBLEVBQUFILEdBQUEsVUFBQUksS0FBQSxHQUFBVCx3QkFBQSxDQUFBQyxXQUFBLE9BQUFRLEtBQUEsSUFBQUEsS0FBQSxDQUFBQyxHQUFBLENBQUFMLEdBQUEsWUFBQUksS0FBQSxDQUFBRSxHQUFBLENBQUFOLEdBQUEsU0FBQU8sTUFBQSxXQUFBQyxxQkFBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxHQUFBLElBQUFaLEdBQUEsUUFBQVksR0FBQSxrQkFBQUgsTUFBQSxDQUFBSSxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBZixHQUFBLEVBQUFZLEdBQUEsU0FBQUksSUFBQSxHQUFBUixxQkFBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFYLEdB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
;