@mkrause/react-form
Advanced tools
+100
-38
@@ -6,3 +6,3 @@ "use strict"; | ||
| }); | ||
| exports.withForm = exports.Provider = exports.ErrorMessage = exports.Fields = exports.Field = exports.updateWithAccessor = exports.setWithAccessor = exports.selectWithAccessor = exports.hasAccessor = exports.Context = void 0; | ||
| exports.withForm = exports.Provider = exports.ErrorMessage = exports.Fields = exports.Field = exports.getError = exports.updateWithAccessor = exports.setWithAccessor = exports.selectWithAccessor = exports.hasAccessor = exports.Context = void 0; | ||
@@ -15,4 +15,6 @@ var _messageTag = _interopRequireDefault(require("message-tag")); | ||
| function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } | ||
| 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 }; } | ||
@@ -28,6 +30,2 @@ | ||
| function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } | ||
| function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } | ||
| function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } | ||
@@ -37,4 +35,12 @@ | ||
| function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } | ||
| function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } | ||
| function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } | ||
| function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } | ||
| function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } | ||
| function _templateObject9() { | ||
@@ -94,6 +100,14 @@ var data = _taggedTemplateLiteral(["Unknown value type: ", ""]); | ||
| function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } | ||
| 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) { _defineProperty(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; } | ||
| function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
| function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } | ||
| function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | ||
| function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } | ||
| function _templateObject4() { | ||
@@ -141,10 +155,14 @@ var data = _taggedTemplateLiteral(["Unknown accessor type ", ""]); | ||
| function _typeof(obj) { 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); } | ||
| 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); } | ||
| function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); } | ||
| function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); } | ||
| function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } | ||
| 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 _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } | ||
| 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 _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } | ||
| function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
@@ -158,3 +176,10 @@ | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); | ||
| var acc; | ||
| try { | ||
| acc = accessor(buffer); | ||
| return true; | ||
| } catch (e) { | ||
| return false; | ||
| } | ||
| } else if (Array.isArray(accessor)) { | ||
@@ -211,3 +236,3 @@ if (accessor.length === 0) { | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); // Idea: use { has, get, set } object instead? | ||
| return setWithAccessor(accessor(buffer), buffer, value); | ||
| } else if (typeof accessor === 'string') { | ||
@@ -224,6 +249,25 @@ return setWithAccessor(accessor.split('.'), buffer, value); | ||
| var updatedValue = typeof value === 'function' ? value(bufferAsObject[key]) : value; | ||
| return _objectSpread({}, bufferAsObject, _defineProperty({}, key, updatedValue)); | ||
| if (Array.isArray(bufferAsObject)) { | ||
| var bufferAsArray = _toConsumableArray(bufferAsObject); // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, updatedValue); | ||
| return bufferAsArray; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, bufferAsObject), {}, _defineProperty({}, key, updatedValue)); | ||
| } | ||
| } else { | ||
| var prop = Object.prototype.hasOwnProperty.call(bufferAsObject, key) ? bufferAsObject[key] : {}; | ||
| return _objectSpread({}, bufferAsObject, _defineProperty({}, key, setWithAccessor(path, prop, value))); | ||
| if (Array.isArray(bufferAsObject)) { | ||
| var _bufferAsArray = _toConsumableArray(bufferAsObject); // Copy so we can mutate | ||
| _bufferAsArray.splice(key, 1, setWithAccessor(path, prop, value)); | ||
| return _bufferAsArray; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, bufferAsObject), {}, _defineProperty({}, key, setWithAccessor(path, prop, value))); | ||
| } | ||
| } | ||
@@ -240,3 +284,3 @@ } else { | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); // Idea: use { has, get, set } object instead? | ||
| return updateWithAccessor(accessor(buffer), buffer, value); | ||
| } else if (typeof accessor === 'string') { | ||
@@ -257,5 +301,23 @@ return updateWithAccessor(accessor.split('.'), buffer, value); | ||
| var updatedValue = typeof value === 'function' ? value(buffer[key]) : value; | ||
| return _objectSpread({}, buffer, _defineProperty({}, key, updatedValue)); | ||
| if (Array.isArray(buffer)) { | ||
| var bufferAsArray = _toConsumableArray(buffer); // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, updatedValue); | ||
| return bufferAsArray; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, buffer), {}, _defineProperty({}, key, updatedValue)); | ||
| } | ||
| } else { | ||
| return _objectSpread({}, buffer, _defineProperty({}, key, updateWithAccessor(path, buffer[key], value))); | ||
| if (Array.isArray(buffer)) { | ||
| var _bufferAsArray2 = _toConsumableArray(buffer); // Copy so we can mutate | ||
| _bufferAsArray2.splice(key, 1, updateWithAccessor(path, buffer[key], value)); | ||
| return _bufferAsArray2; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, buffer), {}, _defineProperty({}, key, updateWithAccessor(path, buffer[key], value))); | ||
| } | ||
| } | ||
@@ -291,2 +353,4 @@ } else { | ||
| exports.getError = getError; | ||
| var Field = function Field() { | ||
@@ -301,3 +365,3 @@ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
| return React.createElement(Context.Consumer, null, function (_ref3) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref3) { | ||
| var buffer = _ref3.buffer, | ||
@@ -335,3 +399,3 @@ updateBuffer = _ref3.updateBuffer, | ||
| var metaUpdated = setWithAccessor(accessor, meta, function (fieldMeta) { | ||
| return _objectSpread({}, fieldMeta || {}, { | ||
| return _objectSpread(_objectSpread({}, fieldMeta || {}), {}, { | ||
| touched: true | ||
@@ -369,3 +433,3 @@ }); | ||
| return React.createElement(FieldComponent, fieldProps); | ||
| return /*#__PURE__*/React.createElement(FieldComponent, fieldProps); | ||
| }); | ||
@@ -377,5 +441,5 @@ }; | ||
| Text: function Text(props) { | ||
| return React.createElement(Context.Consumer, null, function (_ref4) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref4) { | ||
| var buffer = _ref4.buffer; | ||
| return React.createElement("input", null); | ||
| return /*#__PURE__*/React.createElement("input", null); | ||
| } // TODO | ||
@@ -394,3 +458,3 @@ ); | ||
| return React.createElement(Context.Consumer, null, function (_ref6) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref6) { | ||
| var meta = _ref6.meta, | ||
@@ -412,3 +476,3 @@ errors = _ref6.errors, | ||
| } else { | ||
| return React.createElement(ErrorComponent, props, error); | ||
| return /*#__PURE__*/React.createElement(ErrorComponent, props, error); | ||
| } | ||
@@ -420,10 +484,8 @@ }); | ||
| var Provider = | ||
| /*#__PURE__*/ | ||
| function (_React$PureComponent) { | ||
| var Provider = /*#__PURE__*/function (_React$PureComponent) { | ||
| _inherits(Provider, _React$PureComponent); | ||
| var _super = _createSuper(Provider); | ||
| function Provider() { | ||
| var _getPrototypeOf2; | ||
| var _this; | ||
@@ -437,5 +499,5 @@ | ||
| _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Provider)).call.apply(_getPrototypeOf2, [this].concat(args))); | ||
| _this = _super.call.apply(_super, [this].concat(args)); | ||
| _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "state", { | ||
| _defineProperty(_assertThisInitialized(_this), "state", { | ||
| errors: {}, | ||
@@ -447,3 +509,3 @@ pristine: true, | ||
| _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "validate", function (buffer) { | ||
| _defineProperty(_assertThisInitialized(_this), "validate", function (buffer) { | ||
| if (!_this.props.validate) { | ||
@@ -496,3 +558,3 @@ return; | ||
| var meta = setWithAccessor(accessor, _this2.state.meta, function (fieldMeta) { | ||
| return _objectSpread({}, fieldMeta || {}, { | ||
| return _objectSpread(_objectSpread({}, fieldMeta || {}), {}, { | ||
| touched: true | ||
@@ -534,3 +596,3 @@ }); | ||
| }; | ||
| return React.createElement(Context.Provider, { | ||
| return /*#__PURE__*/React.createElement(Context.Provider, { | ||
| value: formProps | ||
@@ -548,7 +610,7 @@ }, typeof this.props.children === 'function' ? this.props.children(formProps) : this.props.children); | ||
| var WithForm = function WithForm(props) { | ||
| return React.createElement(Context.Consumer, null, function (_ref7) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref7) { | ||
| var buffer = _ref7.buffer, | ||
| updateBuffer = _ref7.updateBuffer, | ||
| updateMeta = _ref7.updateMeta; | ||
| return React.createElement(Component, _extends({}, props, { | ||
| return /*#__PURE__*/React.createElement(Component, _extends({}, props, { | ||
| buffer: buffer, | ||
@@ -566,2 +628,2 @@ updateBuffer: updateBuffer, | ||
| exports.withForm = withForm; | ||
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwiaGFzQWNjZXNzb3IiLCJhY2Nlc3NvciIsImJ1ZmZlciIsIlR5cGVFcnJvciIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImtleSIsImFjY2Vzc29yUmVzdCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNwbGl0IiwiJG1zZyIsInNlbGVjdFdpdGhBY2Nlc3NvciIsInJlZHVjZSIsInNldFdpdGhBY2Nlc3NvciIsInZhbHVlIiwicGF0aCIsImJ1ZmZlckFzT2JqZWN0IiwidXBkYXRlZFZhbHVlIiwicHJvcCIsInVwZGF0ZVdpdGhBY2Nlc3NvciIsImdldEVycm9yIiwibWV0YSIsImVycm9ycyIsInN1Ym1pdHRlZCIsImZpZWxkTWV0YSIsInRvdWNoZWQiLCJzaG91bGRTaG93TWVzc2FnZSIsImUiLCJGaWVsZCIsImNoaWxkcmVuIiwiY29tcG9uZW50IiwiRmllbGRDb21wb25lbnQiLCJwcm9wcyIsInVwZGF0ZUJ1ZmZlciIsInVwZGF0ZU1ldGEiLCJmb3JtTWV0YSIsImZpZWxkRXJyb3IiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJldnQiLCJ0YXJnZXQiLCJjaGVja2VkIiwib25CbHVyIiwibWV0YVVwZGF0ZWQiLCJTdHJpbmciLCJhY3Rpb25zIiwidXBkYXRlIiwiRmllbGRzIiwiVGV4dCIsIkVycm9yTWVzc2FnZSIsIkVycm9yQ29tcG9uZW50IiwiRnJhZ21lbnQiLCJlcnJvciIsIlByb3ZpZGVyIiwicHJpc3RpbmUiLCJ2YWxpZGF0ZSIsInNldFN0YXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiZm9ybVByb3BzIiwidXBkYXRlZEJ1ZmZlciIsIm9uVXBkYXRlIiwic3RhdGUiLCJzdWJtaXQiLCJrZXlzIiwib25TdWJtaXQiLCJQdXJlQ29tcG9uZW50Iiwid2l0aEZvcm0iLCJDb21wb25l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Q0FESjtBQVFIOzs7O0VBL0Z5Qm5DLEtBQUssQ0FBQ3dFLGE7Ozs7QUFrRzdCLElBQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXLENBQUFDLFNBQVMsRUFBSTtBQUNqQyxNQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFBckMsS0FBSztBQUFBLFdBQ2xCLG9CQUFDLE9BQUQsQ0FBUyxRQUFULFFBQ0s7QUFBQSxVQUFHbEMsTUFBSCxTQUFHQSxNQUFIO0FBQUEsVUFBV21DLFlBQVgsU0FBV0EsWUFBWDtBQUFBLFVBQXlCQyxVQUF6QixTQUF5QkEsVUFBekI7QUFBQSxhQUNHLG9CQUFDLFNBQUQsZUFBZUYsS0FBZjtBQUFzQixRQUFBLE1BQU0sRUFBRWxDLE1BQTlCO0FBQXNDLFFBQUEsWUFBWSxFQUFFbUMsWUFBcEQ7QUFBa0UsUUFBQSxVQUFVLEVBQUVDO0FBQTlFLFNBREg7QUFBQSxLQURMLENBRGtCO0FBQUEsR0FBdEI7O0FBT0EscUNBQXFCbUMsUUFBckIsRUFBK0JELFNBQS9CO0FBRUEsU0FBT0MsUUFBUDtBQUNILENBWE0iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCAkbXNnIGZyb20gJ21lc3NhZ2UtdGFnJztcblxuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5leHBvcnQgY29uc3QgQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcblxuLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBoYXMgdGhlIGdpdmVuIGFjY2Vzc29yXG5leHBvcnQgY29uc3QgaGFzQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlcikgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVE9ETycpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhY2Nlc3NvcikpIHtcbiAgICAgICAgaWYgKGFjY2Vzc29yLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2tleSwgLi4uYWNjZXNzb3JSZXN0XSA9IGFjY2Vzc29yO1xuICAgICAgICBpZiAodHlwZW9mIGJ1ZmZlciAhPT0gJ29iamVjdCcgfHwgYnVmZmVyID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChidWZmZXIsIGtleSkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBoYXNBY2Nlc3NvcihhY2Nlc3NvclJlc3QsIGJ1ZmZlcltrZXldKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY2Nlc3NvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGhhc0FjY2Vzc29yKGFjY2Vzc29yLnNwbGl0KCcuJyksIGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYFVua25vd24gYWNjZXNzb3IgdHlwZSAke2FjY2Vzc29yfWApO1xuICAgIH1cbn07XG5cbi8vIFNlbGVjdCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGFjY2Vzc29yXG5leHBvcnQgY29uc3Qgc2VsZWN0V2l0aEFjY2Vzc29yID0gKGFjY2Vzc29yLCBidWZmZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBhY2Nlc3NvcihidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWNjZXNzb3Iuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYnVmZmVyLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBidWZmZXIgIT09ICdvYmplY3QnIHx8IGJ1ZmZlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYENhbm5vdCBhY2Nlc3MgJHtrZXl9IG9uIG5vbi1vYmplY3QgJHtidWZmZXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChidWZmZXIsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BNaXNzaW5nIGtleSAke2tleX0gb24gb2JqZWN0ICR7YnVmZmVyfWApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBidWZmZXJcbiAgICAgICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYFVua25vd24gYWNjZXNzb3IgdHlwZSAke2FjY2Vzc29yfWApO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIGJ1ZmZlciAod2hlcmUgdGhlIHByb3BlcnR5IG1heSBub3QgYWxyZWFkeSBleGlzdClcbmV4cG9ydCBjb25zdCBzZXRXaXRoQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlciwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RPRE8nKTsgLy8gSWRlYTogdXNlIHsgaGFzLCBnZXQsIHNldCB9IG9iamVjdCBpbnN0ZWFkP1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gc2V0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLnNwbGl0KCcuJyksIGJ1ZmZlciwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhY2Nlc3NvcikpIHtcbiAgICAgICAgY29uc3QgW2tleSwgLi4ucGF0aF0gPSBhY2Nlc3NvcjtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGJ1ZmZlckFzT2JqZWN0ID0gdHlwZW9mIGJ1ZmZlciA9PT0gJ29iamVjdCcgJiYgYnVmZmVyICE9PSBudWxsXG4gICAgICAgICAgICA/IGJ1ZmZlclxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyB2YWx1ZShidWZmZXJBc09iamVjdFtrZXldKVxuICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlckFzT2JqZWN0LCBba2V5XTogdXBkYXRlZFZhbHVlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlckFzT2JqZWN0LCBrZXkpXG4gICAgICAgICAgICAgICAgPyBidWZmZXJBc09iamVjdFtrZXldXG4gICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYnVmZmVyQXNPYmplY3QsIFtrZXldOiBzZXRXaXRoQWNjZXNzb3IocGF0aCwgcHJvcCwgdmFsdWUpIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyICh3aGVyZSB0aGUgcHJvcGVydHkgaXMgYXNzdW1lZCB0byBleGlzdClcbmV4cG9ydCBjb25zdCB1cGRhdGVXaXRoQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlciwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RPRE8nKTsgLy8gSWRlYTogdXNlIHsgaGFzLCBnZXQsIHNldCB9IG9iamVjdCBpbnN0ZWFkP1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdXBkYXRlV2l0aEFjY2Vzc29yKGFjY2Vzc29yLnNwbGl0KCcuJyksIGJ1ZmZlciwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhY2Nlc3NvcikpIHtcbiAgICAgICAgY29uc3QgW2tleSwgLi4ucGF0aF0gPSBhY2Nlc3NvcjtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgYnVmZmVyICE9PSAnb2JqZWN0JyB8fCBidWZmZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BDYW5ub3QgYWNjZXNzICR7a2V5fSBvbiBub24tb2JqZWN0ICR7YnVmZmVyfWApO1xuICAgICAgICB9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYnVmZmVyLCBrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgTWlzc2luZyBrZXkgJHtrZXl9IG9uIG9iamVjdCAke2J1ZmZlcn1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IHZhbHVlKGJ1ZmZlcltrZXldKVxuICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlciwgW2tleV06IHVwZGF0ZWRWYWx1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYnVmZmVyLCBba2V5XTogdXBkYXRlV2l0aEFjY2Vzc29yKHBhdGgsIGJ1ZmZlcltrZXldLCB2YWx1ZSkgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BVbmtub3duIGFjY2Vzc29yIHR5cGUgJHthY2Nlc3Nvcn1gKTtcbiAgICB9XG59O1xuXG5jb25zdCBnZXRFcnJvciA9ICh7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0sIGFjY2Vzc29yKSA9PiB7XG4gICAgY29uc3QgZmllbGRNZXRhID0gaGFzQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpXG4gICAgICAgID8gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKVxuICAgICAgICA6IHsgdG91Y2hlZDogZmFsc2UgfTtcbiAgICBcbiAgICAvLyBPbmx5IHNob3cgdGhlIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHVzZXIgaGFzIGludGVyYWN0ZWQgd2l0aCB0aGUgZm9ybS9maWVsZCBzb21laG93XG4gICAgY29uc3Qgc2hvdWxkU2hvd01lc3NhZ2UgPVxuICAgICAgICBzdWJtaXR0ZWRcbiAgICAgICAgfHwgZmllbGRNZXRhLnRvdWNoZWQ7XG4gICAgXG4gICAgaWYgKCFzaG91bGRTaG93TWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgZXJyb3JzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIE5vIGVycm9yXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBGaWVsZCA9ICh7IGNoaWxkcmVuLCBjb21wb25lbnQ6IEZpZWxkQ29tcG9uZW50ID0gJ2lucHV0JywgYWNjZXNzb3IsIC4uLnByb3BzIH0gPSB7fSkgPT5cbiAgICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGJ1ZmZlciwgdXBkYXRlQnVmZmVyLCBtZXRhLCB1cGRhdGVNZXRhLCBlcnJvcnMsIHN1Ym1pdHRlZCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNlbGVjdFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgYnVmZmVyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAgICAgICAgICAgc3VibWl0dGVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZmllbGRNZXRhID0gaGFzQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpID8gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKSA6IHtcbiAgICAgICAgICAgICAgICB0b3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBnZXRFcnJvcih7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0sIGFjY2Vzc29yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogZXZ0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZ0LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2dC50YXJnZXQuaGFzT3duUHJvcGVydHkoJ2NoZWNrZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJ1ZmZlcihhY2Nlc3NvciwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25CbHVyOiBldnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0FjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKSB8fCAhc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKS50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhVXBkYXRlZCA9IHNldFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE1ldGEgPT4gKHsgLi4uKGZpZWxkTWV0YSB8fCB7fSksIHRvdWNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1ldGEobWV0YVVwZGF0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5wcm9wc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmllbGRQcm9wcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgZmllbGRQcm9wcy52YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgZmllbGRQcm9wcy5jaGVja2VkID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BVbmtub3duIHZhbHVlIHR5cGU6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlOiB2YWx1ZSA9PiB7IHVwZGF0ZUJ1ZmZlcihhY2Nlc3NvciwgdmFsdWUpOyB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkcmVuKHsgZm9ybU1ldGEsIGZpZWxkUHJvcHMsIGZpZWxkTWV0YSwgZmllbGRFcnJvciB9LCBhY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICA6IGNoaWxkcmVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGaWVsZENvbXBvbmVudCB7Li4uZmllbGRQcm9wc30vPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfX1cbiAgICA8L0NvbnRleHQuQ29uc3VtZXI+O1xuXG5leHBvcnQgY29uc3QgRmllbGRzID0ge1xuICAgIFRleHQ6IHByb3BzID0+XG4gICAgICAgIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyh7IGJ1ZmZlciB9KSA9PlxuICAgICAgICAgICAgICAgIDxpbnB1dC8+IC8vIFRPRE9cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9Db250ZXh0LkNvbnN1bWVyPixcbn07XG5cbmV4cG9ydCBjb25zdCBFcnJvck1lc3NhZ2UgPSAoeyBjaGlsZHJlbiwgY29tcG9uZW50OiBFcnJvckNvbXBvbmVudCA9IFJlYWN0LkZyYWdtZW50LCBhY2Nlc3NvciwgLi4ucHJvcHMgfSkgPT5cbiAgICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZ2V0RXJyb3IoeyBtZXRhLCBlcnJvcnMsIHN1Ym1pdHRlZCB9LCBhY2Nlc3Nvcik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgPyBjaGlsZHJlbihlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgOiBjaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFcnJvckNvbXBvbmVudCB7Li4ucHJvcHN9PntlcnJvcn08L0Vycm9yQ29tcG9uZW50PjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICA8L0NvbnRleHQuQ29uc3VtZXI+O1xuXG5leHBvcnQgY2xhc3MgUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICAvLyBwcm9wcyA6IHtcbiAgICAvLyAgIGJ1ZmZlciA6IGFueSxcbiAgICAvLyAgIG9uVXBkYXRlIDogRnVuY3Rpb24sXG4gICAgLy8gICB2YWxpZGF0ZSA/OiBGdW5jdGlvbixcbiAgICAvLyAgIG9uU3VibWl0IDogRnVuY3Rpb24sXG4gICAgLy8gfTtcbiAgICBcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgcHJpc3RpbmU6IHRydWUsXG4gICAgICAgIHN1Ym1pdHRlZDogZmFsc2UsXG4gICAgICAgIG1ldGE6IHt9LFxuICAgIH07XG4gICAgXG4gICAgdmFsaWRhdGUgPSBidWZmZXIgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucHJvcHMudmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5wcm9wcy52YWxpZGF0ZShidWZmZXIpIHx8IHt9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9ycyB9KTtcbiAgICB9O1xuICAgIFxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlKHRoaXMucHJvcHMuYnVmZmVyKTtcbiAgICB9XG4gICAgXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuYnVmZmVyICE9PSB0aGlzLnByb3BzLmJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZSh0aGlzLnByb3BzLmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGJ1ZmZlciB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGZvcm1Qcm9wcyA9IHtcbiAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgIHVwZGF0ZUJ1ZmZlcjogKGFjY2Vzc29yLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRCdWZmZXIgPSB1cGRhdGVXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIGJ1ZmZlciwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25VcGRhdGUodXBkYXRlZEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucHJpc3RpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHByaXN0aW5lOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBY2Nlc3NvcihhY2Nlc3NvciwgdGhpcy5zdGF0ZS5tZXRhKSB8fCAhc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLm1ldGEpLnRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNldFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgdGhpcy5zdGF0ZS5tZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRNZXRhID0+ICh7IC4uLihmaWVsZE1ldGEgfHwge30pLCB0b3VjaGVkOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWV0YSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZSh1cGRhdGVkQnVmZmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHByaXN0aW5lOiB0aGlzLnN0YXRlLnByaXN0aW5lLFxuICAgICAgICAgICAgc3VibWl0dGVkOiB0aGlzLnN0YXRlLnN1Ym1pdHRlZCxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZXJyb3JzOiB0aGlzLnN0YXRlLmVycm9ycyxcbiAgICAgICAgICAgIC8vIHVwZGF0ZUVycm9yOiAoYWNjZXNzb3IsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcnM6IHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgdGhpcy5zdGF0ZS5lcnJvcnMsIGVycm9yKSB9KTtcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG1ldGE6IHRoaXMuc3RhdGUubWV0YSxcbiAgICAgICAgICAgIHVwZGF0ZU1ldGE6IG1ldGEgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWV0YSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHN1Ym1pdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBwcmlzdGluZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN0YXRlLmVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmb3JtUHJvcHN9PlxuICAgICAgICAgICAgICAgIHt0eXBlb2YgdGhpcy5wcm9wcy5jaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMuY2hpbGRyZW4oZm9ybVByb3BzKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3Qgd2l0aEZvcm0gPSBDb21wb25lbnQgPT4ge1xuICAgIGNvbnN0IFdpdGhGb3JtID0gcHJvcHMgPT5cbiAgICAgICAgPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHsgYnVmZmVyLCB1cGRhdGVCdWZmZXIsIHVwZGF0ZU1ldGEgfSkgPT5cbiAgICAgICAgICAgICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gYnVmZmVyPXtidWZmZXJ9IHVwZGF0ZUJ1ZmZlcj17dXBkYXRlQnVmZmVyfSB1cGRhdGVNZXRhPXt1cGRhdGVNZXRhfS8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvQ29udGV4dC5Db25zdW1lcj47XG4gICAgXG4gICAgaG9pc3ROb25SZWFjdFN0YXRpY3MoV2l0aEZvcm0sIENvbXBvbmVudCk7XG4gICAgXG4gICAgcmV0dXJuIFdpdGhGb3JtO1xufTtcbiJdfQ== | ||
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwiaGFzQWNjZXNzb3IiLCJhY2Nlc3NvciIsImJ1ZmZlciIsImFjYyIsImUiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJrZXkiLCJhY2Nlc3NvclJlc3QiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzcGxpdCIsIlR5cGVFcnJvciIsIiRtc2ciLCJzZWxlY3RXaXRoQWNjZXNzb3IiLCJyZWR1Y2UiLCJzZXRXaXRoQWNjZXNzb3IiLCJ2YWx1ZSIsInBhdGgiLCJidWZmZXJBc09iamVjdCIsInVwZGF0ZWRWYWx1ZSIsImJ1ZmZlckFzQXJyYXkiLCJzcGxpY2UiLCJwcm9wIiwidXBkYXRlV2l0aEFjY2Vzc29yIiwiZ2V0RXJyb3IiLCJtZXRhIiwiZXJyb3JzIiwic3VibWl0dGVkIiwiZmllbGRNZXRhIiwidG91Y2hlZCIsInNob3VsZFNob3dNZXNzYWdlIiwiRmllbGQiLCJjaGlsZHJlbiIsImNvbXBvbmVudCIsIkZpZWxkQ29tcG9uZW50IiwicHJvcHMiLCJ1cGRhdGVCdWZmZXIiLCJ1cGRhdGVNZXRhIiwiZm9ybU1ldGEiLCJmaWVsZEVycm9yIiwiZmllbGRQcm9wcyIsIm9uQ2hhbmdlIiwiZXZ0IiwidGFyZ2V0IiwiY2hlY2tlZCIsIm9uQmx1ciIsIm1ldGFVcGRhdGVkIiwiU3RyaW5nIiwiYWN0aW9ucyIsInVwZGF0ZSIsIkZpZWxkcyIsIlRleHQiLCJFcnJvck1lc3NhZ2UiLCJFcnJvckNvbXBvbmVudCIsIkZyYWdtZW50IiwiZXJyb3IiLCJQcm92aWRlciIsInByaXN0aW5lIiwidmFsaWRhdGUiLCJzZXRTdGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsImZvcm1Qcm9wcyIsInVwZGF0ZWRCdWZmZXIiLCJvblVwZGF0ZSIsInN0YXRlIiwic3VibWl0Iiwia2V5cyIsIm9uU3VibWl0IiwiUHVy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QUNIOztBQUVELFlBQUEsTUFBSSxDQUFDZ0MsS0FBTCxDQUFXaUMsUUFBWDtBQUNILFdBVEQ7QUFVSDtBQTlDYSxPQUFsQjtBQWlEQSwwQkFDSSxvQkFBQyxPQUFELENBQVMsUUFBVDtBQUFrQixRQUFBLEtBQUssRUFBRU47QUFBekIsU0FDSyxPQUFPLEtBQUszQixLQUFMLENBQVdILFFBQWxCLEtBQStCLFVBQS9CLEdBQ0ssS0FBS0csS0FBTCxDQUFXSCxRQUFYLENBQW9COEIsU0FBcEIsQ0FETCxHQUVLLEtBQUszQixLQUFMLENBQVdILFFBSHJCLENBREo7QUFRSDs7OztFQS9GeUJ0QyxLQUFLLENBQUMyRSxhOzs7O0FBa0c3QixJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFBQyxTQUFTLEVBQUk7QUFDakMsTUFBTUMsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQXJDLEtBQUs7QUFBQSx3QkFDbEIsb0JBQUMsT0FBRCxDQUFTLFFBQVQsUUFDSztBQUFBLFVBQUdyQyxNQUFILFNBQUdBLE1BQUg7QUFBQSxVQUFXc0MsWUFBWCxTQUFXQSxZQUFYO0FBQUEsVUFBeUJDLFVBQXpCLFNBQXlCQSxVQUF6QjtBQUFBLDBCQUNHLG9CQUFDLFNBQUQsZUFBZUYsS0FBZjtBQUFzQixRQUFBLE1BQU0sRUFBRXJDLE1BQTlCO0FBQXNDLFFBQUEsWUFBWSxFQUFFc0MsWUFBcEQ7QUFBa0UsUUFBQSxVQUFVLEVBQUVDO0FBQTlFLFNBREg7QUFBQSxLQURMLENBRGtCO0FBQUEsR0FBdEI7O0FBT0EscUNBQXFCbUMsUUFBckIsRUFBK0JELFNBQS9CO0FBRUEsU0FBT0MsUUFBUDtBQUNILENBWE0iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCAkbXNnIGZyb20gJ21lc3NhZ2UtdGFnJztcblxuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5leHBvcnQgY29uc3QgQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcblxuLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBoYXMgdGhlIGdpdmVuIGFjY2Vzc29yXG5leHBvcnQgY29uc3QgaGFzQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlcikgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IGFjYztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFjYyA9IGFjY2Vzc29yKGJ1ZmZlcik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFjY2Vzc29yKSkge1xuICAgICAgICBpZiAoYWNjZXNzb3IubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBba2V5LCAuLi5hY2Nlc3NvclJlc3RdID0gYWNjZXNzb3I7XG4gICAgICAgIGlmICh0eXBlb2YgYnVmZmVyICE9PSAnb2JqZWN0JyB8fCBidWZmZXIgPT09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlciwga2V5KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIGhhc0FjY2Vzc29yKGFjY2Vzc29yUmVzdCwgYnVmZmVyW2tleV0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaGFzQWNjZXNzb3IoYWNjZXNzb3Iuc3BsaXQoJy4nKSwgYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuLy8gU2VsZWN0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gYWNjZXNzb3JcbmV4cG9ydCBjb25zdCBzZWxlY3RXaXRoQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlcikgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFjY2Vzc29yKGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhY2Nlc3Nvci5zcGxpdCgnLicpXG4gICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChidWZmZXIsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ1ZmZlciAhPT0gJ29iamVjdCcgfHwgYnVmZmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgQ2Fubm90IGFjY2VzcyAke2tleX0gb24gbm9uLW9iamVjdCAke2J1ZmZlcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlciwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYE1pc3Npbmcga2V5ICR7a2V5fSBvbiBvYmplY3QgJHtidWZmZXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJ1ZmZlclxuICAgICAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyICh3aGVyZSB0aGUgcHJvcGVydHkgbWF5IG5vdCBhbHJlYWR5IGV4aXN0KVxuZXhwb3J0IGNvbnN0IHNldFdpdGhBY2Nlc3NvciA9IChhY2Nlc3NvciwgYnVmZmVyLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHNldFdpdGhBY2Nlc3NvcihhY2Nlc3NvcihidWZmZXIpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY2Nlc3NvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHNldFdpdGhBY2Nlc3NvcihhY2Nlc3Nvci5zcGxpdCgnLicpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWNjZXNzb3IpKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnBhdGhdID0gYWNjZXNzb3I7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBidWZmZXJBc09iamVjdCA9IHR5cGVvZiBidWZmZXIgPT09ICdvYmplY3QnICYmIGJ1ZmZlciAhPT0gbnVsbFxuICAgICAgICAgICAgPyBidWZmZXJcbiAgICAgICAgICAgIDoge307XG4gICAgICAgIFxuICAgICAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gdmFsdWUoYnVmZmVyQXNPYmplY3Rba2V5XSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmZXJBc09iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXJBc0FycmF5ID0gWy4uLmJ1ZmZlckFzT2JqZWN0XTsgLy8gQ29weSBzbyB3ZSBjYW4gbXV0YXRlXG4gICAgICAgICAgICAgICAgYnVmZmVyQXNBcnJheS5zcGxpY2Uoa2V5LCAxLCB1cGRhdGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJBc0FycmF5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5idWZmZXJBc09iamVjdCwgW2tleV06IHVwZGF0ZWRWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChidWZmZXJBc09iamVjdCwga2V5KVxuICAgICAgICAgICAgICAgID8gYnVmZmVyQXNPYmplY3Rba2V5XVxuICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlckFzT2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlckFzQXJyYXkgPSBbLi4uYnVmZmVyQXNPYmplY3RdOyAvLyBDb3B5IHNvIHdlIGNhbiBtdXRhdGVcbiAgICAgICAgICAgICAgICBidWZmZXJBc0FycmF5LnNwbGljZShrZXksIDEsIHNldFdpdGhBY2Nlc3NvcihwYXRoLCBwcm9wLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJBc0FycmF5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5idWZmZXJBc09iamVjdCwgW2tleV06IHNldFdpdGhBY2Nlc3NvcihwYXRoLCBwcm9wLCB2YWx1ZSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BVbmtub3duIGFjY2Vzc29yIHR5cGUgJHthY2Nlc3Nvcn1gKTtcbiAgICB9XG59O1xuXG4vLyBSZXR1cm4gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBidWZmZXIgKHdoZXJlIHRoZSBwcm9wZXJ0eSBpcyBhc3N1bWVkIHRvIGV4aXN0KVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVdpdGhBY2Nlc3NvciA9IChhY2Nlc3NvciwgYnVmZmVyLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3NvcihidWZmZXIpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY2Nlc3NvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3Nvci5zcGxpdCgnLicpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWNjZXNzb3IpKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnBhdGhdID0gYWNjZXNzb3I7XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIGJ1ZmZlciAhPT0gJ29iamVjdCcgfHwgYnVmZmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgQ2Fubm90IGFjY2VzcyAke2tleX0gb24gbm9uLW9iamVjdCAke2J1ZmZlcn1gKTtcbiAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlciwga2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYE1pc3Npbmcga2V5ICR7a2V5fSBvbiBvYmplY3QgJHtidWZmZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyB2YWx1ZShidWZmZXJba2V5XSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyQXNBcnJheSA9IFsuLi5idWZmZXJdOyAvLyBDb3B5IHNvIHdlIGNhbiBtdXRhdGVcbiAgICAgICAgICAgICAgICBidWZmZXJBc0FycmF5LnNwbGljZShrZXksIDEsIHVwZGF0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlckFzQXJyYXk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlciwgW2tleV06IHVwZGF0ZWRWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlckFzQXJyYXkgPSBbLi4uYnVmZmVyXTsgLy8gQ29weSBzbyB3ZSBjYW4gbXV0YXRlXG4gICAgICAgICAgICAgICAgYnVmZmVyQXNBcnJheS5zcGxpY2Uoa2V5LCAxLCB1cGRhdGVXaXRoQWNjZXNzb3IocGF0aCwgYnVmZmVyW2tleV0sIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlckFzQXJyYXk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlciwgW2tleV06IHVwZGF0ZVdpdGhBY2Nlc3NvcihwYXRoLCBidWZmZXJba2V5XSwgdmFsdWUpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEVycm9yID0gKHsgbWV0YSwgZXJyb3JzLCBzdWJtaXR0ZWQgfSwgYWNjZXNzb3IpID0+IHtcbiAgICBjb25zdCBmaWVsZE1ldGEgPSBoYXNBY2Nlc3NvcihhY2Nlc3NvciwgbWV0YSlcbiAgICAgICAgPyBzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpXG4gICAgICAgIDogeyB0b3VjaGVkOiBmYWxzZSB9O1xuICAgIFxuICAgIC8vIE9ubHkgc2hvdyB0aGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgdXNlciBoYXMgaW50ZXJhY3RlZCB3aXRoIHRoZSBmb3JtL2ZpZWxkIHNvbWVob3dcbiAgICBjb25zdCBzaG91bGRTaG93TWVzc2FnZSA9XG4gICAgICAgIHN1Ym1pdHRlZFxuICAgICAgICB8fCBmaWVsZE1ldGEudG91Y2hlZDtcbiAgICBcbiAgICBpZiAoIXNob3VsZFNob3dNZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBlcnJvcnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gTm8gZXJyb3JcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEZpZWxkID0gKHsgY2hpbGRyZW4sIGNvbXBvbmVudDogRmllbGRDb21wb25lbnQgPSAnaW5wdXQnLCBhY2Nlc3NvciwgLi4ucHJvcHMgfSA9IHt9KSA9PlxuICAgIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7KHsgYnVmZmVyLCB1cGRhdGVCdWZmZXIsIG1ldGEsIHVwZGF0ZU1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBidWZmZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgICAgICAgICAgICBzdWJtaXR0ZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBmaWVsZE1ldGEgPSBoYXNBY2Nlc3NvcihhY2Nlc3NvciwgbWV0YSkgPyBzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpIDoge1xuICAgICAgICAgICAgICAgIHRvdWNoZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGdldEVycm9yKHsgbWV0YSwgZXJyb3JzLCBzdWJtaXR0ZWQgfSwgYWNjZXNzb3IpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0ge1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBldnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBldnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5oYXNPd25Qcm9wZXJ0eSgnY2hlY2tlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2dC50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQnVmZmVyKGFjY2Vzc29yLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkJsdXI6IGV2dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpIHx8ICFzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpLnRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFVcGRhdGVkID0gc2V0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTWV0YSA9PiAoeyAuLi4oZmllbGRNZXRhIHx8IHt9KSwgdG91Y2hlZDogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWV0YShtZXRhVXBkYXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLnByb3BzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFByb3BzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFByb3BzLnZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFByb3BzLmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYFVua25vd24gdmFsdWUgdHlwZTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGU6IHZhbHVlID0+IHsgdXBkYXRlQnVmZmVyKGFjY2Vzc29yLCB2YWx1ZSk7IH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGRyZW4oeyBmb3JtTWV0YSwgZmllbGRQcm9wcywgZmllbGRNZXRhLCBmaWVsZEVycm9yIH0sIGFjdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIDogY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZpZWxkQ29tcG9uZW50IHsuLi5maWVsZFByb3BzfS8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgIDwvQ29udGV4dC5Db25zdW1lcj47XG5cbmV4cG9ydCBjb25zdCBGaWVsZHMgPSB7XG4gICAgVGV4dDogcHJvcHMgPT5cbiAgICAgICAgPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHsgYnVmZmVyIH0pID0+XG4gICAgICAgICAgICAgICAgPGlucHV0Lz4gLy8gVE9ET1xuICAgICAgICAgICAgfVxuICAgICAgICA8L0NvbnRleHQuQ29uc3VtZXI+LFxufTtcblxuZXhwb3J0IGNvbnN0IEVycm9yTWVzc2FnZSA9ICh7IGNoaWxkcmVuLCBjb21wb25lbnQ6IEVycm9yQ29tcG9uZW50ID0gUmVhY3QuRnJhZ21lbnQsIGFjY2Vzc29yLCAuLi5wcm9wcyB9KSA9PlxuICAgIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7KHsgbWV0YSwgZXJyb3JzLCBzdWJtaXR0ZWQgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBnZXRFcnJvcih7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0sIGFjY2Vzc29yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkcmVuKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICA6IGNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEVycm9yQ29tcG9uZW50IHsuLi5wcm9wc30+e2Vycm9yfTwvRXJyb3JDb21wb25lbnQ+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9fVxuICAgIDwvQ29udGV4dC5Db25zdW1lcj47XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIC8vIHByb3BzIDoge1xuICAgIC8vICAgYnVmZmVyIDogYW55LFxuICAgIC8vICAgb25VcGRhdGUgOiBGdW5jdGlvbixcbiAgICAvLyAgIHZhbGlkYXRlID86IEZ1bmN0aW9uLFxuICAgIC8vICAgb25TdWJtaXQgOiBGdW5jdGlvbixcbiAgICAvLyB9O1xuICAgIFxuICAgIHN0YXRlID0ge1xuICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICBwcmlzdGluZTogdHJ1ZSxcbiAgICAgICAgc3VibWl0dGVkOiBmYWxzZSxcbiAgICAgICAgbWV0YToge30sXG4gICAgfTtcbiAgICBcbiAgICB2YWxpZGF0ZSA9IGJ1ZmZlciA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wcm9wcy52YWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLnByb3BzLnZhbGlkYXRlKGJ1ZmZlcikgfHwge307XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3JzIH0pO1xuICAgIH07XG4gICAgXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGUodGhpcy5wcm9wcy5idWZmZXIpO1xuICAgIH1cbiAgICBcbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5idWZmZXIgIT09IHRoaXMucHJvcHMuYnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlKHRoaXMucHJvcHMuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgYnVmZmVyIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZm9ybVByb3BzID0ge1xuICAgICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgICAgdXBkYXRlQnVmZmVyOiAoYWNjZXNzb3IsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEJ1ZmZlciA9IHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgYnVmZmVyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVwZGF0ZSh1cGRhdGVkQnVmZmVyKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5wcmlzdGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgcHJpc3RpbmU6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0FjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLm1ldGEpIHx8ICFzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIHRoaXMuc3RhdGUubWV0YSkudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhID0gc2V0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLm1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE1ldGEgPT4gKHsgLi4uKGZpZWxkTWV0YSB8fCB7fSksIHRvdWNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtZXRhIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKHVwZGF0ZWRCdWZmZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcHJpc3RpbmU6IHRoaXMuc3RhdGUucHJpc3RpbmUsXG4gICAgICAgICAgICBzdWJtaXR0ZWQ6IHRoaXMuc3RhdGUuc3VibWl0dGVkLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBlcnJvcnM6IHRoaXMuc3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgLy8gdXBkYXRlRXJyb3I6IChhY2Nlc3NvciwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yczogdXBkYXRlV2l0aEFjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLmVycm9ycywgZXJyb3IpIH0pO1xuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbWV0YTogdGhpcy5zdGF0ZS5tZXRhLFxuICAgICAgICAgICAgdXBkYXRlTWV0YTogbWV0YSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtZXRhIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc3VibWl0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHByaXN0aW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc3RhdGUuZXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25TdWJtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2Zvcm1Qcm9wc30+XG4gICAgICAgICAgICAgICAge3R5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5jaGlsZHJlbihmb3JtUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCB3aXRoRm9ybSA9IENvbXBvbmVudCA9PiB7XG4gICAgY29uc3QgV2l0aEZvcm0gPSBwcm9wcyA9PlxuICAgICAgICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoeyBidWZmZXIsIHVwZGF0ZUJ1ZmZlciwgdXBkYXRlTWV0YSB9KSA9PlxuICAgICAgICAgICAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSBidWZmZXI9e2J1ZmZlcn0gdXBkYXRlQnVmZmVyPXt1cGRhdGVCdWZmZXJ9IHVwZGF0ZU1ldGE9e3VwZGF0ZU1ldGF9Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9Db250ZXh0LkNvbnN1bWVyPjtcbiAgICBcbiAgICBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoRm9ybSwgQ29tcG9uZW50KTtcbiAgICBcbiAgICByZXR1cm4gV2l0aEZvcm07XG59O1xuIl19 |
+95
-39
@@ -9,6 +9,2 @@ 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 _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } | ||
| function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } | ||
| function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } | ||
@@ -18,4 +14,12 @@ | ||
| function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } | ||
| function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } | ||
| function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } | ||
| function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } | ||
| function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } | ||
| function _templateObject9() { | ||
@@ -75,6 +79,14 @@ var data = _taggedTemplateLiteral(["Unknown value type: ", ""]); | ||
| function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } | ||
| 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) { _defineProperty(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; } | ||
| function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
| function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } | ||
| function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } | ||
| function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } | ||
| function _templateObject4() { | ||
@@ -122,10 +134,14 @@ var data = _taggedTemplateLiteral(["Unknown accessor type ", ""]); | ||
| function _typeof(obj) { 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); } | ||
| 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); } | ||
| function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); } | ||
| function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); } | ||
| function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } | ||
| 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 _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } | ||
| 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 _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } | ||
| function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } | ||
@@ -140,3 +156,10 @@ | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); | ||
| var acc; | ||
| try { | ||
| acc = accessor(buffer); | ||
| return true; | ||
| } catch (e) { | ||
| return false; | ||
| } | ||
| } else if (Array.isArray(accessor)) { | ||
@@ -187,3 +210,3 @@ if (accessor.length === 0) { | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); // Idea: use { has, get, set } object instead? | ||
| return setWithAccessor(accessor(buffer), buffer, value); | ||
| } else if (typeof accessor === 'string') { | ||
@@ -200,6 +223,25 @@ return setWithAccessor(accessor.split('.'), buffer, value); | ||
| var updatedValue = typeof value === 'function' ? value(bufferAsObject[key]) : value; | ||
| return _objectSpread({}, bufferAsObject, _defineProperty({}, key, updatedValue)); | ||
| if (Array.isArray(bufferAsObject)) { | ||
| var bufferAsArray = _toConsumableArray(bufferAsObject); // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, updatedValue); | ||
| return bufferAsArray; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, bufferAsObject), {}, _defineProperty({}, key, updatedValue)); | ||
| } | ||
| } else { | ||
| var prop = Object.prototype.hasOwnProperty.call(bufferAsObject, key) ? bufferAsObject[key] : {}; | ||
| return _objectSpread({}, bufferAsObject, _defineProperty({}, key, setWithAccessor(path, prop, value))); | ||
| if (Array.isArray(bufferAsObject)) { | ||
| var _bufferAsArray = _toConsumableArray(bufferAsObject); // Copy so we can mutate | ||
| _bufferAsArray.splice(key, 1, setWithAccessor(path, prop, value)); | ||
| return _bufferAsArray; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, bufferAsObject), {}, _defineProperty({}, key, setWithAccessor(path, prop, value))); | ||
| } | ||
| } | ||
@@ -213,3 +255,3 @@ } else { | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); // Idea: use { has, get, set } object instead? | ||
| return updateWithAccessor(accessor(buffer), buffer, value); | ||
| } else if (typeof accessor === 'string') { | ||
@@ -230,5 +272,23 @@ return updateWithAccessor(accessor.split('.'), buffer, value); | ||
| var updatedValue = typeof value === 'function' ? value(buffer[key]) : value; | ||
| return _objectSpread({}, buffer, _defineProperty({}, key, updatedValue)); | ||
| if (Array.isArray(buffer)) { | ||
| var bufferAsArray = _toConsumableArray(buffer); // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, updatedValue); | ||
| return bufferAsArray; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, buffer), {}, _defineProperty({}, key, updatedValue)); | ||
| } | ||
| } else { | ||
| return _objectSpread({}, buffer, _defineProperty({}, key, updateWithAccessor(path, buffer[key], value))); | ||
| if (Array.isArray(buffer)) { | ||
| var _bufferAsArray2 = _toConsumableArray(buffer); // Copy so we can mutate | ||
| _bufferAsArray2.splice(key, 1, updateWithAccessor(path, buffer[key], value)); | ||
| return _bufferAsArray2; | ||
| } else { | ||
| return _objectSpread(_objectSpread({}, buffer), {}, _defineProperty({}, key, updateWithAccessor(path, buffer[key], value))); | ||
| } | ||
| } | ||
@@ -239,4 +299,3 @@ } else { | ||
| }; | ||
| var getError = function getError(_ref, accessor) { | ||
| export var getError = function getError(_ref, accessor) { | ||
| var meta = _ref.meta, | ||
@@ -262,3 +321,2 @@ errors = _ref.errors, | ||
| }; | ||
| export var Field = function Field() { | ||
@@ -273,3 +331,3 @@ var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
| return React.createElement(Context.Consumer, null, function (_ref3) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref3) { | ||
| var buffer = _ref3.buffer, | ||
@@ -307,3 +365,3 @@ updateBuffer = _ref3.updateBuffer, | ||
| var metaUpdated = setWithAccessor(accessor, meta, function (fieldMeta) { | ||
| return _objectSpread({}, fieldMeta || {}, { | ||
| return _objectSpread(_objectSpread({}, fieldMeta || {}), {}, { | ||
| touched: true | ||
@@ -341,3 +399,3 @@ }); | ||
| return React.createElement(FieldComponent, fieldProps); | ||
| return /*#__PURE__*/React.createElement(FieldComponent, fieldProps); | ||
| }); | ||
@@ -347,5 +405,5 @@ }; | ||
| Text: function Text(props) { | ||
| return React.createElement(Context.Consumer, null, function (_ref4) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref4) { | ||
| var buffer = _ref4.buffer; | ||
| return React.createElement("input", null); | ||
| return /*#__PURE__*/React.createElement("input", null); | ||
| } // TODO | ||
@@ -362,3 +420,3 @@ ); | ||
| return React.createElement(Context.Consumer, null, function (_ref6) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref6) { | ||
| var meta = _ref6.meta, | ||
@@ -380,14 +438,12 @@ errors = _ref6.errors, | ||
| } else { | ||
| return React.createElement(ErrorComponent, props, error); | ||
| return /*#__PURE__*/React.createElement(ErrorComponent, props, error); | ||
| } | ||
| }); | ||
| }; | ||
| export var Provider = | ||
| /*#__PURE__*/ | ||
| function (_React$PureComponent) { | ||
| export var Provider = /*#__PURE__*/function (_React$PureComponent) { | ||
| _inherits(Provider, _React$PureComponent); | ||
| var _super = _createSuper(Provider); | ||
| function Provider() { | ||
| var _getPrototypeOf2; | ||
| var _this; | ||
@@ -401,5 +457,5 @@ | ||
| _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Provider)).call.apply(_getPrototypeOf2, [this].concat(args))); | ||
| _this = _super.call.apply(_super, [this].concat(args)); | ||
| _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "state", { | ||
| _defineProperty(_assertThisInitialized(_this), "state", { | ||
| errors: {}, | ||
@@ -411,3 +467,3 @@ pristine: true, | ||
| _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "validate", function (buffer) { | ||
| _defineProperty(_assertThisInitialized(_this), "validate", function (buffer) { | ||
| if (!_this.props.validate) { | ||
@@ -460,3 +516,3 @@ return; | ||
| var meta = setWithAccessor(accessor, _this2.state.meta, function (fieldMeta) { | ||
| return _objectSpread({}, fieldMeta || {}, { | ||
| return _objectSpread(_objectSpread({}, fieldMeta || {}), {}, { | ||
| touched: true | ||
@@ -498,3 +554,3 @@ }); | ||
| }; | ||
| return React.createElement(Context.Provider, { | ||
| return /*#__PURE__*/React.createElement(Context.Provider, { | ||
| value: formProps | ||
@@ -509,7 +565,7 @@ }, typeof this.props.children === 'function' ? this.props.children(formProps) : this.props.children); | ||
| var WithForm = function WithForm(props) { | ||
| return React.createElement(Context.Consumer, null, function (_ref7) { | ||
| return /*#__PURE__*/React.createElement(Context.Consumer, null, function (_ref7) { | ||
| var buffer = _ref7.buffer, | ||
| updateBuffer = _ref7.updateBuffer, | ||
| updateMeta = _ref7.updateMeta; | ||
| return React.createElement(Component, _extends({}, props, { | ||
| return /*#__PURE__*/React.createElement(Component, _extends({}, props, { | ||
| buffer: buffer, | ||
@@ -525,2 +581,2 @@ updateBuffer: updateBuffer, | ||
| }; | ||
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyIkbXNnIiwiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCJSZWFjdCIsIkNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiaGFzQWNjZXNzb3IiLCJhY2Nlc3NvciIsImJ1ZmZlciIsIlR5cGVFcnJvciIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImtleSIsImFjY2Vzc29yUmVzdCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNwbGl0Iiwic2VsZWN0V2l0aEFjY2Vzc29yIiwicmVkdWNlIiwic2V0V2l0aEFjY2Vzc29yIiwidmFsdWUiLCJwYXRoIiwiYnVmZmVyQXNPYmplY3QiLCJ1cGRhdGVkVmFsdWUiLCJwcm9wIiwidXBkYXRlV2l0aEFjY2Vzc29yIiwiZ2V0RXJyb3IiLCJtZXRhIiwiZXJyb3JzIiwic3VibWl0dGVkIiwiZmllbGRNZXRhIiwidG91Y2hlZCIsInNob3VsZFNob3dNZXNzYWdlIiwiZSIsIkZpZWxkIiwiY2hpbGRyZW4iLCJjb21wb25lbnQiLCJGaWVsZENvbXBvbmVudCIsInByb3BzIiwidXBkYXRlQnVmZmVyIiwidXBkYXRlTWV0YSIsImZvcm1NZXRhIiwiZmllbGRFcnJvciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsImV2dCIsInRhcmdldCIsImNoZWNrZWQiLCJvbkJsdXIiLCJtZXRhVXBkYXRlZCIsIlN0cmluZyIsImFjdGlvbnMiLCJ1cGRhdGUiLCJGaWVsZHMiLCJUZXh0IiwiRXJyb3JNZXNzYWdlIiwiRXJyb3JDb21wb25lbnQiLCJGcmFnbWVudCIsImVycm9yIiwiUHJvdmlkZXIiLCJwcmlzdGluZSIsInZhbGlkYXRlIiwic2V0U3RhdGUiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJmb3JtUHJvcHMiLCJ1cGRhdGVkQnVmZmVyIiwib25VcGRhdGUiLCJzdGF0ZSIsInN1Ym1pdCIsImtleXMiLCJvblN1Ym1pdCIsIlB1cmVDb21wb25l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QVdpQyxRQUFYO0FBQ0gsV0FURDtBQVVIO0FBOUNhLE9BQWxCO0FBaURBLGFBQ0ksb0JBQUMsT0FBRCxDQUFTLFFBQVQ7QUFBa0IsUUFBQSxLQUFLLEVBQUVOO0FBQXpCLFNBQ0ssT0FBTyxLQUFLM0IsS0FBTCxDQUFXSCxRQUFsQixLQUErQixVQUEvQixHQUNLLEtBQUtHLEtBQUwsQ0FBV0gsUUFBWCxDQUFvQjhCLFNBQXBCLENBREwsR0FFSyxLQUFLM0IsS0FBTCxDQUFXSCxRQUhyQixDQURKO0FBUUg7QUEvRkw7O0FBQUE7QUFBQSxFQUE4Qm5DLEtBQUssQ0FBQ3dFLGFBQXBDO0FBa0dBLE9BQU8sSUFBTUMsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQUMsU0FBUyxFQUFJO0FBQ2pDLE1BQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXLENBQUFyQyxLQUFLO0FBQUEsV0FDbEIsb0JBQUMsT0FBRCxDQUFTLFFBQVQsUUFDSztBQUFBLFVBQUdqQyxNQUFILFNBQUdBLE1BQUg7QUFBQSxVQUFXa0MsWUFBWCxTQUFXQSxZQUFYO0FBQUEsVUFBeUJDLFVBQXpCLFNBQXlCQSxVQUF6QjtBQUFBLGFBQ0csb0JBQUMsU0FBRCxlQUFlRixLQUFmO0FBQXNCLFFBQUEsTUFBTSxFQUFFakMsTUFBOUI7QUFBc0MsUUFBQSxZQUFZLEVBQUVrQyxZQUFwRDtBQUFrRSxRQUFBLFVBQVUsRUFBRUM7QUFBOUUsU0FESDtBQUFBLEtBREwsQ0FEa0I7QUFBQSxHQUF0Qjs7QUFPQXpDLEVBQUFBLG9CQUFvQixDQUFDNEUsUUFBRCxFQUFXRCxTQUFYLENBQXBCO0FBRUEsU0FBT0MsUUFBUDtBQUNILENBWE0iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCAkbXNnIGZyb20gJ21lc3NhZ2UtdGFnJztcblxuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5leHBvcnQgY29uc3QgQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcblxuLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBoYXMgdGhlIGdpdmVuIGFjY2Vzc29yXG5leHBvcnQgY29uc3QgaGFzQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlcikgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVE9ETycpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhY2Nlc3NvcikpIHtcbiAgICAgICAgaWYgKGFjY2Vzc29yLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2tleSwgLi4uYWNjZXNzb3JSZXN0XSA9IGFjY2Vzc29yO1xuICAgICAgICBpZiAodHlwZW9mIGJ1ZmZlciAhPT0gJ29iamVjdCcgfHwgYnVmZmVyID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChidWZmZXIsIGtleSkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHJldHVybiBoYXNBY2Nlc3NvcihhY2Nlc3NvclJlc3QsIGJ1ZmZlcltrZXldKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY2Nlc3NvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGhhc0FjY2Vzc29yKGFjY2Vzc29yLnNwbGl0KCcuJyksIGJ1ZmZlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYFVua25vd24gYWNjZXNzb3IgdHlwZSAke2FjY2Vzc29yfWApO1xuICAgIH1cbn07XG5cbi8vIFNlbGVjdCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGFjY2Vzc29yXG5leHBvcnQgY29uc3Qgc2VsZWN0V2l0aEFjY2Vzc29yID0gKGFjY2Vzc29yLCBidWZmZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBhY2Nlc3NvcihidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWNjZXNzb3Iuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYnVmZmVyLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBidWZmZXIgIT09ICdvYmplY3QnIHx8IGJ1ZmZlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYENhbm5vdCBhY2Nlc3MgJHtrZXl9IG9uIG5vbi1vYmplY3QgJHtidWZmZXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChidWZmZXIsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BNaXNzaW5nIGtleSAke2tleX0gb24gb2JqZWN0ICR7YnVmZmVyfWApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBidWZmZXJcbiAgICAgICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYFVua25vd24gYWNjZXNzb3IgdHlwZSAke2FjY2Vzc29yfWApO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIGJ1ZmZlciAod2hlcmUgdGhlIHByb3BlcnR5IG1heSBub3QgYWxyZWFkeSBleGlzdClcbmV4cG9ydCBjb25zdCBzZXRXaXRoQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlciwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RPRE8nKTsgLy8gSWRlYTogdXNlIHsgaGFzLCBnZXQsIHNldCB9IG9iamVjdCBpbnN0ZWFkP1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gc2V0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLnNwbGl0KCcuJyksIGJ1ZmZlciwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhY2Nlc3NvcikpIHtcbiAgICAgICAgY29uc3QgW2tleSwgLi4ucGF0aF0gPSBhY2Nlc3NvcjtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGJ1ZmZlckFzT2JqZWN0ID0gdHlwZW9mIGJ1ZmZlciA9PT0gJ29iamVjdCcgJiYgYnVmZmVyICE9PSBudWxsXG4gICAgICAgICAgICA/IGJ1ZmZlclxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyB2YWx1ZShidWZmZXJBc09iamVjdFtrZXldKVxuICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlckFzT2JqZWN0LCBba2V5XTogdXBkYXRlZFZhbHVlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlckFzT2JqZWN0LCBrZXkpXG4gICAgICAgICAgICAgICAgPyBidWZmZXJBc09iamVjdFtrZXldXG4gICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYnVmZmVyQXNPYmplY3QsIFtrZXldOiBzZXRXaXRoQWNjZXNzb3IocGF0aCwgcHJvcCwgdmFsdWUpIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyICh3aGVyZSB0aGUgcHJvcGVydHkgaXMgYXNzdW1lZCB0byBleGlzdClcbmV4cG9ydCBjb25zdCB1cGRhdGVXaXRoQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlciwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RPRE8nKTsgLy8gSWRlYTogdXNlIHsgaGFzLCBnZXQsIHNldCB9IG9iamVjdCBpbnN0ZWFkP1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdXBkYXRlV2l0aEFjY2Vzc29yKGFjY2Vzc29yLnNwbGl0KCcuJyksIGJ1ZmZlciwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhY2Nlc3NvcikpIHtcbiAgICAgICAgY29uc3QgW2tleSwgLi4ucGF0aF0gPSBhY2Nlc3NvcjtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgYnVmZmVyICE9PSAnb2JqZWN0JyB8fCBidWZmZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BDYW5ub3QgYWNjZXNzICR7a2V5fSBvbiBub24tb2JqZWN0ICR7YnVmZmVyfWApO1xuICAgICAgICB9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYnVmZmVyLCBrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgTWlzc2luZyBrZXkgJHtrZXl9IG9uIG9iamVjdCAke2J1ZmZlcn1gKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IHZhbHVlKGJ1ZmZlcltrZXldKVxuICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlciwgW2tleV06IHVwZGF0ZWRWYWx1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYnVmZmVyLCBba2V5XTogdXBkYXRlV2l0aEFjY2Vzc29yKHBhdGgsIGJ1ZmZlcltrZXldLCB2YWx1ZSkgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BVbmtub3duIGFjY2Vzc29yIHR5cGUgJHthY2Nlc3Nvcn1gKTtcbiAgICB9XG59O1xuXG5jb25zdCBnZXRFcnJvciA9ICh7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0sIGFjY2Vzc29yKSA9PiB7XG4gICAgY29uc3QgZmllbGRNZXRhID0gaGFzQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpXG4gICAgICAgID8gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKVxuICAgICAgICA6IHsgdG91Y2hlZDogZmFsc2UgfTtcbiAgICBcbiAgICAvLyBPbmx5IHNob3cgdGhlIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHVzZXIgaGFzIGludGVyYWN0ZWQgd2l0aCB0aGUgZm9ybS9maWVsZCBzb21laG93XG4gICAgY29uc3Qgc2hvdWxkU2hvd01lc3NhZ2UgPVxuICAgICAgICBzdWJtaXR0ZWRcbiAgICAgICAgfHwgZmllbGRNZXRhLnRvdWNoZWQ7XG4gICAgXG4gICAgaWYgKCFzaG91bGRTaG93TWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgZXJyb3JzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIE5vIGVycm9yXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBGaWVsZCA9ICh7IGNoaWxkcmVuLCBjb21wb25lbnQ6IEZpZWxkQ29tcG9uZW50ID0gJ2lucHV0JywgYWNjZXNzb3IsIC4uLnByb3BzIH0gPSB7fSkgPT5cbiAgICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IGJ1ZmZlciwgdXBkYXRlQnVmZmVyLCBtZXRhLCB1cGRhdGVNZXRhLCBlcnJvcnMsIHN1Ym1pdHRlZCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNlbGVjdFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgYnVmZmVyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAgICAgICAgICAgc3VibWl0dGVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZmllbGRNZXRhID0gaGFzQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpID8gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKSA6IHtcbiAgICAgICAgICAgICAgICB0b3VjaGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBnZXRFcnJvcih7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0sIGFjY2Vzc29yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogZXZ0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZXZ0LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2dC50YXJnZXQuaGFzT3duUHJvcGVydHkoJ2NoZWNrZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJ1ZmZlcihhY2Nlc3NvciwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25CbHVyOiBldnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0FjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKSB8fCAhc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhKS50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhVXBkYXRlZCA9IHNldFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE1ldGEgPT4gKHsgLi4uKGZpZWxkTWV0YSB8fCB7fSksIHRvdWNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1ldGEobWV0YVVwZGF0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAuLi5wcm9wc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmllbGRQcm9wcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgZmllbGRQcm9wcy52YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgZmllbGRQcm9wcy5jaGVja2VkID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BVbmtub3duIHZhbHVlIHR5cGU6ICR7dmFsdWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlOiB2YWx1ZSA9PiB7IHVwZGF0ZUJ1ZmZlcihhY2Nlc3NvciwgdmFsdWUpOyB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkcmVuKHsgZm9ybU1ldGEsIGZpZWxkUHJvcHMsIGZpZWxkTWV0YSwgZmllbGRFcnJvciB9LCBhY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICA6IGNoaWxkcmVuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGaWVsZENvbXBvbmVudCB7Li4uZmllbGRQcm9wc30vPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfX1cbiAgICA8L0NvbnRleHQuQ29uc3VtZXI+O1xuXG5leHBvcnQgY29uc3QgRmllbGRzID0ge1xuICAgIFRleHQ6IHByb3BzID0+XG4gICAgICAgIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgeyh7IGJ1ZmZlciB9KSA9PlxuICAgICAgICAgICAgICAgIDxpbnB1dC8+IC8vIFRPRE9cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9Db250ZXh0LkNvbnN1bWVyPixcbn07XG5cbmV4cG9ydCBjb25zdCBFcnJvck1lc3NhZ2UgPSAoeyBjaGlsZHJlbiwgY29tcG9uZW50OiBFcnJvckNvbXBvbmVudCA9IFJlYWN0LkZyYWdtZW50LCBhY2Nlc3NvciwgLi4ucHJvcHMgfSkgPT5cbiAgICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZ2V0RXJyb3IoeyBtZXRhLCBlcnJvcnMsIHN1Ym1pdHRlZCB9LCBhY2Nlc3Nvcik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgPyBjaGlsZHJlbihlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgOiBjaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFcnJvckNvbXBvbmVudCB7Li4ucHJvcHN9PntlcnJvcn08L0Vycm9yQ29tcG9uZW50PjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICA8L0NvbnRleHQuQ29uc3VtZXI+O1xuXG5leHBvcnQgY2xhc3MgUHJvdmlkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICAvLyBwcm9wcyA6IHtcbiAgICAvLyAgIGJ1ZmZlciA6IGFueSxcbiAgICAvLyAgIG9uVXBkYXRlIDogRnVuY3Rpb24sXG4gICAgLy8gICB2YWxpZGF0ZSA/OiBGdW5jdGlvbixcbiAgICAvLyAgIG9uU3VibWl0IDogRnVuY3Rpb24sXG4gICAgLy8gfTtcbiAgICBcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgcHJpc3RpbmU6IHRydWUsXG4gICAgICAgIHN1Ym1pdHRlZDogZmFsc2UsXG4gICAgICAgIG1ldGE6IHt9LFxuICAgIH07XG4gICAgXG4gICAgdmFsaWRhdGUgPSBidWZmZXIgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucHJvcHMudmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5wcm9wcy52YWxpZGF0ZShidWZmZXIpIHx8IHt9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9ycyB9KTtcbiAgICB9O1xuICAgIFxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlKHRoaXMucHJvcHMuYnVmZmVyKTtcbiAgICB9XG4gICAgXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuYnVmZmVyICE9PSB0aGlzLnByb3BzLmJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZSh0aGlzLnByb3BzLmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGJ1ZmZlciB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGZvcm1Qcm9wcyA9IHtcbiAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgIHVwZGF0ZUJ1ZmZlcjogKGFjY2Vzc29yLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRCdWZmZXIgPSB1cGRhdGVXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIGJ1ZmZlciwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25VcGRhdGUodXBkYXRlZEJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucHJpc3RpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHByaXN0aW5lOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBY2Nlc3NvcihhY2Nlc3NvciwgdGhpcy5zdGF0ZS5tZXRhKSB8fCAhc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLm1ldGEpLnRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNldFdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgdGhpcy5zdGF0ZS5tZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRNZXRhID0+ICh7IC4uLihmaWVsZE1ldGEgfHwge30pLCB0b3VjaGVkOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWV0YSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZSh1cGRhdGVkQnVmZmVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHByaXN0aW5lOiB0aGlzLnN0YXRlLnByaXN0aW5lLFxuICAgICAgICAgICAgc3VibWl0dGVkOiB0aGlzLnN0YXRlLnN1Ym1pdHRlZCxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZXJyb3JzOiB0aGlzLnN0YXRlLmVycm9ycyxcbiAgICAgICAgICAgIC8vIHVwZGF0ZUVycm9yOiAoYWNjZXNzb3IsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAvLyAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcnM6IHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgdGhpcy5zdGF0ZS5lcnJvcnMsIGVycm9yKSB9KTtcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG1ldGE6IHRoaXMuc3RhdGUubWV0YSxcbiAgICAgICAgICAgIHVwZGF0ZU1ldGE6IG1ldGEgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWV0YSB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHN1Ym1pdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBwcmlzdGluZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN0YXRlLmVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmb3JtUHJvcHN9PlxuICAgICAgICAgICAgICAgIHt0eXBlb2YgdGhpcy5wcm9wcy5jaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMuY2hpbGRyZW4oZm9ybVByb3BzKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3Qgd2l0aEZvcm0gPSBDb21wb25lbnQgPT4ge1xuICAgIGNvbnN0IFdpdGhGb3JtID0gcHJvcHMgPT5cbiAgICAgICAgPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHsgYnVmZmVyLCB1cGRhdGVCdWZmZXIsIHVwZGF0ZU1ldGEgfSkgPT5cbiAgICAgICAgICAgICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gYnVmZmVyPXtidWZmZXJ9IHVwZGF0ZUJ1ZmZlcj17dXBkYXRlQnVmZmVyfSB1cGRhdGVNZXRhPXt1cGRhdGVNZXRhfS8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvQ29udGV4dC5Db25zdW1lcj47XG4gICAgXG4gICAgaG9pc3ROb25SZWFjdFN0YXRpY3MoV2l0aEZvcm0sIENvbXBvbmVudCk7XG4gICAgXG4gICAgcmV0dXJuIFdpdGhGb3JtO1xufTtcbiJdfQ== | ||
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyIkbXNnIiwiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCJSZWFjdCIsIkNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiaGFzQWNjZXNzb3IiLCJhY2Nlc3NvciIsImJ1ZmZlciIsImFjYyIsImUiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJrZXkiLCJhY2Nlc3NvclJlc3QiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJzcGxpdCIsIlR5cGVFcnJvciIsInNlbGVjdFdpdGhBY2Nlc3NvciIsInJlZHVjZSIsInNldFdpdGhBY2Nlc3NvciIsInZhbHVlIiwicGF0aCIsImJ1ZmZlckFzT2JqZWN0IiwidXBkYXRlZFZhbHVlIiwiYnVmZmVyQXNBcnJheSIsInNwbGljZSIsInByb3AiLCJ1cGRhdGVXaXRoQWNjZXNzb3IiLCJnZXRFcnJvciIsIm1ldGEiLCJlcnJvcnMiLCJzdWJtaXR0ZWQiLCJmaWVsZE1ldGEiLCJ0b3VjaGVkIiwic2hvdWxkU2hvd01lc3NhZ2UiLCJGaWVsZCIsImNoaWxkcmVuIiwiY29tcG9uZW50IiwiRmllbGRDb21wb25lbnQiLCJwcm9wcyIsInVwZGF0ZUJ1ZmZlciIsInVwZGF0ZU1ldGEiLCJmb3JtTWV0YSIsImZpZWxkRXJyb3IiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJldnQiLCJ0YXJnZXQiLCJjaGVja2VkIiwib25CbHVyIiwibWV0YVVwZGF0ZWQiLCJTdHJpbmciLCJhY3Rpb25zIiwidXBkYXRlIiwiRmllbGRzIiwiVGV4dCIsIkVycm9yTWVzc2FnZSIsIkVycm9yQ29tcG9uZW50IiwiRnJhZ21lbnQiLCJlcnJvciIsIlByb3ZpZGVyIiwicHJpc3RpbmUiLCJ2YWxpZGF0ZSIsInNldFN0YXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiZm9ybVByb3BzIiwidXBkYXRlZEJ1ZmZlciIsIm9uVXBkYXRlIiwic3RhdGUiLCJzdWJtaXQiLCJrZXlzIiwib25TdWJtaXQiLCJQdXJlQ29tcG9uZW50Iiwid2l0aEZvcm0iLCJDb21wb25lbnQiLCJXaXRoRm9ybSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBT0EsSUFBUCxNQUFpQixhQUFqQjtBQUVBLE9BQU9DLG9CQUFQLE1BQWlDLHlCQUFqQztBQUNBLE9BQU8sS0FBS0MsS0FBWixNQUF1QixPQUF2QjtBQUdBLE9BQU8sSUFBTUMsT0FBTyxHQUFHRCxLQUFLLENBQUNFLGFBQU4sRUFBaEIsQyxDQUVQOztBQUNBLE9BQU8sSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFYLEVBQXNCO0FBQzdDLE1BQUksT0FBT0QsUUFBUCxLQUFvQixVQUF4QixFQUFvQztBQUNoQyxRQUFJRSxHQUFKOztBQUNBLFFBQUk7QUFDQUEsTUFBQUEsR0FBRyxHQUFHRixRQUFRLENBQUNDLE1BQUQsQ0FBZDtBQUNBLGFBQU8sSUFBUDtBQUNILEtBSEQsQ0FHRSxPQUFPRSxDQUFQLEVBQVU7QUFDUixhQUFPLEtBQVA7QUFDSDtBQUNKLEdBUkQsTUFRTyxJQUFJQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0wsUUFBZCxDQUFKLEVBQTZCO0FBQ2hDLFFBQUlBLFFBQVEsQ0FBQ00sTUFBVCxLQUFvQixDQUF4QixFQUEyQjtBQUN2QixhQUFPLElBQVA7QUFDSDs7QUFIK0IsNkJBSUROLFFBSkM7QUFBQSxRQUl6Qk8sR0FKeUI7QUFBQSxRQUlqQkMsWUFKaUI7O0FBS2hDLFFBQUksUUFBT1AsTUFBUCxNQUFrQixRQUFsQixJQUE4QkEsTUFBTSxLQUFLLElBQTdDLEVBQW1EO0FBQUUsYUFBTyxLQUFQO0FBQWU7O0FBQ3BFLFFBQUksQ0FBQ1Es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QUFPQTVDLEVBQUFBLG9CQUFvQixDQUFDK0UsUUFBRCxFQUFXRCxTQUFYLENBQXBCO0FBRUEsU0FBT0MsUUFBUDtBQUNILENBWE0iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCAkbXNnIGZyb20gJ21lc3NhZ2UtdGFnJztcblxuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5leHBvcnQgY29uc3QgQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoKTtcblxuLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIGJ1ZmZlciBoYXMgdGhlIGdpdmVuIGFjY2Vzc29yXG5leHBvcnQgY29uc3QgaGFzQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlcikgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbGV0IGFjYztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGFjYyA9IGFjY2Vzc29yKGJ1ZmZlcik7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFjY2Vzc29yKSkge1xuICAgICAgICBpZiAoYWNjZXNzb3IubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBba2V5LCAuLi5hY2Nlc3NvclJlc3RdID0gYWNjZXNzb3I7XG4gICAgICAgIGlmICh0eXBlb2YgYnVmZmVyICE9PSAnb2JqZWN0JyB8fCBidWZmZXIgPT09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlciwga2V5KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgcmV0dXJuIGhhc0FjY2Vzc29yKGFjY2Vzc29yUmVzdCwgYnVmZmVyW2tleV0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjY2Vzc29yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaGFzQWNjZXNzb3IoYWNjZXNzb3Iuc3BsaXQoJy4nKSwgYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuLy8gU2VsZWN0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gYWNjZXNzb3JcbmV4cG9ydCBjb25zdCBzZWxlY3RXaXRoQWNjZXNzb3IgPSAoYWNjZXNzb3IsIGJ1ZmZlcikgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGFjY2Vzc29yKGJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhY2Nlc3Nvci5zcGxpdCgnLicpXG4gICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChidWZmZXIsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ1ZmZlciAhPT0gJ29iamVjdCcgfHwgYnVmZmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgQ2Fubm90IGFjY2VzcyAke2tleX0gb24gbm9uLW9iamVjdCAke2J1ZmZlcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlciwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYE1pc3Npbmcga2V5ICR7a2V5fSBvbiBvYmplY3QgJHtidWZmZXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJ1ZmZlclxuICAgICAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyICh3aGVyZSB0aGUgcHJvcGVydHkgbWF5IG5vdCBhbHJlYWR5IGV4aXN0KVxuZXhwb3J0IGNvbnN0IHNldFdpdGhBY2Nlc3NvciA9IChhY2Nlc3NvciwgYnVmZmVyLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHNldFdpdGhBY2Nlc3NvcihhY2Nlc3NvcihidWZmZXIpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY2Nlc3NvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHNldFdpdGhBY2Nlc3NvcihhY2Nlc3Nvci5zcGxpdCgnLicpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWNjZXNzb3IpKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnBhdGhdID0gYWNjZXNzb3I7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBidWZmZXJBc09iamVjdCA9IHR5cGVvZiBidWZmZXIgPT09ICdvYmplY3QnICYmIGJ1ZmZlciAhPT0gbnVsbFxuICAgICAgICAgICAgPyBidWZmZXJcbiAgICAgICAgICAgIDoge307XG4gICAgICAgIFxuICAgICAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gdmFsdWUoYnVmZmVyQXNPYmplY3Rba2V5XSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmZXJBc09iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXJBc0FycmF5ID0gWy4uLmJ1ZmZlckFzT2JqZWN0XTsgLy8gQ29weSBzbyB3ZSBjYW4gbXV0YXRlXG4gICAgICAgICAgICAgICAgYnVmZmVyQXNBcnJheS5zcGxpY2Uoa2V5LCAxLCB1cGRhdGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJBc0FycmF5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5idWZmZXJBc09iamVjdCwgW2tleV06IHVwZGF0ZWRWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChidWZmZXJBc09iamVjdCwga2V5KVxuICAgICAgICAgICAgICAgID8gYnVmZmVyQXNPYmplY3Rba2V5XVxuICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlckFzT2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlckFzQXJyYXkgPSBbLi4uYnVmZmVyQXNPYmplY3RdOyAvLyBDb3B5IHNvIHdlIGNhbiBtdXRhdGVcbiAgICAgICAgICAgICAgICBidWZmZXJBc0FycmF5LnNwbGljZShrZXksIDEsIHNldFdpdGhBY2Nlc3NvcihwYXRoLCBwcm9wLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJBc0FycmF5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5idWZmZXJBc09iamVjdCwgW2tleV06IHNldFdpdGhBY2Nlc3NvcihwYXRoLCBwcm9wLCB2YWx1ZSkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJG1zZ2BVbmtub3duIGFjY2Vzc29yIHR5cGUgJHthY2Nlc3Nvcn1gKTtcbiAgICB9XG59O1xuXG4vLyBSZXR1cm4gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBidWZmZXIgKHdoZXJlIHRoZSBwcm9wZXJ0eSBpcyBhc3N1bWVkIHRvIGV4aXN0KVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVdpdGhBY2Nlc3NvciA9IChhY2Nlc3NvciwgYnVmZmVyLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgYWNjZXNzb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3NvcihidWZmZXIpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY2Nlc3NvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3Nvci5zcGxpdCgnLicpLCBidWZmZXIsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWNjZXNzb3IpKSB7XG4gICAgICAgIGNvbnN0IFtrZXksIC4uLnBhdGhdID0gYWNjZXNzb3I7XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIGJ1ZmZlciAhPT0gJ29iamVjdCcgfHwgYnVmZmVyID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgQ2Fubm90IGFjY2VzcyAke2tleX0gb24gbm9uLW9iamVjdCAke2J1ZmZlcn1gKTtcbiAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGJ1ZmZlciwga2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYE1pc3Npbmcga2V5ICR7a2V5fSBvbiBvYmplY3QgJHtidWZmZXJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyB2YWx1ZShidWZmZXJba2V5XSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidWZmZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVmZmVyQXNBcnJheSA9IFsuLi5idWZmZXJdOyAvLyBDb3B5IHNvIHdlIGNhbiBtdXRhdGVcbiAgICAgICAgICAgICAgICBidWZmZXJBc0FycmF5LnNwbGljZShrZXksIDEsIHVwZGF0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlckFzQXJyYXk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlciwgW2tleV06IHVwZGF0ZWRWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlckFzQXJyYXkgPSBbLi4uYnVmZmVyXTsgLy8gQ29weSBzbyB3ZSBjYW4gbXV0YXRlXG4gICAgICAgICAgICAgICAgYnVmZmVyQXNBcnJheS5zcGxpY2Uoa2V5LCAxLCB1cGRhdGVXaXRoQWNjZXNzb3IocGF0aCwgYnVmZmVyW2tleV0sIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlckFzQXJyYXk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmJ1ZmZlciwgW2tleV06IHVwZGF0ZVdpdGhBY2Nlc3NvcihwYXRoLCBidWZmZXJba2V5XSwgdmFsdWUpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCRtc2dgVW5rbm93biBhY2Nlc3NvciB0eXBlICR7YWNjZXNzb3J9YCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEVycm9yID0gKHsgbWV0YSwgZXJyb3JzLCBzdWJtaXR0ZWQgfSwgYWNjZXNzb3IpID0+IHtcbiAgICBjb25zdCBmaWVsZE1ldGEgPSBoYXNBY2Nlc3NvcihhY2Nlc3NvciwgbWV0YSlcbiAgICAgICAgPyBzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpXG4gICAgICAgIDogeyB0b3VjaGVkOiBmYWxzZSB9O1xuICAgIFxuICAgIC8vIE9ubHkgc2hvdyB0aGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgdXNlciBoYXMgaW50ZXJhY3RlZCB3aXRoIHRoZSBmb3JtL2ZpZWxkIHNvbWVob3dcbiAgICBjb25zdCBzaG91bGRTaG93TWVzc2FnZSA9XG4gICAgICAgIHN1Ym1pdHRlZFxuICAgICAgICB8fCBmaWVsZE1ldGEudG91Y2hlZDtcbiAgICBcbiAgICBpZiAoIXNob3VsZFNob3dNZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBlcnJvcnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gTm8gZXJyb3JcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEZpZWxkID0gKHsgY2hpbGRyZW4sIGNvbXBvbmVudDogRmllbGRDb21wb25lbnQgPSAnaW5wdXQnLCBhY2Nlc3NvciwgLi4ucHJvcHMgfSA9IHt9KSA9PlxuICAgIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7KHsgYnVmZmVyLCB1cGRhdGVCdWZmZXIsIG1ldGEsIHVwZGF0ZU1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc2VsZWN0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBidWZmZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgICAgICAgICAgICBzdWJtaXR0ZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBmaWVsZE1ldGEgPSBoYXNBY2Nlc3NvcihhY2Nlc3NvciwgbWV0YSkgPyBzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpIDoge1xuICAgICAgICAgICAgICAgIHRvdWNoZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGdldEVycm9yKHsgbWV0YSwgZXJyb3JzLCBzdWJtaXR0ZWQgfSwgYWNjZXNzb3IpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0ge1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBldnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBldnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldC5oYXNPd25Qcm9wZXJ0eSgnY2hlY2tlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2dC50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQnVmZmVyKGFjY2Vzc29yLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkJsdXI6IGV2dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpIHx8ICFzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIG1ldGEpLnRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFVcGRhdGVkID0gc2V0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTWV0YSA9PiAoeyAuLi4oZmllbGRNZXRhIHx8IHt9KSwgdG91Y2hlZDogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWV0YShtZXRhVXBkYXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLnByb3BzXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFByb3BzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFByb3BzLnZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBmaWVsZFByb3BzLmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigkbXNnYFVua25vd24gdmFsdWUgdHlwZTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGU6IHZhbHVlID0+IHsgdXBkYXRlQnVmZmVyKGFjY2Vzc29yLCB2YWx1ZSk7IH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGRyZW4oeyBmb3JtTWV0YSwgZmllbGRQcm9wcywgZmllbGRNZXRhLCBmaWVsZEVycm9yIH0sIGFjdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIDogY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZpZWxkQ29tcG9uZW50IHsuLi5maWVsZFByb3BzfS8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9fVxuICAgIDwvQ29udGV4dC5Db25zdW1lcj47XG5cbmV4cG9ydCBjb25zdCBGaWVsZHMgPSB7XG4gICAgVGV4dDogcHJvcHMgPT5cbiAgICAgICAgPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICB7KHsgYnVmZmVyIH0pID0+XG4gICAgICAgICAgICAgICAgPGlucHV0Lz4gLy8gVE9ET1xuICAgICAgICAgICAgfVxuICAgICAgICA8L0NvbnRleHQuQ29uc3VtZXI+LFxufTtcblxuZXhwb3J0IGNvbnN0IEVycm9yTWVzc2FnZSA9ICh7IGNoaWxkcmVuLCBjb21wb25lbnQ6IEVycm9yQ29tcG9uZW50ID0gUmVhY3QuRnJhZ21lbnQsIGFjY2Vzc29yLCAuLi5wcm9wcyB9KSA9PlxuICAgIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7KHsgbWV0YSwgZXJyb3JzLCBzdWJtaXR0ZWQgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBnZXRFcnJvcih7IG1ldGEsIGVycm9ycywgc3VibWl0dGVkIH0sIGFjY2Vzc29yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkcmVuKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICA6IGNoaWxkcmVuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEVycm9yQ29tcG9uZW50IHsuLi5wcm9wc30+e2Vycm9yfTwvRXJyb3JDb21wb25lbnQ+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9fVxuICAgIDwvQ29udGV4dC5Db25zdW1lcj47XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIC8vIHByb3BzIDoge1xuICAgIC8vICAgYnVmZmVyIDogYW55LFxuICAgIC8vICAgb25VcGRhdGUgOiBGdW5jdGlvbixcbiAgICAvLyAgIHZhbGlkYXRlID86IEZ1bmN0aW9uLFxuICAgIC8vICAgb25TdWJtaXQgOiBGdW5jdGlvbixcbiAgICAvLyB9O1xuICAgIFxuICAgIHN0YXRlID0ge1xuICAgICAgICBlcnJvcnM6IHt9LFxuICAgICAgICBwcmlzdGluZTogdHJ1ZSxcbiAgICAgICAgc3VibWl0dGVkOiBmYWxzZSxcbiAgICAgICAgbWV0YToge30sXG4gICAgfTtcbiAgICBcbiAgICB2YWxpZGF0ZSA9IGJ1ZmZlciA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wcm9wcy52YWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLnByb3BzLnZhbGlkYXRlKGJ1ZmZlcikgfHwge307XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3JzIH0pO1xuICAgIH07XG4gICAgXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGUodGhpcy5wcm9wcy5idWZmZXIpO1xuICAgIH1cbiAgICBcbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHByZXZQcm9wcy5idWZmZXIgIT09IHRoaXMucHJvcHMuYnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlKHRoaXMucHJvcHMuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgYnVmZmVyIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZm9ybVByb3BzID0ge1xuICAgICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgICAgdXBkYXRlQnVmZmVyOiAoYWNjZXNzb3IsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEJ1ZmZlciA9IHVwZGF0ZVdpdGhBY2Nlc3NvcihhY2Nlc3NvciwgYnVmZmVyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVwZGF0ZSh1cGRhdGVkQnVmZmVyKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5wcmlzdGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgcHJpc3RpbmU6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0FjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLm1ldGEpIHx8ICFzZWxlY3RXaXRoQWNjZXNzb3IoYWNjZXNzb3IsIHRoaXMuc3RhdGUubWV0YSkudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhID0gc2V0V2l0aEFjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLm1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE1ldGEgPT4gKHsgLi4uKGZpZWxkTWV0YSB8fCB7fSksIHRvdWNoZWQ6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtZXRhIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlKHVwZGF0ZWRCdWZmZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcHJpc3RpbmU6IHRoaXMuc3RhdGUucHJpc3RpbmUsXG4gICAgICAgICAgICBzdWJtaXR0ZWQ6IHRoaXMuc3RhdGUuc3VibWl0dGVkLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBlcnJvcnM6IHRoaXMuc3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgLy8gdXBkYXRlRXJyb3I6IChhY2Nlc3NvciwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yczogdXBkYXRlV2l0aEFjY2Vzc29yKGFjY2Vzc29yLCB0aGlzLnN0YXRlLmVycm9ycywgZXJyb3IpIH0pO1xuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbWV0YTogdGhpcy5zdGF0ZS5tZXRhLFxuICAgICAgICAgICAgdXBkYXRlTWV0YTogbWV0YSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtZXRhIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc3VibWl0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHByaXN0aW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc3RhdGUuZXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25TdWJtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2Zvcm1Qcm9wc30+XG4gICAgICAgICAgICAgICAge3R5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5jaGlsZHJlbihmb3JtUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCB3aXRoRm9ybSA9IENvbXBvbmVudCA9PiB7XG4gICAgY29uc3QgV2l0aEZvcm0gPSBwcm9wcyA9PlxuICAgICAgICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgIHsoeyBidWZmZXIsIHVwZGF0ZUJ1ZmZlciwgdXBkYXRlTWV0YSB9KSA9PlxuICAgICAgICAgICAgICAgIDxDb21wb25lbnQgey4uLnByb3BzfSBidWZmZXI9e2J1ZmZlcn0gdXBkYXRlQnVmZmVyPXt1cGRhdGVCdWZmZXJ9IHVwZGF0ZU1ldGE9e3VwZGF0ZU1ldGF9Lz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9Db250ZXh0LkNvbnN1bWVyPjtcbiAgICBcbiAgICBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoRm9ybSwgQ29tcG9uZW50KTtcbiAgICBcbiAgICByZXR1cm4gV2l0aEZvcm07XG59O1xuIl19 |
+13
-12
| { | ||
| "name": "@mkrause/react-form", | ||
| "version": "0.0.6", | ||
| "version": "0.1.0", | ||
| "description": "React form component", | ||
@@ -25,20 +25,21 @@ "author": "mkrause", | ||
| "devDependencies": { | ||
| "@babel/core": "^7.1.2", | ||
| "@babel/cli": "^7.1.2", | ||
| "@babel/register": "^7.0.0", | ||
| "@babel/plugin-proposal-class-properties": "^7.1.0", | ||
| "@babel/plugin-proposal-object-rest-spread": "^7.0.0", | ||
| "@babel/core": "^7.10.2", | ||
| "@babel/cli": "^7.10.1", | ||
| "@babel/register": "^7.10.1", | ||
| "@babel/plugin-proposal-class-properties": "^7.10.1", | ||
| "@babel/plugin-proposal-object-rest-spread": "^7.10.1", | ||
| "babel-plugin-transform-builtin-extend": "^1.1.2", | ||
| "@babel/preset-react": "^7.0.0", | ||
| "@babel/preset-env": "^7.1.0", | ||
| "mocha": "^5.2.0", | ||
| "@babel/preset-react": "^7.10.1", | ||
| "@babel/preset-env": "^7.10.2", | ||
| "mocha": "^8.0.1", | ||
| "chai": "^4.2.0", | ||
| "react": "^16.6.0" | ||
| "react": "^16.13.1" | ||
| }, | ||
| "peerDependencies": { | ||
| "react": "^16.6.0" | ||
| "react": "^16.13.1" | ||
| }, | ||
| "dependencies": { | ||
| "message-tag": "^0.2.2" | ||
| "message-tag": "^0.5.2", | ||
| "hoist-non-react-statics": "^3.3.2" | ||
| } | ||
| } |
+38
-8
@@ -13,3 +13,9 @@ | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); | ||
| let acc; | ||
| try { | ||
| acc = accessor(buffer); | ||
| return true; | ||
| } catch (e) { | ||
| return false; | ||
| } | ||
| } else if (Array.isArray(accessor)) { | ||
@@ -56,3 +62,3 @@ if (accessor.length === 0) { | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); // Idea: use { has, get, set } object instead? | ||
| return setWithAccessor(accessor(buffer), buffer, value); | ||
| } else if (typeof accessor === 'string') { | ||
@@ -72,3 +78,9 @@ return setWithAccessor(accessor.split('.'), buffer, value); | ||
| return { ...bufferAsObject, [key]: updatedValue }; | ||
| if (Array.isArray(bufferAsObject)) { | ||
| const bufferAsArray = [...bufferAsObject]; // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, updatedValue); | ||
| return bufferAsArray; | ||
| } else { | ||
| return { ...bufferAsObject, [key]: updatedValue }; | ||
| } | ||
| } else { | ||
@@ -79,3 +91,9 @@ const prop = Object.prototype.hasOwnProperty.call(bufferAsObject, key) | ||
| return { ...bufferAsObject, [key]: setWithAccessor(path, prop, value) }; | ||
| if (Array.isArray(bufferAsObject)) { | ||
| const bufferAsArray = [...bufferAsObject]; // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, setWithAccessor(path, prop, value)); | ||
| return bufferAsArray; | ||
| } else { | ||
| return { ...bufferAsObject, [key]: setWithAccessor(path, prop, value) }; | ||
| } | ||
| } | ||
@@ -90,3 +108,3 @@ } else { | ||
| if (typeof accessor === 'function') { | ||
| throw new TypeError('TODO'); // Idea: use { has, get, set } object instead? | ||
| return updateWithAccessor(accessor(buffer), buffer, value); | ||
| } else if (typeof accessor === 'string') { | ||
@@ -108,5 +126,17 @@ return updateWithAccessor(accessor.split('.'), buffer, value); | ||
| return { ...buffer, [key]: updatedValue }; | ||
| if (Array.isArray(buffer)) { | ||
| const bufferAsArray = [...buffer]; // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, updatedValue); | ||
| return bufferAsArray; | ||
| } else { | ||
| return { ...buffer, [key]: updatedValue }; | ||
| } | ||
| } else { | ||
| return { ...buffer, [key]: updateWithAccessor(path, buffer[key], value) }; | ||
| if (Array.isArray(buffer)) { | ||
| const bufferAsArray = [...buffer]; // Copy so we can mutate | ||
| bufferAsArray.splice(key, 1, updateWithAccessor(path, buffer[key], value)); | ||
| return bufferAsArray; | ||
| } else { | ||
| return { ...buffer, [key]: updateWithAccessor(path, buffer[key], value) }; | ||
| } | ||
| } | ||
@@ -118,3 +148,3 @@ } else { | ||
| const getError = ({ meta, errors, submitted }, accessor) => { | ||
| export const getError = ({ meta, errors, submitted }, accessor) => { | ||
| const fieldMeta = hasAccessor(accessor, meta) | ||
@@ -121,0 +151,0 @@ ? selectWithAccessor(accessor, meta) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
1237
10.05%128766
-2.58%3
50%6
-33.33%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated