kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
173 lines (172 loc) • 30.8 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.FieldListItemFactoryFactory = FieldListItemFactoryFactory;
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _reselect = require("reselect");
var _commonUtils = require("@kepler.gl/common-utils");
var _itemSelector = _interopRequireDefault(require("./item-selector/item-selector"));
var _dropdownList = require("./item-selector/dropdown-list");
var _fieldToken = _interopRequireDefault(require("../common/field-token"));
var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var defaultDisplayOption = function defaultDisplayOption(d) {
return d.displayName || d.name;
};
var defaultValueOption = function defaultValueOption(d) {
return d.name;
};
var StyledToken = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-block;\n margin: 0 ", "px 0 0;\n"])), function (props) {
return props.theme.fieldTokenRightMargin;
});
var StyledFieldListItem = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n line-height: 0;\n display: flex;\n flex-direction: row;\n align-items: center;\n"])));
var StyledFieldSelector = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n .item-selector__dropdown {\n // smaller padding on the side to accomodate field token\n padding: 0 6px;\n }\n"])));
FieldListItemFactoryFactory.deps = [_fieldToken["default"]];
// custom list Item
function FieldListItemFactoryFactory(FieldToken) {
var FieldListItemFactory = function FieldListItemFactory() {
var showToken = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
var FieldListItem = function FieldListItem(_ref) {
var value = _ref.value,
_ref$displayOption = _ref.displayOption,
displayOption = _ref$displayOption === void 0 ? defaultDisplayOption : _ref$displayOption;
return /*#__PURE__*/_react["default"].createElement(StyledFieldListItem, {
className: "field-selector_list-item"
}, showToken ? /*#__PURE__*/_react["default"].createElement(StyledToken, null, /*#__PURE__*/_react["default"].createElement(FieldToken, {
type: value.type
})) : null, /*#__PURE__*/_react["default"].createElement("span", {
className: _dropdownList.classList.listItemAnchor
}, displayOption(value)));
};
return FieldListItem;
};
return FieldListItemFactory;
}
var SuggestedFieldHeader = function SuggestedFieldHeader() {
return /*#__PURE__*/_react["default"].createElement("div", null, "Suggested Field");
};
function noop() {
return;
}
function FieldSelectorFactory(FieldListItemFactory) {
var FieldSelector = /*#__PURE__*/function (_Component) {
function FieldSelector() {
var _this;
(0, _classCallCheck2["default"])(this, FieldSelector);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, FieldSelector, [].concat(args));
(0, _defineProperty2["default"])(_this, "fieldsSelector", function (props) {
return props.fields;
});
(0, _defineProperty2["default"])(_this, "valueSelector", function (props) {
return props.value;
});
(0, _defineProperty2["default"])(_this, "filteredFieldsSelector", (0, _reselect.createSelector)(_this.fieldsSelector, _this.valueSelector, function (fields, value) {
return fields.filter(function (field) {
return !(0, _commonUtils.toArray)(value).find(function (d) {
return d.name ? d.name === field.name : d === field.name;
});
});
}));
(0, _defineProperty2["default"])(_this, "filterFieldTypesSelector", function (props) {
return props.filterFieldTypes;
});
(0, _defineProperty2["default"])(_this, "showTokenSelector", function (props) {
return props.showToken;
});
(0, _defineProperty2["default"])(_this, "selectedItemsSelector", (0, _reselect.createSelector)(_this.fieldsSelector, _this.valueSelector, function (fields, value) {
return (0, _commonUtils.toArray)(value).map(function (d) {
return fields.find(function (f) {
return (0, _commonUtils.notNullorUndefined)(d) && d.name ? d.name === defaultValueOption(f) : d === defaultValueOption(f);
});
}).filter(function (d) {
return d;
});
}));
(0, _defineProperty2["default"])(_this, "fieldOptionsSelector", (0, _reselect.createSelector)(_this.filteredFieldsSelector, _this.filterFieldTypesSelector, function (fields, filterFieldTypes) {
if (!filterFieldTypes) {
return fields;
}
var filters = Array.isArray(filterFieldTypes) ? filterFieldTypes : [filterFieldTypes];
return fields.filter(function (f) {
return filters.includes(f.type);
});
}));
// @ts-ignore Fix later
(0, _defineProperty2["default"])(_this, "fieldListItemSelector", (0, _reselect.createSelector)(_this.showTokenSelector, FieldListItemFactory));
return _this;
}
(0, _inherits2["default"])(FieldSelector, _Component);
return (0, _createClass2["default"])(FieldSelector, [{
key: "render",
value: function render() {
return /*#__PURE__*/_react["default"].createElement(StyledFieldSelector, {
className: (0, _classnames["default"])('field-selector', this.props.className)
}, /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
getOptionValue: function getOptionValue(d) {
return d;
},
disabled: this.props.disabled,
closeOnSelect: this.props.closeOnSelect,
displayOption: defaultDisplayOption,
filterOption: "displayName",
fixedOptions: this.props.suggested,
inputTheme: this.props.inputTheme,
size: this.props.size,
isError: this.props.error,
selectedItems: this.selectedItemsSelector(this.props),
erasable: this.props.erasable
// @ts-ignore - Argument of type 'Readonly<FieldSelectorFactoryProps>' is not assignable to parameter of type 'never'
,
options: this.fieldOptionsSelector(this.props),
multiSelect: this.props.multiSelect,
placeholder: this.props.placeholder,
placement: this.props.placement,
onChange: this.props.onSelect,
reorderItems: this.props.reorderItems,
DropDownLineItemRenderComponent: this.fieldListItemSelector(this.props),
DropdownHeaderComponent: this.props.suggested ? SuggestedFieldHeader : null,
CustomChickletComponent: this.props.CustomChickletComponent
}));
}
}]);
}(_react.Component); // @ts-ignore: Fix me
(0, _defineProperty2["default"])(FieldSelector, "defaultProps", {
erasable: true,
disabled: false,
error: false,
fields: [],
onSelect: noop,
reorderItems: noop,
placement: 'bottom',
value: null,
multiSelect: false,
closeOnSelect: true,
showToken: true,
placeholder: 'placeholder.selectField',
className: ''
});
return FieldSelector;
}
FieldSelectorFactory.deps = [FieldListItemFactoryFactory];
var _default = exports["default"] = FieldSelectorFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZXNlbGVjdCIsIl9jb21tb25VdGlscyIsIl9pdGVtU2VsZWN0b3IiLCJfZHJvcGRvd25MaXN0IiwiX2ZpZWxkVG9rZW4iLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiZGVmYXVsdERpc3BsYXlPcHRpb24iLCJkIiwiZGlzcGxheU5hbWUiLCJuYW1lIiwiZGVmYXVsdFZhbHVlT3B0aW9uIiwiU3R5bGVkVG9rZW4iLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJmaWVsZFRva2VuUmlnaHRNYXJnaW4iLCJTdHlsZWRGaWVsZExpc3RJdGVtIiwiU3R5bGVkRmllbGRTZWxlY3RvciIsIkZpZWxkTGlzdEl0ZW1GYWN0b3J5RmFjdG9yeSIsImRlcHMiLCJGaWVsZFRva2VuRmFjdG9yeSIsIkZpZWxkVG9rZW4iLCJGaWVsZExpc3RJdGVtRmFjdG9yeSIsInNob3dUb2tlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIkZpZWxkTGlzdEl0ZW0iLCJfcmVmIiwidmFsdWUiLCJfcmVmJGRpc3BsYXlPcHRpb24iLCJkaXNwbGF5T3B0aW9uIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInR5cGUiLCJjbGFzc0xpc3QiLCJsaXN0SXRlbUFuY2hvciIsIlN1Z2dlc3RlZEZpZWxkSGVhZGVyIiwibm9vcCIsIkZpZWxkU2VsZWN0b3JGYWN0b3J5IiwiRmllbGRTZWxlY3RvciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJmaWVsZHMiLCJjcmVhdGVTZWxlY3RvciIsImZpZWxkc1NlbGVjdG9yIiwidmFsdWVTZWxlY3RvciIsImZpbHRlciIsImZpZWxkIiwidG9BcnJheSIsImZpbmQiLCJmaWx0ZXJGaWVsZFR5cGVzIiwibWFwIiwiZiIsIm5vdE51bGxvclVuZGVmaW5lZCIsImZpbHRlcmVkRmllbGRzU2VsZWN0b3IiLCJmaWx0ZXJGaWVsZFR5cGVzU2VsZWN0b3IiLCJmaWx0ZXJzIiwiaXNBcnJheSIsImluY2x1ZGVzIiwic2hvd1Rva2VuU2VsZWN0b3IiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInJlbmRlciIsImNsYXNzbmFtZXMiLCJnZXRPcHRpb25WYWx1ZSIsImRpc2FibGVkIiwiY2xvc2VPblNlbGVjdCIsImZpbHRlck9wdGlvbiIsImZpeGVkT3B0aW9ucyIsInN1Z2dlc3RlZCIsImlucHV0VGhlbWUiLCJzaXplIiwiaXNFcnJvciIsImVycm9yIiwic2VsZWN0ZWRJdGVtcyIsInNlbGVjdGVkSXRlbXNTZWxlY3RvciIsImVyYXNhYmxlIiwib3B0aW9ucyIsImZpZWxkT3B0aW9uc1NlbGVjdG9yIiwibXVsdGlTZWxlY3QiLCJwbGFjZWhvbGRlciIsInBsYWNlbWVudCIsIm9uQ2hhbmdlIiwib25TZWxlY3QiLCJyZW9yZGVySXRlbXMiLCJEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50IiwiZmllbGRMaXN0SXRlbVNlbGVjdG9yIiwiRHJvcGRvd25IZWFkZXJDb21wb25lbnQiLCJDdXN0b21DaGlja2xldENvbXBvbmVudCIsIkNvbXBvbmVudCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tb24vZmllbGQtc2VsZWN0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBDb21wb25lbnRUeXBlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcblxuaW1wb3J0IHtGaWVsZCwgVG9vbHRpcEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkLCB0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCBJdGVtU2VsZWN0b3IgZnJvbSAnLi9pdGVtLXNlbGVjdG9yL2l0ZW0tc2VsZWN0b3InO1xuaW1wb3J0IHtjbGFzc0xpc3R9IGZyb20gJy4vaXRlbS1zZWxlY3Rvci9kcm9wZG93bi1saXN0JztcbmltcG9ydCBGaWVsZFRva2VuRmFjdG9yeSBmcm9tICcuLi9jb21tb24vZmllbGQtdG9rZW4nO1xuXG5jb25zdCBkZWZhdWx0RGlzcGxheU9wdGlvbiA9IChkOiBGaWVsZCkgPT4gZC5kaXNwbGF5TmFtZSB8fCBkLm5hbWU7XG5jb25zdCBkZWZhdWx0VmFsdWVPcHRpb24gPSAoZDogRmllbGQpID0+IGQubmFtZTtcblxuY29uc3QgU3R5bGVkVG9rZW4gPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZpZWxkVG9rZW5SaWdodE1hcmdpbn1weCAwIDA7XG5gO1xuY29uc3QgU3R5bGVkRmllbGRMaXN0SXRlbSA9IHN0eWxlZC5kaXZgXG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYDtcbmNvbnN0IFN0eWxlZEZpZWxkU2VsZWN0b3IgPSBzdHlsZWQuZGl2YFxuICAuaXRlbS1zZWxlY3Rvcl9fZHJvcGRvd24ge1xuICAgIC8vIHNtYWxsZXIgcGFkZGluZyBvbiB0aGUgc2lkZSB0byBhY2NvbW9kYXRlIGZpZWxkIHRva2VuXG4gICAgcGFkZGluZzogMCA2cHg7XG4gIH1cbmA7XG5leHBvcnQgdHlwZSBGaWVsZExpc3RJdGVtRmFjdG9yeVByb3BzID0ge1xuICB2YWx1ZTogRmllbGQ7XG4gIGRpc3BsYXlPcHRpb246IChmaWVsZDogRmllbGQpID0+IHN0cmluZztcbn07XG5cbkZpZWxkTGlzdEl0ZW1GYWN0b3J5RmFjdG9yeS5kZXBzID0gW0ZpZWxkVG9rZW5GYWN0b3J5XTtcbi8vIGN1c3RvbSBsaXN0IEl0ZW1cbmV4cG9ydCBmdW5jdGlvbiBGaWVsZExpc3RJdGVtRmFjdG9yeUZhY3RvcnkoRmllbGRUb2tlbikge1xuICBjb25zdCBGaWVsZExpc3RJdGVtRmFjdG9yeSA9IChzaG93VG9rZW4gPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgRmllbGRMaXN0SXRlbSA9ICh7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRpc3BsYXlPcHRpb24gPSBkZWZhdWx0RGlzcGxheU9wdGlvblxuICAgIH06IEZpZWxkTGlzdEl0ZW1GYWN0b3J5UHJvcHMpID0+IChcbiAgICAgIDxTdHlsZWRGaWVsZExpc3RJdGVtIGNsYXNzTmFtZT1cImZpZWxkLXNlbGVjdG9yX2xpc3QtaXRlbVwiPlxuICAgICAgICB7c2hvd1Rva2VuID8gKFxuICAgICAgICAgIDxTdHlsZWRUb2tlbj5cbiAgICAgICAgICAgIDxGaWVsZFRva2VuIHR5cGU9e3ZhbHVlLnR5cGV9IC8+XG4gICAgICAgICAgPC9TdHlsZWRUb2tlbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3NMaXN0Lmxpc3RJdGVtQW5jaG9yfT57ZGlzcGxheU9wdGlvbih2YWx1ZSl9PC9zcGFuPlxuICAgICAgPC9TdHlsZWRGaWVsZExpc3RJdGVtPlxuICAgICk7XG4gICAgcmV0dXJuIEZpZWxkTGlzdEl0ZW07XG4gIH07XG4gIHJldHVybiBGaWVsZExpc3RJdGVtRmFjdG9yeTtcbn1cblxuY29uc3QgU3VnZ2VzdGVkRmllbGRIZWFkZXIgPSAoKSA9PiA8ZGl2PlN1Z2dlc3RlZCBGaWVsZDwvZGl2PjtcblxuZXhwb3J0IHR5cGUgTWluaW1hbEZpZWxkID0ge25hbWU6IHN0cmluZzsgZGlzcGxheU5hbWU6IHN0cmluZzsgZm9ybWF0OiBzdHJpbmc7IHR5cGU/OiBzdHJpbmd9O1xuZXhwb3J0IHR5cGUgRmllbGRUeXBlID0gc3RyaW5nIHwgVG9vbHRpcEZpZWxkIHwgRmllbGQ7XG5leHBvcnQgdHlwZSBGaWVsZFZhbHVlID0gc3RyaW5nIHwge25hbWU6IHN0cmluZ30gfCBzdHJpbmdbXSB8IHtuYW1lOiBzdHJpbmd9W107XG5cbmV4cG9ydCB0eXBlIEZpZWxkU2VsZWN0b3JQcm9wczxPcHRpb24gZXh0ZW5kcyBNaW5pbWFsRmllbGQ+ID0ge1xuICBpZD86IHN0cmluZztcbiAgZmllbGRzOiBPcHRpb25bXTtcbiAgb25TZWxlY3Q6IChcbiAgICBpdGVtczpcbiAgICAgIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0PlxuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgbnVtYmVyXG4gICAgICB8IGJvb2xlYW5cbiAgICAgIHwgb2JqZWN0XG4gICAgICB8IG51bGxcbiAgKSA9PiB2b2lkO1xuICB2YWx1ZT86IEZpZWxkVmFsdWUgfCBudWxsO1xuICBmaWx0ZXJGaWVsZFR5cGVzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIGlucHV0VGhlbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGVyYXNhYmxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBlcnJvcj86IGJvb2xlYW47XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW47XG4gIHNob3dUb2tlbj86IGJvb2xlYW47XG4gIHN1Z2dlc3RlZD86IE9wdGlvbltdIHwgbnVsbDtcbiAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQ/OiBDb21wb25lbnRUeXBlPGFueT47XG4gIHNpemU/OiBzdHJpbmc7XG4gIHJlb3JkZXJJdGVtcz86IChuZXdPcmRlcjogYW55KSA9PiB2b2lkO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBub29wKCkge1xuICByZXR1cm47XG59XG5mdW5jdGlvbiBGaWVsZFNlbGVjdG9yRmFjdG9yeShcbiAgRmllbGRMaXN0SXRlbUZhY3Rvcnk6IFJldHVyblR5cGU8dHlwZW9mIEZpZWxkTGlzdEl0ZW1GYWN0b3J5RmFjdG9yeT5cbik6IENvbXBvbmVudFR5cGU8RmllbGRTZWxlY3RvclByb3BzPE1pbmltYWxGaWVsZD4+IHtcbiAgY2xhc3MgRmllbGRTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudDxGaWVsZFNlbGVjdG9yUHJvcHM8TWluaW1hbEZpZWxkPj4ge1xuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBlcmFzYWJsZTogdHJ1ZSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgIGZpZWxkczogW10sXG4gICAgICBvblNlbGVjdDogbm9vcCxcbiAgICAgIHJlb3JkZXJJdGVtczogbm9vcCxcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsXG4gICAgICBzaG93VG9rZW46IHRydWUsXG4gICAgICBwbGFjZWhvbGRlcjogJ3BsYWNlaG9sZGVyLnNlbGVjdEZpZWxkJyxcbiAgICAgIGNsYXNzTmFtZTogJydcbiAgICB9O1xuXG4gICAgZmllbGRzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5maWVsZHM7XG4gICAgdmFsdWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZhbHVlO1xuICAgIGZpbHRlcmVkRmllbGRzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmllbGRzU2VsZWN0b3IsXG4gICAgICB0aGlzLnZhbHVlU2VsZWN0b3IsXG4gICAgICAoZmllbGRzLCB2YWx1ZSkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRzLmZpbHRlcihcbiAgICAgICAgICBmaWVsZCA9PiAhdG9BcnJheSh2YWx1ZSkuZmluZChkID0+IChkLm5hbWUgPyBkLm5hbWUgPT09IGZpZWxkLm5hbWUgOiBkID09PSBmaWVsZC5uYW1lKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGZpbHRlckZpZWxkVHlwZXNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmZpbHRlckZpZWxkVHlwZXM7XG4gICAgc2hvd1Rva2VuU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5zaG93VG9rZW47XG5cbiAgICBzZWxlY3RlZEl0ZW1zU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmllbGRzU2VsZWN0b3IsXG4gICAgICB0aGlzLnZhbHVlU2VsZWN0b3IsXG4gICAgICAoZmllbGRzLCB2YWx1ZSkgPT5cbiAgICAgICAgdG9BcnJheSh2YWx1ZSlcbiAgICAgICAgICAubWFwKGQgPT5cbiAgICAgICAgICAgIGZpZWxkcy5maW5kKGYgPT5cbiAgICAgICAgICAgICAgbm90TnVsbG9yVW5kZWZpbmVkKGQpICYmIGQubmFtZVxuICAgICAgICAgICAgICAgID8gZC5uYW1lID09PSBkZWZhdWx0VmFsdWVPcHRpb24oZilcbiAgICAgICAgICAgICAgICA6IGQgPT09IGRlZmF1bHRWYWx1ZU9wdGlvbihmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZClcbiAgICApO1xuXG4gICAgZmllbGRPcHRpb25zU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmlsdGVyZWRGaWVsZHNTZWxlY3RvcixcbiAgICAgIHRoaXMuZmlsdGVyRmllbGRUeXBlc1NlbGVjdG9yLFxuICAgICAgKGZpZWxkcywgZmlsdGVyRmllbGRUeXBlcykgPT4ge1xuICAgICAgICBpZiAoIWZpbHRlckZpZWxkVHlwZXMpIHtcbiAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBBcnJheS5pc0FycmF5KGZpbHRlckZpZWxkVHlwZXMpID8gZmlsdGVyRmllbGRUeXBlcyA6IFtmaWx0ZXJGaWVsZFR5cGVzXTtcbiAgICAgICAgcmV0dXJuIGZpZWxkcy5maWx0ZXIoZiA9PiBmaWx0ZXJzLmluY2x1ZGVzKGYudHlwZSkpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBAdHMtaWdub3JlIEZpeCBsYXRlclxuICAgIGZpZWxkTGlzdEl0ZW1TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuc2hvd1Rva2VuU2VsZWN0b3IsIEZpZWxkTGlzdEl0ZW1GYWN0b3J5KTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRGaWVsZFNlbGVjdG9yIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnZmllbGQtc2VsZWN0b3InLCB0aGlzLnByb3BzLmNsYXNzTmFtZSl9PlxuICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtkID0+IGR9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICAgIGNsb3NlT25TZWxlY3Q9e3RoaXMucHJvcHMuY2xvc2VPblNlbGVjdH1cbiAgICAgICAgICAgIGRpc3BsYXlPcHRpb249e2RlZmF1bHREaXNwbGF5T3B0aW9ufVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgZml4ZWRPcHRpb25zPXt0aGlzLnByb3BzLnN1Z2dlc3RlZH1cbiAgICAgICAgICAgIGlucHV0VGhlbWU9e3RoaXMucHJvcHMuaW5wdXRUaGVtZX1cbiAgICAgICAgICAgIHNpemU9e3RoaXMucHJvcHMuc2l6ZX1cbiAgICAgICAgICAgIGlzRXJyb3I9e3RoaXMucHJvcHMuZXJyb3J9XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXt0aGlzLnNlbGVjdGVkSXRlbXNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIGVyYXNhYmxlPXt0aGlzLnByb3BzLmVyYXNhYmxlfVxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSAtIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PEZpZWxkU2VsZWN0b3JGYWN0b3J5UHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICBvcHRpb25zPXt0aGlzLmZpZWxkT3B0aW9uc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e3RoaXMucHJvcHMubXVsdGlTZWxlY3R9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIHBsYWNlbWVudD17dGhpcy5wcm9wcy5wbGFjZW1lbnR9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgIHJlb3JkZXJJdGVtcz17dGhpcy5wcm9wcy5yZW9yZGVySXRlbXN9XG4gICAgICAgICAgICBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50PXt0aGlzLmZpZWxkTGlzdEl0ZW1TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIERyb3Bkb3duSGVhZGVyQ29tcG9uZW50PXt0aGlzLnByb3BzLnN1Z2dlc3RlZCA/IFN1Z2dlc3RlZEZpZWxkSGVhZGVyIDogbnVsbH1cbiAgICAgICAgICAgIEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50PXt0aGlzLnByb3BzLkN1c3RvbUNoaWNrbGV0Q29tcG9uZW50fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkRmllbGRTZWxlY3Rvcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZTogRml4IG1lXG4gIHJldHVybiBGaWVsZFNlbGVjdG9yO1xufVxuXG5GaWVsZFNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW0ZpZWxkTGlzdEl0ZW1GYWN0b3J5RmFjdG9yeV07XG5leHBvcnQgZGVmYXVsdCBGaWVsZFNlbGVjdG9yRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGlCQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFHQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxhQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxhQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFB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
;