kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
203 lines (202 loc) • 30.2 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.StyledWarning = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _icons = require("../common/icons");
var _styledComponents2 = require("../common/styled-components");
var _useCloudListProvider2 = require("../hooks/use-cloud-list-provider");
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6; // 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; }
var StyledTileWrapper = _styledComponents["default"].div.attrs({
className: 'provider-tile__wrapper'
})(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n border-radius: 2px;\n border: 1px solid\n ", ";\n color: ", ";\n cursor: pointer;\n font-weight: 500;\n width: 120px;\n height: 168px;\n background-color: #ffffff;\n transition: ", ";\n position: relative;\n &:hover {\n border: 1px solid ", ";\n color: ", ";\n }\n\n .button {\n margin-top: 20px;\n }\n"])), function (props) {
return props.selected ? props.theme.primaryBtnBgd : props.theme.selectBorderColorLT;
}, function (props) {
return props.selected ? props.theme.primaryBtnBgd : props.theme.selectBorderColorLT;
}, function (props) {
return props.theme.transition;
}, function (props) {
return props.theme.primaryBtnBgd;
}, function (props) {
return props.theme.primaryBtnBgd;
});
var StyledBox = (0, _styledComponents["default"])(_styledComponents2.CenterVerticalFlexbox)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 12px;\n position: relative;\n"])));
var StyledCloudName = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 12px;\n margin-top: 12px;\n margin-bottom: 4px;\n"])));
var StyledUserName = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 11px;\n margin-top: 8px;\n text-align: center;\n color: ", ";\n overflow: hidden;\n width: 100px;\n text-overflow: ellipsis;\n"])), function (props) {
return props.theme.primaryBtnActBgd;
});
var LoginButton = function LoginButton(_ref) {
var onClick = _ref.onClick;
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, {
className: "login-button",
link: true,
small: true,
onClick: onClick
}, /*#__PURE__*/_react["default"].createElement(_icons.Login, null), "Login");
};
var LogoutButton = function LogoutButton(_ref2) {
var onClick = _ref2.onClick;
return /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, {
className: "logout-button",
link: true,
small: true,
onClick: onClick
}, /*#__PURE__*/_react["default"].createElement(_icons.Logout, null), "Logout");
};
var NewTag = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: 37px;\n height: 19px;\n display: flex;\n align-content: center;\n justify-content: center;\n border-radius: 8px;\n padding: 4px 8px;\n background-color: #EDE9F9;\n color: #8863F8;\n position: absolute;\n left: 35%;\n top: -8px\n z-index: 500;\n font-size: 11px;\n line-height: 10px;\n"])));
var StyledWarning = exports.StyledWarning = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-weight: ", ";\n"])), function (props) {
return props.theme.errorColor;
}, function (props) {
return props.theme.selectFontWeightBold;
});
/**
* this component display a provider and allows users to select and set the current provider
* @param provider
* @param actionName
* @constructor
*/
var CloudTile = function CloudTile(_ref3) {
var provider = _ref3.provider,
actionName = _ref3.actionName;
var _useState = (0, _react.useState)(null),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
user = _useState2[0],
setUser = _useState2[1];
var _useState3 = (0, _react.useState)(null),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
error = _useState4[0],
setError = _useState4[1];
var _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
isLoading = _useState6[0],
setIsLoading = _useState6[1];
var _useCloudListProvider = (0, _useCloudListProvider2.useCloudListProvider)(),
currentProvider = _useCloudListProvider.provider,
setProvider = _useCloudListProvider.setProvider;
var isSelected = provider === currentProvider;
(0, _react.useEffect)(function () {
if (!provider) {
return;
}
setError(null);
setIsLoading(true);
setError(null);
provider.getUser().then(setUser)["catch"](setError)["finally"](function () {
setError(null);
setIsLoading(false);
});
}, [provider]);
var onLogin = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var _user;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
setError(null);
setIsLoading(true);
_context.prev = 2;
_context.next = 5;
return provider.login();
case 5:
_user = _context.sent;
setUser(_user);
setProvider(provider);
_context.next = 13;
break;
case 10:
_context.prev = 10;
_context.t0 = _context["catch"](2);
setError(_context.t0);
case 13:
setIsLoading(false);
case 14:
case "end":
return _context.stop();
}
}, _callee, null, [[2, 10]]);
})), [provider, setProvider]);
var onSelect = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
if (!isLoading) {
_context2.next = 2;
break;
}
return _context2.abrupt("return");
case 2:
if (!user) {
_context2.next = 5;
break;
}
setProvider(provider);
return _context2.abrupt("return");
case 5:
_context2.prev = 5;
_context2.next = 8;
return onLogin();
case 8:
setProvider(provider);
_context2.next = 15;
break;
case 11:
_context2.prev = 11;
_context2.t0 = _context2["catch"](5);
setError(_context2.t0);
setProvider(null);
case 15:
case "end":
return _context2.stop();
}
}, _callee2, null, [[5, 11]]);
})), [setProvider, provider, user, isLoading, onLogin]);
var onLogout = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
setIsLoading(true);
_context3.prev = 1;
_context3.next = 4;
return provider.logout();
case 4:
_context3.next = 9;
break;
case 6:
_context3.prev = 6;
_context3.t0 = _context3["catch"](1);
setError(_context3.t0);
case 9:
setIsLoading(false);
setUser(null);
setProvider(null);
case 12:
case "end":
return _context3.stop();
}
}, _callee3, null, [[1, 6]]);
})), [provider, setProvider]);
var displayName = provider.displayName,
name = provider.name;
return /*#__PURE__*/_react["default"].createElement(StyledBox, null, provider.isNew ? /*#__PURE__*/_react["default"].createElement(NewTag, null, "New") : null, /*#__PURE__*/_react["default"].createElement("div", null), /*#__PURE__*/_react["default"].createElement(StyledTileWrapper, {
onClick: onSelect,
selected: isSelected
}, /*#__PURE__*/_react["default"].createElement(StyledCloudName, null, displayName || name), provider.icon ? /*#__PURE__*/_react["default"].createElement(provider.icon, {
height: "64px"
}) : null, isLoading ? /*#__PURE__*/_react["default"].createElement("div", null, "Loading ...") : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, user ? /*#__PURE__*/_react["default"].createElement(StyledUserName, null, actionName || user.name) : null), isSelected ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.CheckMark, null) : null), user || error ? /*#__PURE__*/_react["default"].createElement(LogoutButton, {
onClick: onLogout
}) : /*#__PURE__*/_react["default"].createElement(LoginButton, {
onClick: onLogin
}), error ? /*#__PURE__*/_react["default"].createElement(StyledWarning, null, error.message) : null);
};
var _default = exports["default"] = CloudTile;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIyIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRUaWxlV3JhcHBlciIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInNlbGVjdGVkIiwidGhlbWUiLCJwcmltYXJ5QnRuQmdkIiwic2VsZWN0Qm9yZGVyQ29sb3JMVCIsInRyYW5zaXRpb24iLCJTdHlsZWRCb3giLCJDZW50ZXJWZXJ0aWNhbEZsZXhib3giLCJTdHlsZWRDbG91ZE5hbWUiLCJTdHlsZWRVc2VyTmFtZSIsInByaW1hcnlCdG5BY3RCZ2QiLCJMb2dpbkJ1dHRvbiIsIl9yZWYiLCJvbkNsaWNrIiwiY3JlYXRlRWxlbWVudCIsIkJ1dHRvbiIsImxpbmsiLCJzbWFsbCIsIkxvZ2luIiwiTG9nb3V0QnV0dG9uIiwiX3JlZjIiLCJMb2dvdXQiLCJOZXdUYWciLCJTdHlsZWRXYXJuaW5nIiwiZXhwb3J0cyIsInNwYW4iLCJlcnJvckNvbG9yIiwic2VsZWN0Rm9udFdlaWdodEJvbGQiLCJDbG91ZFRpbGUiLCJfcmVmMyIsInByb3ZpZGVyIiwiYWN0aW9uTmFtZSIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInVzZXIiLCJzZXRVc2VyIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJfdXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJ1c2VDbG91ZExpc3RQcm92aWRlciIsImN1cnJlbnRQcm92aWRlciIsInNldFByb3ZpZGVyIiwiaXNTZWxlY3RlZCIsInVzZUVmZmVjdCIsImdldFVzZXIiLCJ0aGVuIiwib25Mb2dpbiIsInVzZUNhbGxiYWNrIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJfdXNlciIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJsb2dpbiIsInNlbnQiLCJ0MCIsInN0b3AiLCJvblNlbGVjdCIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYWJydXB0Iiwib25Mb2dvdXQiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImxvZ291dCIsImRpc3BsYXlOYW1lIiwibmFtZSIsImlzTmV3IiwiaWNvbiIsImhlaWdodCIsIkZyYWdtZW50IiwiQ2hlY2tNYXJrIiwibWVzc2FnZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGFscy9jbG91ZC10aWxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge0lTdHlsZWRDb21wb25lbnR9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TG9nb3V0LCBMb2dpbn0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCB7Q2VudGVyVmVydGljYWxGbGV4Ym94LCBCdXR0b24sIENoZWNrTWFya30gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7UHJvdmlkZXIsIENsb3VkVXNlcn0gZnJvbSAnQGtlcGxlci5nbC9jbG91ZC1wcm92aWRlcnMnO1xuaW1wb3J0IHt1c2VDbG91ZExpc3RQcm92aWRlcn0gZnJvbSAnLi4vaG9va3MvdXNlLWNsb3VkLWxpc3QtcHJvdmlkZXInO1xuaW1wb3J0IHtCYXNlQ29tcG9uZW50UHJvcHN9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgU3R5bGVkVGlsZVdyYXBwZXJQcm9wcyA9IEJhc2VDb21wb25lbnRQcm9wcyAmIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgU3R5bGVkVGlsZVdyYXBwZXI6IElTdHlsZWRDb21wb25lbnQ8J3dlYicsIFN0eWxlZFRpbGVXcmFwcGVyUHJvcHM+ID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3Byb3ZpZGVyLXRpbGVfX3dyYXBwZXInXG59KTxTdHlsZWRUaWxlV3JhcHBlclByb3BzPmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiAocHJvcHMuc2VsZWN0ZWQgPyBwcm9wcy50aGVtZS5wcmltYXJ5QnRuQmdkIDogcHJvcHMudGhlbWUuc2VsZWN0Qm9yZGVyQ29sb3JMVCl9O1xuICBjb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuc2VsZWN0ZWQgPyBwcm9wcy50aGVtZS5wcmltYXJ5QnRuQmdkIDogcHJvcHMudGhlbWUuc2VsZWN0Qm9yZGVyQ29sb3JMVCl9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHdpZHRoOiAxMjBweDtcbiAgaGVpZ2h0OiAxNjhweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgdHJhbnNpdGlvbjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50cmFuc2l0aW9ufTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmOmhvdmVyIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5CZ2R9O1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5CZ2R9O1xuICB9XG5cbiAgLmJ1dHRvbiB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkQm94ID0gc3R5bGVkKENlbnRlclZlcnRpY2FsRmxleGJveClgXG4gIG1hcmdpbi1yaWdodDogMTJweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcblxuY29uc3QgU3R5bGVkQ2xvdWROYW1lID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAxMnB4O1xuICBtYXJnaW4tdG9wOiAxMnB4O1xuICBtYXJnaW4tYm90dG9tOiA0cHg7XG5gO1xuXG5jb25zdCBTdHlsZWRVc2VyTmFtZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5BY3RCZ2R9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwcHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuYDtcblxuaW50ZXJmYWNlIE9uQ2xpY2tQcm9wcyB7XG4gIG9uQ2xpY2s/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD47XG59XG5cbmNvbnN0IExvZ2luQnV0dG9uID0gKHtvbkNsaWNrfTogT25DbGlja1Byb3BzKSA9PiAoXG4gIDxCdXR0b24gY2xhc3NOYW1lPVwibG9naW4tYnV0dG9uXCIgbGluayBzbWFsbCBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICA8TG9naW4gLz5cbiAgICBMb2dpblxuICA8L0J1dHRvbj5cbik7XG5cbmNvbnN0IExvZ291dEJ1dHRvbiA9ICh7b25DbGlja306IE9uQ2xpY2tQcm9wcykgPT4gKFxuICA8QnV0dG9uIGNsYXNzTmFtZT1cImxvZ291dC1idXR0b25cIiBsaW5rIHNtYWxsIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgIDxMb2dvdXQgLz5cbiAgICBMb2dvdXRcbiAgPC9CdXR0b24+XG4pO1xuXG5jb25zdCBOZXdUYWcgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMzdweDtcbiAgaGVpZ2h0OiAxOXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFREU5Rjk7XG4gIGNvbG9yOiAjODg2M0Y4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDM1JTtcbiAgdG9wOiAtOHB4XG4gIHotaW5kZXg6IDUwMDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBsaW5lLWhlaWdodDogMTBweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBTdHlsZWRXYXJuaW5nID0gc3R5bGVkLnNwYW5gXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVycm9yQ29sb3J9O1xuICBmb250LXdlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zZWxlY3RGb250V2VpZ2h0Qm9sZH07XG5gO1xuXG5pbnRlcmZhY2UgQ2xvdWRUaWxlUHJvcHMge1xuICBhY3Rpb25OYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgLy8gY2xvdWQgcHJvdmlkZXIgY2xhc3NcbiAgcHJvdmlkZXI6IFByb3ZpZGVyO1xufVxuXG4vKipcbiAqIHRoaXMgY29tcG9uZW50IGRpc3BsYXkgYSBwcm92aWRlciBhbmQgYWxsb3dzIHVzZXJzIHRvIHNlbGVjdCBhbmQgc2V0IHRoZSBjdXJyZW50IHByb3ZpZGVyXG4gKiBAcGFyYW0gcHJvdmlkZXJcbiAqIEBwYXJhbSBhY3Rpb25OYW1lXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuY29uc3QgQ2xvdWRUaWxlOiBSZWFjdC5GQzxDbG91ZFRpbGVQcm9wcz4gPSAoe3Byb3ZpZGVyLCBhY3Rpb25OYW1lfSkgPT4ge1xuICBjb25zdCBbdXNlciwgc2V0VXNlcl0gPSB1c2VTdGF0ZTxDbG91ZFVzZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7cHJvdmlkZXI6IGN1cnJlbnRQcm92aWRlciwgc2V0UHJvdmlkZXJ9ID0gdXNlQ2xvdWRMaXN0UHJvdmlkZXIoKTtcbiAgY29uc3QgaXNTZWxlY3RlZCA9IHByb3ZpZGVyID09PSBjdXJyZW50UHJvdmlkZXI7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICBwcm92aWRlclxuICAgICAgLmdldFVzZXIoKVxuICAgICAgLnRoZW4oc2V0VXNlcilcbiAgICAgIC5jYXRjaChzZXRFcnJvcilcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICB9KTtcbiAgfSwgW3Byb3ZpZGVyXSk7XG5cbiAgY29uc3Qgb25Mb2dpbiA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBwcm92aWRlci5sb2dpbigpO1xuICAgICAgc2V0VXNlcih1c2VyKTtcbiAgICAgIHNldFByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0RXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICB9LCBbcHJvdmlkZXIsIHNldFByb3ZpZGVyXSk7XG5cbiAgY29uc3Qgb25TZWxlY3QgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodXNlcikge1xuICAgICAgc2V0UHJvdmlkZXIocHJvdmlkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgb25Mb2dpbigpO1xuICAgICAgc2V0UHJvdmlkZXIocHJvdmlkZXIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2V0RXJyb3IoZXJyIGFzIEVycm9yKTtcbiAgICAgIHNldFByb3ZpZGVyKG51bGwpO1xuICAgIH1cbiAgfSwgW3NldFByb3ZpZGVyLCBwcm92aWRlciwgdXNlciwgaXNMb2FkaW5nLCBvbkxvZ2luXSk7XG5cbiAgY29uc3Qgb25Mb2dvdXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwcm92aWRlci5sb2dvdXQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0RXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIHNldFVzZXIobnVsbCk7XG4gICAgc2V0UHJvdmlkZXIobnVsbCk7XG4gIH0sIFtwcm92aWRlciwgc2V0UHJvdmlkZXJdKTtcblxuICBjb25zdCB7ZGlzcGxheU5hbWUsIG5hbWV9ID0gcHJvdmlkZXI7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkQm94PlxuICAgICAge3Byb3ZpZGVyLmlzTmV3ID8gPE5ld1RhZz5OZXc8L05ld1RhZz4gOiBudWxsfVxuICAgICAgPGRpdiAvPlxuICAgICAgPFN0eWxlZFRpbGVXcmFwcGVyIG9uQ2xpY2s9e29uU2VsZWN0fSBzZWxlY3RlZD17aXNTZWxlY3RlZH0+XG4gICAgICAgIDxTdHlsZWRDbG91ZE5hbWU+e2Rpc3BsYXlOYW1lIHx8IG5hbWV9PC9TdHlsZWRDbG91ZE5hbWU+XG4gICAgICAgIHtwcm92aWRlci5pY29uID8gPHByb3ZpZGVyLmljb24gaGVpZ2h0PVwiNjRweFwiIC8+IDogbnVsbH1cbiAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICA8ZGl2PkxvYWRpbmcgLi4uPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD57dXNlciA/IDxTdHlsZWRVc2VyTmFtZT57YWN0aW9uTmFtZSB8fCB1c2VyLm5hbWV9PC9TdHlsZWRVc2VyTmFtZT4gOiBudWxsfTwvPlxuICAgICAgICApfVxuICAgICAgICB7aXNTZWxlY3RlZCA/IDxDaGVja01hcmsgLz4gOiBudWxsfVxuICAgICAgPC9TdHlsZWRUaWxlV3JhcHBlcj5cbiAgICAgIHt1c2VyIHx8IGVycm9yID8gPExvZ291dEJ1dHRvbiBvbkNsaWNrPXtvbkxvZ291dH0gLz4gOiA8TG9naW5CdXR0b24gb25DbGljaz17b25Mb2dpbn0gLz59XG4gICAgICB7ZXJyb3IgPyA8U3R5bGVkV2FybmluZz57ZXJyb3IubWVzc2FnZX08L1N0eWxlZFdhcm5pbmc+IDogbnVsbH1cbiAgICA8L1N0eWxlZEJveD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENsb3VkVGlsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGtCQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxzQkFBQSxHQUFBTCxPQUFBO0FBQXNFLElBQUFNLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFSdEU7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBZCx3QkFBQWMsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFB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
;