"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _base = _interopRequireDefault(require("@emotion/styled/base")); var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId")); var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty")); var _partial2 = _interopRequireDefault(require("lodash/partial")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes")); var _react2 = require("@emotion/react"); var _immutable = require("immutable"); var _uuid = require("uuid"); var _decapCmsWidgetObject = _interopRequireDefault(require("decap-cms-widget-object")); var _core = require("@dnd-kit/core"); var _sortable = require("@dnd-kit/sortable"); var _modifiers = require("@dnd-kit/modifiers"); var _utilities = require("@dnd-kit/utilities"); var _decapCmsUiDefault = require("decap-cms-ui-default"); var _decapCmsLibWidgets = require("decap-cms-lib-widgets"); var _typedListHelpers = require("./typedListHelpers"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _extends() { _extends = Object.assign ? Object.assign.bind() : 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 _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } const ObjectControl = _decapCmsWidgetObject.default.controlComponent; const ListItem = /*#__PURE__*/(0, _base.default)("div", { target: "e11zrb3c2", label: "ListItem" })(process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQ2lCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgdmFsaWRhdGUsXG4gICAgICBwcm9wczogeyB2YWxpZGF0aW9uS2V5OiBrZXkgfSxcbiAgICB9ID0gcmVmO1xuICAgIHRoaXMudmFsaWRhdGlvbnMucHVzaCh7IGtleSwgdmFsaWRhdGUgfSk7XG4gIH07XG5cbiAgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMudmFsaWRhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlT2JqZWN0KHRoaXMucHJvcHMuZm9ySUQsIHRoaXMudmFsaWRhdGVTaXplKCkpO1xuICB9O1xuXG4gIHZhbGlkYXRlU2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaW4gPSBmaWVsZC5nZXQoJ21pbicpO1xuICAgIGNvbnN0IG1heCA9IGZpZWxkLmdldCgnbWF4Jyk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBmaWVsZC5nZXQoJ3JlcXVpcmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAoIXJlcXVpcmVkICYmICF2YWx1ZT8uc2l6ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGlvbnMudmFsaWRhdGVNaW5NYXgoXG4gICAgICB0LFxuICAgICAgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3IgPyBbZXJyb3JdIDogW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhlIGBvbkNoYW5nZU9iamVjdGAgZnVuY3Rpb24gaXMgZnJvemVuIGJ5IGEgY2hpbGQgd2lkZ2V0IGltcGxlbWVudGF0aW9uLFxuICAgKiBlLmcuIHdoZW4gZGVib3VuY2VkLCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgb2JqZWN0IHZhbHVlIGluc3RlYWQgb2YgdXNpbmdcbiAgICogYHRoaXMucHJvcHMudmFsdWVgIGRpcmVjdGx5LlxuICAgKi9cbiAgZ2V0T2JqZWN0VmFsdWUgPSBpZHggPT4gdGhpcy5wcm9wcy52YWx1ZS5nZXQoaWR4KSB8fCBNYXAoKTtcblxuICBoYW5kbGVDaGFuZ2VGb3IoaW5kZXgpIHtcbiAgICByZXR1cm4gKGYsIG5ld1ZhbHVlLCBuZXdNZXRhZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZmllbGQuZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBsaXN0RmllbGRPYmplY3RXaWRnZXQgPSBmaWVsZC5nZXRJbihbJ2ZpZWxkJywgJ3dpZGdldCddKSA9PT0gJ29iamVjdCc7XG4gICAgICBjb25zdCB3aXRoTmFtZUtleSA9XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IHZhbHVlVHlwZXMuU0lOR0xFIHx8XG4gICAgICAgICh0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRSAmJiBsaXN0RmllbGRPYmplY3RXaWRnZXQpO1xuICAgICAgY29uc3QgbmV3T2JqZWN0VmFsdWUgPSB3aXRoTmFtZUtleVxuICAgICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaW5kZXgpLnNldChmLmdldCgnbmFtZScpLCBuZXdWYWx1ZSlcbiAgICAgICAgOiBuZXdWYWx1ZTtcbiAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0ge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBPYmplY3QuYXNzaWduKG1ldGFkYXRhID8gbWV0YWRhdGEudG9KUygpIDoge30sIG5ld01ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBvbkNoYW5nZSh2YWx1ZS5zZXQoaW5kZXgsIG5ld09iamVjdFZhbHVlKSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIH07XG4gIH1cblxuICBoYW5kbGVSZW1vdmUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIGl0ZW1zQ29sbGFwc2VkLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gY2xlYXIgdmFsaWRhdGlvbnNcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gW107XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBbLi4uaXRlbXNDb2xsYXBzZWRdLFxuICAgICAga2V5czogQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSAtIDEgfSwgKCkgPT4gdXVpZCgpKSxcbiAgICB9KTtcblxuICAgIG9uQ2hhbmdlKHZhbHVlLnJlbW92ZShpbmRleCksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBSZXNldCBpdGVtIHRvIGVuc3VyZSB1cGRhdGVkIHN0YXRlXG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBrZXlzLm1hcCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKGtleUluZGV4ID09PSBvbGRJbmRleCB8fCBrZXlJbmRleCA9PT0gbmV3SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuXG4gICAgLy9jbGVhciBlcnJvciBmaWVsZHMgYW5kIHJlbW92ZSBvbGQgdmFsaWRhdGlvbnNcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */"); const StyledListItemTopBar = /*#__PURE__*/(0, _base.default)(_decapCmsUiDefault.ListItemTopBar, { target: "e11zrb3c1", label: "StyledListItemTopBar" })("background-color:", _decapCmsUiDefault.colors.textFieldBorder, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3Q21EIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgdmFsaWRhdGUsXG4gICAgICBwcm9wczogeyB2YWxpZGF0aW9uS2V5OiBrZXkgfSxcbiAgICB9ID0gcmVmO1xuICAgIHRoaXMudmFsaWRhdGlvbnMucHVzaCh7IGtleSwgdmFsaWRhdGUgfSk7XG4gIH07XG5cbiAgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMudmFsaWRhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlT2JqZWN0KHRoaXMucHJvcHMuZm9ySUQsIHRoaXMudmFsaWRhdGVTaXplKCkpO1xuICB9O1xuXG4gIHZhbGlkYXRlU2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaW4gPSBmaWVsZC5nZXQoJ21pbicpO1xuICAgIGNvbnN0IG1heCA9IGZpZWxkLmdldCgnbWF4Jyk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBmaWVsZC5nZXQoJ3JlcXVpcmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAoIXJlcXVpcmVkICYmICF2YWx1ZT8uc2l6ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGlvbnMudmFsaWRhdGVNaW5NYXgoXG4gICAgICB0LFxuICAgICAgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3IgPyBbZXJyb3JdIDogW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhlIGBvbkNoYW5nZU9iamVjdGAgZnVuY3Rpb24gaXMgZnJvemVuIGJ5IGEgY2hpbGQgd2lkZ2V0IGltcGxlbWVudGF0aW9uLFxuICAgKiBlLmcuIHdoZW4gZGVib3VuY2VkLCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgb2JqZWN0IHZhbHVlIGluc3RlYWQgb2YgdXNpbmdcbiAgICogYHRoaXMucHJvcHMudmFsdWVgIGRpcmVjdGx5LlxuICAgKi9cbiAgZ2V0T2JqZWN0VmFsdWUgPSBpZHggPT4gdGhpcy5wcm9wcy52YWx1ZS5nZXQoaWR4KSB8fCBNYXAoKTtcblxuICBoYW5kbGVDaGFuZ2VGb3IoaW5kZXgpIHtcbiAgICByZXR1cm4gKGYsIG5ld1ZhbHVlLCBuZXdNZXRhZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZmllbGQuZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBsaXN0RmllbGRPYmplY3RXaWRnZXQgPSBmaWVsZC5nZXRJbihbJ2ZpZWxkJywgJ3dpZGdldCddKSA9PT0gJ29iamVjdCc7XG4gICAgICBjb25zdCB3aXRoTmFtZUtleSA9XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IHZhbHVlVHlwZXMuU0lOR0xFIHx8XG4gICAgICAgICh0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRSAmJiBsaXN0RmllbGRPYmplY3RXaWRnZXQpO1xuICAgICAgY29uc3QgbmV3T2JqZWN0VmFsdWUgPSB3aXRoTmFtZUtleVxuICAgICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaW5kZXgpLnNldChmLmdldCgnbmFtZScpLCBuZXdWYWx1ZSlcbiAgICAgICAgOiBuZXdWYWx1ZTtcbiAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0ge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBPYmplY3QuYXNzaWduKG1ldGFkYXRhID8gbWV0YWRhdGEudG9KUygpIDoge30sIG5ld01ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBvbkNoYW5nZSh2YWx1ZS5zZXQoaW5kZXgsIG5ld09iamVjdFZhbHVlKSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIH07XG4gIH1cblxuICBoYW5kbGVSZW1vdmUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIGl0ZW1zQ29sbGFwc2VkLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gY2xlYXIgdmFsaWRhdGlvbnNcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gW107XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBbLi4uaXRlbXNDb2xsYXBzZWRdLFxuICAgICAga2V5czogQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSAtIDEgfSwgKCkgPT4gdXVpZCgpKSxcbiAgICB9KTtcblxuICAgIG9uQ2hhbmdlKHZhbHVlLnJlbW92ZShpbmRleCksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBSZXNldCBpdGVtIHRvIGVuc3VyZSB1cGRhdGVkIHN0YXRlXG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBrZXlzLm1hcCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKGtleUluZGV4ID09PSBvbGRJbmRleCB8fCBrZXlJbmRleCA9PT0gbmV3SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuXG4gICAgLy9jbGVhciBlcnJvciBmaWVsZHMgYW5kIHJlbW92ZSBvbGQgdmFsaWRhdGlvbnNcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")); const NestedObjectLabel = /*#__PURE__*/(0, _base.default)("div", { target: "e11zrb3c0", label: "NestedObjectLabel" })("display:", props => props.collapsed ? 'block' : 'none', ";border-top:0;color:", props => props.error ? _decapCmsUiDefault.colors.errorText : 'inherit', ";background-color:", _decapCmsUiDefault.colors.textFieldBorder, ";padding:13px;border-radius:0 0 ", _decapCmsUiDefault.lengths.borderRadius, " ", _decapCmsUiDefault.lengths.borderRadius, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0Q29DIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgdmFsaWRhdGUsXG4gICAgICBwcm9wczogeyB2YWxpZGF0aW9uS2V5OiBrZXkgfSxcbiAgICB9ID0gcmVmO1xuICAgIHRoaXMudmFsaWRhdGlvbnMucHVzaCh7IGtleSwgdmFsaWRhdGUgfSk7XG4gIH07XG5cbiAgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMudmFsaWRhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlT2JqZWN0KHRoaXMucHJvcHMuZm9ySUQsIHRoaXMudmFsaWRhdGVTaXplKCkpO1xuICB9O1xuXG4gIHZhbGlkYXRlU2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaW4gPSBmaWVsZC5nZXQoJ21pbicpO1xuICAgIGNvbnN0IG1heCA9IGZpZWxkLmdldCgnbWF4Jyk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBmaWVsZC5nZXQoJ3JlcXVpcmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAoIXJlcXVpcmVkICYmICF2YWx1ZT8uc2l6ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGlvbnMudmFsaWRhdGVNaW5NYXgoXG4gICAgICB0LFxuICAgICAgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3IgPyBbZXJyb3JdIDogW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhlIGBvbkNoYW5nZU9iamVjdGAgZnVuY3Rpb24gaXMgZnJvemVuIGJ5IGEgY2hpbGQgd2lkZ2V0IGltcGxlbWVudGF0aW9uLFxuICAgKiBlLmcuIHdoZW4gZGVib3VuY2VkLCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgb2JqZWN0IHZhbHVlIGluc3RlYWQgb2YgdXNpbmdcbiAgICogYHRoaXMucHJvcHMudmFsdWVgIGRpcmVjdGx5LlxuICAgKi9cbiAgZ2V0T2JqZWN0VmFsdWUgPSBpZHggPT4gdGhpcy5wcm9wcy52YWx1ZS5nZXQoaWR4KSB8fCBNYXAoKTtcblxuICBoYW5kbGVDaGFuZ2VGb3IoaW5kZXgpIHtcbiAgICByZXR1cm4gKGYsIG5ld1ZhbHVlLCBuZXdNZXRhZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZmllbGQuZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBsaXN0RmllbGRPYmplY3RXaWRnZXQgPSBmaWVsZC5nZXRJbihbJ2ZpZWxkJywgJ3dpZGdldCddKSA9PT0gJ29iamVjdCc7XG4gICAgICBjb25zdCB3aXRoTmFtZUtleSA9XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IHZhbHVlVHlwZXMuU0lOR0xFIHx8XG4gICAgICAgICh0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRSAmJiBsaXN0RmllbGRPYmplY3RXaWRnZXQpO1xuICAgICAgY29uc3QgbmV3T2JqZWN0VmFsdWUgPSB3aXRoTmFtZUtleVxuICAgICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaW5kZXgpLnNldChmLmdldCgnbmFtZScpLCBuZXdWYWx1ZSlcbiAgICAgICAgOiBuZXdWYWx1ZTtcbiAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0ge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBPYmplY3QuYXNzaWduKG1ldGFkYXRhID8gbWV0YWRhdGEudG9KUygpIDoge30sIG5ld01ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBvbkNoYW5nZSh2YWx1ZS5zZXQoaW5kZXgsIG5ld09iamVjdFZhbHVlKSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIH07XG4gIH1cblxuICBoYW5kbGVSZW1vdmUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIGl0ZW1zQ29sbGFwc2VkLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gY2xlYXIgdmFsaWRhdGlvbnNcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gW107XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBbLi4uaXRlbXNDb2xsYXBzZWRdLFxuICAgICAga2V5czogQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSAtIDEgfSwgKCkgPT4gdXVpZCgpKSxcbiAgICB9KTtcblxuICAgIG9uQ2hhbmdlKHZhbHVlLnJlbW92ZShpbmRleCksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBSZXNldCBpdGVtIHRvIGVuc3VyZSB1cGRhdGVkIHN0YXRlXG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBrZXlzLm1hcCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKGtleUluZGV4ID09PSBvbGRJbmRleCB8fCBrZXlJbmRleCA9PT0gbmV3SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuXG4gICAgLy9jbGVhciBlcnJvciBmaWVsZHMgYW5kIHJlbW92ZSBvbGQgdmFsaWRhdGlvbnNcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")); const styleStrings = { collapsedObjectControl: ` display: none; `, objectWidgetTopBarContainer: ` padding: ${_decapCmsUiDefault.lengths.objectWidgetTopBarContainerPadding}; ` }; const styles = { listControlItem: process.env.NODE_ENV === "production" ? { name: "1pb8r5b-listControlItem", styles: "margin-top:18px;&:first-of-type{margin-top:26px;};label:listControlItem;" } : { name: "1pb8r5b-listControlItem", styles: "margin-top:18px;&:first-of-type{margin-top:26px;};label:listControlItem;", map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErRHNCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgdmFsaWRhdGUsXG4gICAgICBwcm9wczogeyB2YWxpZGF0aW9uS2V5OiBrZXkgfSxcbiAgICB9ID0gcmVmO1xuICAgIHRoaXMudmFsaWRhdGlvbnMucHVzaCh7IGtleSwgdmFsaWRhdGUgfSk7XG4gIH07XG5cbiAgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMudmFsaWRhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlT2JqZWN0KHRoaXMucHJvcHMuZm9ySUQsIHRoaXMudmFsaWRhdGVTaXplKCkpO1xuICB9O1xuXG4gIHZhbGlkYXRlU2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaW4gPSBmaWVsZC5nZXQoJ21pbicpO1xuICAgIGNvbnN0IG1heCA9IGZpZWxkLmdldCgnbWF4Jyk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBmaWVsZC5nZXQoJ3JlcXVpcmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAoIXJlcXVpcmVkICYmICF2YWx1ZT8uc2l6ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGlvbnMudmFsaWRhdGVNaW5NYXgoXG4gICAgICB0LFxuICAgICAgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3IgPyBbZXJyb3JdIDogW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhlIGBvbkNoYW5nZU9iamVjdGAgZnVuY3Rpb24gaXMgZnJvemVuIGJ5IGEgY2hpbGQgd2lkZ2V0IGltcGxlbWVudGF0aW9uLFxuICAgKiBlLmcuIHdoZW4gZGVib3VuY2VkLCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgb2JqZWN0IHZhbHVlIGluc3RlYWQgb2YgdXNpbmdcbiAgICogYHRoaXMucHJvcHMudmFsdWVgIGRpcmVjdGx5LlxuICAgKi9cbiAgZ2V0T2JqZWN0VmFsdWUgPSBpZHggPT4gdGhpcy5wcm9wcy52YWx1ZS5nZXQoaWR4KSB8fCBNYXAoKTtcblxuICBoYW5kbGVDaGFuZ2VGb3IoaW5kZXgpIHtcbiAgICByZXR1cm4gKGYsIG5ld1ZhbHVlLCBuZXdNZXRhZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZmllbGQuZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBsaXN0RmllbGRPYmplY3RXaWRnZXQgPSBmaWVsZC5nZXRJbihbJ2ZpZWxkJywgJ3dpZGdldCddKSA9PT0gJ29iamVjdCc7XG4gICAgICBjb25zdCB3aXRoTmFtZUtleSA9XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IHZhbHVlVHlwZXMuU0lOR0xFIHx8XG4gICAgICAgICh0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRSAmJiBsaXN0RmllbGRPYmplY3RXaWRnZXQpO1xuICAgICAgY29uc3QgbmV3T2JqZWN0VmFsdWUgPSB3aXRoTmFtZUtleVxuICAgICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaW5kZXgpLnNldChmLmdldCgnbmFtZScpLCBuZXdWYWx1ZSlcbiAgICAgICAgOiBuZXdWYWx1ZTtcbiAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0ge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBPYmplY3QuYXNzaWduKG1ldGFkYXRhID8gbWV0YWRhdGEudG9KUygpIDoge30sIG5ld01ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBvbkNoYW5nZSh2YWx1ZS5zZXQoaW5kZXgsIG5ld09iamVjdFZhbHVlKSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIH07XG4gIH1cblxuICBoYW5kbGVSZW1vdmUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIGl0ZW1zQ29sbGFwc2VkLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gY2xlYXIgdmFsaWRhdGlvbnNcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gW107XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBbLi4uaXRlbXNDb2xsYXBzZWRdLFxuICAgICAga2V5czogQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSAtIDEgfSwgKCkgPT4gdXVpZCgpKSxcbiAgICB9KTtcblxuICAgIG9uQ2hhbmdlKHZhbHVlLnJlbW92ZShpbmRleCksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBSZXNldCBpdGVtIHRvIGVuc3VyZSB1cGRhdGVkIHN0YXRlXG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBrZXlzLm1hcCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKGtleUluZGV4ID09PSBvbGRJbmRleCB8fCBrZXlJbmRleCA9PT0gbmV3SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuXG4gICAgLy9jbGVhciBlcnJvciBmaWVsZHMgYW5kIHJlbW92ZSBvbGQgdmFsaWRhdGlvbnNcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ }, listControlItemCollapsed: process.env.NODE_ENV === "production" ? { name: "1gjco9g-listControlItemCollapsed", styles: "padding-bottom:0;label:listControlItemCollapsed;" } : { name: "1gjco9g-listControlItemCollapsed", styles: "padding-bottom:0;label:listControlItemCollapsed;", map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzRStCIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgdmFsaWRhdGUsXG4gICAgICBwcm9wczogeyB2YWxpZGF0aW9uS2V5OiBrZXkgfSxcbiAgICB9ID0gcmVmO1xuICAgIHRoaXMudmFsaWRhdGlvbnMucHVzaCh7IGtleSwgdmFsaWRhdGUgfSk7XG4gIH07XG5cbiAgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMudmFsaWRhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlT2JqZWN0KHRoaXMucHJvcHMuZm9ySUQsIHRoaXMudmFsaWRhdGVTaXplKCkpO1xuICB9O1xuXG4gIHZhbGlkYXRlU2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaW4gPSBmaWVsZC5nZXQoJ21pbicpO1xuICAgIGNvbnN0IG1heCA9IGZpZWxkLmdldCgnbWF4Jyk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBmaWVsZC5nZXQoJ3JlcXVpcmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAoIXJlcXVpcmVkICYmICF2YWx1ZT8uc2l6ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGlvbnMudmFsaWRhdGVNaW5NYXgoXG4gICAgICB0LFxuICAgICAgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3IgPyBbZXJyb3JdIDogW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhlIGBvbkNoYW5nZU9iamVjdGAgZnVuY3Rpb24gaXMgZnJvemVuIGJ5IGEgY2hpbGQgd2lkZ2V0IGltcGxlbWVudGF0aW9uLFxuICAgKiBlLmcuIHdoZW4gZGVib3VuY2VkLCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgb2JqZWN0IHZhbHVlIGluc3RlYWQgb2YgdXNpbmdcbiAgICogYHRoaXMucHJvcHMudmFsdWVgIGRpcmVjdGx5LlxuICAgKi9cbiAgZ2V0T2JqZWN0VmFsdWUgPSBpZHggPT4gdGhpcy5wcm9wcy52YWx1ZS5nZXQoaWR4KSB8fCBNYXAoKTtcblxuICBoYW5kbGVDaGFuZ2VGb3IoaW5kZXgpIHtcbiAgICByZXR1cm4gKGYsIG5ld1ZhbHVlLCBuZXdNZXRhZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZmllbGQuZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBsaXN0RmllbGRPYmplY3RXaWRnZXQgPSBmaWVsZC5nZXRJbihbJ2ZpZWxkJywgJ3dpZGdldCddKSA9PT0gJ29iamVjdCc7XG4gICAgICBjb25zdCB3aXRoTmFtZUtleSA9XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IHZhbHVlVHlwZXMuU0lOR0xFIHx8XG4gICAgICAgICh0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRSAmJiBsaXN0RmllbGRPYmplY3RXaWRnZXQpO1xuICAgICAgY29uc3QgbmV3T2JqZWN0VmFsdWUgPSB3aXRoTmFtZUtleVxuICAgICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaW5kZXgpLnNldChmLmdldCgnbmFtZScpLCBuZXdWYWx1ZSlcbiAgICAgICAgOiBuZXdWYWx1ZTtcbiAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0ge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBPYmplY3QuYXNzaWduKG1ldGFkYXRhID8gbWV0YWRhdGEudG9KUygpIDoge30sIG5ld01ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBvbkNoYW5nZSh2YWx1ZS5zZXQoaW5kZXgsIG5ld09iamVjdFZhbHVlKSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIH07XG4gIH1cblxuICBoYW5kbGVSZW1vdmUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIGl0ZW1zQ29sbGFwc2VkLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gY2xlYXIgdmFsaWRhdGlvbnNcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gW107XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBbLi4uaXRlbXNDb2xsYXBzZWRdLFxuICAgICAga2V5czogQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSAtIDEgfSwgKCkgPT4gdXVpZCgpKSxcbiAgICB9KTtcblxuICAgIG9uQ2hhbmdlKHZhbHVlLnJlbW92ZShpbmRleCksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBSZXNldCBpdGVtIHRvIGVuc3VyZSB1cGRhdGVkIHN0YXRlXG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBrZXlzLm1hcCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKGtleUluZGV4ID09PSBvbGRJbmRleCB8fCBrZXlJbmRleCA9PT0gbmV3SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuXG4gICAgLy9jbGVhciBlcnJvciBmaWVsZHMgYW5kIHJlbW92ZSBvbGQgdmFsaWRhdGlvbnNcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */", toString: _EMOTION_STRINGIFIED_CSS_ERROR__ } }; function SortableList({ items, children, onSortEnd, keys }) { const activationConstraint = { distance: 4 }; const sensors = (0, _core.useSensors)((0, _core.useSensor)(_core.MouseSensor, { activationConstraint }), (0, _core.useSensor)(_core.TouchSensor, { activationConstraint })); function handleSortEnd({ active, over }) { onSortEnd({ oldIndex: keys.indexOf(active.id), newIndex: keys.indexOf(over.id) }); } return (0, _react2.jsx)("div", null, (0, _react2.jsx)(_core.DndContext, { modifiers: [_modifiers.restrictToParentElement], collisionDetection: _core.closestCenter, sensors: sensors, onDragEnd: handleSortEnd }, (0, _react2.jsx)(_sortable.SortableContext, { items: items }, children))); } function SortableListItem(props) { const { setNodeRef, transform, transition } = (0, _sortable.useSortable)({ id: props.id }); const style = { transform: _utilities.CSS.Transform.toString(transform), transition }; const { collapsed } = props; return (0, _react2.jsx)(ListItem, { sortable: true, ref: setNodeRef, style: style, css: [styles.listControlItem, collapsed && styles.listControlItemCollapsed, ";label:SortableListItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3SE0iLCJmaWxlIjoiLi4vLi4vc3JjL0xpc3RDb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgSW1tdXRhYmxlUHJvcFR5cGVzIGZyb20gJ3JlYWN0LWltbXV0YWJsZS1wcm9wdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY3NzLCBDbGFzc05hbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgTGlzdCwgTWFwLCBmcm9tSlMgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgcGFydGlhbCwgaXNFbXB0eSwgdW5pcXVlSWQgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IERlY2FwQ21zV2lkZ2V0T2JqZWN0IGZyb20gJ2RlY2FwLWNtcy13aWRnZXQtb2JqZWN0JztcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBUb3VjaFNlbnNvcixcbiAgY2xvc2VzdENlbnRlcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7IFNvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGUgfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgeyByZXN0cmljdFRvUGFyZW50RWxlbWVudCB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHtcbiAgTGlzdEl0ZW1Ub3BCYXIsXG4gIE9iamVjdFdpZGdldFRvcEJhcixcbiAgY29sb3JzLFxuICBsZW5ndGhzLFxuICBGaWVsZExhYmVsLFxufSBmcm9tICdkZWNhcC1jbXMtdWktZGVmYXVsdCc7XG5pbXBvcnQgeyBzdHJpbmdUZW1wbGF0ZSwgdmFsaWRhdGlvbnMgfSBmcm9tICdkZWNhcC1jbXMtbGliLXdpZGdldHMnO1xuXG5pbXBvcnQge1xuICBUWVBFU19LRVksXG4gIGdldFR5cGVkRmllbGRGb3JWYWx1ZSxcbiAgcmVzb2x2ZUZpZWxkS2V5VHlwZSxcbiAgZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlLFxufSBmcm9tICcuL3R5cGVkTGlzdEhlbHBlcnMnO1xuXG5jb25zdCBPYmplY3RDb250cm9sID0gRGVjYXBDbXNXaWRnZXRPYmplY3QuY29udHJvbENvbXBvbmVudDtcblxuY29uc3QgTGlzdEl0ZW0gPSBzdHlsZWQuZGl2KCk7XG5cbmNvbnN0IFN0eWxlZExpc3RJdGVtVG9wQmFyID0gc3R5bGVkKExpc3RJdGVtVG9wQmFyKWBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcnMudGV4dEZpZWxkQm9yZGVyfTtcbmA7XG5cbmNvbnN0IE5lc3RlZE9iamVjdExhYmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMuY29sbGFwc2VkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBib3JkZXItdG9wOiAwO1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuZXJyb3IgPyBjb2xvcnMuZXJyb3JUZXh0IDogJ2luaGVyaXQnKX07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG4gIHBhZGRpbmc6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfSAke2xlbmd0aHMuYm9yZGVyUmFkaXVzfTtcbmA7XG5cbmNvbnN0IHN0eWxlU3RyaW5ncyA9IHtcbiAgY29sbGFwc2VkT2JqZWN0Q29udHJvbDogYFxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIGAsXG4gIG9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcjogYFxuICAgIHBhZGRpbmc6ICR7bGVuZ3Rocy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJQYWRkaW5nfTtcbiAgYCxcbn07XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgbGlzdENvbnRyb2xJdGVtOiBjc3NgXG4gICAgbWFyZ2luLXRvcDogMThweDtcblxuICAgICY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICBtYXJnaW4tdG9wOiAyNnB4O1xuICAgIH1cbiAgYCxcbiAgbGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkOiBjc3NgXG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIGAsXG59O1xuXG5mdW5jdGlvbiBTb3J0YWJsZUxpc3QoeyBpdGVtcywgY2hpbGRyZW4sIG9uU29ydEVuZCwga2V5cyB9KSB7XG4gIGNvbnN0IGFjdGl2YXRpb25Db25zdHJhaW50ID0geyBkaXN0YW5jZTogNCB9O1xuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhcbiAgICB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHsgYWN0aXZhdGlvbkNvbnN0cmFpbnQgfSksXG4gICAgdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZVNvcnRFbmQoeyBhY3RpdmUsIG92ZXIgfSkge1xuICAgIG9uU29ydEVuZCh7XG4gICAgICBvbGRJbmRleDoga2V5cy5pbmRleE9mKGFjdGl2ZS5pZCksXG4gICAgICBuZXdJbmRleDoga2V5cy5pbmRleE9mKG92ZXIuaWQpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgbW9kaWZpZXJzPXtbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e2Nsb3Nlc3RDZW50ZXJ9XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlU29ydEVuZH1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17aXRlbXN9PntjaGlsZHJlbn08L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgIDwvRG5kQ29udGV4dD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU29ydGFibGVMaXN0SXRlbShwcm9wcykge1xuICBjb25zdCB7IHNldE5vZGVSZWYsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgfSk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBDU1MuVHJhbnNmb3JtLnRvU3RyaW5nKHRyYW5zZm9ybSksXG4gICAgdHJhbnNpdGlvbixcbiAgfTtcblxuICBjb25zdCB7IGNvbGxhcHNlZCB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8TGlzdEl0ZW1cbiAgICAgIHNvcnRhYmxlXG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTGlzdEl0ZW0+XG4gICk7XG59XG5cbmZ1bmN0aW9uIERyYWdIYW5kbGUoeyBjaGlsZHJlbiwgaWQgfSkge1xuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycyB9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkLFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgey4uLmF0dHJpYnV0ZXN9IHsuLi5saXN0ZW5lcnN9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCB2YWx1ZVR5cGVzID0ge1xuICBTSU5HTEU6ICdTSU5HTEUnLFxuICBNVUxUSVBMRTogJ01VTFRJUExFJyxcbiAgTUlYRUQ6ICdNSVhFRCcsXG59O1xuXG5mdW5jdGlvbiBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCBsYWJlbCwgaXRlbSkge1xuICBjb25zdCBkYXRhID0gc3RyaW5nVGVtcGxhdGUuYWRkRmlsZVRlbXBsYXRlRmllbGRzKFxuICAgIGVudHJ5LmdldCgncGF0aCcpLFxuICAgIGl0ZW0uc2V0KCdmaWVsZHMubGFiZWwnLCBsYWJlbCksXG4gICk7XG4gIHJldHVybiBzdHJpbmdUZW1wbGF0ZS5jb21waWxlU3RyaW5nVGVtcGxhdGUoc3VtbWFyeSwgbnVsbCwgJycsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pIHtcbiAgaWYgKCFNYXAuaXNNYXAoaXRlbSkpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgJyR7ZmllbGQuZ2V0KCduYW1lJyl9JyBmaWVsZCBpdGVtIHZhbHVlIHZhbHVlIHNob3VsZCBiZSBhIG1hcCBidXQgaXMgYSAnJHt0eXBlb2YgaXRlbX0nYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gTGFiZWxDb21wb25lbnQoeyBmaWVsZCwgaXNBY3RpdmUsIGhhc0Vycm9ycywgdW5pcXVlRmllbGRJZCwgaXNGaWVsZE9wdGlvbmFsLCB0IH0pIHtcbiAgY29uc3QgbGFiZWwgPSBgJHtmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpfWA7XG4gIHJldHVybiAoXG4gICAgPEZpZWxkTGFiZWwgaXNBY3RpdmU9e2lzQWN0aXZlfSBoYXNFcnJvcnM9e2hhc0Vycm9yc30gaHRtbEZvcj17dW5pcXVlRmllbGRJZH0+XG4gICAgICB7bGFiZWx9IHtgJHtpc0ZpZWxkT3B0aW9uYWwgPyBgICgke3QoJ2VkaXRvci5lZGl0b3JDb250cm9sLmZpZWxkLm9wdGlvbmFsJyl9KWAgOiAnJ31gfVxuICAgIDwvRmllbGRMYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlzdENvbnRyb2wgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICB2YWxpZGF0aW9ucyA9IFtdO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgbWV0YWRhdGE6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2VPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25WYWxpZGF0ZU9iamVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWxpZGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogSW1tdXRhYmxlUHJvcFR5cGVzLmxpc3QsXG4gICAgZmllbGQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZm9ySUQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29udHJvbFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbWVkaWFQYXRoczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGdldEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uT3Blbk1lZGlhTGlicmFyeTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZEFzc2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlSW5zZXJ0ZWRNZWRpYTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWVXcmFwcGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2V0QWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0SW5hY3RpdmVTdHlsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBlZGl0b3JDb250cm9sOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgICByZXNvbHZlV2lkZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsZWFyRmllbGRFcnJvcnM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZmllbGRzRXJyb3JzOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgZW50cnk6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiBMaXN0KCksXG4gICAgcGFyZW50SWRzOiBbXSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlzdENvbGxhcHNlZCA9IGZpZWxkLmdldCgnY29sbGFwc2VkJywgdHJ1ZSk7XG4gICAgY29uc3QgaXRlbXNDb2xsYXBzZWQgPSAodmFsdWUgJiYgQXJyYXkodmFsdWUuc2l6ZSkuZmlsbChsaXN0Q29sbGFwc2VkKSkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9ICh2YWx1ZSAmJiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIH0sICgpID0+IHV1aWQoKSkpIHx8IFtdO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxpc3RDb2xsYXBzZWQsXG4gICAgICBpdGVtc0NvbGxhcHNlZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcodmFsdWUpLFxuICAgICAga2V5cyxcbiAgICB9O1xuICB9XG5cbiAgdmFsdWVUb1N0cmluZyA9IHZhbHVlID0+IHtcbiAgICBsZXQgc3RyaW5nVmFsdWU7XG4gICAgaWYgKExpc3QuaXNMaXN0KHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc3RyaW5nVmFsdWUgPSB2YWx1ZS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEV4cGVjdGVkIExpc3QgdmFsdWUgdG8gYmUgYW4gYXJyYXkgYnV0IHJlY2VpdmVkICcke3ZhbHVlfScgd2l0aCB0eXBlIG9mICcke3R5cGVvZiB2YWx1ZX0nLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIHRvIHRoZSAnJHt0aGlzLnByb3BzLmZpZWxkLmdldChcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICl9JyBmaWVsZGAsXG4gICAgICApO1xuICAgICAgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVmFsdWUucmVwbGFjZSgvLChbXlxcc118JCkvZywgJywgJDEnKTtcbiAgfTtcblxuICBnZXRWYWx1ZVR5cGUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGQuZ2V0KCdmaWVsZHMnKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTVVMVElQTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoJ2ZpZWxkJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLlNJTkdMRTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmdldChUWVBFU19LRVkpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHVuaXF1ZUZpZWxkSWQgPSB1bmlxdWVJZChgJHt0aGlzLnByb3BzLmZpZWxkLmdldCgnbmFtZScpfS1maWVsZC1gKTtcbiAgLyoqXG4gICAqIEFsd2F5cyB1cGRhdGUgc28gdGhhdCBlYWNoIG5lc3RlZCB3aWRnZXQgaGFzIHRoZSBvcHRpb24gdG8gdXBkYXRlLiBUaGlzIGlzXG4gICAqIHJlcXVpcmVkIGJlY2F1c2UgQ29udHJvbEhPQyBwcm92aWRlcyBhIGRlZmF1bHQgYHNob3VsZENvbXBvbmVudFVwZGF0ZWBcbiAgICogd2hpY2ggb25seSB1cGRhdGVzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLCBidXQgZXZlcnkgd2lkZ2V0IG11c3QgYmUgYWxsb3dlZFxuICAgKiB0byBvdmVycmlkZSB0aGlzLlxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlQ2hhbmdlID0gZSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBlLnRhcmdldC52YWx1ZS50cmltKCk7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5zcGxpdCgnLCcpIDogW107XG4gICAgaWYgKG5ld1ZhbHVlLm1hdGNoKC8sJC8pICYmIG9sZFZhbHVlLm1hdGNoKC8sICQvKSkge1xuICAgICAgbGlzdFZhbHVlLnBvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiBwYXJzZWRWYWx1ZSB9KTtcbiAgICBvbkNoYW5nZShMaXN0KGxpc3RWYWx1ZS5tYXAodmFsID0+IHZhbC50cmltKCkpKSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5zZXRBY3RpdmVTdHlsZSgpO1xuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSBlID0+IHtcbiAgICBjb25zdCBsaXN0VmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoZWwgPT4gZWwudHJpbSgpKVxuICAgICAgLmZpbHRlcihlbCA9PiBlbCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnZhbHVlVG9TdHJpbmcobGlzdFZhbHVlKSB9KTtcbiAgICB0aGlzLnByb3BzLnNldEluYWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVBZGQgPSBlID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9XG4gICAgICB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRVxuICAgICAgICA/IHRoaXMuc2luZ2xlRGVmYXVsdCgpXG4gICAgICAgIDogZnJvbUpTKHRoaXMubXVsdGlwbGVEZWZhdWx0KGZpZWxkLmdldCgnZmllbGRzJykpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIHNpbmdsZURlZmF1bHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmllbGQuZ2V0SW4oWydmaWVsZCcsICdkZWZhdWx0J10sIG51bGwpO1xuICB9O1xuXG4gIG11bHRpcGxlRGVmYXVsdCA9IGZpZWxkcyA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMpO1xuICB9O1xuXG4gIGhhbmRsZUFkZFR5cGUgPSAodHlwZSwgdHlwZUtleSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gZnJvbUpTKHRoaXMubWl4ZWREZWZhdWx0KHR5cGVLZXksIHR5cGUpKTtcbiAgICB0aGlzLmFkZEl0ZW0ocGFyc2VkVmFsdWUpO1xuICB9O1xuXG4gIG1peGVkRGVmYXVsdCA9ICh0eXBlS2V5LCB0eXBlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy5wcm9wcy5maWVsZC5nZXQoVFlQRVNfS0VZKS5maW5kKGYgPT4gZi5nZXQoJ25hbWUnKSA9PT0gdHlwZSk7XG4gICAgY29uc3QgZmllbGRzID0gc2VsZWN0ZWRUeXBlLmdldCgnZmllbGRzJykgfHwgW3NlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkJyldO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzRGVmYXVsdChmaWVsZHMsIHsgW3R5cGVLZXldOiB0eXBlIH0pO1xuICB9O1xuXG4gIGdldEZpZWxkc0RlZmF1bHQgPSAoZmllbGRzLCBpbml0aWFsVmFsdWUgPSB7fSkgPT4ge1xuICAgIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHN1YmZpZWxkcyA9IGl0ZW0uZ2V0KCdmaWVsZCcpIHx8IGl0ZW0uZ2V0KCdmaWVsZHMnKTtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGl0ZW0uZ2V0KCd3aWRnZXQnKSA9PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLmdldCgnbmFtZScpO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gaXRlbS5nZXQoJ2RlZmF1bHQnLCBudWxsKTtcblxuICAgICAgaWYgKExpc3QuaXNMaXN0KHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChzdWJmaWVsZHMpO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWFwLmlzTWFwKHN1YmZpZWxkcykgJiYgb2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YkRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRzRGVmYXVsdChbc3ViZmllbGRzXSk7XG4gICAgICAgICFpc0VtcHR5KHN1YkRlZmF1bHRWYWx1ZSkgJiYgKGFjY1tuYW1lXSA9IHN1YkRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgYWNjW25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIGluaXRpYWxWYWx1ZSk7XG4gIH07XG5cbiAgYWRkSXRlbSA9IHBhcnNlZFZhbHVlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSwgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYWRkVG9Ub3AgPSBmaWVsZC5nZXQoJ2FkZF90b190b3AnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gdXVpZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IGFkZFRvVG9wXG4gICAgICAgID8gW2ZhbHNlLCAuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkXVxuICAgICAgICA6IFsuLi50aGlzLnN0YXRlLml0ZW1zQ29sbGFwc2VkLCBmYWxzZV0sXG4gICAgICBrZXlzOiBhZGRUb1RvcCA/IFtpdGVtS2V5LCAuLi50aGlzLnN0YXRlLmtleXNdIDogWy4uLnRoaXMuc3RhdGUua2V5cywgaXRlbUtleV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsaXN0VmFsdWUgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgaWYgKGFkZFRvVG9wKSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUudW5zaGlmdChwYXJzZWRWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShsaXN0VmFsdWUucHVzaChwYXJzZWRWYWx1ZSkpO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzQ29udHJvbFJlZiA9IHJlZiA9PiB7XG4gICAgaWYgKCFyZWYpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICB2YWxpZGF0ZSxcbiAgICAgIHByb3BzOiB7IHZhbGlkYXRpb25LZXk6IGtleSB9LFxuICAgIH0gPSByZWY7XG4gICAgdGhpcy52YWxpZGF0aW9ucy5wdXNoKHsga2V5LCB2YWxpZGF0ZSB9KTtcbiAgfTtcblxuICB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5nZXRWYWx1ZVR5cGUoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLnZhbGlkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy52YWxpZGF0ZSgpO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uVmFsaWRhdGVPYmplY3QodGhpcy5wcm9wcy5mb3JJRCwgdGhpcy52YWxpZGF0ZVNpemUoKSk7XG4gIH07XG5cbiAgdmFsaWRhdGVTaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1pbiA9IGZpZWxkLmdldCgnbWluJyk7XG4gICAgY29uc3QgbWF4ID0gZmllbGQuZ2V0KCdtYXgnKTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGZpZWxkLmdldCgncmVxdWlyZWQnLCB0cnVlKTtcblxuICAgIGlmICghcmVxdWlyZWQgJiYgIXZhbHVlPy5zaXplKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0aW9ucy52YWxpZGF0ZU1pbk1heChcbiAgICAgIHQsXG4gICAgICBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgKTtcblxuICAgIHJldHVybiBlcnJvciA/IFtlcnJvcl0gOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgYG9uQ2hhbmdlT2JqZWN0YCBmdW5jdGlvbiBpcyBmcm96ZW4gYnkgYSBjaGlsZCB3aWRnZXQgaW1wbGVtZW50YXRpb24sXG4gICAqIGUuZy4gd2hlbiBkZWJvdW5jZWQsIGFsd2F5cyBnZXQgdGhlIGxhdGVzdCBvYmplY3QgdmFsdWUgaW5zdGVhZCBvZiB1c2luZ1xuICAgKiBgdGhpcy5wcm9wcy52YWx1ZWAgZGlyZWN0bHkuXG4gICAqL1xuICBnZXRPYmplY3RWYWx1ZSA9IGlkeCA9PiB0aGlzLnByb3BzLnZhbHVlLmdldChpZHgpIHx8IE1hcCgpO1xuXG4gIGhhbmRsZUNoYW5nZUZvcihpbmRleCkge1xuICAgIHJldHVybiAoZiwgbmV3VmFsdWUsIG5ld01ldGFkYXRhKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBtZXRhZGF0YSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGxpc3RGaWVsZE9iamVjdFdpZGdldCA9IGZpZWxkLmdldEluKFsnZmllbGQnLCAnd2lkZ2V0J10pID09PSAnb2JqZWN0JztcbiAgICAgIGNvbnN0IHdpdGhOYW1lS2V5ID1cbiAgICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSAhPT0gdmFsdWVUeXBlcy5TSU5HTEUgfHxcbiAgICAgICAgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgPT09IHZhbHVlVHlwZXMuU0lOR0xFICYmIGxpc3RGaWVsZE9iamVjdFdpZGdldCk7XG4gICAgICBjb25zdCBuZXdPYmplY3RWYWx1ZSA9IHdpdGhOYW1lS2V5XG4gICAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShpbmRleCkuc2V0KGYuZ2V0KCduYW1lJyksIG5ld1ZhbHVlKVxuICAgICAgICA6IG5ld1ZhbHVlO1xuICAgICAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIFtjb2xsZWN0aW9uTmFtZV06IE9iamVjdC5hc3NpZ24obWV0YWRhdGEgPyBtZXRhZGF0YS50b0pTKCkgOiB7fSwgbmV3TWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIG9uQ2hhbmdlKHZhbHVlLnNldChpbmRleCwgbmV3T2JqZWN0VmFsdWUpLCBwYXJzZWRNZXRhZGF0YSk7XG4gICAgfTtcbiAgfVxuXG4gIGhhbmRsZVJlbW92ZSA9IChpbmRleCwgZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGZpZWxkLmdldCgnbmFtZScpO1xuICAgIGNvbnN0IGlzU2luZ2xlRmllbGQgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRTtcblxuICAgIGNvbnN0IG1ldGFkYXRhUmVtb3ZlUGF0aCA9IGlzU2luZ2xlRmllbGQgPyB2YWx1ZS5nZXQoaW5kZXgpIDogdmFsdWUuZ2V0KGluZGV4KS52YWx1ZVNlcSgpO1xuICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID1cbiAgICAgIG1ldGFkYXRhICYmICFtZXRhZGF0YS5pc0VtcHR5KClcbiAgICAgICAgPyB7IFtjb2xsZWN0aW9uTmFtZV06IG1ldGFkYXRhLnJlbW92ZUluKG1ldGFkYXRhUmVtb3ZlUGF0aCkgfVxuICAgICAgICA6IG1ldGFkYXRhO1xuXG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBjbGVhciB2YWxpZGF0aW9uc1xuICAgIHRoaXMudmFsaWRhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IFsuLi5pdGVtc0NvbGxhcHNlZF0sXG4gICAgICBrZXlzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB2YWx1ZS5zaXplIC0gMSB9LCAoKSA9PiB1dWlkKCkpLFxuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UodmFsdWUucmVtb3ZlKGluZGV4KSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgfTtcblxuICBoYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld0l0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQubWFwKChjb2xsYXBzZWQsIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuICFjb2xsYXBzZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sbGFwc2VkO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXNDb2xsYXBzZWQ6IG5ld0l0ZW1zQ29sbGFwc2VkLFxuICAgIH0pO1xuICB9O1xuXG4gIGhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgdmFsdWUsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgbWluaW1pemVDb2xsYXBzZWRJdGVtcyA9IGZpZWxkLmdldCgnbWluaW1pemVfY29sbGFwc2VkJywgZmFsc2UpO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWRCeURlZmF1bHQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGFsbEl0ZW1zQ29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWQuZXZlcnkodmFsID0+IHZhbCA9PT0gdHJ1ZSk7XG5cbiAgICBpZiAobWluaW1pemVDb2xsYXBzZWRJdGVtcykge1xuICAgICAgbGV0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkO1xuICAgICAgLy8gT25seSBhbGxvdyBjb2xsYXBzaW5nIGFsbCBpdGVtcyBpbiB0aGlzIG1vZGUgYnV0IG5vdCBvcGVuaW5nIGFsbCBhdCBvbmNlXG4gICAgICBpZiAoIWxpc3RDb2xsYXBzZWQgfHwgIWxpc3RDb2xsYXBzZWRCeURlZmF1bHQpIHtcbiAgICAgICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkID0gQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghbGlzdENvbGxhcHNlZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlzdENvbGxhcHNlZDogIWxpc3RDb2xsYXBzZWQsIGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpdGVtc0NvbGxhcHNlZDogQXJyYXkodmFsdWUuc2l6ZSkuZmlsbCghYWxsSXRlbXNDb2xsYXBzZWQpIH0pO1xuICAgIH1cbiAgfTtcblxuICBvYmplY3RMYWJlbChpdGVtKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgZW50cnkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5nZXRWYWx1ZVR5cGUoKTtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSB2YWx1ZVR5cGVzLk1JWEVEOiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVR5cGUuZ2V0KCdsYWJlbCcsIGl0ZW1UeXBlLmdldCgnbmFtZScpKTtcbiAgICAgICAgLy8gZWFjaCB0eXBlIGNhbiBoYXZlIGl0cyBvd24gc3VtbWFyeSwgYnV0IGRlZmF1bHQgdG8gdGhlIGxpc3Qgc3VtbWFyeSBpZiBleGlzdHNcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGl0ZW1UeXBlLmdldCgnc3VtbWFyeScsIGZpZWxkLmdldCgnc3VtbWFyeScpKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5TSU5HTEU6IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlRmllbGQgPSBmaWVsZC5nZXQoJ2ZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2luZ2xlRmllbGQuZ2V0KCdsYWJlbCcsIHNpbmdsZUZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBkYXRhID0gZnJvbUpTKHsgW3NpbmdsZUZpZWxkLmdldCgnbmFtZScpXTogaXRlbSB9KTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGRhdGEpIDogbGFiZWw7XG4gICAgICAgIHJldHVybiBsYWJlbFJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NVUxUSVBMRToge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlGaWVsZHMgPSBmaWVsZC5nZXQoJ2ZpZWxkcycpO1xuICAgICAgICBjb25zdCBsYWJlbEZpZWxkID0gbXVsdGlGaWVsZHMgJiYgbXVsdGlGaWVsZHMuZmlyc3QoKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtLmdldChsYWJlbEZpZWxkLmdldCgnbmFtZScpKTtcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IGZpZWxkLmdldCgnc3VtbWFyeScpO1xuICAgICAgICBjb25zdCBsYWJlbFJldHVybiA9IHN1bW1hcnkgPyBoYW5kbGVTdW1tYXJ5KHN1bW1hcnksIGVudHJ5LCB2YWx1ZSwgaXRlbSkgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIChsYWJlbFJldHVybiB8fCBgTm8gJHtsYWJlbEZpZWxkLmdldCgnbmFtZScpfWApLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU29ydEVuZCA9ICh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgY2xlYXJGaWVsZEVycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBrZXlzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gVXBkYXRlIHZhbHVlXG4gICAgY29uc3QgaXRlbSA9IHZhbHVlLmdldChvbGRJbmRleCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5kZWxldGUob2xkSW5kZXgpLmluc2VydChuZXdJbmRleCwgaXRlbSk7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShuZXdWYWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgY29sbGFwc2luZ1xuICAgIGNvbnN0IGNvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkW29sZEluZGV4XTtcbiAgICBpdGVtc0NvbGxhcHNlZC5zcGxpY2Uob2xkSW5kZXgsIDEpO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IFsuLi5pdGVtc0NvbGxhcHNlZF07XG4gICAgdXBkYXRlZEl0ZW1zQ29sbGFwc2VkLnNwbGljZShuZXdJbmRleCwgMCwgY29sbGFwc2VkKTtcblxuICAgIC8vIFJlc2V0IGl0ZW0gdG8gZW5zdXJlIHVwZGF0ZWQgc3RhdGVcbiAgICBjb25zdCB1cGRhdGVkS2V5cyA9IGtleXMubWFwKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICBpZiAoa2V5SW5kZXggPT09IG9sZEluZGV4IHx8IGtleUluZGV4ID09PSBuZXdJbmRleCkge1xuICAgICAgICByZXR1cm4gdXVpZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGtleTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCwga2V5czogdXBkYXRlZEtleXMgfSk7XG5cbiAgICAvL2NsZWFyIGVycm9yIGZpZWxkcyBhbmQgcmVtb3ZlIG9sZCB2YWxpZGF0aW9uc1xuICAgIGNsZWFyRmllbGRFcnJvcnMoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5maWx0ZXIoaXRlbSA9PiB1cGRhdGVkS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICB9O1xuXG4gIGhhc0Vycm9yID0gaW5kZXggPT4ge1xuICAgIGNvbnN0IHsgZmllbGRzRXJyb3JzIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChmaWVsZHNFcnJvcnMgJiYgZmllbGRzRXJyb3JzLnNpemUgPiAwKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmaWVsZHNFcnJvcnMudG9KUygpKS5zb21lKGFyciA9PlxuICAgICAgICBhcnIuc29tZShlcnIgPT4gZXJyLnBhcmVudElkcyAmJiBlcnIucGFyZW50SWRzLmluY2x1ZGVzKHRoaXMuc3RhdGUua2V5c1tpbmRleF0pKSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbiAgcmVuZGVySXRlbSA9IChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICBlZGl0b3JDb250cm9sLFxuICAgICAgb25WYWxpZGF0ZU9iamVjdCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY2xlYXJGaWVsZEVycm9ycyxcbiAgICAgIGZpZWxkc0Vycm9ycyxcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICByZXNvbHZlV2lkZ2V0LFxuICAgICAgcGFyZW50SWRzLFxuICAgICAgZm9ySUQsXG4gICAgICB0LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtpbmRleF07XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgbGV0IGZpZWxkID0gdGhpcy5wcm9wcy5maWVsZDtcbiAgICBjb25zdCBoYXNFcnJvciA9IHRoaXMuaGFzRXJyb3IoaW5kZXgpO1xuICAgIGNvbnN0IGlzVmFyaWFibGVUeXBlc0xpc3QgPSB0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLk1JWEVEO1xuICAgIGlmIChpc1ZhcmlhYmxlVHlwZXNMaXN0KSB7XG4gICAgICBmaWVsZCA9IGdldFR5cGVkRmllbGRGb3JWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9uZW91c1R5cGVkSXRlbShpbmRleCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIGNvbGxhcHNlZCAmJiBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgaWQ9e2tleX1cbiAgICAgICAga2V5cz17a2V5c31cbiAgICAgID5cbiAgICAgICAge2lzVmFyaWFibGVUeXBlc0xpc3QgJiYgKFxuICAgICAgICAgIDxMYWJlbENvbXBvbmVudFxuICAgICAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICAgICAgaXNBY3RpdmU9e2ZhbHNlfVxuICAgICAgICAgICAgaGFzRXJyb3JzPXtoYXNFcnJvcn1cbiAgICAgICAgICAgIHVuaXF1ZUZpZWxkSWQ9e3RoaXMudW5pcXVlRmllbGRJZH1cbiAgICAgICAgICAgIGlzRmllbGRPcHRpb25hbD17ZmllbGQuZ2V0KCdyZXF1aXJlZCcpID09PSBmYWxzZX1cbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17cGFydGlhbCh0aGlzLmhhbmRsZUl0ZW1Db2xsYXBzZVRvZ2dsZSwgaW5kZXgpfVxuICAgICAgICAgIGRyYWdIYW5kbGU9e0RyYWdIYW5kbGV9XG4gICAgICAgICAgaWQ9e2tleX1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgc3R5bGVkLWxpc3QtaXRlbS10b3AtYmFyLSR7a2V5fWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e2NvbGxhcHNlZH0gZXJyb3I9e2hhc0Vycm9yfT5cbiAgICAgICAgICB7dGhpcy5vYmplY3RMYWJlbChpdGVtKX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgICAgPENsYXNzTmFtZXM+XG4gICAgICAgICAgeyh7IGNzcywgY3ggfSkgPT4gKFxuICAgICAgICAgICAgPE9iamVjdENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcj17Y3goY2xhc3NOYW1lV3JhcHBlciwge1xuICAgICAgICAgICAgICAgIFtjc3NgXG4gICAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5jb2xsYXBzZWRPYmplY3RDb250cm9sfTtcbiAgICAgICAgICAgICAgICBgXTogY29sbGFwc2VkLFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgdmFsdWU9e2l0ZW19XG4gICAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VPYmplY3Q9e3RoaXMuaGFuZGxlQ2hhbmdlRm9yKGluZGV4KX1cbiAgICAgICAgICAgICAgZWRpdG9yQ29udHJvbD17ZWRpdG9yQ29udHJvbH1cbiAgICAgICAgICAgICAgcmVzb2x2ZVdpZGdldD17cmVzb2x2ZVdpZGdldH1cbiAgICAgICAgICAgICAgbWV0YWRhdGE9e21ldGFkYXRhfVxuICAgICAgICAgICAgICBmb3JMaXN0XG4gICAgICAgICAgICAgIG9uVmFsaWRhdGVPYmplY3Q9e29uVmFsaWRhdGVPYmplY3R9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRFcnJvcnM9e2NsZWFyRmllbGRFcnJvcnN9XG4gICAgICAgICAgICAgIGZpZWxkc0Vycm9ycz17ZmllbGRzRXJyb3JzfVxuICAgICAgICAgICAgICByZWY9e3RoaXMucHJvY2Vzc0NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIGNvbnRyb2xSZWY9e2NvbnRyb2xSZWZ9XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25LZXk9e2tleX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgb2JqZWN0LWNvbnRyb2wtJHtrZXl9YH1cbiAgICAgICAgICAgICAgaGFzRXJyb3I9e2hhc0Vycm9yfVxuICAgICAgICAgICAgICBwYXJlbnRJZHM9e1suLi5wYXJlbnRJZHMsIGZvcklELCBrZXldfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0NsYXNzTmFtZXM+XG4gICAgICA8L1NvcnRhYmxlTGlzdEl0ZW0+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlRm9yVHlwZWRGaWVsZEFuZFZhbHVlKGZpZWxkLCBpdGVtKTtcbiAgICBjb25zdCBrZXkgPSBgaXRlbS0ke2luZGV4fWA7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTb3J0YWJsZUxpc3RJdGVtXG4gICAgICAgIGNzcz17W3N0eWxlcy5saXN0Q29udHJvbEl0ZW0sIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkTGlzdEl0ZW1Ub3BCYXJcbiAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXtudWxsfVxuICAgICAgICAgIG9uUmVtb3ZlPXtwYXJ0aWFsKHRoaXMuaGFuZGxlUmVtb3ZlLCBpbmRleCwga2V5KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgIC8+XG4gICAgICAgIDxOZXN0ZWRPYmplY3RMYWJlbCBjb2xsYXBzZWQ9e3RydWV9IGVycm9yPXt0cnVlfT5cbiAgICAgICAgICB7ZXJyb3JNZXNzYWdlfVxuICAgICAgICA8L05lc3RlZE9iamVjdExhYmVsPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJMaXN0Q29udHJvbCgpIHtcbiAgICBjb25zdCB7IHZhbHVlLCBmb3JJRCwgZmllbGQsIGNsYXNzTmFtZVdyYXBwZXIsIHQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwgbGlzdENvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpdGVtcyA9IHZhbHVlIHx8IExpc3QoKTtcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkLmdldCgnbGFiZWwnLCBmaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgY29uc3QgbGFiZWxTaW5ndWxhciA9IGZpZWxkLmdldCgnbGFiZWxfc2luZ3VsYXInKSB8fCBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxpc3RMYWJlbCA9IGl0ZW1zLnNpemUgPT09IDEgPyBsYWJlbFNpbmd1bGFyLnRvTG93ZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuICAgIGNvbnN0IHNlbGZDb2xsYXBzZWQgPSBhbGxJdGVtc0NvbGxhcHNlZCAmJiAobGlzdENvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcyk7XG5cbiAgICBjb25zdCBpdGVtc0FycmF5ID0ga2V5cy5tYXAoa2V5ID0+ICh7IGlkOiBrZXkgfSkpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICB7KHsgY3gsIGNzcyB9KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9e2ZvcklEfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgY2xhc3NOYW1lV3JhcHBlcixcbiAgICAgICAgICAgICAgY3NzYFxuICAgICAgICAgICAgICAgICR7c3R5bGVTdHJpbmdzLm9iamVjdFdpZGdldFRvcEJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9iamVjdFdpZGdldFRvcEJhclxuICAgICAgICAgICAgICBhbGxvd0FkZD17ZmllbGQuZ2V0KCdhbGxvd19hZGQnLCB0cnVlKX1cbiAgICAgICAgICAgICAgb25BZGQ9e3RoaXMuaGFuZGxlQWRkfVxuICAgICAgICAgICAgICB0eXBlcz17ZmllbGQuZ2V0KFRZUEVTX0tFWSwgbnVsbCl9XG4gICAgICAgICAgICAgIG9uQWRkVHlwZT17dHlwZSA9PiB0aGlzLmhhbmRsZUFkZFR5cGUodHlwZSwgcmVzb2x2ZUZpZWxkS2V5VHlwZShmaWVsZCkpfVxuICAgICAgICAgICAgICBoZWFkaW5nPXtgJHtpdGVtcy5zaXplfSAke2xpc3RMYWJlbH1gfVxuICAgICAgICAgICAgICBsYWJlbD17bGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICBvbkNvbGxhcHNlVG9nZ2xlPXt0aGlzLmhhbmRsZUNvbGxhcHNlQWxsVG9nZ2xlfVxuICAgICAgICAgICAgICBjb2xsYXBzZWQ9e3NlbGZDb2xsYXBzZWR9XG4gICAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyghc2VsZkNvbGxhcHNlZCB8fCAhbWluaW1pemVDb2xsYXBzZWRJdGVtcykgJiYgKFxuICAgICAgICAgICAgICA8U29ydGFibGVMaXN0IGl0ZW1zPXtpdGVtc0FycmF5fSBrZXlzPXtrZXlzfSBvblNvcnRFbmQ9e3RoaXMub25Tb3J0RW5kfT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKHRoaXMucmVuZGVySXRlbSl9XG4gICAgICAgICAgICAgIDwvU29ydGFibGVMaXN0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2xhc3NOYW1lcz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgeyBmb3JJRCwgY2xhc3NOYW1lV3JhcHBlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uRm9jdXM9e3RoaXMuaGFuZGxlRm9jdXN9XG4gICAgICAgIG9uQmx1cj17dGhpcy5oYW5kbGVCbHVyfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZVdyYXBwZXJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxpc3RDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcklucHV0KCk7XG4gICAgfVxuICB9XG59XG4iXX0= */")] }, props.children); } function DragHandle({ children, id }) { const { attributes, listeners } = (0, _sortable.useSortable)({ id }); return (0, _react2.jsx)("div", _extends({}, attributes, listeners), children); } const valueTypes = { SINGLE: 'SINGLE', MULTIPLE: 'MULTIPLE', MIXED: 'MIXED' }; function handleSummary(summary, entry, label, item) { const data = _decapCmsLibWidgets.stringTemplate.addFileTemplateFields(entry.get('path'), item.set('fields.label', label)); return _decapCmsLibWidgets.stringTemplate.compileStringTemplate(summary, null, '', data); } function validateItem(field, item) { if (!_immutable.Map.isMap(item)) { console.warn(`'${field.get('name')}' field item value value should be a map but is a '${typeof item}'`); return false; } return true; } function LabelComponent({ field, isActive, hasErrors, uniqueFieldId, isFieldOptional, t }) { const label = `${field.get('label', field.get('name'))}`; return (0, _react2.jsx)(_decapCmsUiDefault.FieldLabel, { isActive: isActive, hasErrors: hasErrors, htmlFor: uniqueFieldId }, label, " ", `${isFieldOptional ? ` (${t('editor.editorControl.field.optional')})` : ''}`); } class ListControl extends _react.default.Component { constructor(props) { super(props); _defineProperty(this, "validations", []); _defineProperty(this, "valueToString", value => { let stringValue; if (_immutable.List.isList(value) || Array.isArray(value)) { stringValue = value.join(','); } else { console.warn(`Expected List value to be an array but received '${value}' with type of '${typeof value}'. Please check the value provided to the '${this.props.field.get('name')}' field`); stringValue = String(value); } return stringValue.replace(/,([^\s]|$)/g, ', $1'); }); _defineProperty(this, "getValueType", () => { const { field } = this.props; if (field.get('fields')) { return valueTypes.MULTIPLE; } else if (field.get('field')) { return valueTypes.SINGLE; } else if (field.get(_typedListHelpers.TYPES_KEY)) { return valueTypes.MIXED; } else { return null; } }); _defineProperty(this, "uniqueFieldId", (0, _uniqueId2.default)(`${this.props.field.get('name')}-field-`)); _defineProperty(this, "handleChange", e => { const { onChange } = this.props; const oldValue = this.state.value; const newValue = e.target.value.trim(); const listValue = newValue ? newValue.split(',') : []; if (newValue.match(/,$/) && oldValue.match(/, $/)) { listValue.pop(); } const parsedValue = this.valueToString(listValue); this.setState({ value: parsedValue }); onChange((0, _immutable.List)(listValue.map(val => val.trim()))); }); _defineProperty(this, "handleFocus", () => { this.props.setActiveStyle(); }); _defineProperty(this, "handleBlur", e => { const listValue = e.target.value.split(',').map(el => el.trim()).filter(el => el); this.setState({ value: this.valueToString(listValue) }); this.props.setInactiveStyle(); }); _defineProperty(this, "handleAdd", e => { e.preventDefault(); const { field } = this.props; const parsedValue = this.getValueType() === valueTypes.SINGLE ? this.singleDefault() : (0, _immutable.fromJS)(this.multipleDefault(field.get('fields'))); this.addItem(parsedValue); }); _defineProperty(this, "singleDefault", () => { return this.props.field.getIn(['field', 'default'], null); }); _defineProperty(this, "multipleDefault", fields => { return this.getFieldsDefault(fields); }); _defineProperty(this, "handleAddType", (type, typeKey) => { const parsedValue = (0, _immutable.fromJS)(this.mixedDefault(typeKey, type)); this.addItem(parsedValue); }); _defineProperty(this, "mixedDefault", (typeKey, type) => { const selectedType = this.props.field.get(_typedListHelpers.TYPES_KEY).find(f => f.get('name') === type); const fields = selectedType.get('fields') || [selectedType.get('field')]; return this.getFieldsDefault(fields, { [typeKey]: type }); }); _defineProperty(this, "getFieldsDefault", (fields, initialValue = {}) => { return fields.reduce((acc, item) => { const subfields = item.get('field') || item.get('fields'); const object = item.get('widget') == 'object'; const name = item.get('name'); const defaultValue = item.get('default', null); if (_immutable.List.isList(subfields) && object) { const subDefaultValue = this.getFieldsDefault(subfields); !(0, _isEmpty2.default)(subDefaultValue) && (acc[name] = subDefaultValue); return acc; } if (_immutable.Map.isMap(subfields) && object) { const subDefaultValue = this.getFieldsDefault([subfields]); !(0, _isEmpty2.default)(subDefaultValue) && (acc[name] = subDefaultValue); return acc; } if (defaultValue !== null) { acc[name] = defaultValue; } return acc; }, initialValue); }); _defineProperty(this, "addItem", parsedValue => { const { value, onChange, field } = this.props; const addToTop = field.get('add_to_top', false); const itemKey = (0, _uuid.v4)(); this.setState({ itemsCollapsed: addToTop ? [false, ...this.state.itemsCollapsed] : [...this.state.itemsCollapsed, false], keys: addToTop ? [itemKey, ...this.state.keys] : [...this.state.keys, itemKey] }); const listValue = value || (0, _immutable.List)(); if (addToTop) { onChange(listValue.unshift(parsedValue)); } else { onChange(listValue.push(parsedValue)); } }); _defineProperty(this, "processControlRef", ref => { if (!ref) return; const { validate, props: { validationKey: key } } = ref; this.validations.push({ key, validate }); }); _defineProperty(this, "validate", () => { if (this.getValueType()) { this.validations.forEach(item => { item.validate(); }); } else { this.props.validate(); } this.props.onValidateObject(this.props.forID, this.validateSize()); }); _defineProperty(this, "validateSize", () => { const { field, value, t } = this.props; const min = field.get('min'); const max = field.get('max'); const required = field.get('required', true); if (!required && !(value !== null && value !== void 0 && value.size)) { return []; } const error = _decapCmsLibWidgets.validations.validateMinMax(t, field.get('label', field.get('name')), value, min, max); return error ? [error] : []; }); /** * In case the `onChangeObject` function is frozen by a child widget implementation, * e.g. when debounced, always get the latest object value instead of using * `this.props.value` directly. */ _defineProperty(this, "getObjectValue", idx => this.props.value.get(idx) || (0, _immutable.Map)()); _defineProperty(this, "handleRemove", (index, event) => { event.preventDefault(); const { itemsCollapsed } = this.state; const { value, metadata, onChange, field, clearFieldErrors } = this.props; const collectionName = field.get('name'); const isSingleField = this.getValueType() === valueTypes.SINGLE; const metadataRemovePath = isSingleField ? value.get(index) : value.get(index).valueSeq(); const parsedMetadata = metadata && !metadata.isEmpty() ? { [collectionName]: metadata.removeIn(metadataRemovePath) } : metadata; itemsCollapsed.splice(index, 1); // clear validations this.validations = []; this.setState({ itemsCollapsed: [...itemsCollapsed], keys: Array.from({ length: value.size - 1 }, () => (0, _uuid.v4)()) }); onChange(value.remove(index), parsedMetadata); clearFieldErrors(); }); _defineProperty(this, "handleItemCollapseToggle", (index, event) => { event.preventDefault(); const { itemsCollapsed } = this.state; const newItemsCollapsed = itemsCollapsed.map((collapsed, itemIndex) => { if (index === itemIndex) { return !collapsed; } return collapsed; }); this.setState({ itemsCollapsed: newItemsCollapsed }); }); _defineProperty(this, "handleCollapseAllToggle", e => { e.preventDefault(); const { value, field } = this.props; const { itemsCollapsed, listCollapsed } = this.state; const minimizeCollapsedItems = field.get('minimize_collapsed', false); const listCollapsedByDefault = field.get('collapsed', true); const allItemsCollapsed = itemsCollapsed.every(val => val === true); if (minimizeCollapsedItems) { let updatedItemsCollapsed = itemsCollapsed; // Only allow collapsing all items in this mode but not opening all at once if (!listCollapsed || !listCollapsedByDefault) { updatedItemsCollapsed = Array(value.size).fill(!listCollapsed); } this.setState({ listCollapsed: !listCollapsed, itemsCollapsed: updatedItemsCollapsed }); } else { this.setState({ itemsCollapsed: Array(value.size).fill(!allItemsCollapsed) }); } }); _defineProperty(this, "onSortEnd", ({ oldIndex, newIndex }) => { const { value, clearFieldErrors } = this.props; const { itemsCollapsed, keys } = this.state; // Update value const item = value.get(oldIndex); const newValue = value.delete(oldIndex).insert(newIndex, item); this.props.onChange(newValue); // Update collapsing const collapsed = itemsCollapsed[oldIndex]; itemsCollapsed.splice(oldIndex, 1); const updatedItemsCollapsed = [...itemsCollapsed]; updatedItemsCollapsed.splice(newIndex, 0, collapsed); // Reset item to ensure updated state const updatedKeys = keys.map((key, keyIndex) => { if (keyIndex === oldIndex || keyIndex === newIndex) { return (0, _uuid.v4)(); } return key; }); this.setState({ itemsCollapsed: updatedItemsCollapsed, keys: updatedKeys }); //clear error fields and remove old validations clearFieldErrors(); this.validations = this.validations.filter(item => updatedKeys.includes(item.key)); }); _defineProperty(this, "hasError", index => { const { fieldsErrors } = this.props; if (fieldsErrors && fieldsErrors.size > 0) { return Object.values(fieldsErrors.toJS()).some(arr => arr.some(err => err.parentIds && err.parentIds.includes(this.state.keys[index]))); } }); // eslint-disable-next-line react/display-name _defineProperty(this, "renderItem", (item, index) => { const { classNameWrapper, editorControl, onValidateObject, metadata, clearFieldErrors, fieldsErrors, controlRef, resolveWidget, parentIds, forID, t } = this.props; const { itemsCollapsed, keys } = this.state; const collapsed = itemsCollapsed[index]; const key = keys[index]; let field = this.props.field; const hasError = this.hasError(index); const isVariableTypesList = this.getValueType() === valueTypes.MIXED; if (isVariableTypesList) { field = (0, _typedListHelpers.getTypedFieldForValue)(field, item); if (!field) { return this.renderErroneousTypedItem(index, item); } } return (0, _react2.jsx)(SortableListItem, { css: [styles.listControlItem, collapsed && styles.listControlItemCollapsed, ";label:ListControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxbEJRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgdmFsaWRhdGUsXG4gICAgICBwcm9wczogeyB2YWxpZGF0aW9uS2V5OiBrZXkgfSxcbiAgICB9ID0gcmVmO1xuICAgIHRoaXMudmFsaWRhdGlvbnMucHVzaCh7IGtleSwgdmFsaWRhdGUgfSk7XG4gIH07XG5cbiAgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMudmFsaWRhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlT2JqZWN0KHRoaXMucHJvcHMuZm9ySUQsIHRoaXMudmFsaWRhdGVTaXplKCkpO1xuICB9O1xuXG4gIHZhbGlkYXRlU2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaW4gPSBmaWVsZC5nZXQoJ21pbicpO1xuICAgIGNvbnN0IG1heCA9IGZpZWxkLmdldCgnbWF4Jyk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBmaWVsZC5nZXQoJ3JlcXVpcmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAoIXJlcXVpcmVkICYmICF2YWx1ZT8uc2l6ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGlvbnMudmFsaWRhdGVNaW5NYXgoXG4gICAgICB0LFxuICAgICAgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3IgPyBbZXJyb3JdIDogW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhlIGBvbkNoYW5nZU9iamVjdGAgZnVuY3Rpb24gaXMgZnJvemVuIGJ5IGEgY2hpbGQgd2lkZ2V0IGltcGxlbWVudGF0aW9uLFxuICAgKiBlLmcuIHdoZW4gZGVib3VuY2VkLCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgb2JqZWN0IHZhbHVlIGluc3RlYWQgb2YgdXNpbmdcbiAgICogYHRoaXMucHJvcHMudmFsdWVgIGRpcmVjdGx5LlxuICAgKi9cbiAgZ2V0T2JqZWN0VmFsdWUgPSBpZHggPT4gdGhpcy5wcm9wcy52YWx1ZS5nZXQoaWR4KSB8fCBNYXAoKTtcblxuICBoYW5kbGVDaGFuZ2VGb3IoaW5kZXgpIHtcbiAgICByZXR1cm4gKGYsIG5ld1ZhbHVlLCBuZXdNZXRhZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZmllbGQuZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBsaXN0RmllbGRPYmplY3RXaWRnZXQgPSBmaWVsZC5nZXRJbihbJ2ZpZWxkJywgJ3dpZGdldCddKSA9PT0gJ29iamVjdCc7XG4gICAgICBjb25zdCB3aXRoTmFtZUtleSA9XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IHZhbHVlVHlwZXMuU0lOR0xFIHx8XG4gICAgICAgICh0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRSAmJiBsaXN0RmllbGRPYmplY3RXaWRnZXQpO1xuICAgICAgY29uc3QgbmV3T2JqZWN0VmFsdWUgPSB3aXRoTmFtZUtleVxuICAgICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaW5kZXgpLnNldChmLmdldCgnbmFtZScpLCBuZXdWYWx1ZSlcbiAgICAgICAgOiBuZXdWYWx1ZTtcbiAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0ge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBPYmplY3QuYXNzaWduKG1ldGFkYXRhID8gbWV0YWRhdGEudG9KUygpIDoge30sIG5ld01ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBvbkNoYW5nZSh2YWx1ZS5zZXQoaW5kZXgsIG5ld09iamVjdFZhbHVlKSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIH07XG4gIH1cblxuICBoYW5kbGVSZW1vdmUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIGl0ZW1zQ29sbGFwc2VkLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gY2xlYXIgdmFsaWRhdGlvbnNcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gW107XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBbLi4uaXRlbXNDb2xsYXBzZWRdLFxuICAgICAga2V5czogQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSAtIDEgfSwgKCkgPT4gdXVpZCgpKSxcbiAgICB9KTtcblxuICAgIG9uQ2hhbmdlKHZhbHVlLnJlbW92ZShpbmRleCksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBSZXNldCBpdGVtIHRvIGVuc3VyZSB1cGRhdGVkIHN0YXRlXG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBrZXlzLm1hcCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKGtleUluZGV4ID09PSBvbGRJbmRleCB8fCBrZXlJbmRleCA9PT0gbmV3SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuXG4gICAgLy9jbGVhciBlcnJvciBmaWVsZHMgYW5kIHJlbW92ZSBvbGQgdmFsaWRhdGlvbnNcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")], index: index, key: key, id: key, keys: keys }, isVariableTypesList && (0, _react2.jsx)(LabelComponent, { field: field, isActive: false, hasErrors: hasError, uniqueFieldId: this.uniqueFieldId, isFieldOptional: field.get('required') === false, t: t }), (0, _react2.jsx)(StyledListItemTopBar, { collapsed: collapsed, onCollapseToggle: (0, _partial2.default)(this.handleItemCollapseToggle, index), dragHandle: DragHandle, id: key, onRemove: (0, _partial2.default)(this.handleRemove, index), "data-testid": `styled-list-item-top-bar-${key}` }), (0, _react2.jsx)(NestedObjectLabel, { collapsed: collapsed, error: hasError }, this.objectLabel(item)), (0, _react2.jsx)(_react2.ClassNames, null, ({ css, cx }) => (0, _react2.jsx)(ObjectControl, { classNameWrapper: cx(classNameWrapper, { [css` ${styleStrings.collapsedObjectControl}; `]: collapsed }), value: item, field: field, onChangeObject: this.handleChangeFor(index), editorControl: editorControl, resolveWidget: resolveWidget, metadata: metadata, forList: true, onValidateObject: onValidateObject, clearFieldErrors: clearFieldErrors, fieldsErrors: fieldsErrors, ref: this.processControlRef, controlRef: controlRef, validationKey: key, collapsed: collapsed, "data-testid": `object-control-${key}`, hasError: hasError, parentIds: [...parentIds, forID, key] }))); }); const { field: _field, value: _value } = props; const _listCollapsed = _field.get('collapsed', true); const _itemsCollapsed = _value && Array(_value.size).fill(_listCollapsed) || []; const _keys = _value && Array.from({ length: _value.size }, () => (0, _uuid.v4)()) || []; this.state = { listCollapsed: _listCollapsed, itemsCollapsed: _itemsCollapsed, value: this.valueToString(_value), keys: _keys }; } /** * Always update so that each nested widget has the option to update. This is * required because ControlHOC provides a default `shouldComponentUpdate` * which only updates if the value changes, but every widget must be allowed * to override this. */ shouldComponentUpdate() { return true; } handleChangeFor(index) { return (f, newValue, newMetadata) => { const { value, metadata, onChange, field } = this.props; const collectionName = field.get('name'); const listFieldObjectWidget = field.getIn(['field', 'widget']) === 'object'; const withNameKey = this.getValueType() !== valueTypes.SINGLE || this.getValueType() === valueTypes.SINGLE && listFieldObjectWidget; const newObjectValue = withNameKey ? this.getObjectValue(index).set(f.get('name'), newValue) : newValue; const parsedMetadata = { [collectionName]: Object.assign(metadata ? metadata.toJS() : {}, newMetadata || {}) }; onChange(value.set(index, newObjectValue), parsedMetadata); }; } objectLabel(item) { const { field, entry } = this.props; const valueType = this.getValueType(); switch (valueType) { case valueTypes.MIXED: { if (!validateItem(field, item)) { return; } const itemType = (0, _typedListHelpers.getTypedFieldForValue)(field, item); const label = itemType.get('label', itemType.get('name')); // each type can have its own summary, but default to the list summary if exists const summary = itemType.get('summary', field.get('summary')); const labelReturn = summary ? handleSummary(summary, entry, label, item) : label; return labelReturn; } case valueTypes.SINGLE: { const singleField = field.get('field'); const label = singleField.get('label', singleField.get('name')); const summary = field.get('summary'); const data = (0, _immutable.fromJS)({ [singleField.get('name')]: item }); const labelReturn = summary ? handleSummary(summary, entry, label, data) : label; return labelReturn; } case valueTypes.MULTIPLE: { if (!validateItem(field, item)) { return; } const multiFields = field.get('fields'); const labelField = multiFields && multiFields.first(); const value = item.get(labelField.get('name')); const summary = field.get('summary'); const labelReturn = summary ? handleSummary(summary, entry, value, item) : value; return (labelReturn || `No ${labelField.get('name')}`).toString(); } } return ''; } renderErroneousTypedItem(index, item) { const field = this.props.field; const errorMessage = (0, _typedListHelpers.getErrorMessageForTypedFieldAndValue)(field, item); const key = `item-${index}`; return (0, _react2.jsx)(SortableListItem, { css: [styles.listControlItem, styles.listControlItemCollapsed, ";label:ListControl;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzcEJRIiwiZmlsZSI6Ii4uLy4uL3NyYy9MaXN0Q29udHJvbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEltbXV0YWJsZVByb3BUeXBlcyBmcm9tICdyZWFjdC1pbW11dGFibGUtcHJvcHR5cGVzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCB7IGNzcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IExpc3QsIE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IHBhcnRpYWwsIGlzRW1wdHksIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCBEZWNhcENtc1dpZGdldE9iamVjdCBmcm9tICdkZWNhcC1jbXMtd2lkZ2V0LW9iamVjdCc7XG5pbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBNb3VzZVNlbnNvcixcbiAgVG91Y2hTZW5zb3IsXG4gIGNsb3Nlc3RDZW50ZXIsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgeyBTb3J0YWJsZUNvbnRleHQsIHVzZVNvcnRhYmxlIH0gZnJvbSAnQGRuZC1raXQvc29ydGFibGUnO1xuaW1wb3J0IHsgcmVzdHJpY3RUb1BhcmVudEVsZW1lbnQgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnO1xuaW1wb3J0IHsgQ1NTIH0gZnJvbSAnQGRuZC1raXQvdXRpbGl0aWVzJztcbmltcG9ydCB7XG4gIExpc3RJdGVtVG9wQmFyLFxuICBPYmplY3RXaWRnZXRUb3BCYXIsXG4gIGNvbG9ycyxcbiAgbGVuZ3RocyxcbiAgRmllbGRMYWJlbCxcbn0gZnJvbSAnZGVjYXAtY21zLXVpLWRlZmF1bHQnO1xuaW1wb3J0IHsgc3RyaW5nVGVtcGxhdGUsIHZhbGlkYXRpb25zIH0gZnJvbSAnZGVjYXAtY21zLWxpYi13aWRnZXRzJztcblxuaW1wb3J0IHtcbiAgVFlQRVNfS0VZLFxuICBnZXRUeXBlZEZpZWxkRm9yVmFsdWUsXG4gIHJlc29sdmVGaWVsZEtleVR5cGUsXG4gIGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZSxcbn0gZnJvbSAnLi90eXBlZExpc3RIZWxwZXJzJztcblxuY29uc3QgT2JqZWN0Q29udHJvbCA9IERlY2FwQ21zV2lkZ2V0T2JqZWN0LmNvbnRyb2xDb21wb25lbnQ7XG5cbmNvbnN0IExpc3RJdGVtID0gc3R5bGVkLmRpdigpO1xuXG5jb25zdCBTdHlsZWRMaXN0SXRlbVRvcEJhciA9IHN0eWxlZChMaXN0SXRlbVRvcEJhcilgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JzLnRleHRGaWVsZEJvcmRlcn07XG5gO1xuXG5jb25zdCBOZXN0ZWRPYmplY3RMYWJlbCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmNvbGxhcHNlZCA/ICdibG9jaycgOiAnbm9uZScpfTtcbiAgYm9yZGVyLXRvcDogMDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmVycm9yID8gY29sb3JzLmVycm9yVGV4dCA6ICdpbmhlcml0Jyl9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9ycy50ZXh0RmllbGRCb3JkZXJ9O1xuICBwYWRkaW5nOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiAwIDAgJHtsZW5ndGhzLmJvcmRlclJhZGl1c30gJHtsZW5ndGhzLmJvcmRlclJhZGl1c307XG5gO1xuXG5jb25zdCBzdHlsZVN0cmluZ3MgPSB7XG4gIGNvbGxhcHNlZE9iamVjdENvbnRyb2w6IGBcbiAgICBkaXNwbGF5OiBub25lO1xuICBgLFxuICBvYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXI6IGBcbiAgICBwYWRkaW5nOiAke2xlbmd0aHMub2JqZWN0V2lkZ2V0VG9wQmFyQ29udGFpbmVyUGFkZGluZ307XG4gIGAsXG59O1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGxpc3RDb250cm9sSXRlbTogY3NzYFxuICAgIG1hcmdpbi10b3A6IDE4cHg7XG5cbiAgICAmOmZpcnN0LW9mLXR5cGUge1xuICAgICAgbWFyZ2luLXRvcDogMjZweDtcbiAgICB9XG4gIGAsXG4gIGxpc3RDb250cm9sSXRlbUNvbGxhcHNlZDogY3NzYFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICBgLFxufTtcblxuZnVuY3Rpb24gU29ydGFibGVMaXN0KHsgaXRlbXMsIGNoaWxkcmVuLCBvblNvcnRFbmQsIGtleXMgfSkge1xuICBjb25zdCBhY3RpdmF0aW9uQ29uc3RyYWludCA9IHsgZGlzdGFuY2U6IDQgfTtcbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMoXG4gICAgdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7IGFjdGl2YXRpb25Db25zdHJhaW50IH0pLFxuICAgIHVzZVNlbnNvcihUb3VjaFNlbnNvciwgeyBhY3RpdmF0aW9uQ29uc3RyYWludCB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVTb3J0RW5kKHsgYWN0aXZlLCBvdmVyIH0pIHtcbiAgICBvblNvcnRFbmQoe1xuICAgICAgb2xkSW5kZXg6IGtleXMuaW5kZXhPZihhY3RpdmUuaWQpLFxuICAgICAgbmV3SW5kZXg6IGtleXMuaW5kZXhPZihvdmVyLmlkKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIG1vZGlmaWVycz17W3Jlc3RyaWN0VG9QYXJlbnRFbGVtZW50XX1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtjbG9zZXN0Q2VudGVyfVxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZVNvcnRFbmR9XG4gICAgICA+XG4gICAgICAgIDxTb3J0YWJsZUNvbnRleHQgaXRlbXM9e2l0ZW1zfT57Y2hpbGRyZW59PC9Tb3J0YWJsZUNvbnRleHQ+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNvcnRhYmxlTGlzdEl0ZW0ocHJvcHMpIHtcbiAgY29uc3QgeyBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24gfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gIH0pO1xuXG4gIGNvbnN0IHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogQ1NTLlRyYW5zZm9ybS50b1N0cmluZyh0cmFuc2Zvcm0pLFxuICAgIHRyYW5zaXRpb24sXG4gIH07XG5cbiAgY29uc3QgeyBjb2xsYXBzZWQgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPExpc3RJdGVtXG4gICAgICBzb3J0YWJsZVxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgY3NzPXtbc3R5bGVzLmxpc3RDb250cm9sSXRlbSwgY29sbGFwc2VkICYmIHN0eWxlcy5saXN0Q29udHJvbEl0ZW1Db2xsYXBzZWRdfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L0xpc3RJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBEcmFnSGFuZGxlKHsgY2hpbGRyZW4sIGlkIH0pIHtcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMgfSA9IHVzZVNvcnRhYmxlKHtcbiAgICBpZCxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHsuLi5hdHRyaWJ1dGVzfSB7Li4ubGlzdGVuZXJzfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgdmFsdWVUeXBlcyA9IHtcbiAgU0lOR0xFOiAnU0lOR0xFJyxcbiAgTVVMVElQTEU6ICdNVUxUSVBMRScsXG4gIE1JWEVEOiAnTUlYRUQnLFxufTtcblxuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgbGFiZWwsIGl0ZW0pIHtcbiAgY29uc3QgZGF0YSA9IHN0cmluZ1RlbXBsYXRlLmFkZEZpbGVUZW1wbGF0ZUZpZWxkcyhcbiAgICBlbnRyeS5nZXQoJ3BhdGgnKSxcbiAgICBpdGVtLnNldCgnZmllbGRzLmxhYmVsJywgbGFiZWwpLFxuICApO1xuICByZXR1cm4gc3RyaW5nVGVtcGxhdGUuY29tcGlsZVN0cmluZ1RlbXBsYXRlKHN1bW1hcnksIG51bGwsICcnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJdGVtKGZpZWxkLCBpdGVtKSB7XG4gIGlmICghTWFwLmlzTWFwKGl0ZW0pKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCcke2ZpZWxkLmdldCgnbmFtZScpfScgZmllbGQgaXRlbSB2YWx1ZSB2YWx1ZSBzaG91bGQgYmUgYSBtYXAgYnV0IGlzIGEgJyR7dHlwZW9mIGl0ZW19J2AsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIExhYmVsQ29tcG9uZW50KHsgZmllbGQsIGlzQWN0aXZlLCBoYXNFcnJvcnMsIHVuaXF1ZUZpZWxkSWQsIGlzRmllbGRPcHRpb25hbCwgdCB9KSB7XG4gIGNvbnN0IGxhYmVsID0gYCR7ZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKX1gO1xuICByZXR1cm4gKFxuICAgIDxGaWVsZExhYmVsIGlzQWN0aXZlPXtpc0FjdGl2ZX0gaGFzRXJyb3JzPXtoYXNFcnJvcnN9IGh0bWxGb3I9e3VuaXF1ZUZpZWxkSWR9PlxuICAgICAge2xhYmVsfSB7YCR7aXNGaWVsZE9wdGlvbmFsID8gYCAoJHt0KCdlZGl0b3IuZWRpdG9yQ29udHJvbC5maWVsZC5vcHRpb25hbCcpfSlgIDogJyd9YH1cbiAgICA8L0ZpZWxkTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpc3RDb250cm9sIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGlvbnMgPSBbXTtcblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG1ldGFkYXRhOiBJbW11dGFibGVQcm9wVHlwZXMubWFwLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2hhbmdlT2JqZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVmFsaWRhdGVPYmplY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsaWRhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IEltbXV0YWJsZVByb3BUeXBlcy5saXN0LFxuICAgIGZpZWxkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGZvcklEOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbnRyb2xSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIG1lZGlhUGF0aHM6IEltbXV0YWJsZVByb3BUeXBlcy5tYXAuaXNSZXF1aXJlZCxcbiAgICBnZXRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbk9wZW5NZWRpYUxpYnJhcnk6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25BZGRBc3NldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUluc2VydGVkTWVkaWE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lV3JhcHBlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNldEFjdGl2ZVN0eWxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHNldEluYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZWRpdG9yQ29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gICAgcmVzb2x2ZVdpZGdldDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGVhckZpZWxkRXJyb3JzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGZpZWxkc0Vycm9yczogSW1tdXRhYmxlUHJvcFR5cGVzLm1hcC5pc1JlcXVpcmVkLFxuICAgIGVudHJ5OiBJbW11dGFibGVQcm9wVHlwZXMubWFwLmlzUmVxdWlyZWQsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogTGlzdCgpLFxuICAgIHBhcmVudElkczogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBmaWVsZCwgdmFsdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpc3RDb2xsYXBzZWQgPSBmaWVsZC5nZXQoJ2NvbGxhcHNlZCcsIHRydWUpO1xuICAgIGNvbnN0IGl0ZW1zQ29sbGFwc2VkID0gKHZhbHVlICYmIEFycmF5KHZhbHVlLnNpemUpLmZpbGwobGlzdENvbGxhcHNlZCkpIHx8IFtdO1xuICAgIGNvbnN0IGtleXMgPSAodmFsdWUgJiYgQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSB9LCAoKSA9PiB1dWlkKCkpKSB8fCBbXTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsaXN0Q29sbGFwc2VkLFxuICAgICAgaXRlbXNDb2xsYXBzZWQsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKHZhbHVlKSxcbiAgICAgIGtleXMsXG4gICAgfTtcbiAgfVxuXG4gIHZhbHVlVG9TdHJpbmcgPSB2YWx1ZSA9PiB7XG4gICAgbGV0IHN0cmluZ1ZhbHVlO1xuICAgIGlmIChMaXN0LmlzTGlzdCh2YWx1ZSkgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHN0cmluZ1ZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBFeHBlY3RlZCBMaXN0IHZhbHVlIHRvIGJlIGFuIGFycmF5IGJ1dCByZWNlaXZlZCAnJHt2YWx1ZX0nIHdpdGggdHlwZSBvZiAnJHt0eXBlb2YgdmFsdWV9Jy4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZSBwcm92aWRlZCB0byB0aGUgJyR7dGhpcy5wcm9wcy5maWVsZC5nZXQoXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICApfScgZmllbGRgLFxuICAgICAgKTtcbiAgICAgIHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoLywoW15cXHNdfCQpL2csICcsICQxJyk7XG4gIH07XG5cbiAgZ2V0VmFsdWVUeXBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGZpZWxkLmdldCgnZmllbGRzJykpIHtcbiAgICAgIHJldHVybiB2YWx1ZVR5cGVzLk1VTFRJUExFO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuZ2V0KCdmaWVsZCcpKSB7XG4gICAgICByZXR1cm4gdmFsdWVUeXBlcy5TSU5HTEU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5nZXQoVFlQRVNfS0VZKSkge1xuICAgICAgcmV0dXJuIHZhbHVlVHlwZXMuTUlYRUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICB1bmlxdWVGaWVsZElkID0gdW5pcXVlSWQoYCR7dGhpcy5wcm9wcy5maWVsZC5nZXQoJ25hbWUnKX0tZmllbGQtYCk7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNvIHRoYXQgZWFjaCBuZXN0ZWQgd2lkZ2V0IGhhcyB0aGUgb3B0aW9uIHRvIHVwZGF0ZS4gVGhpcyBpc1xuICAgKiByZXF1aXJlZCBiZWNhdXNlIENvbnRyb2xIT0MgcHJvdmlkZXMgYSBkZWZhdWx0IGBzaG91bGRDb21wb25lbnRVcGRhdGVgXG4gICAqIHdoaWNoIG9ubHkgdXBkYXRlcyBpZiB0aGUgdmFsdWUgY2hhbmdlcywgYnV0IGV2ZXJ5IHdpZGdldCBtdXN0IGJlIGFsbG93ZWRcbiAgICogdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZUNoYW5nZSA9IGUgPT4ge1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IGxpc3RWYWx1ZSA9IG5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoJywnKSA6IFtdO1xuICAgIGlmIChuZXdWYWx1ZS5tYXRjaCgvLCQvKSAmJiBvbGRWYWx1ZS5tYXRjaCgvLCAkLykpIHtcbiAgICAgIGxpc3RWYWx1ZS5wb3AoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMudmFsdWVUb1N0cmluZyhsaXN0VmFsdWUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogcGFyc2VkVmFsdWUgfSk7XG4gICAgb25DaGFuZ2UoTGlzdChsaXN0VmFsdWUubWFwKHZhbCA9PiB2YWwudHJpbSgpKSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2V0QWN0aXZlU3R5bGUoKTtcbiAgfTtcblxuICBoYW5kbGVCbHVyID0gZSA9PiB7XG4gICAgY29uc3QgbGlzdFZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKGVsID0+IGVsLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZWwgPT4gZWwpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGxpc3RWYWx1ZSkgfSk7XG4gICAgdGhpcy5wcm9wcy5zZXRJbmFjdGl2ZVN0eWxlKCk7XG4gIH07XG5cbiAgaGFuZGxlQWRkID0gZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPVxuICAgICAgdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEVcbiAgICAgICAgPyB0aGlzLnNpbmdsZURlZmF1bHQoKVxuICAgICAgICA6IGZyb21KUyh0aGlzLm11bHRpcGxlRGVmYXVsdChmaWVsZC5nZXQoJ2ZpZWxkcycpKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBzaW5nbGVEZWZhdWx0ID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmZpZWxkLmdldEluKFsnZmllbGQnLCAnZGVmYXVsdCddLCBudWxsKTtcbiAgfTtcblxuICBtdWx0aXBsZURlZmF1bHQgPSBmaWVsZHMgPT4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzKTtcbiAgfTtcblxuICBoYW5kbGVBZGRUeXBlID0gKHR5cGUsIHR5cGVLZXkpID0+IHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IGZyb21KUyh0aGlzLm1peGVkRGVmYXVsdCh0eXBlS2V5LCB0eXBlKSk7XG4gICAgdGhpcy5hZGRJdGVtKHBhcnNlZFZhbHVlKTtcbiAgfTtcblxuICBtaXhlZERlZmF1bHQgPSAodHlwZUtleSwgdHlwZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVHlwZSA9IHRoaXMucHJvcHMuZmllbGQuZ2V0KFRZUEVTX0tFWSkuZmluZChmID0+IGYuZ2V0KCduYW1lJykgPT09IHR5cGUpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHNlbGVjdGVkVHlwZS5nZXQoJ2ZpZWxkcycpIHx8IFtzZWxlY3RlZFR5cGUuZ2V0KCdmaWVsZCcpXTtcblxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkc0RlZmF1bHQoZmllbGRzLCB7IFt0eXBlS2V5XTogdHlwZSB9KTtcbiAgfTtcblxuICBnZXRGaWVsZHNEZWZhdWx0ID0gKGZpZWxkcywgaW5pdGlhbFZhbHVlID0ge30pID0+IHtcbiAgICByZXR1cm4gZmllbGRzLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICBjb25zdCBzdWJmaWVsZHMgPSBpdGVtLmdldCgnZmllbGQnKSB8fCBpdGVtLmdldCgnZmllbGRzJyk7XG4gICAgICBjb25zdCBvYmplY3QgPSBpdGVtLmdldCgnd2lkZ2V0JykgPT0gJ29iamVjdCc7XG4gICAgICBjb25zdCBuYW1lID0gaXRlbS5nZXQoJ25hbWUnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGl0ZW0uZ2V0KCdkZWZhdWx0JywgbnVsbCk7XG5cbiAgICAgIGlmIChMaXN0LmlzTGlzdChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoc3ViZmllbGRzKTtcbiAgICAgICAgIWlzRW1wdHkoc3ViRGVmYXVsdFZhbHVlKSAmJiAoYWNjW25hbWVdID0gc3ViRGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKE1hcC5pc01hcChzdWJmaWVsZHMpICYmIG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdWJEZWZhdWx0VmFsdWUgPSB0aGlzLmdldEZpZWxkc0RlZmF1bHQoW3N1YmZpZWxkc10pO1xuICAgICAgICAhaXNFbXB0eShzdWJEZWZhdWx0VmFsdWUpICYmIChhY2NbbmFtZV0gPSBzdWJEZWZhdWx0VmFsdWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGFjY1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBpbml0aWFsVmFsdWUpO1xuICB9O1xuXG4gIGFkZEl0ZW0gPSBwYXJzZWRWYWx1ZSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIGZpZWxkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFkZFRvVG9wID0gZmllbGQuZ2V0KCdhZGRfdG9fdG9wJywgZmFsc2UpO1xuXG4gICAgY29uc3QgaXRlbUtleSA9IHV1aWQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBhZGRUb1RvcFxuICAgICAgICA/IFtmYWxzZSwgLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZF1cbiAgICAgICAgOiBbLi4udGhpcy5zdGF0ZS5pdGVtc0NvbGxhcHNlZCwgZmFsc2VdLFxuICAgICAga2V5czogYWRkVG9Ub3AgPyBbaXRlbUtleSwgLi4udGhpcy5zdGF0ZS5rZXlzXSA6IFsuLi50aGlzLnN0YXRlLmtleXMsIGl0ZW1LZXldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbGlzdFZhbHVlID0gdmFsdWUgfHwgTGlzdCgpO1xuICAgIGlmIChhZGRUb1RvcCkge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnVuc2hpZnQocGFyc2VkVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobGlzdFZhbHVlLnB1c2gocGFyc2VkVmFsdWUpKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzc0NvbnRyb2xSZWYgPSByZWYgPT4ge1xuICAgIGlmICghcmVmKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgdmFsaWRhdGUsXG4gICAgICBwcm9wczogeyB2YWxpZGF0aW9uS2V5OiBrZXkgfSxcbiAgICB9ID0gcmVmO1xuICAgIHRoaXMudmFsaWRhdGlvbnMucHVzaCh7IGtleSwgdmFsaWRhdGUgfSk7XG4gIH07XG5cbiAgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0VmFsdWVUeXBlKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMudmFsaWRhdGUoKTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vblZhbGlkYXRlT2JqZWN0KHRoaXMucHJvcHMuZm9ySUQsIHRoaXMudmFsaWRhdGVTaXplKCkpO1xuICB9O1xuXG4gIHZhbGlkYXRlU2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSwgdCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaW4gPSBmaWVsZC5nZXQoJ21pbicpO1xuICAgIGNvbnN0IG1heCA9IGZpZWxkLmdldCgnbWF4Jyk7XG4gICAgY29uc3QgcmVxdWlyZWQgPSBmaWVsZC5nZXQoJ3JlcXVpcmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAoIXJlcXVpcmVkICYmICF2YWx1ZT8uc2l6ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gdmFsaWRhdGlvbnMudmFsaWRhdGVNaW5NYXgoXG4gICAgICB0LFxuICAgICAgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKSxcbiAgICAgIHZhbHVlLFxuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgICk7XG5cbiAgICByZXR1cm4gZXJyb3IgPyBbZXJyb3JdIDogW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEluIGNhc2UgdGhlIGBvbkNoYW5nZU9iamVjdGAgZnVuY3Rpb24gaXMgZnJvemVuIGJ5IGEgY2hpbGQgd2lkZ2V0IGltcGxlbWVudGF0aW9uLFxuICAgKiBlLmcuIHdoZW4gZGVib3VuY2VkLCBhbHdheXMgZ2V0IHRoZSBsYXRlc3Qgb2JqZWN0IHZhbHVlIGluc3RlYWQgb2YgdXNpbmdcbiAgICogYHRoaXMucHJvcHMudmFsdWVgIGRpcmVjdGx5LlxuICAgKi9cbiAgZ2V0T2JqZWN0VmFsdWUgPSBpZHggPT4gdGhpcy5wcm9wcy52YWx1ZS5nZXQoaWR4KSB8fCBNYXAoKTtcblxuICBoYW5kbGVDaGFuZ2VGb3IoaW5kZXgpIHtcbiAgICByZXR1cm4gKGYsIG5ld1ZhbHVlLCBuZXdNZXRhZGF0YSkgPT4ge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWV0YWRhdGEsIG9uQ2hhbmdlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZmllbGQuZ2V0KCduYW1lJyk7XG4gICAgICBjb25zdCBsaXN0RmllbGRPYmplY3RXaWRnZXQgPSBmaWVsZC5nZXRJbihbJ2ZpZWxkJywgJ3dpZGdldCddKSA9PT0gJ29iamVjdCc7XG4gICAgICBjb25zdCB3aXRoTmFtZUtleSA9XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVUeXBlKCkgIT09IHZhbHVlVHlwZXMuU0lOR0xFIHx8XG4gICAgICAgICh0aGlzLmdldFZhbHVlVHlwZSgpID09PSB2YWx1ZVR5cGVzLlNJTkdMRSAmJiBsaXN0RmllbGRPYmplY3RXaWRnZXQpO1xuICAgICAgY29uc3QgbmV3T2JqZWN0VmFsdWUgPSB3aXRoTmFtZUtleVxuICAgICAgICA/IHRoaXMuZ2V0T2JqZWN0VmFsdWUoaW5kZXgpLnNldChmLmdldCgnbmFtZScpLCBuZXdWYWx1ZSlcbiAgICAgICAgOiBuZXdWYWx1ZTtcbiAgICAgIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0ge1xuICAgICAgICBbY29sbGVjdGlvbk5hbWVdOiBPYmplY3QuYXNzaWduKG1ldGFkYXRhID8gbWV0YWRhdGEudG9KUygpIDoge30sIG5ld01ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBvbkNoYW5nZSh2YWx1ZS5zZXQoaW5kZXgsIG5ld09iamVjdFZhbHVlKSwgcGFyc2VkTWV0YWRhdGEpO1xuICAgIH07XG4gIH1cblxuICBoYW5kbGVSZW1vdmUgPSAoaW5kZXgsIGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmFsdWUsIG1ldGFkYXRhLCBvbkNoYW5nZSwgZmllbGQsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBmaWVsZC5nZXQoJ25hbWUnKTtcbiAgICBjb25zdCBpc1NpbmdsZUZpZWxkID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5TSU5HTEU7XG5cbiAgICBjb25zdCBtZXRhZGF0YVJlbW92ZVBhdGggPSBpc1NpbmdsZUZpZWxkID8gdmFsdWUuZ2V0KGluZGV4KSA6IHZhbHVlLmdldChpbmRleCkudmFsdWVTZXEoKTtcbiAgICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9XG4gICAgICBtZXRhZGF0YSAmJiAhbWV0YWRhdGEuaXNFbXB0eSgpXG4gICAgICAgID8geyBbY29sbGVjdGlvbk5hbWVdOiBtZXRhZGF0YS5yZW1vdmVJbihtZXRhZGF0YVJlbW92ZVBhdGgpIH1cbiAgICAgICAgOiBtZXRhZGF0YTtcblxuICAgIGl0ZW1zQ29sbGFwc2VkLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gY2xlYXIgdmFsaWRhdGlvbnNcbiAgICB0aGlzLnZhbGlkYXRpb25zID0gW107XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBbLi4uaXRlbXNDb2xsYXBzZWRdLFxuICAgICAga2V5czogQXJyYXkuZnJvbSh7IGxlbmd0aDogdmFsdWUuc2l6ZSAtIDEgfSwgKCkgPT4gdXVpZCgpKSxcbiAgICB9KTtcblxuICAgIG9uQ2hhbmdlKHZhbHVlLnJlbW92ZShpbmRleCksIHBhcnNlZE1ldGFkYXRhKTtcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gIH07XG5cbiAgaGFuZGxlSXRlbUNvbGxhcHNlVG9nZ2xlID0gKGluZGV4LCBldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLm1hcCgoY29sbGFwc2VkLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiAhY29sbGFwc2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zQ29sbGFwc2VkOiBuZXdJdGVtc0NvbGxhcHNlZCxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZSA9IGUgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB7IHZhbHVlLCBmaWVsZCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGl0ZW1zQ29sbGFwc2VkLCBsaXN0Q29sbGFwc2VkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG1pbmltaXplQ29sbGFwc2VkSXRlbXMgPSBmaWVsZC5nZXQoJ21pbmltaXplX2NvbGxhcHNlZCcsIGZhbHNlKTtcbiAgICBjb25zdCBsaXN0Q29sbGFwc2VkQnlEZWZhdWx0ID0gZmllbGQuZ2V0KCdjb2xsYXBzZWQnLCB0cnVlKTtcbiAgICBjb25zdCBhbGxJdGVtc0NvbGxhcHNlZCA9IGl0ZW1zQ29sbGFwc2VkLmV2ZXJ5KHZhbCA9PiB2YWwgPT09IHRydWUpO1xuXG4gICAgaWYgKG1pbmltaXplQ29sbGFwc2VkSXRlbXMpIHtcbiAgICAgIGxldCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZDtcbiAgICAgIC8vIE9ubHkgYWxsb3cgY29sbGFwc2luZyBhbGwgaXRlbXMgaW4gdGhpcyBtb2RlIGJ1dCBub3Qgb3BlbmluZyBhbGwgYXQgb25jZVxuICAgICAgaWYgKCFsaXN0Q29sbGFwc2VkIHx8ICFsaXN0Q29sbGFwc2VkQnlEZWZhdWx0KSB7XG4gICAgICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZCA9IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWxpc3RDb2xsYXBzZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpc3RDb2xsYXBzZWQ6ICFsaXN0Q29sbGFwc2VkLCBpdGVtc0NvbGxhcHNlZDogdXBkYXRlZEl0ZW1zQ29sbGFwc2VkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXRlbXNDb2xsYXBzZWQ6IEFycmF5KHZhbHVlLnNpemUpLmZpbGwoIWFsbEl0ZW1zQ29sbGFwc2VkKSB9KTtcbiAgICB9XG4gIH07XG5cbiAgb2JqZWN0TGFiZWwoaXRlbSkge1xuICAgIGNvbnN0IHsgZmllbGQsIGVudHJ5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuZ2V0VmFsdWVUeXBlKCk7XG4gICAgc3dpdGNoICh2YWx1ZVR5cGUpIHtcbiAgICAgIGNhc2UgdmFsdWVUeXBlcy5NSVhFRDoge1xuICAgICAgICBpZiAoIXZhbGlkYXRlSXRlbShmaWVsZCwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1UeXBlLmdldCgnbGFiZWwnLCBpdGVtVHlwZS5nZXQoJ25hbWUnKSk7XG4gICAgICAgIC8vIGVhY2ggdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHN1bW1hcnksIGJ1dCBkZWZhdWx0IHRvIHRoZSBsaXN0IHN1bW1hcnkgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBpdGVtVHlwZS5nZXQoJ3N1bW1hcnknLCBmaWVsZC5nZXQoJ3N1bW1hcnknKSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBpdGVtKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuU0lOR0xFOiB7XG4gICAgICAgIGNvbnN0IHNpbmdsZUZpZWxkID0gZmllbGQuZ2V0KCdmaWVsZCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHNpbmdsZUZpZWxkLmdldCgnbGFiZWwnLCBzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGZyb21KUyh7IFtzaW5nbGVGaWVsZC5nZXQoJ25hbWUnKV06IGl0ZW0gfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUmV0dXJuID0gc3VtbWFyeSA/IGhhbmRsZVN1bW1hcnkoc3VtbWFyeSwgZW50cnksIGxhYmVsLCBkYXRhKSA6IGxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWxSZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIHZhbHVlVHlwZXMuTVVMVElQTEU6IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZUl0ZW0oZmllbGQsIGl0ZW0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG11bHRpRmllbGRzID0gZmllbGQuZ2V0KCdmaWVsZHMnKTtcbiAgICAgICAgY29uc3QgbGFiZWxGaWVsZCA9IG11bHRpRmllbGRzICYmIG11bHRpRmllbGRzLmZpcnN0KCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS5nZXQobGFiZWxGaWVsZC5nZXQoJ25hbWUnKSk7XG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSBmaWVsZC5nZXQoJ3N1bW1hcnknKTtcbiAgICAgICAgY29uc3QgbGFiZWxSZXR1cm4gPSBzdW1tYXJ5ID8gaGFuZGxlU3VtbWFyeShzdW1tYXJ5LCBlbnRyeSwgdmFsdWUsIGl0ZW0pIDogdmFsdWU7XG4gICAgICAgIHJldHVybiAobGFiZWxSZXR1cm4gfHwgYE5vICR7bGFiZWxGaWVsZC5nZXQoJ25hbWUnKX1gKS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNvcnRFbmQgPSAoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWUsIGNsZWFyRmllbGRFcnJvcnMgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBpdGVtc0NvbGxhcHNlZCwga2V5cyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFVwZGF0ZSB2YWx1ZVxuICAgIGNvbnN0IGl0ZW0gPSB2YWx1ZS5nZXQob2xkSW5kZXgpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUuZGVsZXRlKG9sZEluZGV4KS5pbnNlcnQobmV3SW5kZXgsIGl0ZW0pO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIGNvbGxhcHNpbmdcbiAgICBjb25zdCBjb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZFtvbGRJbmRleF07XG4gICAgaXRlbXNDb2xsYXBzZWQuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXNDb2xsYXBzZWQgPSBbLi4uaXRlbXNDb2xsYXBzZWRdO1xuICAgIHVwZGF0ZWRJdGVtc0NvbGxhcHNlZC5zcGxpY2UobmV3SW5kZXgsIDAsIGNvbGxhcHNlZCk7XG5cbiAgICAvLyBSZXNldCBpdGVtIHRvIGVuc3VyZSB1cGRhdGVkIHN0YXRlXG4gICAgY29uc3QgdXBkYXRlZEtleXMgPSBrZXlzLm1hcCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKGtleUluZGV4ID09PSBvbGRJbmRleCB8fCBrZXlJbmRleCA9PT0gbmV3SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGl0ZW1zQ29sbGFwc2VkOiB1cGRhdGVkSXRlbXNDb2xsYXBzZWQsIGtleXM6IHVwZGF0ZWRLZXlzIH0pO1xuXG4gICAgLy9jbGVhciBlcnJvciBmaWVsZHMgYW5kIHJlbW92ZSBvbGQgdmFsaWRhdGlvbnNcbiAgICBjbGVhckZpZWxkRXJyb3JzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdXBkYXRlZEtleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgfTtcblxuICBoYXNFcnJvciA9IGluZGV4ID0+IHtcbiAgICBjb25zdCB7IGZpZWxkc0Vycm9ycyB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoZmllbGRzRXJyb3JzICYmIGZpZWxkc0Vycm9ycy5zaXplID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRzRXJyb3JzLnRvSlMoKSkuc29tZShhcnIgPT5cbiAgICAgICAgYXJyLnNvbWUoZXJyID0+IGVyci5wYXJlbnRJZHMgJiYgZXJyLnBhcmVudElkcy5pbmNsdWRlcyh0aGlzLnN0YXRlLmtleXNbaW5kZXhdKSksXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZGlzcGxheS1uYW1lXG4gIHJlbmRlckl0ZW0gPSAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbGFzc05hbWVXcmFwcGVyLFxuICAgICAgZWRpdG9yQ29udHJvbCxcbiAgICAgIG9uVmFsaWRhdGVPYmplY3QsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGNsZWFyRmllbGRFcnJvcnMsXG4gICAgICBmaWVsZHNFcnJvcnMsXG4gICAgICBjb250cm9sUmVmLFxuICAgICAgcmVzb2x2ZVdpZGdldCxcbiAgICAgIHBhcmVudElkcyxcbiAgICAgIGZvcklELFxuICAgICAgdCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgY29sbGFwc2VkID0gaXRlbXNDb2xsYXBzZWRbaW5kZXhdO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGxldCBmaWVsZCA9IHRoaXMucHJvcHMuZmllbGQ7XG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLmhhc0Vycm9yKGluZGV4KTtcbiAgICBjb25zdCBpc1ZhcmlhYmxlVHlwZXNMaXN0ID0gdGhpcy5nZXRWYWx1ZVR5cGUoKSA9PT0gdmFsdWVUeXBlcy5NSVhFRDtcbiAgICBpZiAoaXNWYXJpYWJsZVR5cGVzTGlzdCkge1xuICAgICAgZmllbGQgPSBnZXRUeXBlZEZpZWxkRm9yVmFsdWUoZmllbGQsIGl0ZW0pO1xuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvbmVvdXNUeXBlZEl0ZW0oaW5kZXgsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBjb2xsYXBzZWQgJiYgc3R5bGVzLmxpc3RDb250cm9sSXRlbUNvbGxhcHNlZF19XG4gICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIGlkPXtrZXl9XG4gICAgICAgIGtleXM9e2tleXN9XG4gICAgICA+XG4gICAgICAgIHtpc1ZhcmlhYmxlVHlwZXNMaXN0ICYmIChcbiAgICAgICAgICA8TGFiZWxDb21wb25lbnRcbiAgICAgICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXtmYWxzZX1cbiAgICAgICAgICAgIGhhc0Vycm9ycz17aGFzRXJyb3J9XG4gICAgICAgICAgICB1bmlxdWVGaWVsZElkPXt0aGlzLnVuaXF1ZUZpZWxkSWR9XG4gICAgICAgICAgICBpc0ZpZWxkT3B0aW9uYWw9e2ZpZWxkLmdldCgncmVxdWlyZWQnKSA9PT0gZmFsc2V9XG4gICAgICAgICAgICB0PXt0fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRMaXN0SXRlbVRvcEJhclxuICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgIG9uQ29sbGFwc2VUb2dnbGU9e3BhcnRpYWwodGhpcy5oYW5kbGVJdGVtQ29sbGFwc2VUb2dnbGUsIGluZGV4KX1cbiAgICAgICAgICBkcmFnSGFuZGxlPXtEcmFnSGFuZGxlfVxuICAgICAgICAgIGlkPXtrZXl9XG4gICAgICAgICAgb25SZW1vdmU9e3BhcnRpYWwodGhpcy5oYW5kbGVSZW1vdmUsIGluZGV4KX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YHN0eWxlZC1saXN0LWl0ZW0tdG9wLWJhci0ke2tleX1gfVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXtjb2xsYXBzZWR9IGVycm9yPXtoYXNFcnJvcn0+XG4gICAgICAgICAge3RoaXMub2JqZWN0TGFiZWwoaXRlbSl9XG4gICAgICAgIDwvTmVzdGVkT2JqZWN0TGFiZWw+XG4gICAgICAgIDxDbGFzc05hbWVzPlxuICAgICAgICAgIHsoeyBjc3MsIGN4IH0pID0+IChcbiAgICAgICAgICAgIDxPYmplY3RDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXI9e2N4KGNsYXNzTmFtZVdyYXBwZXIsIHtcbiAgICAgICAgICAgICAgICBbY3NzYFxuICAgICAgICAgICAgICAgICAgJHtzdHlsZVN0cmluZ3MuY29sbGFwc2VkT2JqZWN0Q29udHJvbH07XG4gICAgICAgICAgICAgICAgYF06IGNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtpdGVtfVxuICAgICAgICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlT2JqZWN0PXt0aGlzLmhhbmRsZUNoYW5nZUZvcihpbmRleCl9XG4gICAgICAgICAgICAgIGVkaXRvckNvbnRyb2w9e2VkaXRvckNvbnRyb2x9XG4gICAgICAgICAgICAgIHJlc29sdmVXaWRnZXQ9e3Jlc29sdmVXaWRnZXR9XG4gICAgICAgICAgICAgIG1ldGFkYXRhPXttZXRhZGF0YX1cbiAgICAgICAgICAgICAgZm9yTGlzdFxuICAgICAgICAgICAgICBvblZhbGlkYXRlT2JqZWN0PXtvblZhbGlkYXRlT2JqZWN0fVxuICAgICAgICAgICAgICBjbGVhckZpZWxkRXJyb3JzPXtjbGVhckZpZWxkRXJyb3JzfVxuICAgICAgICAgICAgICBmaWVsZHNFcnJvcnM9e2ZpZWxkc0Vycm9yc31cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnByb2Nlc3NDb250cm9sUmVmfVxuICAgICAgICAgICAgICBjb250cm9sUmVmPXtjb250cm9sUmVmfVxuICAgICAgICAgICAgICB2YWxpZGF0aW9uS2V5PXtrZXl9XG4gICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkfVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YG9iamVjdC1jb250cm9sLSR7a2V5fWB9XG4gICAgICAgICAgICAgIGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICAgICAgICAgcGFyZW50SWRzPXtbLi4ucGFyZW50SWRzLCBmb3JJRCwga2V5XX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DbGFzc05hbWVzPlxuICAgICAgPC9Tb3J0YWJsZUxpc3RJdGVtPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRXJyb25lb3VzVHlwZWRJdGVtKGluZGV4LCBpdGVtKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzLmZpZWxkO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZUZvclR5cGVkRmllbGRBbmRWYWx1ZShmaWVsZCwgaXRlbSk7XG4gICAgY29uc3Qga2V5ID0gYGl0ZW0tJHtpbmRleH1gO1xuICAgIHJldHVybiAoXG4gICAgICA8U29ydGFibGVMaXN0SXRlbVxuICAgICAgICBjc3M9e1tzdHlsZXMubGlzdENvbnRyb2xJdGVtLCBzdHlsZXMubGlzdENvbnRyb2xJdGVtQ29sbGFwc2VkXX1cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZExpc3RJdGVtVG9wQmFyXG4gICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17bnVsbH1cbiAgICAgICAgICBvblJlbW92ZT17cGFydGlhbCh0aGlzLmhhbmRsZVJlbW92ZSwgaW5kZXgsIGtleSl9XG4gICAgICAgICAgZHJhZ0hhbmRsZT17RHJhZ0hhbmRsZX1cbiAgICAgICAgICBpZD17a2V5fVxuICAgICAgICAvPlxuICAgICAgICA8TmVzdGVkT2JqZWN0TGFiZWwgY29sbGFwc2VkPXt0cnVlfSBlcnJvcj17dHJ1ZX0+XG4gICAgICAgICAge2Vycm9yTWVzc2FnZX1cbiAgICAgICAgPC9OZXN0ZWRPYmplY3RMYWJlbD5cbiAgICAgIDwvU29ydGFibGVMaXN0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyTGlzdENvbnRyb2woKSB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9ySUQsIGZpZWxkLCBjbGFzc05hbWVXcmFwcGVyLCB0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgaXRlbXNDb2xsYXBzZWQsIGxpc3RDb2xsYXBzZWQsIGtleXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZSB8fCBMaXN0KCk7XG4gICAgY29uc3QgbGFiZWwgPSBmaWVsZC5nZXQoJ2xhYmVsJywgZmllbGQuZ2V0KCduYW1lJykpO1xuICAgIGNvbnN0IGxhYmVsU2luZ3VsYXIgPSBmaWVsZC5nZXQoJ2xhYmVsX3Npbmd1bGFyJykgfHwgZmllbGQuZ2V0KCdsYWJlbCcsIGZpZWxkLmdldCgnbmFtZScpKTtcbiAgICBjb25zdCBsaXN0TGFiZWwgPSBpdGVtcy5zaXplID09PSAxID8gbGFiZWxTaW5ndWxhci50b0xvd2VyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtaW5pbWl6ZUNvbGxhcHNlZEl0ZW1zID0gZmllbGQuZ2V0KCdtaW5pbWl6ZV9jb2xsYXBzZWQnLCBmYWxzZSk7XG4gICAgY29uc3QgYWxsSXRlbXNDb2xsYXBzZWQgPSBpdGVtc0NvbGxhcHNlZC5ldmVyeSh2YWwgPT4gdmFsID09PSB0cnVlKTtcbiAgICBjb25zdCBzZWxmQ29sbGFwc2VkID0gYWxsSXRlbXNDb2xsYXBzZWQgJiYgKGxpc3RDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpO1xuXG4gICAgY29uc3QgaXRlbXNBcnJheSA9IGtleXMubWFwKGtleSA9PiAoeyBpZDoga2V5IH0pKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NOYW1lcz5cbiAgICAgICAgeyh7IGN4LCBjc3MgfSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPXtmb3JJRH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgIGNsYXNzTmFtZVdyYXBwZXIsXG4gICAgICAgICAgICAgIGNzc2BcbiAgICAgICAgICAgICAgICAke3N0eWxlU3RyaW5ncy5vYmplY3RXaWRnZXRUb3BCYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPYmplY3RXaWRnZXRUb3BCYXJcbiAgICAgICAgICAgICAgYWxsb3dBZGQ9e2ZpZWxkLmdldCgnYWxsb3dfYWRkJywgdHJ1ZSl9XG4gICAgICAgICAgICAgIG9uQWRkPXt0aGlzLmhhbmRsZUFkZH1cbiAgICAgICAgICAgICAgdHlwZXM9e2ZpZWxkLmdldChUWVBFU19LRVksIG51bGwpfVxuICAgICAgICAgICAgICBvbkFkZFR5cGU9e3R5cGUgPT4gdGhpcy5oYW5kbGVBZGRUeXBlKHR5cGUsIHJlc29sdmVGaWVsZEtleVR5cGUoZmllbGQpKX1cbiAgICAgICAgICAgICAgaGVhZGluZz17YCR7aXRlbXMuc2l6ZX0gJHtsaXN0TGFiZWx9YH1cbiAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsU2luZ3VsYXIudG9Mb3dlckNhc2UoKX1cbiAgICAgICAgICAgICAgb25Db2xsYXBzZVRvZ2dsZT17dGhpcy5oYW5kbGVDb2xsYXBzZUFsbFRvZ2dsZX1cbiAgICAgICAgICAgICAgY29sbGFwc2VkPXtzZWxmQ29sbGFwc2VkfVxuICAgICAgICAgICAgICB0PXt0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHsoIXNlbGZDb2xsYXBzZWQgfHwgIW1pbmltaXplQ29sbGFwc2VkSXRlbXMpICYmIChcbiAgICAgICAgICAgICAgPFNvcnRhYmxlTGlzdCBpdGVtcz17aXRlbXNBcnJheX0ga2V5cz17a2V5c30gb25Tb3J0RW5kPXt0aGlzLm9uU29ydEVuZH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCh0aGlzLnJlbmRlckl0ZW0pfVxuICAgICAgICAgICAgICA8L1NvcnRhYmxlTGlzdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L0NsYXNzTmFtZXM+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcklucHV0KCkge1xuICAgIGNvbnN0IHsgZm9ySUQsIGNsYXNzTmFtZVdyYXBwZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBpZD17Zm9ySUR9XG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXt0aGlzLmhhbmRsZUZvY3VzfVxuICAgICAgICBvbkJsdXI9e3RoaXMuaGFuZGxlQmx1cn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVXcmFwcGVyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmdldFZhbHVlVHlwZSgpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIH1cbiAgfVxufVxuIl19 */")], index: index, key: key }, (0, _react2.jsx)(StyledListItemTopBar, { onCollapseToggle: null, onRemove: (0, _partial2.default)(this.handleRemove, index, key), dragHandle: DragHandle, id: key }), (0, _react2.jsx)(NestedObjectLabel, { collapsed: true, error: true }, errorMessage)); } renderListControl() { const { value, forID, field, classNameWrapper, t } = this.props; const { itemsCollapsed, listCollapsed, keys } = this.state; const items = value || (0, _immutable.List)(); const label = field.get('label', field.get('name')); const labelSingular = field.get('label_singular') || field.get('label', field.get('name')); const listLabel = items.size === 1 ? labelSingular.toLowerCase() : label.toLowerCase(); const minimizeCollapsedItems = field.get('minimize_collapsed', false); const allItemsCollapsed = itemsCollapsed.every(val => val === true); const selfCollapsed = allItemsCollapsed && (listCollapsed || !minimizeCollapsedItems); const itemsArray = keys.map(key => ({ id: key })); return (0, _react2.jsx)(_react2.ClassNames, null, ({ cx, css }) => (0, _react2.jsx)("div", { id: forID, className: cx(classNameWrapper, css` ${styleStrings.objectWidgetTopBarContainer} `) }, (0, _react2.jsx)(_decapCmsUiDefault.ObjectWidgetTopBar, { allowAdd: field.get('allow_add', true), onAdd: this.handleAdd, types: field.get(_typedListHelpers.TYPES_KEY, null), onAddType: type => this.handleAddType(type, (0, _typedListHelpers.resolveFieldKeyType)(field)), heading: `${items.size} ${listLabel}`, label: labelSingular.toLowerCase(), onCollapseToggle: this.handleCollapseAllToggle, collapsed: selfCollapsed, t: t }), (!selfCollapsed || !minimizeCollapsedItems) && (0, _react2.jsx)(SortableList, { items: itemsArray, keys: keys, onSortEnd: this.onSortEnd }, items.map(this.renderItem)))); } renderInput() { const { forID, classNameWrapper } = this.props; const { value } = this.state; return (0, _react2.jsx)("input", { type: "text", id: forID, value: value, onChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur, className: classNameWrapper }); } render() { if (this.getValueType() !== null) { return this.renderListControl(); } else { return this.renderInput(); } } } exports.default = ListControl; _defineProperty(ListControl, "propTypes", { metadata: _reactImmutableProptypes.default.map, onChange: _propTypes.default.func.isRequired, onChangeObject: _propTypes.default.func.isRequired, onValidateObject: _propTypes.default.func.isRequired, validate: _propTypes.default.func.isRequired, value: _reactImmutableProptypes.default.list, field: _propTypes.default.object, forID: _propTypes.default.string, controlRef: _propTypes.default.func, mediaPaths: _reactImmutableProptypes.default.map.isRequired, getAsset: _propTypes.default.func.isRequired, onOpenMediaLibrary: _propTypes.default.func.isRequired, onAddAsset: _propTypes.default.func.isRequired, onRemoveInsertedMedia: _propTypes.default.func.isRequired, classNameWrapper: _propTypes.default.string.isRequired, setActiveStyle: _propTypes.default.func.isRequired, setInactiveStyle: _propTypes.default.func.isRequired, editorControl: _propTypes.default.elementType.isRequired, resolveWidget: _propTypes.default.func.isRequired, clearFieldErrors: _propTypes.default.func.isRequired, fieldsErrors: _reactImmutableProptypes.default.map.isRequired, entry: _reactImmutableProptypes.default.map.isRequired, t: _propTypes.default.func }); _defineProperty(ListControl, "defaultProps", { value: (0, _immutable.List)(), parentIds: [] });