UNPKG

tc-ui-toolkit

Version:

React components used to develop tools for the desktop app translationCore

453 lines (415 loc) 46.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactBootstrap = require("react-bootstrap"); var _deepEqual = _interopRequireDefault(require("deep-equal")); var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox")); var _styles = require("@material-ui/core/styles"); var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel")); var _Info = _interopRequireDefault(require("@material-ui/icons/Info")); var _CheckBoxOutlineBlank = _interopRequireDefault(require("@material-ui/icons/CheckBoxOutlineBlank")); var _CheckBox = _interopRequireDefault(require("@material-ui/icons/CheckBox")); var _reactTooltip = _interopRequireDefault(require("react-tooltip")); var _Bookmark = _interopRequireDefault(require("../../Bookmark")); require("./ActionsArea.styles.css"); var _Hint = _interopRequireDefault(require("../../Hint/Hint")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var styles = { formControl: { margin: '0' }, label: { color: 'var(--accent-color-dark)', fontWeight: 'normal', fontSize: 14 }, checkBoxRoot: { 'padding': '12px 5px', 'color': 'var(--accent-color-dark)', '&$checked': { color: 'var(--accent-color-dark)' } }, checked: {}, icon: { color: 'var(--accent-color-dark)', verticalAlign: 'middle', margin: '5px', width: 30, height: 30, cursor: 'pointer' }, actionButtons: { width: '140px', textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap', paddingRight: '0px' } }; var actionButtonStyleRM = _objectSpread(_objectSpread({}, styles.actionButtons), {}, { marginRight: '5px' }); var isSelectionsSaveDisable = function isSelectionsSaveDisable(localNothingToSelect, nothingToSelect, newSelections, selections) { if (newSelections.length > 0 || newSelections.length === 0 && !(0, _deepEqual["default"])(newSelections, selections)) { return (0, _deepEqual["default"])(newSelections, selections); } return localNothingToSelect === nothingToSelect; }; /* eslint-disable react/prop-types */ var ChangeModeArea = function ChangeModeArea(_ref) { var translate = _ref.translate, bookmarkEnabled = _ref.bookmarkEnabled, toggleBookmark = _ref.toggleBookmark, changeMode = _ref.changeMode; var selectText = translate('select'); var editVerseText = translate('edit_verse'); var commentText = translate('comment'); return /*#__PURE__*/_react["default"].createElement("div", { className: "actions-area" }, /*#__PURE__*/_react["default"].createElement(_Bookmark["default"], { value: "bookmark", color: "primary", checked: bookmarkEnabled, label: translate('bookmark'), onChange: toggleBookmark }), /*#__PURE__*/_react["default"].createElement("div", { style: { display: 'flex', marginLeft: 'auto' } }, /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: selectText, enabled: !!selectText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { style: actionButtonStyleRM, className: "btn-second", onClick: function onClick() { return changeMode('select'); } }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "ok", style: { marginRight: '10px' } }), selectText)), /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: editVerseText, enabled: !!editVerseText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { style: actionButtonStyleRM, className: "btn-second", onClick: function onClick() { return changeMode('edit'); } }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "pencil", style: { marginRight: '10px' } }), editVerseText)), /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: commentText, enabled: !!commentText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { style: styles.actionButtons, className: "btn-second", onClick: function onClick() { return changeMode('comment'); } }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "comment", style: { marginRight: '10px' } }), commentText)))); }; var ConfirmEditVerseArea = function ConfirmEditVerseArea(_ref2) { var translate = _ref2.translate, tags = _ref2.tags, cancelEditVerse = _ref2.cancelEditVerse, saveEditVerse = _ref2.saveEditVerse; var cancelText = translate('cancel'); var saveText = translate('save'); return /*#__PURE__*/_react["default"].createElement("div", { className: "actions-area" }, /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: cancelText, enabled: !!cancelText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-second", onClick: cancelEditVerse }, cancelText)), /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: saveText, enabled: !!saveText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-prime", disabled: !tags.length, onClick: saveEditVerse }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "ok", style: { marginRight: '10px' } }), saveText))); }; var ConfirmCommentArea = function ConfirmCommentArea(_ref3) { var translate = _ref3.translate, isCommentChanged = _ref3.isCommentChanged, cancelComment = _ref3.cancelComment, saveComment = _ref3.saveComment; var cancelText = translate('cancel'); var saveText = translate('save'); return /*#__PURE__*/_react["default"].createElement("div", { className: "actions-area" }, /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: cancelText, enabled: !!cancelText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-second", onClick: cancelComment }, cancelText)), /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: saveText, enabled: !!saveText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-prime", disabled: !isCommentChanged, onClick: saveComment }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "ok", style: { marginRight: '10px' } }), saveText))); }; var ConfirmSelectionArea = function ConfirmSelectionArea(_ref4) { var classes = _ref4.classes, translate = _ref4.translate, localNothingToSelect = _ref4.localNothingToSelect, newSelections = _ref4.newSelections, nothingToSelect = _ref4.nothingToSelect, selections = _ref4.selections, toggleNothingToSelect = _ref4.toggleNothingToSelect, cancelSelection = _ref4.cancelSelection, clearSelection = _ref4.clearSelection, saveSelection = _ref4.saveSelection; var cancelText = translate('cancel'); var clearSelectionText = translate('clear_selection'); var saveText = translate('save'); return /*#__PURE__*/_react["default"].createElement("div", { className: "selection-actions-area" }, /*#__PURE__*/_react["default"].createElement("div", { className: "flex-row" }, /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], { value: "end", control: /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], { checked: localNothingToSelect, disabled: newSelections && newSelections.length > 0, color: "primary", onChange: function onChange(event) { return toggleNothingToSelect(event.target.checked); }, value: "nothingToSelect", classes: { root: classes.checkBoxRoot, checked: classes.checked }, icon: /*#__PURE__*/_react["default"].createElement(_CheckBoxOutlineBlank["default"], { style: { fontSize: '24px' } }), checkedIcon: /*#__PURE__*/_react["default"].createElement(_CheckBox["default"], { style: { fontSize: '24px' } }) }), label: translate('no_selection_needed'), classes: { root: classes.formControl, label: classes.label } }), /*#__PURE__*/_react["default"].createElement("div", { "data-tip": translate('nothing_to_select_description'), "data-place": "top", "data-effect": "float", "data-type": "dark", "data-class": "selection-tooltip", "data-delay-hide": "100", style: { verticalAlign: 'super', fontSize: '0.8em' } }, /*#__PURE__*/_react["default"].createElement(_Info["default"], { classes: { root: classes.icon } }), /*#__PURE__*/_react["default"].createElement(_reactTooltip["default"], null))), /*#__PURE__*/_react["default"].createElement("div", { style: { whiteSpace: 'nowrap' } }, /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: cancelText, enabled: !!cancelText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-second", style: _objectSpread(_objectSpread({}, actionButtonStyleRM), {}, { marginLeft: '0px', alignSelf: 'flex-start' }), onClick: cancelSelection }, cancelText)), /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: clearSelectionText, enabled: !!clearSelectionText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-second", style: actionButtonStyleRM, disabled: newSelections.length > 0 ? false : true, onClick: clearSelection }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "erase", style: { marginRight: '10px' } }), clearSelectionText)), /*#__PURE__*/_react["default"].createElement(_Hint["default"], { position: 'top', size: "medium", label: saveText, enabled: !!saveText, hintLength: 14 }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-prime", style: actionButtonStyleRM, disabled: isSelectionsSaveDisable(localNothingToSelect, nothingToSelect, newSelections, selections), onClick: saveSelection }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "ok", style: { marginRight: '10px' } }), saveText)))); }; /* eslint-enable react/prop-types */ var ActionsArea = function ActionsArea(_ref5) { var tags = _ref5.tags, mode = _ref5.mode, isCommentChanged = _ref5.isCommentChanged, selections = _ref5.selections, newSelections = _ref5.newSelections, bookmarkEnabled = _ref5.bookmarkEnabled, saveSelection = _ref5.saveSelection, cancelSelection = _ref5.cancelSelection, clearSelection = _ref5.clearSelection, translate = _ref5.translate, classes = _ref5.classes, localNothingToSelect = _ref5.localNothingToSelect, nothingToSelect = _ref5.nothingToSelect, toggleNothingToSelect = _ref5.toggleNothingToSelect, toggleBookmark = _ref5.toggleBookmark, changeMode = _ref5.changeMode, cancelEditVerse = _ref5.cancelEditVerse, saveEditVerse = _ref5.saveEditVerse, cancelComment = _ref5.cancelComment, saveComment = _ref5.saveComment; switch (mode) { case 'edit': return /*#__PURE__*/_react["default"].createElement(ConfirmEditVerseArea, { tags: tags, translate: translate, cancelEditVerse: cancelEditVerse, saveEditVerse: saveEditVerse }); case 'comment': return /*#__PURE__*/_react["default"].createElement(ConfirmCommentArea, { translate: translate, isCommentChanged: isCommentChanged, cancelComment: cancelComment, saveComment: saveComment }); case 'select': return /*#__PURE__*/_react["default"].createElement(ConfirmSelectionArea, { classes: classes, translate: translate, localNothingToSelect: localNothingToSelect, newSelections: newSelections, nothingToSelect: nothingToSelect, selections: selections, toggleNothingToSelect: toggleNothingToSelect, cancelSelection: cancelSelection, clearSelection: clearSelection, saveSelection: saveSelection }); case 'default': return /*#__PURE__*/_react["default"].createElement(ChangeModeArea, { translate: translate, bookmarkEnabled: bookmarkEnabled, toggleBookmark: toggleBookmark, changeMode: changeMode }); default: return /*#__PURE__*/_react["default"].createElement(ChangeModeArea, { translate: translate, bookmarkEnabled: bookmarkEnabled, toggleBookmark: toggleBookmark, changeMode: changeMode }); } }; ActionsArea.propTypes = { tags: _propTypes["default"].array.isRequired, mode: _propTypes["default"].string.isRequired, isCommentChanged: _propTypes["default"].bool.isRequired, selections: _propTypes["default"].array.isRequired, newSelections: _propTypes["default"].array.isRequired, bookmarkEnabled: _propTypes["default"].bool.isRequired, classes: _propTypes["default"].object.isRequired, localNothingToSelect: _propTypes["default"].bool.isRequired, nothingToSelect: _propTypes["default"].bool.isRequired, saveSelection: _propTypes["default"].func.isRequired, cancelSelection: _propTypes["default"].func.isRequired, clearSelection: _propTypes["default"].func.isRequired, translate: _propTypes["default"].func.isRequired, toggleNothingToSelect: _propTypes["default"].func.isRequired, toggleBookmark: _propTypes["default"].func.isRequired, changeMode: _propTypes["default"].func.isRequired, cancelEditVerse: _propTypes["default"].func.isRequired, saveEditVerse: _propTypes["default"].func.isRequired, cancelComment: _propTypes["default"].func.isRequired, saveComment: _propTypes["default"].func.isRequired }; var _default = (0, _styles.withStyles)(styles)(ActionsArea); exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9WZXJzZUNoZWNrL0FjdGlvbnNBcmVhL2luZGV4LmpzIl0sIm5hbWVzIjpbInN0eWxlcyIsImZvcm1Db250cm9sIiwibWFyZ2luIiwibGFiZWwiLCJjb2xvciIsImZvbnRXZWlnaHQiLCJmb250U2l6ZSIsImNoZWNrQm94Um9vdCIsImNoZWNrZWQiLCJpY29uIiwidmVydGljYWxBbGlnbiIsIndpZHRoIiwiaGVpZ2h0IiwiY3Vyc29yIiwiYWN0aW9uQnV0dG9ucyIsInRleHRPdmVyZmxvdyIsIm92ZXJmbG93Iiwid2hpdGVTcGFjZSIsInBhZGRpbmdSaWdodCIsImFjdGlvbkJ1dHRvblN0eWxlUk0iLCJtYXJnaW5SaWdodCIsImlzU2VsZWN0aW9uc1NhdmVEaXNhYmxlIiwibG9jYWxOb3RoaW5nVG9TZWxlY3QiLCJub3RoaW5nVG9TZWxlY3QiLCJuZXdTZWxlY3Rpb25zIiwic2VsZWN0aW9ucyIsImxlbmd0aCIsIkNoYW5nZU1vZGVBcmVhIiwidHJhbnNsYXRlIiwiYm9va21hcmtFbmFibGVkIiwidG9nZ2xlQm9va21hcmsiLCJjaGFuZ2VNb2RlIiwic2VsZWN0VGV4dCIsImVkaXRWZXJzZVRleHQiLCJjb21tZW50VGV4dCIsImRpc3BsYXkiLCJtYXJnaW5MZWZ0IiwiQ29uZmlybUVkaXRWZXJzZUFyZWEiLCJ0YWdzIiwiY2FuY2VsRWRpdFZlcnNlIiwic2F2ZUVkaXRWZXJzZSIsImNhbmNlbFRleHQiLCJzYXZlVGV4dCIsIkNvbmZpcm1Db21tZW50QXJlYSIsImlzQ29tbWVudENoYW5nZWQiLCJjYW5jZWxDb21tZW50Iiwic2F2ZUNvbW1lbnQiLCJDb25maXJtU2VsZWN0aW9uQXJlYSIsImNsYXNzZXMiLCJ0b2dnbGVOb3RoaW5nVG9TZWxlY3QiLCJjYW5jZWxTZWxlY3Rpb24iLCJjbGVhclNlbGVjdGlvbiIsInNhdmVTZWxlY3Rpb24iLCJjbGVhclNlbGVjdGlvblRleHQiLCJldmVudCIsInRhcmdldCIsInJvb3QiLCJhbGlnblNlbGYiLCJBY3Rpb25zQXJlYSIsIm1vZGUiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJhcnJheSIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJib29sIiwib2JqZWN0IiwiZnVuYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsTUFBTSxHQUFHO0FBQ2JDLEVBQUFBLFdBQVcsRUFBRTtBQUFFQyxJQUFBQSxNQUFNLEVBQUU7QUFBVixHQURBO0FBRWJDLEVBQUFBLEtBQUssRUFBRTtBQUNMQyxJQUFBQSxLQUFLLEVBQUUsMEJBREY7QUFFTEMsSUFBQUEsVUFBVSxFQUFFLFFBRlA7QUFHTEMsSUFBQUEsUUFBUSxFQUFFO0FBSEwsR0FGTTtBQU9iQyxFQUFBQSxZQUFZLEVBQUU7QUFDWixlQUFXLFVBREM7QUFFWixhQUFTLDBCQUZHO0FBR1osaUJBQWE7QUFBRUgsTUFBQUEsS0FBSyxFQUFFO0FBQVQ7QUFIRCxHQVBEO0FBWWJJLEVBQUFBLE9BQU8sRUFBRSxFQVpJO0FBYWJDLEVBQUFBLElBQUksRUFBRTtBQUNKTCxJQUFBQSxLQUFLLEVBQUUsMEJBREg7QUFFSk0sSUFBQUEsYUFBYSxFQUFFLFFBRlg7QUFHSlIsSUFBQUEsTUFBTSxFQUFFLEtBSEo7QUFJSlMsSUFBQUEsS0FBSyxFQUFFLEVBSkg7QUFLSkMsSUFBQUEsTUFBTSxFQUFFLEVBTEo7QUFNSkMsSUFBQUEsTUFBTSxFQUFFO0FBTkosR0FiTztBQXFCYkMsRUFBQUEsYUFBYSxFQUFFO0FBQ2JILElBQUFBLEtBQUssRUFBRSxPQURNO0FBRWJJLElBQUFBLFlBQVksRUFBRSxVQUZEO0FBR2JDLElBQUFBLFFBQVEsRUFBRSxRQUhHO0FBSWJDLElBQUFBLFVBQVUsRUFBRSxRQUpDO0FBS2JDLElBQUFBLFlBQVksRUFBRTtBQUxEO0FBckJGLENBQWY7O0FBOEJBLElBQU1DLG1C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O0FBV3RCYixFQUFBQSxlQUFlLEVBQUVXLHNCQUFVTSxJQUFWLENBQWVKLFVBWFY7QUFZdEJaLEVBQUFBLGNBQWMsRUFBRVUsc0JBQVVNLElBQVYsQ0FBZUosVUFaVDtBQWF0Qm5DLEVBQUFBLFNBQVMsRUFBRWlDLHNCQUFVTSxJQUFWLENBQWVKLFVBYko7QUFjdEJkLEVBQUFBLHFCQUFxQixFQUFFWSxzQkFBVU0sSUFBVixDQUFlSixVQWRoQjtBQWV0QmpDLEVBQUFBLGNBQWMsRUFBRStCLHNCQUFVTSxJQUFWLENBQWVKLFVBZlQ7QUFnQnRCaEMsRUFBQUEsVUFBVSxFQUFFOEIsc0JBQVVNLElBQVYsQ0FBZUosVUFoQkw7QUFpQnRCeEIsRUFBQUEsZUFBZSxFQUFFc0Isc0JBQVVNLElBQVYsQ0FBZUosVUFqQlY7QUFrQnRCdkIsRUFBQUEsYUFBYSxFQUFFcUIsc0JBQVVNLElBQVYsQ0FBZUosVUFsQlI7QUFtQnRCbEIsRUFBQUEsYUFBYSxFQUFFZ0Isc0JBQVVNLElBQVYsQ0FBZUosVUFuQlI7QUFvQnRCakIsRUFBQUEsV0FBVyxFQUFFZSxzQkFBVU0sSUFBVixDQUFlSjtBQXBCTixDQUF4Qjs7ZUF1QmUsd0JBQVcvRCxNQUFYLEVBQW1CMEQsV0FBbkIsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2x5cGhpY29uIH0gZnJvbSAncmVhY3QtYm9vdHN0cmFwJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2RlZXAtZXF1YWwnO1xuaW1wb3J0IENoZWNrYm94IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0NoZWNrYm94JztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IEZvcm1Db250cm9sTGFiZWwgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvRm9ybUNvbnRyb2xMYWJlbCc7XG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0luZm8nO1xuaW1wb3J0IENoZWNrQm94T3V0bGluZUljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0NoZWNrQm94T3V0bGluZUJsYW5rJztcbmltcG9ydCBDaGVja0JveEljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0NoZWNrQm94JztcbmltcG9ydCBSZWFjdFRvb2x0aXAgZnJvbSAncmVhY3QtdG9vbHRpcCc7XG4vLyBjb21wb25lbnRzXG5pbXBvcnQgQm9va21hcmsgZnJvbSAnLi4vLi4vQm9va21hcmsnO1xuLy8gY3NzXG5pbXBvcnQgJy4vQWN0aW9uc0FyZWEuc3R5bGVzLmNzcyc7XG5pbXBvcnQgSGludCBmcm9tICcuLi8uLi9IaW50L0hpbnQnO1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGZvcm1Db250cm9sOiB7IG1hcmdpbjogJzAnIH0sXG4gIGxhYmVsOiB7XG4gICAgY29sb3I6ICd2YXIoLS1hY2NlbnQtY29sb3ItZGFyayknLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIGZvbnRTaXplOiAxNCxcbiAgfSxcbiAgY2hlY2tCb3hSb290OiB7XG4gICAgJ3BhZGRpbmcnOiAnMTJweCA1cHgnLFxuICAgICdjb2xvcic6ICd2YXIoLS1hY2NlbnQtY29sb3ItZGFyayknLFxuICAgICcmJGNoZWNrZWQnOiB7IGNvbG9yOiAndmFyKC0tYWNjZW50LWNvbG9yLWRhcmspJyB9LFxuICB9LFxuICBjaGVja2VkOiB7fSxcbiAgaWNvbjoge1xuICAgIGNvbG9yOiAndmFyKC0tYWNjZW50LWNvbG9yLWRhcmspJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBtYXJnaW46ICc1cHgnLFxuICAgIHdpZHRoOiAzMCxcbiAgICBoZWlnaHQ6IDMwLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICB9LFxuICBhY3Rpb25CdXR0b25zOiB7XG4gICAgd2lkdGg6ICcxNDBweCcsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBwYWRkaW5nUmlnaHQ6ICcwcHgnLFxuICB9LFxufTtcblxuY29uc3QgYWN0aW9uQnV0dG9uU3R5bGVSTSA9IHtcbiAgLi4uc3R5bGVzLmFjdGlvbkJ1dHRvbnMsXG4gIG1hcmdpblJpZ2h0OiAnNXB4Jyxcbn07XG5cbmNvbnN0IGlzU2VsZWN0aW9uc1NhdmVEaXNhYmxlID0gKGxvY2FsTm90aGluZ1RvU2VsZWN0LCBub3RoaW5nVG9TZWxlY3QsIG5ld1NlbGVjdGlvbnMsIHNlbGVjdGlvbnMpID0+IHtcbiAgaWYgKG5ld1NlbGVjdGlvbnMubGVuZ3RoID4gMCB8fCAobmV3U2VsZWN0aW9ucy5sZW5ndGggPT09IDAgJiYgIWlzRXF1YWwobmV3U2VsZWN0aW9ucywgc2VsZWN0aW9ucykpKSB7XG4gICAgcmV0dXJuIGlzRXF1YWwobmV3U2VsZWN0aW9ucywgc2VsZWN0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gbG9jYWxOb3RoaW5nVG9TZWxlY3QgPT09IG5vdGhpbmdUb1NlbGVjdDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cbmNvbnN0IENoYW5nZU1vZGVBcmVhID0gKHtcbiAgdHJhbnNsYXRlLFxuICBib29rbWFya0VuYWJsZWQsXG4gIHRvZ2dsZUJvb2ttYXJrLFxuICBjaGFuZ2VNb2RlLFxufSkgPT4ge1xuICBjb25zdCBzZWxlY3RUZXh0ID0gdHJhbnNsYXRlKCdzZWxlY3QnKTtcbiAgY29uc3QgZWRpdFZlcnNlVGV4dCA9IHRyYW5zbGF0ZSgnZWRpdF92ZXJzZScpO1xuICBjb25zdCBjb21tZW50VGV4dCA9IHRyYW5zbGF0ZSgnY29tbWVudCcpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPSdhY3Rpb25zLWFyZWEnPlxuICAgICAgPEJvb2ttYXJrXG4gICAgICAgIHZhbHVlPSdib29rbWFyaydcbiAgICAgICAgY29sb3I9J3ByaW1hcnknXG4gICAgICAgIGNoZWNrZWQ9e2Jvb2ttYXJrRW5hYmxlZH1cbiAgICAgICAgbGFiZWw9e3RyYW5zbGF0ZSgnYm9va21hcmsnKX1cbiAgICAgICAgb25DaGFuZ2U9e3RvZ2dsZUJvb2ttYXJrfSAvPlxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIG1hcmdpbkxlZnQ6ICdhdXRvJyB9fT5cbiAgICAgICAgPEhpbnRcbiAgICAgICAgICBwb3NpdGlvbj17J3RvcCd9XG4gICAgICAgICAgc2l6ZT0nbWVkaXVtJ1xuICAgICAgICAgIGxhYmVsPXtzZWxlY3RUZXh0fVxuICAgICAgICAgIGVuYWJsZWQ9eyEhc2VsZWN0VGV4dH1cbiAgICAgICAgICBoaW50TGVuZ3RoPXsxNH1cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHN0eWxlPXthY3Rpb25CdXR0b25TdHlsZVJNfVxuICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4tc2Vjb25kJ1xuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2hhbmdlTW9kZSgnc2VsZWN0Jyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEdseXBoaWNvbiBnbHlwaD0nb2snIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0gLz5cbiAgICAgICAgICAgIHtzZWxlY3RUZXh0fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L0hpbnQ+XG4gICAgICAgIDxIaW50XG4gICAgICAgICAgcG9zaXRpb249eyd0b3AnfVxuICAgICAgICAgIHNpemU9J21lZGl1bSdcbiAgICAgICAgICBsYWJlbD17ZWRpdFZlcnNlVGV4dH1cbiAgICAgICAgICBlbmFibGVkPXshIWVkaXRWZXJzZVRleHR9XG4gICAgICAgICAgaGludExlbmd0aD17MTR9XG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBzdHlsZT17YWN0aW9uQnV0dG9uU3R5bGVSTX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuLXNlY29uZCdcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNoYW5nZU1vZGUoJ2VkaXQnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8R2x5cGhpY29uIGdseXBoPSdwZW5jaWwnIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0gLz5cbiAgICAgICAgICAgIHtlZGl0VmVyc2VUZXh0fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L0hpbnQ+XG4gICAgICAgIDxIaW50XG4gICAgICAgICAgcG9zaXRpb249eyd0b3AnfVxuICAgICAgICAgIHNpemU9J21lZGl1bSdcbiAgICAgICAgICBsYWJlbD17Y29tbWVudFRleHR9XG4gICAgICAgICAgZW5hYmxlZD17ISFjb21tZW50VGV4dH1cbiAgICAgICAgICBoaW50TGVuZ3RoPXsxNH1cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuYWN0aW9uQnV0dG9uc31cbiAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuLXNlY29uZCdcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNoYW5nZU1vZGUoJ2NvbW1lbnQnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8R2x5cGhpY29uIGdseXBoPSdjb21tZW50JyBzdHlsZT17eyBtYXJnaW5SaWdodDogJzEwcHgnIH19IC8+XG4gICAgICAgICAgICB7Y29tbWVudFRleHR9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvSGludD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgQ29uZmlybUVkaXRWZXJzZUFyZWEgPSAoe1xuICB0cmFuc2xhdGUsXG4gIHRhZ3MsXG4gIGNhbmNlbEVkaXRWZXJzZSxcbiAgc2F2ZUVkaXRWZXJzZSxcbn0pID0+IHtcbiAgY29uc3QgY2FuY2VsVGV4dCA9IHRyYW5zbGF0ZSgnY2FuY2VsJyk7XG4gIGNvbnN0IHNhdmVUZXh0ID0gdHJhbnNsYXRlKCdzYXZlJyk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2FjdGlvbnMtYXJlYSc+XG4gICAgICA8SGludFxuICAgICAgICBwb3NpdGlvbj17J3RvcCd9XG4gICAgICAgIHNpemU9J21lZGl1bSdcbiAgICAgICAgbGFiZWw9e2NhbmNlbFRleHR9XG4gICAgICAgIGVuYWJsZWQ9eyEhY2FuY2VsVGV4dH1cbiAgICAgICAgaGludExlbmd0aD17MTR9XG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9J2J0bi1zZWNvbmQnXG4gICAgICAgICAgb25DbGljaz17Y2FuY2VsRWRpdFZlcnNlfVxuICAgICAgICA+XG4gICAgICAgICAge2NhbmNlbFRleHR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9IaW50PlxuICAgICAgPEhpbnRcbiAgICAgICAgcG9zaXRpb249eyd0b3AnfVxuICAgICAgICBzaXplPSdtZWRpdW0nXG4gICAgICAgIGxhYmVsPXtzYXZlVGV4dH1cbiAgICAgICAgZW5hYmxlZD17ISFzYXZlVGV4dH1cbiAgICAgICAgaGludExlbmd0aD17MTR9XG4gICAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidG4tcHJpbWUnXG4gICAgICAgICAgZGlzYWJsZWQ9eyF0YWdzLmxlbmd0aH1cbiAgICAgICAgICBvbkNsaWNrPXtzYXZlRWRpdFZlcnNlfVxuICAgICAgICA+XG4gICAgICAgICAgPEdseXBoaWNvbiBnbHlwaD0nb2snIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0gLz5cbiAgICAgICAgICB7c2F2ZVRleHR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9IaW50PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgQ29uZmlybUNvbW1lbnRBcmVhID0gKHtcbiAgdHJhbnNsYXRlLFxuICBpc0NvbW1lbnRDaGFuZ2VkLFxuICBjYW5jZWxDb21tZW50LFxuICBzYXZlQ29tbWVudCxcbn0pID0+IHtcbiAgY29uc3QgY2FuY2VsVGV4dCA9IHRyYW5zbGF0ZSgnY2FuY2VsJyk7XG4gIGNvbnN0IHNhdmVUZXh0ID0gdHJhbnNsYXRlKCdzYXZlJyk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2FjdGlvbnMtYXJlYSc+XG4gICAgICA8SGludFxuICAgICAgICBwb3NpdGlvbj17J3RvcCd9XG4gICAgICAgIHNpemU9J21lZGl1bSdcbiAgICAgICAgbGFiZWw9e2NhbmNlbFRleHR9XG4gICAgICAgIGVuYWJsZWQ9eyEhY2FuY2VsVGV4dH1cbiAgICAgICAgaGludExlbmd0aD17MTR9XG4gICAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPSdidG4tc2Vjb25kJ1xuICAgICAgICAgIG9uQ2xpY2s9e2NhbmNlbENvbW1lbnR9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2FuY2VsVGV4dH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L0hpbnQ+XG4gICAgICA8SGludFxuICAgICAgICBwb3NpdGlvbj17J3RvcCd9XG4gICAgICAgIHNpemU9J21lZGl1bSdcbiAgICAgICAgbGFiZWw9e3NhdmVUZXh0fVxuICAgICAgICBlbmFibGVkPXshIXNhdmVUZXh0fVxuICAgICAgICBoaW50TGVuZ3RoPXsxNH1cbiAgICAgID5cbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9J2J0bi1wcmltZSdcbiAgICAgICAgICBkaXNhYmxlZD17IWlzQ29tbWVudENoYW5nZWR9XG4gICAgICAgICAgb25DbGljaz17c2F2ZUNvbW1lbnR9XG4gICAgICAgID5cbiAgICAgICAgICA8R2x5cGhpY29uIGdseXBoPSdvaycgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcxMHB4JyB9fS8+XG4gICAgICAgICAge3NhdmVUZXh0fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvSGludD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IENvbmZpcm1TZWxlY3Rpb25BcmVhID0gKHtcbiAgY2xhc3NlcyxcbiAgdHJhbnNsYXRlLFxuICBsb2NhbE5vdGhpbmdUb1NlbGVjdCxcbiAgbmV3U2VsZWN0aW9ucyxcbiAgbm90aGluZ1RvU2VsZWN0LFxuICBzZWxlY3Rpb25zLFxuICB0b2dnbGVOb3RoaW5nVG9TZWxlY3QsXG4gIGNhbmNlbFNlbGVjdGlvbixcbiAgY2xlYXJTZWxlY3Rpb24sXG4gIHNhdmVTZWxlY3Rpb24sXG59KSA9PiB7XG4gIGNvbnN0IGNhbmNlbFRleHQgPSB0cmFuc2xhdGUoJ2NhbmNlbCcpO1xuICBjb25zdCBjbGVhclNlbGVjdGlvblRleHQgPSB0cmFuc2xhdGUoJ2NsZWFyX3NlbGVjdGlvbicpO1xuICBjb25zdCBzYXZlVGV4dCA9IHRyYW5zbGF0ZSgnc2F2ZScpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPSdzZWxlY3Rpb24tYWN0aW9ucy1hcmVhJz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdmbGV4LXJvdyc+XG4gICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgdmFsdWU9XCJlbmRcIlxuICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2xvY2FsTm90aGluZ1RvU2VsZWN0fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17bmV3U2VsZWN0aW9ucyAmJiBuZXdTZWxlY3Rpb25zLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiB0b2dnbGVOb3RoaW5nVG9TZWxlY3QoZXZlbnQudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICB2YWx1ZT1cIm5vdGhpbmdUb1NlbGVjdFwiXG4gICAgICAgICAgICAgIGNsYXNzZXM9e3tcbiAgICAgICAgICAgICAgICByb290OiBjbGFzc2VzLmNoZWNrQm94Um9vdCxcbiAgICAgICAgICAgICAgICBjaGVja2VkOiBjbGFzc2VzLmNoZWNrZWQsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGljb249ezxDaGVja0JveE91dGxpbmVJY29uIHN0eWxlPXt7IGZvbnRTaXplOiAnMjRweCcgfX0vPn1cbiAgICAgICAgICAgICAgY2hlY2tlZEljb249ezxDaGVja0JveEljb24gc3R5bGU9e3sgZm9udFNpemU6ICcyNHB4JyB9fS8+fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGFiZWw9e3RyYW5zbGF0ZSgnbm9fc2VsZWN0aW9uX25lZWRlZCcpfVxuICAgICAgICAgIGNsYXNzZXM9e3tcbiAgICAgICAgICAgIHJvb3Q6IGNsYXNzZXMuZm9ybUNvbnRyb2wsXG4gICAgICAgICAgICBsYWJlbDogY2xhc3Nlcy5sYWJlbCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10aXA9e3RyYW5zbGF0ZSgnbm90aGluZ190b19zZWxlY3RfZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICBkYXRhLXBsYWNlPVwidG9wXCJcbiAgICAgICAgICBkYXRhLWVmZmVjdD1cImZsb2F0XCJcbiAgICAgICAgICBkYXRhLXR5cGU9XCJkYXJrXCJcbiAgICAgICAgICBkYXRhLWNsYXNzPVwic2VsZWN0aW9uLXRvb2x0aXBcIlxuICAgICAgICAgIGRhdGEtZGVsYXktaGlkZT1cIjEwMFwiXG4gICAgICAgICAgc3R5bGU9e3sgdmVydGljYWxBbGlnbjogJ3N1cGVyJywgZm9udFNpemU6ICcwLjhlbScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxJbmZvSWNvbiBjbGFzc2VzPXt7IHJvb3Q6IGNsYXNzZXMuaWNvbiB9fS8+XG4gICAgICAgICAgPFJlYWN0VG9vbHRpcC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdub3dyYXAnIH19PlxuICAgICAgICA8SGludFxuICAgICAgICAgIHBvc2l0aW9uPXsndG9wJ31cbiAgICAgICAgICBzaXplPSdtZWRpdW0nXG4gICAgICAgICAgbGFiZWw9e2NhbmNlbFRleHR9XG4gICAgICAgICAgZW5hYmxlZD17ISFjYW5jZWxUZXh0fVxuICAgICAgICAgIGhpbnRMZW5ndGg9ezE0fVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4tc2Vjb25kJ1xuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgLi4uYWN0aW9uQnV0dG9uU3R5bGVSTSwgbWFyZ2luTGVmdDogJzBweCcsIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2NhbmNlbFNlbGVjdGlvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2FuY2VsVGV4dH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9IaW50PlxuICAgICAgICA8SGludFxuICAgICAgICAgIHBvc2l0aW9uPXsndG9wJ31cbiAgICAgICAgICBzaXplPSdtZWRpdW0nXG4gICAgICAgICAgbGFiZWw9e2NsZWFyU2VsZWN0aW9uVGV4dH1cbiAgICAgICAgICBlbmFibGVkPXshIWNsZWFyU2VsZWN0aW9uVGV4dH1cbiAgICAgICAgICBoaW50TGVuZ3RoPXsxNH1cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT0nYnRuLXNlY29uZCdcbiAgICAgICAgICAgIHN0eWxlPXthY3Rpb25CdXR0b25TdHlsZVJNfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e25ld1NlbGVjdGlvbnMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2NsZWFyU2VsZWN0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxHbHlwaGljb24gZ2x5cGg9J2VyYXNlJyBzdHlsZT17eyBtYXJnaW5SaWdodDogJzEwcHgnIH19Lz5cbiAgICAgICAgICAgIHtjbGVhclNlbGVjdGlvblRleHR9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvSGludD5cbiAgICAgICAgPEhpbnRcbiAgICAgICAgICBwb3NpdGlvbj17J3RvcCd9XG4gICAgICAgICAgc2l6ZT0nbWVkaXVtJ1xuICAgICAgICAgIGxhYmVsPXtzYXZlVGV4dH1cbiAgICAgICAgICBlbmFibGVkPXshIXNhdmVUZXh0fVxuICAgICAgICAgIGhpbnRMZW5ndGg9ezE0fVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPSdidG4tcHJpbWUnXG4gICAgICAgICAgICBzdHlsZT17YWN0aW9uQnV0dG9uU3R5bGVSTX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc1NlbGVjdGlvbnNTYXZlRGlzYWJsZShsb2NhbE5vdGhpbmdUb1NlbGVjdCwgbm90aGluZ1RvU2VsZWN0LCBuZXdTZWxlY3Rpb25zLCBzZWxlY3Rpb25zKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3NhdmVTZWxlY3Rpb259XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEdseXBoaWNvbiBnbHlwaD0nb2snIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0vPlxuICAgICAgICAgICAge3NhdmVUZXh0fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L0hpbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cblxuY29uc3QgQWN0aW9uc0FyZWEgPSAoe1xuICB0YWdzLFxuICBtb2RlLFxuICBpc0NvbW1lbnRDaGFuZ2VkLFxuICBzZWxlY3Rpb25zLFxuICBuZXdTZWxlY3Rpb25zLFxuICBib29rbWFya0VuYWJsZWQsXG4gIHNhdmVTZWxlY3Rpb24sXG4gIGNhbmNlbFNlbGVjdGlvbixcbiAgY2xlYXJTZWxlY3Rpb24sXG4gIHRyYW5zbGF0ZSxcbiAgY2xhc3NlcyxcbiAgbG9jYWxOb3RoaW5nVG9TZWxlY3QsXG4gIG5vdGhpbmdUb1NlbGVjdCxcbiAgdG9nZ2xlTm90aGluZ1RvU2VsZWN0LFxuICB0b2dnbGVCb29rbWFyayxcbiAgY2hhbmdlTW9kZSxcbiAgY2FuY2VsRWRpdFZlcnNlLFxuICBzYXZlRWRpdFZlcnNlLFxuICBjYW5jZWxDb21tZW50LFxuICBzYXZlQ29tbWVudCxcbn0pID0+IHtcbiAgc3dpdGNoIChtb2RlKSB7XG4gIGNhc2UgJ2VkaXQnOlxuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlybUVkaXRWZXJzZUFyZWFcbiAgICAgICAgdGFncz17dGFnc31cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIGNhbmNlbEVkaXRWZXJzZT17Y2FuY2VsRWRpdFZlcnNlfVxuICAgICAgICBzYXZlRWRpdFZlcnNlPXtzYXZlRWRpdFZlcnNlfVxuICAgICAgLz5cbiAgICApO1xuICBjYXNlICdjb21tZW50JzpcbiAgICByZXR1cm4gKFxuICAgICAgPENvbmZpcm1Db21tZW50QXJlYVxuICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgaXNDb21tZW50Q2hhbmdlZD17aXNDb21tZW50Q2hhbmdlZH1cbiAgICAgICAgY2FuY2VsQ29tbWVudD17Y2FuY2VsQ29tbWVudH1cbiAgICAgICAgc2F2ZUNvbW1lbnQ9e3NhdmVDb21tZW50fVxuICAgICAgLz5cbiAgICApO1xuICBjYXNlICdzZWxlY3QnOlxuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlybVNlbGVjdGlvbkFyZWFcbiAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIGxvY2FsTm90aGluZ1RvU2VsZWN0PXtsb2NhbE5vdGhpbmdUb1NlbGVjdH1cbiAgICAgICAgbmV3U2VsZWN0aW9ucz17bmV3U2VsZWN0aW9uc31cbiAgICAgICAgbm90aGluZ1RvU2VsZWN0PXtub3RoaW5nVG9TZWxlY3R9XG4gICAgICAgIHNlbGVjdGlvbnM9e3NlbGVjdGlvbnN9XG4gICAgICAgIHRvZ2dsZU5vdGhpbmdUb1NlbGVjdD17dG9nZ2xlTm90aGluZ1RvU2VsZWN0fVxuICAgICAgICBjYW5jZWxTZWxlY3Rpb249e2NhbmNlbFNlbGVjdGlvbn1cbiAgICAgICAgY2xlYXJTZWxlY3Rpb249e2NsZWFyU2VsZWN0aW9ufVxuICAgICAgICBzYXZlU2VsZWN0aW9uPXtzYXZlU2VsZWN0aW9ufVxuICAgICAgLz5cbiAgICApO1xuICBjYXNlICdkZWZhdWx0JzpcbiAgICByZXR1cm4gKFxuICAgICAgPENoYW5nZU1vZGVBcmVhXG4gICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICBib29rbWFya0VuYWJsZWQ9e2Jvb2ttYXJrRW5hYmxlZH1cbiAgICAgICAgdG9nZ2xlQm9va21hcms9e3RvZ2dsZUJvb2ttYXJrfVxuICAgICAgICBjaGFuZ2VNb2RlPXtjaGFuZ2VNb2RlfVxuICAgICAgLz5cbiAgICApO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiAoXG4gICAgICA8Q2hhbmdlTW9kZUFyZWFcbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIGJvb2ttYXJrRW5hYmxlZD17Ym9va21hcmtFbmFibGVkfVxuICAgICAgICB0b2dnbGVCb29rbWFyaz17dG9nZ2xlQm9va21hcmt9XG4gICAgICAgIGNoYW5nZU1vZGU9e2NoYW5nZU1vZGV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn07XG5cbkFjdGlvbnNBcmVhLnByb3BUeXBlcyA9IHtcbiAgdGFnczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIG1vZGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaXNDb21tZW50Q2hhbmdlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2VsZWN0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIG5ld1NlbGVjdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBib29rbWFya0VuYWJsZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgbG9jYWxOb3RoaW5nVG9TZWxlY3Q6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG5vdGhpbmdUb1NlbGVjdDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2F2ZVNlbGVjdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2FuY2VsU2VsZWN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhclNlbGVjdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0b2dnbGVOb3RoaW5nVG9TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHRvZ2dsZUJvb2ttYXJrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjaGFuZ2VNb2RlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjYW5jZWxFZGl0VmVyc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHNhdmVFZGl0VmVyc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNhbmNlbENvbW1lbnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHNhdmVDb21tZW50OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlcyhzdHlsZXMpKEFjdGlvbnNBcmVhKTtcbiJdfQ==