botframework-webchat-component
Version:
React component of botframework-webchat
211 lines (171 loc) • 22.9 kB
JavaScript
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.connectSuggestedAction = exports.default = void 0;
var _botframeworkWebchatApi = require("botframework-webchat-api");
var _classnames = _interopRequireDefault(require("classnames"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _AccessibleButton = _interopRequireDefault(require("../Utils/AccessibleButton"));
var _connectToWebChat = _interopRequireDefault(require("../connectToWebChat"));
var _useFocus = _interopRequireDefault(require("../hooks/useFocus"));
var _useFocusAccessKeyEffect = _interopRequireDefault(require("../Utils/AccessKeySink/useFocusAccessKeyEffect"));
var _useLocalizeAccessKey = _interopRequireDefault(require("../hooks/internal/useLocalizeAccessKey"));
var _useScrollToEnd = _interopRequireDefault(require("../hooks/useScrollToEnd"));
var _useSuggestedActionsAccessKey = _interopRequireDefault(require("../hooks/internal/useSuggestedActionsAccessKey"));
var _useStyleSet3 = _interopRequireDefault(require("../hooks/useStyleSet"));
var _useStyleToEmotionObject = _interopRequireDefault(require("../hooks/internal/useStyleToEmotionObject"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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 _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
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) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_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 useDirection = _botframeworkWebchatApi.hooks.useDirection,
useDisabled = _botframeworkWebchatApi.hooks.useDisabled,
usePerformCardAction = _botframeworkWebchatApi.hooks.usePerformCardAction,
useStyleOptions = _botframeworkWebchatApi.hooks.useStyleOptions,
useSuggestedActions = _botframeworkWebchatApi.hooks.useSuggestedActions;
var ROOT_STYLE = {
'&.webchat__suggested-action': {
'& .webchat__suggested-action__button': {
display: 'flex',
overflow: 'hidden' // Prevent image from leaking; object-fit does not work with IE11
}
}
};
var connectSuggestedAction = function connectSuggestedAction() {
for (var _len = arguments.length, selectors = new Array(_len), _key = 0; _key < _len; _key++) {
selectors[_key] = arguments[_key];
}
return _connectToWebChat.default.apply(void 0, [function (_ref, _ref2) {
var clearSuggestedActions = _ref.clearSuggestedActions,
disabled = _ref.disabled,
language = _ref.language,
onCardAction = _ref.onCardAction;
var displayText = _ref2.displayText,
text = _ref2.text,
type = _ref2.type,
value = _ref2.value;
return {
click: function click() {
onCardAction({
displayText: displayText,
text: text,
type: type,
value: value
});
type === 'openUrl' && clearSuggestedActions();
},
disabled: disabled,
language: language
};
}].concat(selectors));
};
exports.connectSuggestedAction = connectSuggestedAction;
var SuggestedAction = function SuggestedAction(_ref3) {
var ariaHidden = _ref3['aria-hidden'],
buttonText = _ref3.buttonText,
className = _ref3.className,
displayText = _ref3.displayText,
image = _ref3.image,
imageAlt = _ref3.imageAlt,
text = _ref3.text,
textClassName = _ref3.textClassName,
type = _ref3.type,
value = _ref3.value;
var _useSuggestedActions = useSuggestedActions(),
_useSuggestedActions2 = _slicedToArray(_useSuggestedActions, 2),
_ = _useSuggestedActions2[0],
setSuggestedActions = _useSuggestedActions2[1];
var _useStyleOptions = useStyleOptions(),
_useStyleOptions2 = _slicedToArray(_useStyleOptions, 1),
suggestedActionsStackedLayoutButtonTextWrap = _useStyleOptions2[0].suggestedActionsStackedLayoutButtonTextWrap;
var _useStyleSet = (0, _useStyleSet3.default)(),
_useStyleSet2 = _slicedToArray(_useStyleSet, 1),
suggestedActionStyleSet = _useStyleSet2[0].suggestedAction;
var _useSuggestedActionsA = (0, _useSuggestedActionsAccessKey.default)(),
_useSuggestedActionsA2 = _slicedToArray(_useSuggestedActionsA, 1),
accessKey = _useSuggestedActionsA2[0];
var _useDirection = useDirection(),
_useDirection2 = _slicedToArray(_useDirection, 1),
direction = _useDirection2[0];
var _useDisabled = useDisabled(),
_useDisabled2 = _slicedToArray(_useDisabled, 1),
disabled = _useDisabled2[0];
var focus = (0, _useFocus.default)();
var focusRef = (0, _react.useRef)();
var localizeAccessKey = (0, _useLocalizeAccessKey.default)();
var performCardAction = usePerformCardAction();
var scrollToEnd = (0, _useScrollToEnd.default)();
var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + '';
var handleClick = (0, _react.useCallback)(function (_ref4) {
var target = _ref4.target;
performCardAction({
displayText: displayText,
text: text,
type: type,
value: value
}, {
target: target
}); // Since "openUrl" action do not submit, the suggested action buttons do not hide after click.
type === 'openUrl' && setSuggestedActions([]);
focus('sendBoxWithoutKeyboard');
scrollToEnd();
}, [displayText, focus, performCardAction, scrollToEnd, setSuggestedActions, text, type, value]);
(0, _useFocusAccessKeyEffect.default)(accessKey, focusRef);
return /*#__PURE__*/_react.default.createElement("div", {
"aria-hidden": ariaHidden,
className: (0, _classnames.default)('webchat__suggested-action', {
'webchat__suggested-action--rtl': direction === 'rtl'
}, rootClassName, suggestedActionStyleSet + '', (className || '') + '')
}, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, _extends({}, accessKey ? {
'aria-keyshortcuts': localizeAccessKey(accessKey)
} : {}, {
className: (0, _classnames.default)('webchat__suggested-action__button', {
'webchat__suggested-action--wrapping': suggestedActionsStackedLayoutButtonTextWrap
}),
disabled: disabled,
onClick: handleClick,
ref: focusRef,
type: "button"
}), image && /*#__PURE__*/_react.default.createElement("img", {
alt: imageAlt,
className: (0, _classnames.default)('webchat__suggested-action__image', direction === 'rtl' && 'webchat__suggested-action__image--rtl'),
src: image
}), /*#__PURE__*/_react.default.createElement("span", {
className: (0, _classnames.default)('webchat__suggested-action__text', (textClassName || '') + '')
}, buttonText)));
};
SuggestedAction.defaultProps = {
'aria-hidden': false,
className: '',
displayText: '',
image: '',
imageAlt: undefined,
text: '',
textClassName: '',
type: '',
value: undefined
};
SuggestedAction.propTypes = {
'aria-hidden': _propTypes.default.bool,
buttonText: _propTypes.default.string.isRequired,
className: _propTypes.default.string,
displayText: _propTypes.default.string,
image: _propTypes.default.string,
imageAlt: _propTypes.default.string,
text: _propTypes.default.string,
textClassName: _propTypes.default.string,
type: _propTypes.default.string,
value: _propTypes.default.any
};
var _default = SuggestedAction;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TZW5kQm94L1N1Z2dlc3RlZEFjdGlvbi5qcyJdLCJuYW1lcyI6WyJ1c2VEaXJlY3Rpb24iLCJob29rcyIsInVzZURpc2FibGVkIiwidXNlUGVyZm9ybUNhcmRBY3Rpb24iLCJ1c2VTdHlsZU9wdGlvbnMiLCJ1c2VTdWdnZXN0ZWRBY3Rpb25zIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJvdmVyZmxvdyIsImNvbm5lY3RTdWdnZXN0ZWRBY3Rpb24iLCJzZWxlY3RvcnMiLCJjb25uZWN0VG9XZWJDaGF0IiwiY2xlYXJTdWdnZXN0ZWRBY3Rpb25zIiwiZGlzYWJsZWQiLCJsYW5ndWFnZSIsIm9uQ2FyZEFjdGlvbiIsImRpc3BsYXlUZXh0IiwidGV4dCIsInR5cGUiLCJ2YWx1ZSIsImNsaWNrIiwiU3VnZ2VzdGVkQWN0aW9uIiwiYXJpYUhpZGRlbiIsImJ1dHRvblRleHQiLCJjbGFzc05hbWUiLCJpbWFnZSIsImltYWdlQWx0IiwidGV4dENsYXNzTmFtZSIsIl8iLCJzZXRTdWdnZXN0ZWRBY3Rpb25zIiwic3VnZ2VzdGVkQWN0aW9uc1N0YWNrZWRMYXlvdXRCdXR0b25UZXh0V3JhcCIsInN1Z2dlc3RlZEFjdGlvblN0eWxlU2V0Iiwic3VnZ2VzdGVkQWN0aW9uIiwiYWNjZXNzS2V5IiwiZGlyZWN0aW9uIiwiZm9jdXMiLCJmb2N1c1JlZiIsImxvY2FsaXplQWNjZXNzS2V5IiwicGVyZm9ybUNhcmRBY3Rpb24iLCJzY3JvbGxUb0VuZCIsInJvb3RDbGFzc05hbWUiLCJoYW5kbGVDbGljayIsInRhcmdldCIsImRlZmF1bHRQcm9wcyIsInVuZGVmaW5lZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImJvb2wiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7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b0IsbUJBQVVFLE1BTk07QUFPMUIvQixFQUFBQSxJQUFJLEVBQUU2QixtQkFBVUUsTUFQVTtBQVExQnJCLEVBQUFBLGFBQWEsRUFBRW1CLG1CQUFVRSxNQVJDO0FBUzFCOUIsRUFBQUEsSUFBSSxFQUFFNEIsbUJBQVVFLE1BVFU7QUFVMUI3QixFQUFBQSxLQUFLLEVBQUUyQixtQkFBVUk7QUFWUyxDQUE1QjtlQWFlN0IsZSIsInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gJy4uL1V0aWxzL0FjY2Vzc2libGVCdXR0b24nO1xuaW1wb3J0IGNvbm5lY3RUb1dlYkNoYXQgZnJvbSAnLi4vY29ubmVjdFRvV2ViQ2hhdCc7XG5pbXBvcnQgdXNlRm9jdXMgZnJvbSAnLi4vaG9va3MvdXNlRm9jdXMnO1xuaW1wb3J0IHVzZUZvY3VzQWNjZXNzS2V5RWZmZWN0IGZyb20gJy4uL1V0aWxzL0FjY2Vzc0tleVNpbmsvdXNlRm9jdXNBY2Nlc3NLZXlFZmZlY3QnO1xuaW1wb3J0IHVzZUxvY2FsaXplQWNjZXNzS2V5IGZyb20gJy4uL2hvb2tzL2ludGVybmFsL3VzZUxvY2FsaXplQWNjZXNzS2V5JztcbmltcG9ydCB1c2VTY3JvbGxUb0VuZCBmcm9tICcuLi9ob29rcy91c2VTY3JvbGxUb0VuZCc7XG5pbXBvcnQgdXNlU3VnZ2VzdGVkQWN0aW9uc0FjY2Vzc0tleSBmcm9tICcuLi9ob29rcy9pbnRlcm5hbC91c2VTdWdnZXN0ZWRBY3Rpb25zQWNjZXNzS2V5JztcbmltcG9ydCB1c2VTdHlsZVNldCBmcm9tICcuLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi4vaG9va3MvaW50ZXJuYWwvdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QnO1xuXG5jb25zdCB7IHVzZURpcmVjdGlvbiwgdXNlRGlzYWJsZWQsIHVzZVBlcmZvcm1DYXJkQWN0aW9uLCB1c2VTdHlsZU9wdGlvbnMsIHVzZVN1Z2dlc3RlZEFjdGlvbnMgfSA9IGhvb2tzO1xuXG5jb25zdCBST09UX1NUWUxFID0ge1xuICAnJi53ZWJjaGF0X19zdWdnZXN0ZWQtYWN0aW9uJzoge1xuICAgICcmIC53ZWJjaGF0X19zdWdnZXN0ZWQtYWN0aW9uX19idXR0b24nOiB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicgLy8gUHJldmVudCBpbWFnZSBmcm9tIGxlYWtpbmc7IG9iamVjdC1maXQgZG9lcyBub3Qgd29yayB3aXRoIElFMTFcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGNvbm5lY3RTdWdnZXN0ZWRBY3Rpb24gPSAoLi4uc2VsZWN0b3JzKSA9PlxuICBjb25uZWN0VG9XZWJDaGF0KFxuICAgICh7IGNsZWFyU3VnZ2VzdGVkQWN0aW9ucywgZGlzYWJsZWQsIGxhbmd1YWdlLCBvbkNhcmRBY3Rpb24gfSwgeyBkaXNwbGF5VGV4dCwgdGV4dCwgdHlwZSwgdmFsdWUgfSkgPT4gKHtcbiAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgIG9uQ2FyZEFjdGlvbih7IGRpc3BsYXlUZXh0LCB0ZXh0LCB0eXBlLCB2YWx1ZSB9KTtcbiAgICAgICAgdHlwZSA9PT0gJ29wZW5VcmwnICYmIGNsZWFyU3VnZ2VzdGVkQWN0aW9ucygpO1xuICAgICAgfSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgbGFuZ3VhZ2VcbiAgICB9KSxcbiAgICAuLi5zZWxlY3RvcnNcbiAgKTtcblxuY29uc3QgU3VnZ2VzdGVkQWN0aW9uID0gKHtcbiAgJ2FyaWEtaGlkZGVuJzogYXJpYUhpZGRlbixcbiAgYnV0dG9uVGV4dCxcbiAgY2xhc3NOYW1lLFxuICBkaXNwbGF5VGV4dCxcbiAgaW1hZ2UsXG4gIGltYWdlQWx0LFxuICB0ZXh0LFxuICB0ZXh0Q2xhc3NOYW1lLFxuICB0eXBlLFxuICB2YWx1ZVxufSkgPT4ge1xuICBjb25zdCBbXywgc2V0U3VnZ2VzdGVkQWN0aW9uc10gPSB1c2VTdWdnZXN0ZWRBY3Rpb25zKCk7XG4gIGNvbnN0IFt7IHN1Z2dlc3RlZEFjdGlvbnNTdGFja2VkTGF5b3V0QnV0dG9uVGV4dFdyYXAgfV0gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgW3sgc3VnZ2VzdGVkQWN0aW9uOiBzdWdnZXN0ZWRBY3Rpb25TdHlsZVNldCB9XSA9IHVzZVN0eWxlU2V0KCk7XG4gIGNvbnN0IFthY2Nlc3NLZXldID0gdXNlU3VnZ2VzdGVkQWN0aW9uc0FjY2Vzc0tleSgpO1xuICBjb25zdCBbZGlyZWN0aW9uXSA9IHVzZURpcmVjdGlvbigpO1xuICBjb25zdCBbZGlzYWJsZWRdID0gdXNlRGlzYWJsZWQoKTtcbiAgY29uc3QgZm9jdXMgPSB1c2VGb2N1cygpO1xuICBjb25zdCBmb2N1c1JlZiA9IHVzZVJlZigpO1xuICBjb25zdCBsb2NhbGl6ZUFjY2Vzc0tleSA9IHVzZUxvY2FsaXplQWNjZXNzS2V5KCk7XG4gIGNvbnN0IHBlcmZvcm1DYXJkQWN0aW9uID0gdXNlUGVyZm9ybUNhcmRBY3Rpb24oKTtcbiAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuICBjb25zdCByb290Q2xhc3NOYW1lID0gdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QoKShST09UX1NUWUxFKSArICcnO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgdGFyZ2V0IH0pID0+IHtcbiAgICAgIHBlcmZvcm1DYXJkQWN0aW9uKHsgZGlzcGxheVRleHQsIHRleHQsIHR5cGUsIHZhbHVlIH0sIHsgdGFyZ2V0IH0pO1xuXG4gICAgICAvLyBTaW5jZSBcIm9wZW5VcmxcIiBhY3Rpb24gZG8gbm90IHN1Ym1pdCwgdGhlIHN1Z2dlc3RlZCBhY3Rpb24gYnV0dG9ucyBkbyBub3QgaGlkZSBhZnRlciBjbGljay5cbiAgICAgIHR5cGUgPT09ICdvcGVuVXJsJyAmJiBzZXRTdWdnZXN0ZWRBY3Rpb25zKFtdKTtcblxuICAgICAgZm9jdXMoJ3NlbmRCb3hXaXRob3V0S2V5Ym9hcmQnKTtcbiAgICAgIHNjcm9sbFRvRW5kKCk7XG4gICAgfSxcbiAgICBbZGlzcGxheVRleHQsIGZvY3VzLCBwZXJmb3JtQ2FyZEFjdGlvbiwgc2Nyb2xsVG9FbmQsIHNldFN1Z2dlc3RlZEFjdGlvbnMsIHRleHQsIHR5cGUsIHZhbHVlXVxuICApO1xuXG4gIHVzZUZvY3VzQWNjZXNzS2V5RWZmZWN0KGFjY2Vzc0tleSwgZm9jdXNSZWYpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW49e2FyaWFIaWRkZW59XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICd3ZWJjaGF0X19zdWdnZXN0ZWQtYWN0aW9uJyxcbiAgICAgICAgeyAnd2ViY2hhdF9fc3VnZ2VzdGVkLWFjdGlvbi0tcnRsJzogZGlyZWN0aW9uID09PSAncnRsJyB9LFxuICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICBzdWdnZXN0ZWRBY3Rpb25TdHlsZVNldCArICcnLFxuICAgICAgICAoY2xhc3NOYW1lIHx8ICcnKSArICcnXG4gICAgICApfVxuICAgID5cbiAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgIHsuLi4oYWNjZXNzS2V5ID8geyAnYXJpYS1rZXlzaG9ydGN1dHMnOiBsb2NhbGl6ZUFjY2Vzc0tleShhY2Nlc3NLZXkpIH0gOiB7fSl9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcygnd2ViY2hhdF9fc3VnZ2VzdGVkLWFjdGlvbl9fYnV0dG9uJywge1xuICAgICAgICAgICd3ZWJjaGF0X19zdWdnZXN0ZWQtYWN0aW9uLS13cmFwcGluZyc6IHN1Z2dlc3RlZEFjdGlvbnNTdGFja2VkTGF5b3V0QnV0dG9uVGV4dFdyYXBcbiAgICAgICAgfSl9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICAgIHJlZj17Zm9jdXNSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgPlxuICAgICAgICB7aW1hZ2UgJiYgKFxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGFsdD17aW1hZ2VBbHR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgICAgICd3ZWJjaGF0X19zdWdnZXN0ZWQtYWN0aW9uX19pbWFnZScsXG4gICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gJ3J0bCcgJiYgJ3dlYmNoYXRfX3N1Z2dlc3RlZC1hY3Rpb25fX2ltYWdlLS1ydGwnXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgc3JjPXtpbWFnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoJ3dlYmNoYXRfX3N1Z2dlc3RlZC1hY3Rpb25fX3RleHQnLCAodGV4dENsYXNzTmFtZSB8fCAnJykgKyAnJyl9PntidXR0b25UZXh0fTwvc3Bhbj5cbiAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblN1Z2dlc3RlZEFjdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gICdhcmlhLWhpZGRlbic6IGZhbHNlLFxuICBjbGFzc05hbWU6ICcnLFxuICBkaXNwbGF5VGV4dDogJycsXG4gIGltYWdlOiAnJyxcbiAgaW1hZ2VBbHQ6IHVuZGVmaW5lZCxcbiAgdGV4dDogJycsXG4gIHRleHRDbGFzc05hbWU6ICcnLFxuICB0eXBlOiAnJyxcbiAgdmFsdWU6IHVuZGVmaW5lZFxufTtcblxuU3VnZ2VzdGVkQWN0aW9uLnByb3BUeXBlcyA9IHtcbiAgJ2FyaWEtaGlkZGVuJzogUHJvcFR5cGVzLmJvb2wsXG4gIGJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaXNwbGF5VGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW1hZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGltYWdlQWx0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0ZXh0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufTtcblxuZXhwb3J0IGRlZmF1bHQgU3VnZ2VzdGVkQWN0aW9uO1xuXG5leHBvcnQgeyBjb25uZWN0U3VnZ2VzdGVkQWN0aW9uIH07XG4iXX0=
;