kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
158 lines (157 loc) • 28.4 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.ChickletTag = exports.ChickletButton = void 0;
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _core = require("@dnd-kit/core");
var _sortable = require("@dnd-kit/sortable");
var _modifiers = require("@dnd-kit/modifiers");
var _localization = require("@kepler.gl/localization");
var _commonUtils = require("@kepler.gl/common-utils");
var _delete = _interopRequireDefault(require("../icons/delete"));
var _styledComponents2 = require("../styled-components");
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; }
var ChickletButton = exports.ChickletButton = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n background: ", ";\n border-radius: 1px;\n color: ", ";\n font-size: 11px;\n line-height: 20px;\n margin: 4px 10px 4px 3px;\n padding: 2px 6px;\n display: flex;\n align-items: center;\n max-width: calc(100% - 8px);\n\n &:hover {\n color: ", ";\n }\n"])), function (props) {
return props.inputTheme === 'light' ? props.theme.chickletBgdLT : props.theme.chickletBgd;
}, function (props) {
return props.inputTheme === 'light' ? props.theme.textColorLT : props.theme.textColor;
}, function (props) {
return props.inputTheme === 'light' ? props.theme.textColorHlLT : props.theme.textColorHl;
});
var DND_MODIFIERS = [_modifiers.restrictToParentElement];
var ChickletTag = exports.ChickletTag = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 10px;\n text-overflow: ellipsis;\n width: 100%;\n overflow: hidden;\n\n &:hover {\n overflow: visible;\n }\n"])));
var Chicklet = function Chicklet(_ref) {
var disabled = _ref.disabled,
name = _ref.name,
remove = _ref.remove,
inputTheme = _ref.inputTheme;
return /*#__PURE__*/_react["default"].createElement(ChickletButton, {
inputTheme: inputTheme
}, /*#__PURE__*/_react["default"].createElement(ChickletTag, null, name), /*#__PURE__*/_react["default"].createElement(_delete["default"], {
height: "16px",
onClick: disabled ? undefined : remove
}));
};
var ChickletedInputContainer = _styledComponents["default"].div.withConfig({
shouldForwardProp: _styledComponents2.shouldForwardProp
})(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n ", "\n\n color: ", ";\n overflow: hidden;\n"])), function (props) {
return props.inputTheme === 'secondary' ? props.theme.secondaryChickletedInput : props.inputTheme === 'light' ? props.theme.chickletedInputLT : props.theme.chickletedInput;
}, function (props) {
return props.hasPlaceholder ? props.theme.selectColorPlaceHolder : props.theme.selectColor;
});
var ChickletedItem = function ChickletedItem(_ref2) {
var item = _ref2.item,
removeItem = _ref2.removeItem,
displayOption = _ref2.displayOption,
CustomChickletComponent = _ref2.CustomChickletComponent,
inputTheme = _ref2.inputTheme,
disabled = _ref2.disabled,
itemId = _ref2.itemId;
var _useSortable = (0, _sortable.useSortable)({
id: itemId
}),
attributes = _useSortable.attributes,
listeners = _useSortable.listeners,
setNodeRef = _useSortable.setNodeRef,
transform = _useSortable.transform,
transition = _useSortable.transition,
isDragging = _useSortable.isDragging;
var chickletProps = (0, _react.useMemo)(function () {
return {
inputTheme: inputTheme,
disabled: disabled,
name: displayOption(item),
displayOption: displayOption,
item: item,
attributes: attributes,
listeners: listeners,
setNodeRef: setNodeRef,
transform: transform,
transition: transition,
isDragging: isDragging,
remove: function remove(e) {
return removeItem(item, e);
}
};
}, [item, removeItem, displayOption, inputTheme, disabled, attributes, listeners, setNodeRef, transform, transition, isDragging]);
return CustomChickletComponent ? /*#__PURE__*/_react["default"].createElement(CustomChickletComponent, chickletProps) : /*#__PURE__*/_react["default"].createElement(Chicklet, chickletProps);
};
var ChickletedInput = function ChickletedInput(_ref3) {
var disabled = _ref3.disabled,
onClick = _ref3.onClick,
className = _ref3.className,
_ref3$selectedItems = _ref3.selectedItems,
selectedItems = _ref3$selectedItems === void 0 ? [] : _ref3$selectedItems,
_ref3$placeholder = _ref3.placeholder,
placeholder = _ref3$placeholder === void 0 ? '' : _ref3$placeholder,
removeItem = _ref3.removeItem,
_ref3$reorderItems = _ref3.reorderItems,
reorderItems = _ref3$reorderItems === void 0 ? function (d) {
return d;
} : _ref3$reorderItems,
_ref3$displayOption = _ref3.displayOption,
displayOption = _ref3$displayOption === void 0 ? function (d) {
return String(d);
} : _ref3$displayOption,
inputTheme = _ref3.inputTheme,
CustomChickletComponent = _ref3.CustomChickletComponent;
var selectedItemIds = (0, _react.useMemo)(function () {
return selectedItems.map(function (item) {
return displayOption(item);
});
}, [displayOption, selectedItems]);
var handleDragEnd = (0, _react.useCallback)(function (_ref4) {
var active = _ref4.active,
over = _ref4.over;
if (!over) return;
if (active.id !== over.id) {
var oldIndex = selectedItemIds.findIndex(function (itemId) {
return itemId === active.id;
});
var newIndex = selectedItemIds.findIndex(function (itemId) {
return itemId === over.id;
});
reorderItems((0, _commonUtils.arrayMove)(selectedItems, oldIndex, newIndex));
}
}, [selectedItemIds, selectedItems, reorderItems]);
return /*#__PURE__*/_react["default"].createElement(ChickletedInputContainer, {
className: "".concat(className, " chickleted-input"),
onClick: onClick,
inputTheme: inputTheme,
hasPlaceholder: !selectedItems || !selectedItems.length
}, /*#__PURE__*/_react["default"].createElement(_core.DndContext, {
onDragEnd: handleDragEnd,
modifiers: DND_MODIFIERS,
collisionDetection: _core.pointerWithin,
autoScroll: false
}, /*#__PURE__*/_react["default"].createElement(_sortable.SortableContext, {
items: selectedItemIds
}, selectedItems.length > 0 ? selectedItems.map(function (item, index) {
return /*#__PURE__*/_react["default"].createElement(ChickletedItem, {
item: item,
itemId: displayOption(item),
removeItem: removeItem,
displayOption: displayOption,
CustomChickletComponent: CustomChickletComponent,
disabled: disabled,
inputTheme: inputTheme,
key: "".concat(displayOption(item), "_").concat(index)
});
}) : /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(className, " chickleted-input__placeholder")
}, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
id: placeholder || 'placeholder.enterValue'
}))), /*#__PURE__*/_react["default"].createElement(_core.DragOverlay, {
dropAnimation: null
})));
};
var _default = exports["default"] = ChickletedInput;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29yZSIsIl9zb3J0YWJsZSIsIl9tb2RpZmllcnMiLCJfbG9jYWxpemF0aW9uIiwiX2NvbW1vblV0aWxzIiwiX2RlbGV0ZSIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQ2hpY2tsZXRCdXR0b24iLCJleHBvcnRzIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsImlucHV0VGhlbWUiLCJ0aGVtZSIsImNoaWNrbGV0QmdkTFQiLCJjaGlja2xldEJnZCIsInRleHRDb2xvckxUIiwidGV4dENvbG9yIiwidGV4dENvbG9ySGxMVCIsInRleHRDb2xvckhsIiwiRE5EX01PRElGSUVSUyIsInJlc3RyaWN0VG9QYXJlbnRFbGVtZW50IiwiQ2hpY2tsZXRUYWciLCJzcGFuIiwiQ2hpY2tsZXQiLCJfcmVmIiwiZGlzYWJsZWQiLCJuYW1lIiwicmVtb3ZlIiwiY3JlYXRlRWxlbWVudCIsImhlaWdodCIsIm9uQ2xpY2siLCJ1bmRlZmluZWQiLCJDaGlja2xldGVkSW5wdXRDb250YWluZXIiLCJ3aXRoQ29uZmlnIiwic2hvdWxkRm9yd2FyZFByb3AiLCJzZWNvbmRhcnlDaGlja2xldGVkSW5wdXQiLCJjaGlja2xldGVkSW5wdXRMVCIsImNoaWNrbGV0ZWRJbnB1dCIsImhhc1BsYWNlaG9sZGVyIiwic2VsZWN0Q29sb3JQbGFjZUhvbGRlciIsInNlbGVjdENvbG9yIiwiQ2hpY2tsZXRlZEl0ZW0iLCJfcmVmMiIsIml0ZW0iLCJyZW1vdmVJdGVtIiwiZGlzcGxheU9wdGlvbiIsIkN1c3RvbUNoaWNrbGV0Q29tcG9uZW50IiwiaXRlbUlkIiwiX3VzZVNvcnRhYmxlIiwidXNlU29ydGFibGUiLCJpZCIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJzZXROb2RlUmVmIiwidHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsImlzRHJhZ2dpbmciLCJjaGlja2xldFByb3BzIiwidXNlTWVtbyIsIkNoaWNrbGV0ZWRJbnB1dCIsIl9yZWYzIiwiY2xhc3NOYW1lIiwiX3JlZjMkc2VsZWN0ZWRJdGVtcyIsInNlbGVjdGVkSXRlbXMiLCJfcmVmMyRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwiX3JlZjMkcmVvcmRlckl0ZW1zIiwicmVvcmRlckl0ZW1zIiwiZCIsIl9yZWYzJGRpc3BsYXlPcHRpb24iLCJTdHJpbmciLCJzZWxlY3RlZEl0ZW1JZHMiLCJtYXAiLCJoYW5kbGVEcmFnRW5kIiwidXNlQ2FsbGJhY2siLCJfcmVmNCIsImFjdGl2ZSIsIm92ZXIiLCJvbGRJbmRleCIsImZpbmRJbmRleCIsIm5ld0luZGV4IiwiYXJyYXlNb3ZlIiwiY29uY2F0IiwibGVuZ3RoIiwiRG5kQ29udGV4dCIsIm9uRHJhZ0VuZCIsIm1vZGlmaWVycyIsImNvbGxpc2lvbkRldGVjdGlvbiIsInBvaW50ZXJXaXRoaW4iLCJhdXRvU2Nyb2xsIiwiU29ydGFibGVDb250ZXh0IiwiaXRlbXMiLCJpbmRleCIsImtleSIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJEcmFnT3ZlcmxheSIsImRyb3BBbmltYXRpb24iLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci9jaGlja2xldGVkLWlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtNb3VzZUV2ZW50SGFuZGxlciwgUmVhY3ROb2RlLCB1c2VNZW1vLCB1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgc3R5bGVkLCB7SVN0eWxlZENvbXBvbmVudH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtEbmRDb250ZXh0LCBEcmFnT3ZlcmxheSwgcG9pbnRlcldpdGhpbn0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQge1NvcnRhYmxlQ29udGV4dCwgdXNlU29ydGFibGV9IGZyb20gJ0BkbmQta2l0L3NvcnRhYmxlJztcbmltcG9ydCB7cmVzdHJpY3RUb1BhcmVudEVsZW1lbnR9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycyc7XG5cbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHthcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxuaW1wb3J0IERlbGV0ZSBmcm9tICcuLi9pY29ucy9kZWxldGUnO1xuaW1wb3J0IHtCYXNlQ29tcG9uZW50UHJvcHN9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7c2hvdWxkRm9yd2FyZFByb3B9IGZyb20gJy4uL3N0eWxlZC1jb21wb25lbnRzJztcblxuZXhwb3J0IHR5cGUgQ2hpY2tsZXRCdXR0b25Qcm9wcyA9IEJhc2VDb21wb25lbnRQcm9wcyAmIHtcbiAgaW5wdXRUaGVtZT86IHN0cmluZztcbiAgcmVmPzogKG5vZGU6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBDaGlja2xldEJ1dHRvbjogSVN0eWxlZENvbXBvbmVudDxcbiAgJ3dlYicsXG4gIENoaWNrbGV0QnV0dG9uUHJvcHNcbj4gPSBzdHlsZWQuZGl2PENoaWNrbGV0QnV0dG9uUHJvcHM+YFxuICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+XG4gICAgcHJvcHMuaW5wdXRUaGVtZSA9PT0gJ2xpZ2h0JyA/IHByb3BzLnRoZW1lLmNoaWNrbGV0QmdkTFQgOiBwcm9wcy50aGVtZS5jaGlja2xldEJnZH07XG4gIGJvcmRlci1yYWRpdXM6IDFweDtcbiAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy5pbnB1dFRoZW1lID09PSAnbGlnaHQnID8gcHJvcHMudGhlbWUudGV4dENvbG9yTFQgOiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBmb250LXNpemU6IDExcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBtYXJnaW46IDRweCAxMHB4IDRweCAzcHg7XG4gIHBhZGRpbmc6IDJweCA2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1heC13aWR0aDogY2FsYygxMDAlIC0gOHB4KTtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogJHtwcm9wcyA9PlxuICAgICAgcHJvcHMuaW5wdXRUaGVtZSA9PT0gJ2xpZ2h0JyA/IHByb3BzLnRoZW1lLnRleHRDb2xvckhsTFQgOiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gIH1cbmA7XG5cbmNvbnN0IERORF9NT0RJRklFUlMgPSBbcmVzdHJpY3RUb1BhcmVudEVsZW1lbnRdO1xuZXhwb3J0IGNvbnN0IENoaWNrbGV0VGFnOiBJU3R5bGVkQ29tcG9uZW50PCd3ZWInPiA9IHN0eWxlZC5zcGFuYFxuICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmOmhvdmVyIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuYDtcblxuaW50ZXJmYWNlIENoaWNrbGV0UHJvcHMge1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU6IFJlYWN0Tm9kZTtcbiAgcmVtb3ZlPzogTW91c2VFdmVudEhhbmRsZXI8U1ZHU1ZHRWxlbWVudD47XG4gIGlucHV0VGhlbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IENoaWNrbGV0ID0gKHtkaXNhYmxlZCwgbmFtZSwgcmVtb3ZlLCBpbnB1dFRoZW1lfTogQ2hpY2tsZXRQcm9wcykgPT4gKFxuICA8Q2hpY2tsZXRCdXR0b24gaW5wdXRUaGVtZT17aW5wdXRUaGVtZX0+XG4gICAgPENoaWNrbGV0VGFnPntuYW1lfTwvQ2hpY2tsZXRUYWc+XG4gICAgPERlbGV0ZSBoZWlnaHQ9XCIxNnB4XCIgb25DbGljaz17ZGlzYWJsZWQgPyB1bmRlZmluZWQgOiByZW1vdmV9IC8+XG4gIDwvQ2hpY2tsZXRCdXR0b24+XG4pO1xuXG5leHBvcnQgdHlwZSBDaGlja2xldGVkSW5wdXRDb250YWluZXJQcm9wcyA9IEJhc2VDb21wb25lbnRQcm9wcyAmIHtcbiAgaW5wdXRUaGVtZT86IHN0cmluZztcbiAgaGFzUGxhY2Vob2xkZXI/OiBib29sZWFuO1xuICBmb2N1cz86IEhUTUxJbnB1dEVsZW1lbnRbJ2ZvY3VzJ107XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB2b2lkO1xufTtcblxuY29uc3QgQ2hpY2tsZXRlZElucHV0Q29udGFpbmVyOiBJU3R5bGVkQ29tcG9uZW50PFxuICAnd2ViJyxcbiAgQ2hpY2tsZXRlZElucHV0Q29udGFpbmVyUHJvcHNcbj4gPSBzdHlsZWQuZGl2LndpdGhDb25maWcoe3Nob3VsZEZvcndhcmRQcm9wfSk8Q2hpY2tsZXRlZElucHV0Q29udGFpbmVyUHJvcHM+YFxuICAke3Byb3BzID0+XG4gICAgcHJvcHMuaW5wdXRUaGVtZSA9PT0gJ3NlY29uZGFyeSdcbiAgICAgID8gcHJvcHMudGhlbWUuc2Vjb25kYXJ5Q2hpY2tsZXRlZElucHV0XG4gICAgICA6IHByb3BzLmlucHV0VGhlbWUgPT09ICdsaWdodCdcbiAgICAgID8gcHJvcHMudGhlbWUuY2hpY2tsZXRlZElucHV0TFRcbiAgICAgIDogcHJvcHMudGhlbWUuY2hpY2tsZXRlZElucHV0fVxuXG4gIGNvbG9yOiAke3Byb3BzID0+XG4gICAgcHJvcHMuaGFzUGxhY2Vob2xkZXIgPyBwcm9wcy50aGVtZS5zZWxlY3RDb2xvclBsYWNlSG9sZGVyIDogcHJvcHMudGhlbWUuc2VsZWN0Q29sb3J9O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYDtcblxuY29uc3QgQ2hpY2tsZXRlZEl0ZW0gPSAoe1xuICBpdGVtLFxuICByZW1vdmVJdGVtLFxuICBkaXNwbGF5T3B0aW9uLFxuICBDdXN0b21DaGlja2xldENvbXBvbmVudCxcbiAgaW5wdXRUaGVtZSxcbiAgZGlzYWJsZWQsXG4gIGl0ZW1JZFxufSkgPT4ge1xuICBjb25zdCB7YXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24sIGlzRHJhZ2dpbmd9ID0gdXNlU29ydGFibGUoe1xuICAgIGlkOiBpdGVtSWRcbiAgfSk7XG4gIGNvbnN0IGNoaWNrbGV0UHJvcHMgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBpbnB1dFRoZW1lLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBuYW1lOiBkaXNwbGF5T3B0aW9uKGl0ZW0pLFxuICAgICAgZGlzcGxheU9wdGlvbixcbiAgICAgIGl0ZW0sXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgbGlzdGVuZXJzLFxuICAgICAgc2V0Tm9kZVJlZixcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHRyYW5zaXRpb24sXG4gICAgICBpc0RyYWdnaW5nLFxuICAgICAgcmVtb3ZlOiBlID0+IHJlbW92ZUl0ZW0oaXRlbSwgZSlcbiAgICB9KSxcbiAgICBbXG4gICAgICBpdGVtLFxuICAgICAgcmVtb3ZlSXRlbSxcbiAgICAgIGRpc3BsYXlPcHRpb24sXG4gICAgICBpbnB1dFRoZW1lLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgbGlzdGVuZXJzLFxuICAgICAgc2V0Tm9kZVJlZixcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHRyYW5zaXRpb24sXG4gICAgICBpc0RyYWdnaW5nXG4gICAgXVxuICApO1xuICByZXR1cm4gQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQgPyAoXG4gICAgPEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50IHsuLi5jaGlja2xldFByb3BzfSAvPlxuICApIDogKFxuICAgIDxDaGlja2xldCB7Li4uY2hpY2tsZXRQcm9wc30gLz5cbiAgKTtcbn07XG5cbnR5cGUgSXRlbSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIENoaWNrbGV0ZWRJbnB1dFByb3BzID0gQ2hpY2tsZXRlZElucHV0Q29udGFpbmVyUHJvcHMgJiB7XG4gIHNlbGVjdGVkSXRlbXM/OiBhbnlbXTtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50PzogUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+IHwgbnVsbDtcbiAgcmVvcmRlckl0ZW1zPzogKG5ld09yZGVyOiBhbnkpID0+IHZvaWQ7XG4gIGRpc3BsYXlPcHRpb24/OiAoaXRlbTogSXRlbSkgPT4gc3RyaW5nO1xuICByZW1vdmVJdGVtOiAoaXRlbTogSXRlbSwgZTogUmVhY3QuTW91c2VFdmVudDxTVkdTVkdFbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbn07XG5cbmNvbnN0IENoaWNrbGV0ZWRJbnB1dDogUmVhY3QuRkM8Q2hpY2tsZXRlZElucHV0UHJvcHM+ID0gKHtcbiAgZGlzYWJsZWQsXG4gIG9uQ2xpY2ssXG4gIGNsYXNzTmFtZSxcbiAgc2VsZWN0ZWRJdGVtcyA9IFtdLFxuICBwbGFjZWhvbGRlciA9ICcnLFxuICByZW1vdmVJdGVtLFxuICByZW9yZGVySXRlbXMgPSBkID0+IGQsXG4gIGRpc3BsYXlPcHRpb24gPSBkID0+IFN0cmluZyhkKSxcbiAgaW5wdXRUaGVtZSxcbiAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnRcbn0pID0+IHtcbiAgY29uc3Qgc2VsZWN0ZWRJdGVtSWRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+IGRpc3BsYXlPcHRpb24oaXRlbSkpLFxuICAgIFtkaXNwbGF5T3B0aW9uLCBzZWxlY3RlZEl0ZW1zXVxuICApO1xuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKHthY3RpdmUsIG92ZXJ9KSA9PiB7XG4gICAgICBpZiAoIW92ZXIpIHJldHVybjtcbiAgICAgIGlmIChhY3RpdmUuaWQgIT09IG92ZXIuaWQpIHtcbiAgICAgICAgY29uc3Qgb2xkSW5kZXggPSBzZWxlY3RlZEl0ZW1JZHMuZmluZEluZGV4KGl0ZW1JZCA9PiBpdGVtSWQgPT09IGFjdGl2ZS5pZCk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gc2VsZWN0ZWRJdGVtSWRzLmZpbmRJbmRleChpdGVtSWQgPT4gaXRlbUlkID09PSBvdmVyLmlkKTtcbiAgICAgICAgcmVvcmRlckl0ZW1zKGFycmF5TW92ZShzZWxlY3RlZEl0ZW1zLCBvbGRJbmRleCwgbmV3SW5kZXgpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZWxlY3RlZEl0ZW1JZHMsIHNlbGVjdGVkSXRlbXMsIHJlb3JkZXJJdGVtc11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDaGlja2xldGVkSW5wdXRDb250YWluZXJcbiAgICAgIGNsYXNzTmFtZT17YCR7Y2xhc3NOYW1lfSBjaGlja2xldGVkLWlucHV0YH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBpbnB1dFRoZW1lPXtpbnB1dFRoZW1lfVxuICAgICAgaGFzUGxhY2Vob2xkZXI9eyFzZWxlY3RlZEl0ZW1zIHx8ICFzZWxlY3RlZEl0ZW1zLmxlbmd0aH1cbiAgICA+XG4gICAgICA8RG5kQ29udGV4dFxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgIG1vZGlmaWVycz17RE5EX01PRElGSUVSU31cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtwb2ludGVyV2l0aGlufVxuICAgICAgICBhdXRvU2Nyb2xsPXtmYWxzZX1cbiAgICAgID5cbiAgICAgICAgPFNvcnRhYmxlQ29udGV4dCBpdGVtcz17c2VsZWN0ZWRJdGVtSWRzfT5cbiAgICAgICAgICB7c2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxDaGlja2xldGVkSXRlbVxuICAgICAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICAgICAgaXRlbUlkPXtkaXNwbGF5T3B0aW9uKGl0ZW0pfVxuICAgICAgICAgICAgICAgIHJlbW92ZUl0ZW09e3JlbW92ZUl0ZW19XG4gICAgICAgICAgICAgICAgZGlzcGxheU9wdGlvbj17ZGlzcGxheU9wdGlvbn1cbiAgICAgICAgICAgICAgICBDdXN0b21DaGlja2xldENvbXBvbmVudD17Q3VzdG9tQ2hpY2tsZXRDb21wb25lbnR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICAgICAga2V5PXtgJHtkaXNwbGF5T3B0aW9uKGl0ZW0pfV8ke2luZGV4fWB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKVxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gY2hpY2tsZXRlZC1pbnB1dF9fcGxhY2Vob2xkZXJgfT5cbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e3BsYWNlaG9sZGVyIHx8ICdwbGFjZWhvbGRlci5lbnRlclZhbHVlJ30gLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NvcnRhYmxlQ29udGV4dD5cbiAgICAgICAgPERyYWdPdmVybGF5IGRyb3BBbmltYXRpb249e251bGx9IC8+XG4gICAgICA8L0RuZENvbnRleHQ+XG4gICAgPC9DaGlja2xldGVkSW5wdXRDb250YWluZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGlja2xldGVkSW5wdXQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxhQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxZQUFBLEdBQUFQLE9BQUE7QUFFQSxJQUFBUSxPQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBUyxrQkFBQSxHQUFBVCxPQUFBO0FBQXVELElBQUFVLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFmdkQ7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBZix3QkFBQWUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFBLFNBQUFHLENBQUEsR0FBQVAsQ0FBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQWMsQ0FBQSxVQUFBRyxDQUFBLEtBQUFBLENBQUEsQ0FBQVYsR0FBQSxJQUFBVSxDQUFBLENBQUFDLEdBQUEsSUFBQVAsTUFBQSxDQUFBQyxjQUFBLENBQUFKLENBQUEsRUFBQU0sQ0FBQSxFQUFBRyxDQUFBLElBQUFULENBQUEsQ0FBQU0sQ0FBQSxJQUFBZCxDQUFBLENBQUFjLENBQUEsWUFBQU4sQ0FBQSxjQUFBUixDQUFBLEVBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZSxHQUFBLENBQUFsQixDQUFBLEVBQUFRLENBQUEsR0FBQUEsQ0FBQTtBQXFCTyxJQUFNVyxjQUdaLEdBQUFDLE9BQUEsQ0FBQUQsY0FBQSxHQUFHRSw0QkFBTSxDQUFDQyxHQUFHLENBQUExQixlQUFBLEtBQUFBLGVBQUEsT0FBQTJCLHVCQUFBLCtSQUNFLFVBQUFDLEtBQUs7RUFBQSxPQUNqQkEsS0FBSyxDQUFDQyxVQUFVLEtBQUssT0FBTyxHQUFHRCxLQUFLLENBQUNFLEtBQUssQ0FBQ0MsYUFBYSxHQUFHSCxLQUFLLENBQUNFLEtBQUssQ0FBQ0UsV0FBVztBQUFBLEdBRTNFLFVBQUFKLEtBQUs7RUFBQSxPQUNaQSxLQUFLLENBQUNDLFVBQVUsS0FBSyxPQUFPLEdBQUdELEtBQUssQ0FBQ0UsS0FBSyxDQUFDRyxXQUFXLEdBQUdMLEtBQUssQ0FBQ0UsS0FBSyxDQUFDSSxTQUFTO0FBQUEsR0FVckUsVUFBQU4sS0FBSztFQUFBLE9BQ1pBLEtBQUssQ0FBQ0MsVUFBVSxLQUFLLE9BQU8sR0FBR0QsS0FBSyxDQUFDRSxLQUFLLENBQUNLLGFBQWEsR0FBR1AsS0FBSyxDQUFDRSxLQUFLLENBQUNNLFdBQVc7QUFBQSxFQUV2RjtBQUVELElBQU1DLGFBQWEsR0FBRyxDQUFDQyxrQ0FBdUIsQ0FBQztBQUN4QyxJQUFNQyxXQUFvQyxHQUFBZixPQUFBLENBQUFlLFdBQUEsR0FBR2QsNEJBQU0sQ0FBQ2UsSUFBSSxDQUFBdkMsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQTBCLHVCQUFBLDBKQVM5RDtBQVNELElBQU1jLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFBQyxJQUFBO0VBQUEsSUFBS0MsUUFBUSxHQUFBRCxJQUFBLENBQVJDLFFBQVE7SUFBRUMsSUFBSSxHQUFBRixJQUFBLENBQUpFLElBQUk7SUFBRUMsTUFBTSxHQUFBSCxJQUFBLENBQU5HLE1BQU07SUFBRWhCLFVBQVUsR0FBQWEsSUFBQSxDQUFWYixVQUFVO0VBQUEsb0JBQ25EekMsTUFBQSxZQUFBMEQsYUFBQSxDQUFDdkIsY0FBYztJQUFDTSxVQUFVLEVBQUVBO0VBQVcsZ0JBQ3JDekMsTUFBQSxZQUFBMEQsYUFBQSxDQUFDUCxXQUFXLFFBQUVLLElBQWtCLENBQUMsZUFDakN4RCxNQUFBLFlBQUEwRCxhQUFBLENBQUNoRCxPQUFBLFdBQU07SUFBQ2lELE1BQU0sRUFBQyxNQUFNO0lBQUNDLE9BQU8sRUFBRUwsUUFBUSxHQUFHTSxTQUFTLEdBQUdKO0VBQU8sQ0FBRSxDQUNqRCxDQUFDO0FBQUEsQ0FDbEI7QUFVRCxJQUFNSyx3QkFHTCxHQUFHekIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFDeUIsVUFBVSxDQUFDO0VBQUNDLGlCQUFpQixFQUFqQkE7QUFBaUIsQ0FBQyxDQUFDLENBQUFsRCxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBeUIsdUJBQUEsc0VBQzFDLFVBQUFDLEtBQUs7RUFBQSxPQUNMQSxLQUFLLENBQUNDLFVBQVUsS0FBSyxXQUFXLEdBQzVCRCxLQUFLLENBQUNFLEtBQUssQ0FBQ3VCLHdCQUF3QixHQUNwQ3pCLEtBQUssQ0FBQ0MsVUFBVSxLQUFLLE9BQU8sR0FDNUJELEtBQUssQ0FBQ0UsS0FBSyxDQUFDd0IsaUJBQWlCLEdBQzdCMUIsS0FBSyxDQUFDRSxLQUFLLENBQUN5QixlQUFlO0FBQUEsR0FFeEIsVUFBQTNCLEtBQUs7RUFBQSxPQUNaQSxLQUFLLENBQUM0QixjQUFjLEdBQUc1QixLQUFLLENBQUNFLEtBQUssQ0FBQzJCLHNCQUFzQixHQUFHN0IsS0FBSyxDQUFDRSxLQUFLLENBQUM0QixXQUFXO0FBQUEsRUFFdEY7QUFFRCxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUFDLEtBQUEsRUFRZDtFQUFBLElBUEpDLElBQUksR0FBQUQsS0FBQSxDQUFKQyxJQUFJO0lBQ0pDLFVBQVUsR0FBQUYsS0FBQSxDQUFWRSxVQUFVO0lBQ1ZDLGFBQWEsR0FBQUgsS0FBQSxDQUFiRyxhQUFhO0lBQ2JDLHVCQUF1QixHQUFBSixLQUFBLENBQXZCSSx1QkFBdUI7SUFDdkJuQyxVQUFVLEdBQUErQixLQUFBLENBQVYvQixVQUFVO0lBQ1ZjLFFBQVEsR0FBQWlCLEtBQUEsQ0FBUmpCLFFBQVE7SUFDUnNCLE1BQU0sR0FBQUwsS0FBQSxDQUFOSyxNQUFNO0VBRU4sSUFBQUMsWUFBQSxHQUErRSxJQUFBQyxxQkFBVyxFQUFDO01BQ3pGQyxFQUFFLEVBQUVIO0lBQ04sQ0FBQyxDQUFDO0lBRktJLFVBQVUsR0FBQUgsWUFBQSxDQUFWRyxVQUFVO0lBQUVDLFNBQVMsR0FBQUosWUFBQSxDQUFUSSxTQUFTO0lBQUVDLFVBQVUsR0FBQUwsWUFBQSxDQUFWSyxVQUFVO0lBQUVDLFNBQVMsR0FBQU4sWUFBQSxDQUFUTSxTQUFTO0lBQUVDLFVBQVUsR0FBQVAsWUFBQSxDQUFWTyxVQUFVO0lBQUVDLFVBQVUsR0FBQVIsWUFBQSxDQUFWUSxVQUFVO0VBRzNFLElBQU1DLGFBQWEsR0FBRyxJQUFBQyxjQUFPLEVBQzNCO0lBQUEsT0FBTztNQUNML0MsVUFBVSxFQUFWQSxVQUFVO01BQ1ZjLFFBQVEsRUFBUkEsUUFBUTtNQUNSQyxJQUFJLEVBQUVtQixhQUFhLENBQUNGLElBQUksQ0FBQztNQUN6QkUsYUFBYSxFQUFiQSxhQUFhO01BQ2JGLElBQUksRUFBSkEsSUFBSTtNQUNKUSxVQUFVLEVBQVZBLFVBQVU7TUFDVkMsU0FBUyxFQUFUQSxTQUFTO01BQ1RDLFVBQVUsRUFBVkEsVUFBVTtNQUNWQyxTQUFTLEVBQVRBLFNBQVM7TUFDVEMsVUFBVSxFQUFWQSxVQUFVO01BQ1ZDLFVBQVUsRUFBVkEsVUFBVTtNQUNWN0IsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUV6QyxDQUFDO1FBQUEsT0FBSTBELFVBQVUsQ0FBQ0QsSUFBSSxFQUFFekQsQ0FBQyxDQUFDO01BQUE7SUFDbEMsQ0FBQztFQUFBLENBQUMsRUFDRixDQUNFeUQsSUFBSSxFQUNKQyxVQUFVLEVBQ1ZDLGFBQWEsRUFDYmxDLFVBQVUsRUFDVmMsUUFBUSxFQUNSMEIsVUFBVSxFQUNWQyxTQUFTLEVBQ1RDLFVBQVUsRUFDVkMsU0FBUyxFQUNUQyxVQUFVLEVBQ1ZDLFVBQVUsQ0FFZCxDQUFDO0VBQ0QsT0FBT1YsdUJBQXVCLGdCQUM1QjVFLE1BQUEsWUFBQTBELGFBQUEsQ0FBQ2tCLHVCQUF1QixFQUFLVyxhQUFnQixDQUFDLGdCQUU5Q3ZGLE1BQUEsWUFBQTBELGFBQUEsQ0FBQ0wsUUFBUSxFQUFLa0MsYUFBZ0IsQ0FDL0I7QUFDSCxDQUFDO0FBYUQsSUFBTUUsZUFBK0MsR0FBRyxTQUFsREEsZUFBK0NBLENBQUFDLEtBQUEsRUFXL0M7RUFBQSxJQVZKbkMsUUFBUSxHQUFBbUMsS0FBQSxDQUFSbkMsUUFBUTtJQUNSSyxPQUFPLEdBQUE4QixLQUFBLENBQVA5QixPQUFPO0lBQ1ArQixTQUFTLEdBQUFELEtBQUEsQ0FBVEMsU0FBUztJQUFBQyxtQkFBQSxHQUFBRixLQUFBLENBQ1RHLGFBQWE7SUFBYkEsYUFBYSxHQUFBRCxtQkFBQSxjQUFHLEVBQUUsR0FBQUEsbUJBQUE7SUFBQUUsaUJBQUEsR0FBQUosS0FBQSxDQUNsQkssV0FBVztJQUFYQSxXQUFXLEdBQUFELGlCQUFBLGNBQUcsRUFBRSxHQUFBQSxpQkFBQTtJQUNoQnBCLFVBQVUsR0FBQWdCLEtBQUEsQ0FBVmhCLFVBQVU7SUFBQXNCLGtCQUFBLEdBQUFOLEtBQUEsQ0FDVk8sWUFBWTtJQUFaQSxZQUFZLEdBQUFELGtCQUFBLGNBQUcsVUFBQUUsQ0FBQztNQUFBLE9BQUlBLENBQUM7SUFBQSxJQUFBRixrQkFBQTtJQUFBRyxtQkFBQSxHQUFBVCxLQUFBLENBQ3JCZixhQUFhO0lBQWJBLGFBQWEsR0FBQXdCLG1CQUFBLGNBQUcsVUFBQUQsQ0FBQztNQUFBLE9BQUlFLE1BQU0sQ0FBQ0YsQ0FBQyxDQUFDO0lBQUEsSUFBQUMsbUJBQUE7SUFDOUIxRCxVQUFVLEdBQUFpRCxLQUFBLENBQVZqRCxVQUFVO0lBQ1ZtQyx1QkFBdUIsR0FBQWMsS0FBQSxDQUF2QmQsdUJBQXVCO0VBRXZCLElBQU15QixlQUFlLEdBQUcsSUFBQWIsY0FBTyxFQUM3QjtJQUFBLE9BQU1LLGFBQWEsQ0FBQ1MsR0FBRyxDQUFDLFVBQUE3QixJQUFJO01BQUEsT0FBSUUsYUFBYSxDQUFDRixJQUFJLENBQUM7SUFBQSxFQUFDO0VBQUEsR0FDcEQsQ0FBQ0UsYUFBYSxFQUFFa0IsYUFBYSxDQUMvQixDQUFDO0VBQ0QsSUFBTVUsYUFBYSxHQUFHLElBQUFDLGtCQUFXLEVBQy9CLFVBQUFDLEtBQUEsRUFBb0I7SUFBQSxJQUFsQkMsTUFBTSxHQUFBRCxLQUFBLENBQU5DLE1BQU07TUFBRUMsSUFBSSxHQUFBRixLQUFBLENBQUpFLElBQUk7SUFDWixJQUFJLENBQUNBLElBQUksRUFBRTtJQUNYLElBQUlELE1BQU0sQ0FBQzFCLEVBQUUsS0FBSzJCLElBQUksQ0FBQzNCLEVBQUUsRUFBRTtNQUN6QixJQUFNNEIsUUFBUSxHQUFHUCxlQUFlLENBQUNRLFNBQVMsQ0FBQyxVQUFBaEMsTUFBTTtRQUFBLE9BQUlBLE1BQU0sS0FBSzZCLE1BQU0sQ0FBQzFCLEVBQUU7TUFBQSxFQUFDO01BQzFFLElBQU04QixRQUFRLEdBQUdULGVBQWUsQ0FBQ1EsU0FBUyxDQUFDLFVBQUFoQyxNQUFNO1FBQUEsT0FBSUEsTUFBTSxLQUFLOEIsSUFBSSxDQUFDM0IsRUFBRTtNQUFBLEVBQUM7TUFDeEVpQixZQUFZLENBQUMsSUFBQWMsc0JBQVMsRUFBQ2xCLGFBQWEsRUFBRWUsUUFBUSxFQUFFRSxRQUFRLENBQUMsQ0FBQztJQUM1RDtFQUNGLENBQUMsRUFDRCxDQUFDVCxlQUFlLEVBQUVSLGFBQWEsRUFBRUksWUFBWSxDQUMvQyxDQUFDO0VBRUQsb0JBQ0VqRyxNQUFBLFlBQUEwRCxhQUFBLENBQUNJLHdCQUF3QjtJQUN2QjZCLFNBQVMsS0FBQXFCLE1BQUEsQ0FBS3JCLFNBQVMsc0JBQW9CO0lBQzNDL0IsT0FBTyxFQUFFQSxPQUFRO0lBQ2pCbkIsVUFBVSxFQUFFQSxVQUFXO0lBQ3ZCMkIsY0FBYyxFQUFFLENBQUN5QixhQUFhLElBQUksQ0FBQ0EsYUFBYSxDQUFDb0I7RUFBTyxnQkFFeERqSCxNQUFBLFlBQUEwRCxhQUFBLENBQUNyRCxLQUFBLENBQUE2RyxVQUFVO0lBQ1RDLFNBQVMsRUFBRVosYUFBYztJQUN6QmEsU0FBUyxFQUFFbkUsYUFBYztJQUN6Qm9FLGtCQUFrQixFQUFFQyxtQkFBYztJQUNsQ0MsVUFBVSxFQUFFO0VBQU0sZ0JBRWxCdkgsTUFBQSxZQUFBMEQsYUFBQSxDQUFDcEQsU0FBQSxDQUFBa0gsZUFBZTtJQUFDQyxLQUFLLEVBQUVwQjtFQUFnQixHQUNyQ1IsYUFBYSxDQUFDb0IsTUFBTSxHQUFHLENBQUMsR0FDdkJwQixhQUFhLENBQUNTLEdBQUcsQ0FBQyxVQUFDN0IsSUFBSSxFQUFFaUQsS0FBSztJQUFBLG9CQUM1QjFILE1BQUEsWUFBQTBELGFBQUEsQ0FBQ2EsY0FBYztNQUNiRSxJQUFJLEVBQUVBLElBQUs7TUFDWEksTUFBTSxFQUFFRixhQUFhLENBQUNGLElBQUksQ0FBRTtNQUM1QkMsVUFBVSxFQUFFQSxVQUFXO01BQ3ZCQyxhQUFhLEVBQUVBLGFBQWM7TUFDN0JDLHVCQUF1QixFQUFFQSx1QkFBd0I7TUFDakRyQixRQUFRLEVBQUVBLFFBQVM7TUFDbkJkLFVBQVUsRUFBRUEsVUFBVztNQUN2QmtGLEdBQUcsS0FBQVgsTUFBQSxDQUFLckMsYUFBYSxDQUFDRixJQUFJLENBQUMsT0FBQXVDLE1BQUEsQ0FBSVUsS0FBSztJQUFHLENBQ3hDLENBQUM7RUFBQSxDQUNILENBQUMsZ0JBRUYxSCxNQUFBLFlBQUEwRCxhQUFBO0lBQU1pQyxTQUFTLEtBQUFxQixNQUFBLENBQUtyQixTQUFTO0VBQWlDLGdCQUM1RDNGLE1BQUEsWUFBQTBELGFBQUEsQ0FBQ2xELGFBQUEsQ0FBQW9ILGdCQUFnQjtJQUFDNUMsRUFBRSxFQUFFZSxXQUFXLElBQUk7RUFBeUIsQ0FBRSxDQUM1RCxDQUVPLENBQUMsZUFDbEIvRixNQUFBLFlBQUEwRCxhQUFBLENBQUNyRCxLQUFBLENBQUF3SCxXQUFXO0lBQUNDLGFBQWEsRUFBRTtFQUFLLENBQUUsQ0FDekIsQ0FDWSxDQUFDO0FBRS9CLENBQUM7QUFBQyxJQUFBQyxRQUFBLEdBQUEzRixPQUFBLGNBRWFxRCxlQUFlIiwiaWdub3JlTGlzdCI6W119
;