kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
252 lines (251 loc) • 40.2 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
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 _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _lodash = _interopRequireDefault(require("lodash.uniqby"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _accessor = _interopRequireDefault(require("./accessor"));
var _chickletedInput = _interopRequireDefault(require("./chickleted-input"));
var _typeahead = _interopRequireDefault(require("./typeahead"));
var _dropdownList = _interopRequireWildcard(require("./dropdown-list"));
var _portaled = _interopRequireDefault(require("../../common/portaled"));
var _utils = require("@kepler.gl/utils");
var _commonUtils = require("@kepler.gl/common-utils");
var _reactIntl = require("react-intl");
var _dropdownSelect = _interopRequireDefault(require("./dropdown-select"));
var _templateObject; // 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 DropdownWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border: 0;\n width: 100%;\n left: 0;\n z-index: ", ";\n width: ", "px;\n"])), function (props) {
return props.theme.dropdownWrapperZ;
}, function (props) {
return props.width;
});
var ItemSelectorUnmemoized = /*#__PURE__*/function (_Component) {
function ItemSelectorUnmemoized() {
var _this;
(0, _classCallCheck2["default"])(this, ItemSelectorUnmemoized);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _callSuper(this, ItemSelectorUnmemoized, [].concat(args));
(0, _defineProperty2["default"])(_this, "state", {
showTypeahead: false,
dimensions: {
width: 200
}
});
(0, _defineProperty2["default"])(_this, "root", /*#__PURE__*/(0, _react.createRef)());
(0, _defineProperty2["default"])(_this, "handleClickOutside", function () {
_this._hideTypeahead();
});
(0, _defineProperty2["default"])(_this, "_handleResize", function (dimensions) {
_this.setState({
dimensions: dimensions
});
});
(0, _defineProperty2["default"])(_this, "_hideTypeahead", function () {
_this.setState({
showTypeahead: false
});
_this._onBlur();
});
(0, _defineProperty2["default"])(_this, "_onBlur", function () {
// note: chickleted input is not a real form element so we call onBlur()
// when we feel the events are appropriate
if (_this.props.onBlur) {
_this.props.onBlur();
}
});
(0, _defineProperty2["default"])(_this, "_removeItem", function (item, e) {
// only used when multiSelect = true
e.preventDefault();
e.stopPropagation();
var multiSelectedItems = (0, _commonUtils.toArray)(_this.props.selectedItems);
var index = multiSelectedItems.findIndex(function (t) {
return t === item;
});
if (index < 0) {
return;
}
var items = [].concat((0, _toConsumableArray2["default"])(multiSelectedItems.slice(0, index)), (0, _toConsumableArray2["default"])(multiSelectedItems.slice(index + 1, multiSelectedItems.length)));
_this.props.onChange(items);
if (_this.props.closeOnSelect) {
_this.setState({
showTypeahead: false
});
_this._onBlur();
}
});
(0, _defineProperty2["default"])(_this, "_selectItem", function (item) {
var getValue = _accessor["default"].generateOptionToStringFor(_this.props.getOptionValue || _this.props.displayOption);
var previousSelected = (0, _commonUtils.toArray)(_this.props.selectedItems);
if (_this.props.multiSelect) {
var items = (0, _lodash["default"])(previousSelected.concat((0, _commonUtils.toArray)(item)), getValue);
_this.props.onChange(items);
} else {
_this.props.onChange(getValue(item));
}
if (_this.props.closeOnSelect) {
_this.setState({
showTypeahead: false
});
_this._onBlur();
}
});
(0, _defineProperty2["default"])(_this, "_onErase", function (e) {
e.stopPropagation();
_this.props.onChange(null);
});
(0, _defineProperty2["default"])(_this, "_showTypeahead", function (e) {
e.stopPropagation();
if (!_this.props.disabled) {
if (_this.props.onOpen) {
_this.props.onOpen();
}
_this.setState({
showTypeahead: true
});
}
});
return _this;
}
(0, _inherits2["default"])(ItemSelectorUnmemoized, _Component);
return (0, _createClass2["default"])(ItemSelectorUnmemoized, [{
key: "componentDidMount",
value: function componentDidMount() {
if (this.props.showDropdownOnMount) {
this.setState({
showTypeahead: true
});
}
if (this.root.current instanceof HTMLElement) {
(0, _utils.observeDimensions)(this.root.current, this._handleResize);
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
if (this.root.current instanceof HTMLElement) {
(0, _utils.unobserveDimensions)(this.root.current);
}
}
}, {
key: "_renderDropdown",
value: function _renderDropdown(intl) {
var _this$props$placement = this.props.placement,
placement = _this$props$placement === void 0 ? 'bottom' : _this$props$placement;
var dimensions = this.state.dimensions;
var DropDownWrapperComponent = this.props.DropDownWrapperComponent;
return /*#__PURE__*/_react["default"].createElement(_portaled["default"], {
left: 0,
top: 0,
isOpened: this.state.showTypeahead,
onClose: this._hideTypeahead
}, /*#__PURE__*/_react["default"].createElement(DropDownWrapperComponent, {
placement: placement,
width: dimensions === null || dimensions === void 0 ? void 0 : dimensions.width
}, /*#__PURE__*/_react["default"].createElement(_typeahead["default"], {
customClasses: {
results: 'list-selector',
input: 'typeahead__input',
listItem: 'list__item',
listAnchor: 'list__item__anchor'
},
options: this.props.options,
filterOption: this.props.filterOption,
fixedOptions: this.props.fixedOptions,
placeholder: this.props.typeaheadPlaceholder || intl ? intl.formatMessage({
id: 'placeholder.search'
}) : 'Search',
onOptionSelected: this._selectItem,
customListComponent: this.props.DropDownRenderComponent,
customListHeaderComponent: this.props.DropdownHeaderComponent,
customListItemComponent: this.props.DropDownLineItemRenderComponent,
displayOption: _accessor["default"].generateOptionToStringFor(this.props.displayOption),
searchable: this.props.searchable,
searchOptions: this.props.searchOptions,
showOptionsWhenEmpty: true,
selectedItems: (0, _commonUtils.toArray)(this.props.selectedItems),
light: this.props.inputTheme === 'light'
})));
}
}, {
key: "render",
value: function render() {
var selected = (0, _commonUtils.toArray)(this.props.selectedItems);
var displayOption = _accessor["default"].generateOptionToStringFor(this.props.displayOption);
var _this$props = this.props,
disabled = _this$props.disabled,
_this$props$inputThem = _this$props.inputTheme,
inputTheme = _this$props$inputThem === void 0 ? 'primary' : _this$props$inputThem;
var dropdownSelectProps = {
className: (0, _classnames["default"])({
active: this.state.showTypeahead
}),
displayOption: displayOption,
disabled: disabled,
onClick: this._showTypeahead,
error: this.props.isError,
inputTheme: inputTheme,
size: this.props.size
};
var intl = this.props.intl;
return /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])('item-selector', this.props.className),
ref: this.root
}, /*#__PURE__*/_react["default"].createElement("div", {
style: {
position: 'relative'
}
}, this.props.multiSelect ? /*#__PURE__*/_react["default"].createElement(_chickletedInput["default"], (0, _extends2["default"])({}, dropdownSelectProps, {
selectedItems: (0, _commonUtils.toArray)(this.props.selectedItems),
placeholder: this.props.placeholder,
removeItem: this._removeItem,
reorderItems: this.props.reorderItems,
CustomChickletComponent: this.props.CustomChickletComponent,
inputTheme: inputTheme
})) : /*#__PURE__*/_react["default"].createElement(_dropdownSelect["default"], (0, _extends2["default"])({}, dropdownSelectProps, {
value: selected[0],
placeholder: this.props.placeholder,
erasable: this.props.erasable,
showArrow: this.props.showArrow,
onErase: this._onErase,
showDropdown: this._showTypeahead,
DropDownLineItemRenderComponent: this.props.DropDownLineItemRenderComponent
})), this._renderDropdown(intl)));
}
}]);
}(_react.Component);
(0, _defineProperty2["default"])(ItemSelectorUnmemoized, "defaultProps", {
multiSelect: true,
placeholder: 'placeholder.enterValue',
closeOnSelect: true,
searchable: true,
DropDownRenderComponent: _dropdownList["default"],
DropDownLineItemRenderComponent: _dropdownList.ListItem,
DropDownWrapperComponent: DropdownWrapper,
reorderItems: undefined,
className: ''
});
var ItemSelector = /*#__PURE__*/_react["default"].memo(ItemSelectorUnmemoized);
ItemSelector.displayName = 'ItemSelector';
var _default = exports["default"] = (0, _reactIntl.injectIntl)(ItemSelector);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbG9kYXNoIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfYWNjZXNzb3IiLCJfY2hpY2tsZXRlZElucHV0IiwiX3R5cGVhaGVhZCIsIl9kcm9wZG93bkxpc3QiLCJfcG9ydGFsZWQiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfcmVhY3RJbnRsIiwiX2Ryb3Bkb3duU2VsZWN0IiwiX3RlbXBsYXRlT2JqZWN0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJEcm9wZG93bldyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJkcm9wZG93bldyYXBwZXJaIiwid2lkdGgiLCJJdGVtU2VsZWN0b3JVbm1lbW9pemVkIiwiX0NvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiX2RlZmluZVByb3BlcnR5MiIsInNob3dUeXBlYWhlYWQiLCJkaW1lbnNpb25zIiwiY3JlYXRlUmVmIiwiX2hpZGVUeXBlYWhlYWQiLCJzZXRTdGF0ZSIsIl9vbkJsdXIiLCJvbkJsdXIiLCJpdGVtIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJtdWx0aVNlbGVjdGVkSXRlbXMiLCJ0b0FycmF5Iiwic2VsZWN0ZWRJdGVtcyIsImluZGV4IiwiZmluZEluZGV4IiwiaXRlbXMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwic2xpY2UiLCJvbkNoYW5nZSIsImNsb3NlT25TZWxlY3QiLCJnZXRWYWx1ZSIsIkFjY2Vzc29yIiwiZ2VuZXJhdGVPcHRpb25Ub1N0cmluZ0ZvciIsImdldE9wdGlvblZhbHVlIiwiZGlzcGxheU9wdGlvbiIsInByZXZpb3VzU2VsZWN0ZWQiLCJtdWx0aVNlbGVjdCIsInVuaXFCeSIsImRpc2FibGVkIiwib25PcGVuIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsImNvbXBvbmVudERpZE1vdW50Iiwic2hvd0Ryb3Bkb3duT25Nb3VudCIsInJvb3QiLCJjdXJyZW50IiwiSFRNTEVsZW1lbnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVub2JzZXJ2ZURpbWVuc2lvbnMiLCJfcmVuZGVyRHJvcGRvd24iLCJpbnRsIiwiX3RoaXMkcHJvcHMkcGxhY2VtZW50IiwicGxhY2VtZW50Iiwic3RhdGUiLCJEcm9wRG93bldyYXBwZXJDb21wb25lbnQiLCJjcmVhdGVFbGVtZW50IiwibGVmdCIsInRvcCIsImlzT3BlbmVkIiwib25DbG9zZSIsImN1c3RvbUNsYXNzZXMiLCJyZXN1bHRzIiwiaW5wdXQiLCJsaXN0SXRlbSIsImxpc3RBbmNob3IiLCJvcHRpb25zIiwiZmlsdGVyT3B0aW9uIiwiZml4ZWRPcHRpb25zIiwicGxhY2Vob2xkZXIiLCJ0eXBlYWhlYWRQbGFjZWhvbGRlciIsImZvcm1hdE1lc3NhZ2UiLCJpZCIsIm9uT3B0aW9uU2VsZWN0ZWQiLCJfc2VsZWN0SXRlbSIsImN1c3RvbUxpc3RDb21wb25lbnQiLCJEcm9wRG93blJlbmRlckNvbXBvbmVudCIsImN1c3RvbUxpc3RIZWFkZXJDb21wb25lbnQiLCJEcm9wZG93bkhlYWRlckNvbXBvbmVudCIsImN1c3RvbUxpc3RJdGVtQ29tcG9uZW50IiwiRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudCIsInNlYXJjaGFibGUiLCJzZWFyY2hPcHRpb25zIiwic2hvd09wdGlvbnNXaGVuRW1wdHkiLCJsaWdodCIsImlucHV0VGhlbWUiLCJyZW5kZXIiLCJzZWxlY3RlZCIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMkaW5wdXRUaGVtIiwiZHJvcGRvd25TZWxlY3RQcm9wcyIsImNsYXNzTmFtZSIsImNsYXNzbmFtZXMiLCJhY3RpdmUiLCJvbkNsaWNrIiwiX3Nob3dUeXBlYWhlYWQiLCJlcnJvciIsImlzRXJyb3IiLCJzaXplIiwicmVmIiwic3R5bGUiLCJwb3NpdGlvbiIsIl9leHRlbmRzMiIsInJlbW92ZUl0ZW0iLCJfcmVtb3ZlSXRlbSIsInJlb3JkZXJJdGVtcyIsIkN1c3RvbUNoaWNrbGV0Q29tcG9uZW50IiwiZXJhc2FibGUiLCJzaG93QXJyb3ciLCJvbkVyYXNlIiwiX29uRXJhc2UiLCJzaG93RHJvcGRvd24iLCJDb21wb25lbnQiLCJEcm9wZG93bkxpc3QiLCJMaXN0SXRlbSIsInVuZGVmaW5lZCIsIkl0ZW1TZWxlY3RvciIsIlJlYWN0IiwibWVtbyIsImRpc3BsYXlOYW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiaW5qZWN0SW50bCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZiwgQ29tcG9uZW50VHlwZSwgTW91c2VFdmVudEhhbmRsZXIsIFJlZk9iamVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC51bmlxYnknO1xuaW1wb3J0IHN0eWxlZCwge0lTdHlsZWRDb21wb25lbnR9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IEFjY2Vzc29yIGZyb20gJy4vYWNjZXNzb3InO1xuaW1wb3J0IENoaWNrbGV0ZWRJbnB1dCBmcm9tICcuL2NoaWNrbGV0ZWQtaW5wdXQnO1xuaW1wb3J0IFR5cGVhaGVhZCBmcm9tICcuL3R5cGVhaGVhZCc7XG5pbXBvcnQgRHJvcGRvd25MaXN0LCB7TGlzdEl0ZW19IGZyb20gJy4vZHJvcGRvd24tbGlzdCc7XG5pbXBvcnQgUG9ydGFsZWQgZnJvbSAnLi4vLi4vY29tbW9uL3BvcnRhbGVkJztcbmltcG9ydCB7b2JzZXJ2ZURpbWVuc2lvbnMsIHVub2JzZXJ2ZURpbWVuc2lvbnN9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHt0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge2luamVjdEludGwsIEludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQge0xpc3RJdGVtUHJvcHN9IGZyb20gJy4vZHJvcGRvd24tc2VsZWN0JztcbmltcG9ydCBEcm9wZG93blNlbGVjdCBmcm9tICcuL2Ryb3Bkb3duLXNlbGVjdCc7XG5cbmV4cG9ydCB0eXBlIERyb3Bkb3duV3JhcHBlclByb3BzID0ge1xuICBwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG59O1xuXG5jb25zdCBEcm9wZG93bldyYXBwZXI6IElTdHlsZWRDb21wb25lbnQ8XG4gICd3ZWInLFxuICBEcm9wZG93bldyYXBwZXJQcm9wc1xuPiA9IHN0eWxlZC5kaXY8RHJvcGRvd25XcmFwcGVyUHJvcHM+YFxuICBib3JkZXI6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmRyb3Bkb3duV3JhcHBlclp9O1xuICB3aWR0aDogJHtwcm9wcyA9PiBwcm9wcy53aWR0aH1weDtcbmA7XG5cbmV4cG9ydCB0eXBlIEl0ZW1TZWxlY3RvclByb3BzPE9wdGlvbj4gPSB7XG4gIHNlbGVjdGVkSXRlbXM/OiBSZWFkb25seUFycmF5PE9wdGlvbj4gfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbDtcbiAgb3B0aW9uczogUmVhZG9ubHlBcnJheTxPcHRpb24+O1xuICBvbkNoYW5nZTogKGl0ZW1zOiBSZWFkb25seUFycmF5PE9wdGlvbj4gfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCkgPT4gdm9pZDtcbiAgZml4ZWRPcHRpb25zPzogUmVhZG9ubHlBcnJheTxPcHRpb24+IHwgbnVsbDtcbiAgZXJhc2FibGU/OiBib29sZWFuO1xuICBzaG93QXJyb3c/OiBib29sZWFuO1xuICBzZWFyY2hPcHRpb25zPzogKHZhbHVlOiBhbnksIG9wdDogT3B0aW9uKSA9PiBhbnk7XG4gIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICBkaXNwbGF5T3B0aW9uPzogc3RyaW5nIHwgKChvcHQ6IE9wdGlvbikgPT4gc3RyaW5nKTtcbiAgZ2V0T3B0aW9uVmFsdWU/OiBzdHJpbmcgfCAoKG9wdDogT3B0aW9uKSA9PiBhbnkpO1xuICBmaWx0ZXJPcHRpb24/OiBzdHJpbmcgfCAoKG9wdDogT3B0aW9uKSA9PiBib29sZWFuKTtcbiAgcGxhY2VtZW50Pzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlzRXJyb3I/OiBib29sZWFuO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIGlucHV0VGhlbWU/OiBzdHJpbmc7XG4gIG9uT3Blbj86ICgpID0+IHZvaWQ7XG4gIHNpemU/OiBzdHJpbmc7XG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhbjtcbiAgdHlwZWFoZWFkUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIERyb3BEb3duV3JhcHBlckNvbXBvbmVudD86IENvbXBvbmVudFR5cGU8YW55PiB8IG51bGw7XG4gIERyb3Bkb3duSGVhZGVyQ29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxhbnk+IHwgbnVsbDtcbiAgRHJvcERvd25SZW5kZXJDb21wb25lbnQ/OiBDb21wb25lbnRUeXBlPGFueT47XG4gIERyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnQ/OiBDb21wb25lbnRUeXBlPExpc3RJdGVtUHJvcHM8T3B0aW9uPj47XG4gIEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50PzogQ29tcG9uZW50VHlwZTxhbnk+O1xuICBpbnRsOiBJbnRsU2hhcGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcmVvcmRlckl0ZW1zPzogKG5ld09yZGVyOiBhbnkpID0+IHZvaWQ7XG4gIHNob3dEcm9wZG93bk9uTW91bnQ/OiBib29sZWFuO1xufTtcblxuY2xhc3MgSXRlbVNlbGVjdG9yVW5tZW1vaXplZCBleHRlbmRzIENvbXBvbmVudDxJdGVtU2VsZWN0b3JQcm9wczxhbnk+PiB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbXVsdGlTZWxlY3Q6IHRydWUsXG4gICAgcGxhY2Vob2xkZXI6ICdwbGFjZWhvbGRlci5lbnRlclZhbHVlJyxcbiAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgRHJvcERvd25SZW5kZXJDb21wb25lbnQ6IERyb3Bkb3duTGlzdCxcbiAgICBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50OiBMaXN0SXRlbSxcbiAgICBEcm9wRG93bldyYXBwZXJDb21wb25lbnQ6IERyb3Bkb3duV3JhcHBlcixcbiAgICByZW9yZGVySXRlbXM6IHVuZGVmaW5lZCxcbiAgICBjbGFzc05hbWU6ICcnXG4gIH07XG5cbiAgc3RhdGUgPSB7XG4gICAgc2hvd1R5cGVhaGVhZDogZmFsc2UsXG4gICAgZGltZW5zaW9uczoge1xuICAgICAgd2lkdGg6IDIwMFxuICAgIH1cbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93RHJvcGRvd25Pbk1vdW50KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzaG93VHlwZWFoZWFkOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICB9XG4gIH1cblxuICByb290OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+ID0gY3JlYXRlUmVmKCk7XG5cbiAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKCkgPT4ge1xuICAgIHRoaXMuX2hpZGVUeXBlYWhlYWQoKTtcbiAgfTtcblxuICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZGltZW5zaW9uc30pO1xuICB9O1xuXG4gIF9oaWRlVHlwZWFoZWFkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dUeXBlYWhlYWQ6IGZhbHNlfSk7XG4gICAgdGhpcy5fb25CbHVyKCk7XG4gIH07XG5cbiAgX29uQmx1ciA9ICgpID0+IHtcbiAgICAvLyBub3RlOiBjaGlja2xldGVkIGlucHV0IGlzIG5vdCBhIHJlYWwgZm9ybSBlbGVtZW50IHNvIHdlIGNhbGwgb25CbHVyKClcbiAgICAvLyB3aGVuIHdlIGZlZWwgdGhlIGV2ZW50cyBhcmUgYXBwcm9wcmlhdGVcbiAgICBpZiAodGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIF9yZW1vdmVJdGVtID0gKGl0ZW0sIGUpID0+IHtcbiAgICAvLyBvbmx5IHVzZWQgd2hlbiBtdWx0aVNlbGVjdCA9IHRydWVcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBtdWx0aVNlbGVjdGVkSXRlbXMgPSB0b0FycmF5KHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgY29uc3QgaW5kZXggPSBtdWx0aVNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHQgPT4gdCA9PT0gaXRlbSk7XG5cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbXMgPSBbXG4gICAgICAuLi5tdWx0aVNlbGVjdGVkSXRlbXMuc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgLi4ubXVsdGlTZWxlY3RlZEl0ZW1zLnNsaWNlKGluZGV4ICsgMSwgbXVsdGlTZWxlY3RlZEl0ZW1zLmxlbmd0aClcbiAgICBdO1xuXG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZShpdGVtcyk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtzaG93VHlwZWFoZWFkOiBmYWxzZX0pO1xuICAgICAgdGhpcy5fb25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIF9zZWxlY3RJdGVtID0gaXRlbSA9PiB7XG4gICAgY29uc3QgZ2V0VmFsdWUgPSBBY2Nlc3Nvci5nZW5lcmF0ZU9wdGlvblRvU3RyaW5nRm9yKFxuICAgICAgdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZSB8fCB0aGlzLnByb3BzLmRpc3BsYXlPcHRpb25cbiAgICApO1xuXG4gICAgY29uc3QgcHJldmlvdXNTZWxlY3RlZCA9IHRvQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zKTtcblxuICAgIGlmICh0aGlzLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHVuaXFCeShwcmV2aW91c1NlbGVjdGVkLmNvbmNhdCh0b0FycmF5KGl0ZW0pKSwgZ2V0VmFsdWUpO1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShpdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZ2V0VmFsdWUoaXRlbSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dUeXBlYWhlYWQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLl9vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgX29uRXJhc2U6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKG51bGwpO1xuICB9O1xuXG4gIF9zaG93VHlwZWFoZWFkOiBNb3VzZUV2ZW50SGFuZGxlciA9IGUgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbk9wZW4pIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk9wZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzaG93VHlwZWFoZWFkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3JlbmRlckRyb3Bkb3duKGludGw6IEludGxTaGFwZSkge1xuICAgIGNvbnN0IHtwbGFjZW1lbnQgPSAnYm90dG9tJ30gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtkaW1lbnNpb25zfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBjb25zdCBEcm9wRG93bldyYXBwZXJDb21wb25lbnQgPSB0aGlzLnByb3BzXG4gICAgICAuRHJvcERvd25XcmFwcGVyQ29tcG9uZW50IGFzIFJlYWN0LkNvbXBvbmVudFR5cGU8YW55PjtcblxuICAgIHJldHVybiAoXG4gICAgICA8UG9ydGFsZWQgbGVmdD17MH0gdG9wPXswfSBpc09wZW5lZD17dGhpcy5zdGF0ZS5zaG93VHlwZWFoZWFkfSBvbkNsb3NlPXt0aGlzLl9oaWRlVHlwZWFoZWFkfT5cbiAgICAgICAgPERyb3BEb3duV3JhcHBlckNvbXBvbmVudCBwbGFjZW1lbnQ9e3BsYWNlbWVudH0gd2lkdGg9e2RpbWVuc2lvbnM/LndpZHRofT5cbiAgICAgICAgICA8VHlwZWFoZWFkXG4gICAgICAgICAgICBjdXN0b21DbGFzc2VzPXt7XG4gICAgICAgICAgICAgIHJlc3VsdHM6ICdsaXN0LXNlbGVjdG9yJyxcbiAgICAgICAgICAgICAgaW5wdXQ6ICd0eXBlYWhlYWRfX2lucHV0JyxcbiAgICAgICAgICAgICAgbGlzdEl0ZW06ICdsaXN0X19pdGVtJyxcbiAgICAgICAgICAgICAgbGlzdEFuY2hvcjogJ2xpc3RfX2l0ZW1fX2FuY2hvcidcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvcHRpb25zPXt0aGlzLnByb3BzLm9wdGlvbnN9XG4gICAgICAgICAgICBmaWx0ZXJPcHRpb249e3RoaXMucHJvcHMuZmlsdGVyT3B0aW9ufVxuICAgICAgICAgICAgZml4ZWRPcHRpb25zPXt0aGlzLnByb3BzLmZpeGVkT3B0aW9uc31cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy50eXBlYWhlYWRQbGFjZWhvbGRlciB8fCBpbnRsXG4gICAgICAgICAgICAgICAgPyBpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAncGxhY2Vob2xkZXIuc2VhcmNoJ30pXG4gICAgICAgICAgICAgICAgOiAnU2VhcmNoJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25PcHRpb25TZWxlY3RlZD17dGhpcy5fc2VsZWN0SXRlbX1cbiAgICAgICAgICAgIGN1c3RvbUxpc3RDb21wb25lbnQ9e3RoaXMucHJvcHMuRHJvcERvd25SZW5kZXJDb21wb25lbnR9XG4gICAgICAgICAgICBjdXN0b21MaXN0SGVhZGVyQ29tcG9uZW50PXt0aGlzLnByb3BzLkRyb3Bkb3duSGVhZGVyQ29tcG9uZW50fVxuICAgICAgICAgICAgY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQ9e3RoaXMucHJvcHMuRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudH1cbiAgICAgICAgICAgIGRpc3BsYXlPcHRpb249e0FjY2Vzc29yLmdlbmVyYXRlT3B0aW9uVG9TdHJpbmdGb3IodGhpcy5wcm9wcy5kaXNwbGF5T3B0aW9uKX1cbiAgICAgICAgICAgIHNlYXJjaGFibGU9e3RoaXMucHJvcHMuc2VhcmNoYWJsZX1cbiAgICAgICAgICAgIHNlYXJjaE9wdGlvbnM9e3RoaXMucHJvcHMuc2VhcmNoT3B0aW9uc31cbiAgICAgICAgICAgIHNob3dPcHRpb25zV2hlbkVtcHR5XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXt0b0FycmF5KHRoaXMucHJvcHMuc2VsZWN0ZWRJdGVtcyl9XG4gICAgICAgICAgICBsaWdodD17dGhpcy5wcm9wcy5pbnB1dFRoZW1lID09PSAnbGlnaHQnfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRHJvcERvd25XcmFwcGVyQ29tcG9uZW50PlxuICAgICAgPC9Qb3J0YWxlZD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdG9BcnJheSh0aGlzLnByb3BzLnNlbGVjdGVkSXRlbXMpO1xuICAgIGNvbnN0IGRpc3BsYXlPcHRpb24gPSBBY2Nlc3Nvci5nZW5lcmF0ZU9wdGlvblRvU3RyaW5nRm9yKHRoaXMucHJvcHMuZGlzcGxheU9wdGlvbik7XG4gICAgY29uc3Qge2Rpc2FibGVkLCBpbnB1dFRoZW1lID0gJ3ByaW1hcnknfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBkcm9wZG93blNlbGVjdFByb3BzID0ge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc25hbWVzKHtcbiAgICAgICAgYWN0aXZlOiB0aGlzLnN0YXRlLnNob3dUeXBlYWhlYWRcbiAgICAgIH0pLFxuICAgICAgZGlzcGxheU9wdGlvbixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgb25DbGljazogdGhpcy5fc2hvd1R5cGVhaGVhZCxcbiAgICAgIGVycm9yOiB0aGlzLnByb3BzLmlzRXJyb3IsXG4gICAgICBpbnB1dFRoZW1lLFxuICAgICAgc2l6ZTogdGhpcy5wcm9wcy5zaXplXG4gICAgfTtcbiAgICBjb25zdCBpbnRsID0gdGhpcy5wcm9wcy5pbnRsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdpdGVtLXNlbGVjdG9yJywgdGhpcy5wcm9wcy5jbGFzc05hbWUpfSByZWY9e3RoaXMucm9vdH0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3twb3NpdGlvbjogJ3JlbGF0aXZlJ319PlxuICAgICAgICAgIHsvKiB0aGlzIHBhcnQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBsYWJlbCAqL31cbiAgICAgICAgICB7dGhpcy5wcm9wcy5tdWx0aVNlbGVjdCA/IChcbiAgICAgICAgICAgIDxDaGlja2xldGVkSW5wdXRcbiAgICAgICAgICAgICAgey4uLmRyb3Bkb3duU2VsZWN0UHJvcHN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e3RvQXJyYXkodGhpcy5wcm9wcy5zZWxlY3RlZEl0ZW1zKX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHJlbW92ZUl0ZW09e3RoaXMuX3JlbW92ZUl0ZW19XG4gICAgICAgICAgICAgIHJlb3JkZXJJdGVtcz17dGhpcy5wcm9wcy5yZW9yZGVySXRlbXN9XG4gICAgICAgICAgICAgIEN1c3RvbUNoaWNrbGV0Q29tcG9uZW50PXt0aGlzLnByb3BzLkN1c3RvbUNoaWNrbGV0Q29tcG9uZW50fVxuICAgICAgICAgICAgICBpbnB1dFRoZW1lPXtpbnB1dFRoZW1lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPERyb3Bkb3duU2VsZWN0XG4gICAgICAgICAgICAgIHsuLi5kcm9wZG93blNlbGVjdFByb3BzfVxuICAgICAgICAgICAgICB2YWx1ZT17c2VsZWN0ZWRbMF19XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBlcmFzYWJsZT17dGhpcy5wcm9wcy5lcmFzYWJsZX1cbiAgICAgICAgICAgICAgc2hvd0Fycm93PXt0aGlzLnByb3BzLnNob3dBcnJvd31cbiAgICAgICAgICAgICAgb25FcmFzZT17dGhpcy5fb25FcmFzZX1cbiAgICAgICAgICAgICAgc2hvd0Ryb3Bkb3duPXt0aGlzLl9zaG93VHlwZWFoZWFkfVxuICAgICAgICAgICAgICBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50PXt0aGlzLnByb3BzLkRyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgey8qIHRoaXMgcGFydCBpcyB1c2VkIHRvIGJ1aWx0IHRoZSBsaXN0ICovfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJEcm9wZG93bihpbnRsKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEl0ZW1TZWxlY3RvciA9IFJlYWN0Lm1lbW8oSXRlbVNlbGVjdG9yVW5tZW1vaXplZCk7XG5JdGVtU2VsZWN0b3IuZGlzcGxheU5hbWUgPSAnSXRlbVNlbGVjdG9yJztcblxuZXhwb3J0IGRlZmF1bHQgaW5qZWN0SW50bChJdGVtU2VsZWN0b3IpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGlCQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBSyxTQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxnQkFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBVCx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsU0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsTUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsWUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksVUFBQSxHQUFBWixPQUFBO0FBRUEsSUFBQWEsZUFBQSxHQUFBWCxzQkFBQSxDQUFBRixPQUFBO0FBQStDLElBQUFjLGVBQUEsRUFqQi9DO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWpCLHdCQUFBaUIsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxDQUFBLFNBQUFHLENBQUEsR0FBQVAsQ0FBQSxHQUFBQyxNQUFBLENBQUFFLHdCQUFBLENBQUFiLENBQUEsRUFBQWMsQ0FBQSxVQUFBRyxDQUFBLEtBQUFBLENBQUEsQ0FBQVYsR0FBQSxJQUFBVSxDQUFBLENBQUFDLEdBQUEsSUFBQVAsTUFBQSxDQUFBQyxjQUFBLENBQUFKLENBQUEsRUFBQU0sQ0FBQSxFQUFBRyxDQUFBLElBQUFULENBQUEsQ0FBQU0sQ0FBQSxJQUFBZCxDQUFBLENBQUFjLENBQUEsWUFBQU4sQ0FBQSxjQUFBUixDQUFBLEVBQUFHLENBQUEsSUFBQUEsQ0FBQSxDQUFBZSxHQUFBLENBQUFsQixDQUFBLEVBQUFRLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFXLFdBQUFoQixDQUFBLEVBQUFpQixDQUFBLEVBQUFwQixDQUFBLFdBQUFvQixDQUFBLE9BQUFDLGdCQUFBLGFBQUFELENBQUEsT0FBQUUsMkJBQUEsYUFBQW5CLENBQUEsRUFBQW9CLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBTCxDQUFBLEVBQUFwQixDQUFBLFlBQUFxQixnQkFBQSxhQUFBbEIsQ0FBQSxFQUFBdUIsV0FBQSxJQUFBTixDQUFBLENBQUFPLEtBQUEsQ0FBQXhCLENBQUEsRUFBQUgsQ0FBQTtBQUFBLFNBQUF1QiwwQkFBQSxjQUFBcEIsQ0FBQSxJQUFBeUIsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQWQsSUFBQSxDQUFBUSxPQUFBLENBQUFDLFNBQUEsQ0FBQUcsT0FBQSxpQ0FBQXpCLENBQUEsYUFBQW9CLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFwQixDQUFBO0FBdUJBLElBQU00QixlQUdMLEdBQUdDLDRCQUFNLENBQUNDLEdBQUcsQ0FBQW5DLGVBQUEsS0FBQUEsZUFBQSxPQUFBb0MsdUJBQUEscUdBSUQsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxnQkFBZ0I7QUFBQSxHQUN2QyxVQUFBRixLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDRyxLQUFLO0FBQUEsRUFDOUI7QUFBQyxJQW9DSUMsc0JBQXNCLDBCQUFBQyxVQUFBO0VBQUEsU0FBQUQsdUJBQUE7SUFBQSxJQUFBRSxLQUFBO0lBQUEsSUFBQUMsZ0JBQUEsbUJBQUFILHNCQUFBO0lBQUEsU0FBQUksSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUMsSUFBQSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtNQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJQUFBO0lBQUE7SUFBQVAsS0FBQSxHQUFBdEIsVUFBQSxPQUFBb0Isc0JBQUEsS0FBQVUsTUFBQSxDQUFBSCxJQUFBO0lBQUEsSUFBQUksZ0JBQUEsYUFBQVQsS0FBQSxXQWFsQjtNQUNOVSxhQUFhLEVBQUUsS0FBSztNQUNwQkMsVUFBVSxFQUFFO1FBQ1ZkLEtBQUssRUFBRTtNQUNUO0lBQ0YsQ0FBQztJQUFBLElBQUFZLGdCQUFBLGFBQUFULEtBQUEsdUJBa0JpQyxJQUFBWSxnQkFBUyxFQUFDLENBQUM7SUFBQSxJQUFBSCxnQkFBQSxhQUFBVCxLQUFBLHdCQUV4QixZQUFNO01BQ3pCQSxLQUFBLENBQUthLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxJQUFBSixnQkFBQSxhQUFBVCxLQUFBLG1CQUVlLFVBQUFXLFVBQVUsRUFBSTtNQUM1QlgsS0FBQSxDQUFLYyxRQUFRLENBQUM7UUFBQ0gsVUFBVSxFQUFWQTtNQUFVLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQUEsSUFBQUYsZ0JBQUEsYUFBQVQsS0FBQSxvQkFFZ0IsWUFBTTtNQUNyQkEsS0FBQSxDQUFLYyxRQUFRLENBQUM7UUFBQ0osYUFBYSxFQUFFO01BQUssQ0FBQyxDQUFDO01BQ3JDVixLQUFBLENBQUtlLE9BQU8sQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFBQSxJQUFBTixnQkFBQSxhQUFBVCxLQUFBLGFBRVMsWUFBTTtNQUNkO01BQ0E7TUFDQSxJQUFJQSxLQUFBLENBQUtOLEtBQUssQ0FBQ3NCLE1BQU0sRUFBRTtRQUNyQmhCLEtBQUEsQ0FBS04sS0FBSyxDQUFDc0IsTUFBTSxDQUFDLENBQUM7TUFDckI7SUFDRixDQUFDO0lBQUEsSUFBQVAsZ0JBQUEsYUFBQVQsS0FBQSxpQkFFYSxVQUFDaUIsSUFBSSxFQUFFMUQsQ0FBQyxFQUFLO01BQ3pCO01BQ0FBLENBQUMsQ0FBQzJELGNBQWMsQ0FBQyxDQUFDO01BQ2xCM0QsQ0FBQyxDQUFDNEQsZUFBZSxDQUFDLENBQUM7TUFDbkIsSUFBTUMsa0JBQWtCLEdBQUcsSUFBQUMsb0JBQU8sRUFBQ3JCLEtBQUEsQ0FBS04sS0FBSyxDQUFDNEIsYUFBYSxDQUFDO01BQzVELElBQU1DLEtBQUssR0FBR0gsa0JBQWtCLENBQUNJLFNBQVMsQ0FBQyxVQUFBOUQsQ0FBQztRQUFBLE9BQUlBLENBQUMsS0FBS3VELElBQUk7TUFBQSxFQUFDO01BRTNELElBQUlNLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDYjtNQUNGO01BRUEsSUFBTUUsS0FBSyxNQUFBakIsTUFBQSxLQUFBa0IsbUJBQUEsYUFDTk4sa0JBQWtCLENBQUNPLEtBQUssQ0FBQyxDQUFDLEVBQUVKLEtBQUssQ0FBQyxPQUFBRyxtQkFBQSxhQUNsQ04sa0JBQWtCLENBQUNPLEtBQUssQ0FBQ0osS0FBSyxHQUFHLENBQUMsRUFBRUgsa0JBQWtCLENBQUNoQixNQUFNLENBQUMsRUFDbEU7TUFFREosS0FBQSxDQUFLTixLQUFLLENBQUNrQyxRQUFRLENBQUNILEtBQUssQ0FBQztNQUUxQixJQUFJekIsS0FBQSxDQUFLTixLQUFLLENBQUNtQyxhQUFhLEVBQUU7UUFDNUI3QixLQUFBLENBQUtjLFFBQVEsQ0FBQztVQUFDSixhQUFhLEVBQUU7UUFBSyxDQUFDLENBQUM7UUFDckNWLEtBQUEsQ0FBS2UsT0FBTyxDQUFDLENBQUM7TUFDaEI7SUFDRixDQUFDO0lBQUEsSUFBQU4sZ0JBQUEsYUFBQVQsS0FBQSxpQkFFYSxVQUFBaUIsSUFBSSxFQUFJO01BQ3BCLElBQU1hLFFBQVEsR0FBR0Msb0JBQVEsQ0FBQ0MseUJBQXlCLENBQ2pEaEMsS0FBQSxDQUFLTixLQUFLLENBQUN1QyxjQUFjLElBQUlqQyxLQUFBLENBQUtOLEtBQUssQ0FBQ3dDLGFBQzFDLENBQUM7TUFFRCxJQUFNQyxnQkFBZ0IsR0FBRyxJQUFBZCxvQkFBTyxFQUFDckIsS0FBQSxDQUFLTixLQUFLLENBQUM0QixhQUFhLENBQUM7TUFFMUQsSUFBSXRCLEtBQUEsQ0FBS04sS0FBSyxDQUFDMEMsV0FBVyxFQUFFO1FBQzFCLElBQU1YLEtBQUssR0FBRyxJQUFBWSxrQkFBTSxFQUFDRixnQkFBZ0IsQ0FBQzNCLE1BQU0sQ0FBQyxJQUFBYSxvQkFBTyxFQUFDSixJQUFJLENBQUMsQ0FBQyxFQUFFYSxRQUFRLENBQUM7UUFDdEU5QixLQUFBLENBQUtOLEtBQUssQ0FBQ2tDLFFBQVEsQ0FBQ0gsS0FBSyxDQUFDO01BQzVCLENBQUMsTUFBTTtRQUNMekIsS0FBQSxDQUFLTixLQUFLLENBQUNrQyxRQUFRLENBQUNFLFFBQVEsQ0FBQ2IsSUFBSSxDQUFDLENBQUM7TUFDckM7TUFFQSxJQUFJakIsS0FBQSxDQUFLTixLQUFLLENBQUNtQyxhQUFhLEVBQUU7UUFDNUI3QixLQUFBLENBQUtjLFFBQVEsQ0FBQztVQUFDSixhQUFhLEVBQUU7UUFBSyxDQUFDLENBQUM7UUFDckNWLEtBQUEsQ0FBS2UsT0FBTyxDQUFDLENBQUM7TUFDaEI7SUFDRixDQUFDO0lBQUEsSUFBQU4sZ0JBQUEsYUFBQVQsS0FBQSxjQUU2QixVQUFBekMsQ0FBQyxFQUFJO01BQ2pDQSxDQUFDLENBQUM0RCxlQUFlLENBQUMsQ0FBQztNQUNuQm5CLEtBQUEsQ0FBS04sS0FBSyxDQUFDa0MsUUFBUSxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBQUEsSUFBQW5CLGdCQUFBLGFBQUFULEtBQUEsb0JBRW1DLFVBQUF6QyxDQUFDLEVBQUk7TUFDdkNBLENBQUMsQ0FBQzRELGVBQWUsQ0FBQyxDQUFDO01BQ25CLElBQUksQ0FBQ25CLEtBQUEsQ0FBS04sS0FBSyxDQUFDNEMsUUFBUSxFQUFFO1FBQ3hCLElBQUl0QyxLQUFBLENBQUtOLEtBQUssQ0FBQzZDLE1BQU0sRUFBRTtVQUNyQnZDLEtBQUEsQ0FBS04sS0FBSyxDQUFDNkMsTUFBTSxDQUFDLENBQUM7UUFDckI7UUFDQXZDLEtBQUEsQ0FBS2MsUUFBUSxDQUFDO1VBQ1pKLGFBQWEsRUFBRTtRQUNqQixDQUFDLENBQUM7TUFDSjtJQUNGLENBQUM7SUFBQSxPQUFBVixLQUFBO0VBQUE7RUFBQSxJQUFBd0MsVUFBQSxhQUFBMUMsc0JBQUEsRUFBQUMsVUFBQTtFQUFBLFdBQUEwQyxhQUFBLGFBQUEzQyxzQkFBQTtJQUFBNEMsR0FBQTtJQUFBQyxLQUFBLEVBbEdELFNBQUFDLGlCQUFpQkEsQ0FBQSxFQUFHO01BQ2xCLElBQUksSUFBSSxDQUFDbEQsS0FBSyxDQUFDbUQsbUJBQW1CLEVBQUU7UUFDbEMsSUFBSSxDQUFDL0IsUUFBUSxDQUFDO1VBQUNKLGFBQWEsRUFBRTtRQUFJLENBQUMsQ0FBQztNQUN0QztNQUVBLElBQUksSUFBSSxDQUFDb0MsSUFBSSxDQUFDQyxPQUFPLFlBQVlDLFdBQVcsRUFBRTtRQUM1QyxJQUFBQyx3QkFBaUIsRUFBQyxJQUFJLENBQUNILElBQUksQ0FBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ0csYUFBYSxDQUFDO01BQzFEO0lBQ0Y7RUFBQztJQUFBUixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBUSxvQkFBb0JBLENBQUEsRUFBRztNQUNyQixJQUFJLElBQUksQ0FBQ0wsSUFBSSxDQUFDQyxPQUFPLFlBQVlDLFdBQVcsRUFBRTtRQUM1QyxJQUFBSSwwQkFBbUIsRUFBQyxJQUFJLENBQUNOLElBQUksQ0FBQ0MsT0FBTyxDQUFDO01BQ3hDO0lBQ0Y7RUFBQztJQUFBTCxHQUFBO0lBQUFDLEtBQUEsRUFzRkQsU0FBQVUsZUFBZUEsQ0FBQ0MsSUFBZSxFQUFFO01BQy9CLElBQUFDLHFCQUFBLEdBQStCLElBQUksQ0FBQzdELEtBQUssQ0FBbEM4RCxTQUFTO1FBQVRBLFNBQVMsR0FBQUQscUJBQUEsY0FBRyxRQUFRLEdBQUFBLHFCQUFBO01BQzNCLElBQU81QyxVQUFVLEdBQUksSUFBSSxDQUFDOEMsS0FBSyxDQUF4QjlDLFVBQVU7TUFFakIsSUFBTStDLHdCQUF3QixHQUFHLElBQUksQ0FBQ2hFLEtBQUssQ0FDeENnRSx3QkFBb0Q7TUFFdkQsb0JBQ0VySCxNQUFBLFlBQUFzSCxhQUFBLENBQUMzRyxTQUFBLFdBQVE7UUFBQzRHLElBQUksRUFBRSxDQUFFO1FBQUNDLEdBQUcsRUFBRSxDQUFFO1FBQUNDLFFBQVEsRUFBRSxJQUFJLENBQUNMLEtBQUssQ0FBQy9DLGFBQWM7UUFBQ3FELE9BQU8sRUFBRSxJQUFJLENBQUNsRDtNQUFlLGdCQUMxRnhFLE1BQUEsWUFBQXNILGFBQUEsQ0FBQ0Qsd0JBQXdCO1FBQUNGLFNBQVMsRUFBRUEsU0FBVTtRQUFDM0QsS0FBSyxFQUFFYyxVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRWQ7TUFBTSxnQkFDdkV4RCxNQUFBLFlBQUFzSCxhQUFBLENBQUM3RyxVQUFBLFdBQVM7UUFDUmtILGFBQWEsRUFBRTtVQUNiQyxPQUFPLEVBQUUsZUFBZTtVQUN4QkMsS0FBSyxFQUFFLGtCQUFrQjtVQUN6QkMsUUFBUSxFQUFFLFlBQVk7VUFDdEJDLFVBQVUsRUFBRTtRQUNkLENBQUU7UUFDRkMsT0FBTyxFQUFFLElBQUksQ0FBQzNFLEtBQUssQ0FBQzJFLE9BQVE7UUFDNUJDLFlBQVksRUFBRSxJQUFJLENBQUM1RSxLQUFLLENBQUM0RSxZQUFhO1FBQ3RDQyxZQUFZLEVBQUUsSUFBSSxDQUFDN0UsS0FBSyxDQUFDNkUsWUFBYTtRQUN0Q0MsV0FBVyxFQUNULElBQUksQ0FBQzlFLEtBQUssQ0FBQytFLG9CQUFvQixJQUFJbkIsSUFBSSxHQUNuQ0EsSUFBSSxDQUFDb0IsYUFBYSxDQUFDO1VBQUNDLEVBQUUsRUFBRTtRQUFvQixDQUFDLENBQUMsR0FDOUMsUUFDTDtRQUNEQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUNDLFdBQVk7UUFDbkNDLG1CQUFtQixFQUFFLElBQUksQ0FBQ3BGLEtBQUssQ0FBQ3FGLHVCQUF3QjtRQUN4REMseUJBQXlCLEVBQUUsSUFBSSxDQUFDdEYsS0FBSyxDQUFDdUYsdUJBQXdCO1FBQzlEQyx1QkFBdUIsRUFBRSxJQUFJLENBQUN4RixLQUFLLENBQUN5RiwrQkFBZ0M7UUFDcEVqRCxhQUFhLEVBQUVILG9CQUFRLENBQUNDLHlCQUF5QixDQUFDLElBQUksQ0FBQ3RDLEtBQUssQ0FBQ3dDLGFBQWEsQ0FBRTtRQUM1RWtELFVBQVUsRUFBRSxJQUFJLENBQUMxRixLQUFLLENBQUMwRixVQUFXO1FBQ2xDQyxhQUFhLEVBQUUsSUFBSSxDQUFDM0YsS0FBSyxDQUFDMkYsYUFBYztRQUN4Q0Msb0JBQW9CO1FBQ3BCaEUsYUFBYSxFQUFFLElBQUFELG9CQUFPLEVBQUMsSUFBSSxDQUFDM0IsS0FBSyxDQUFDNEIsYUFBYSxDQUFFO1FBQ2pEaUUsS0FBSyxFQUFFLElBQUksQ0FBQzdGLEtBQUssQ0FBQzhGLFVBQVUsS0FBSztNQUFRLENBQzFDLENBQ3VCLENBQ2xCLENBQUM7SUFFZjtFQUFDO0lBQUE5QyxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBOEMsTUFBTUEsQ0FBQSxFQUFHO01BQ1AsSUFBTUMsUUFBUSxHQUFHLElBQUFyRSxvQkFBTyxFQUFDLElBQUksQ0FBQzNCLEtBQUssQ0FBQzRCLGFBQWEsQ0FBQztNQUNsRCxJQUFNWSxhQUFhLEdBQUdILG9CQUFRLENBQUNDLHlCQUF5QixDQUFDLElBQUksQ0FBQ3RDLEtBQUssQ0FBQ3dDLGFBQWEsQ0FBQztNQUNsRixJQUFBeUQsV0FBQSxHQUEyQyxJQUFJLENBQUNqRyxLQUFLO1FBQTlDNEMsUUFBUSxHQUFBcUQsV0FBQSxDQUFSckQsUUFBUTtRQUFBc0QscUJBQUEsR0FBQUQsV0FBQSxDQUFFSCxVQUFVO1FBQVZBLFVBQVUsR0FBQUkscUJBQUEsY0FBRyxTQUFTLEdBQUFBLHFCQUFBO01BRXZDLElBQU1DLG1CQUFtQixHQUFHO1FBQzFCQyxTQUFTLEVBQUUsSUFBQUMsc0JBQVUsRUFBQztVQUNwQkMsTUFBTSxFQUFFLElBQUksQ0FBQ3ZDLEtBQUssQ0FBQy9DO1FBQ3JCLENBQUMsQ0FBQztRQUNGd0IsYUFBYSxFQUFiQSxhQUFhO1FBQ2JJLFFBQVEsRUFBUkEsUUFBUTtRQUNSMkQsT0FBTyxFQUFFLElBQUksQ0FBQ0MsY0FBYztRQUM1QkMsS0FBSyxFQUFFLElBQUksQ0FBQ3pHLEtBQUssQ0FBQzBHLE9BQU87UUFDekJaLFVBQVUsRUFBVkEsVUFBVTtRQUNWYSxJQUFJLEVBQUUsSUFBSSxDQUFDM0csS0FBSyxDQUFDMkc7TUFDbkIsQ0FBQztNQUNELElBQU0vQyxJQUFJLEdBQUcsSUFBSSxDQUFDNUQsS0FBSyxDQUFDNEQsSUFBSTtNQUU1QixvQkFDRWpILE1BQUEsWUFBQXNILGFBQUE7UUFBS21DLFNBQVMsRUFBRSxJQUFBQyxzQkFBVSxFQUFDLGVBQWUsRUFBRSxJQUFJLENBQUNyRyxLQUFLLENBQUNvRyxTQUFTLENBQUU7UUFBQ1EsR0FBRyxFQUFFLElBQUksQ0FBQ3hEO01BQUssZ0JBQ2hGekcsTUFBQSxZQUFBc0gsYUFBQTtRQUFLNEMsS0FBSyxFQUFFO1VBQUNDLFFBQVEsRUFBRTtRQUFVO01BQUUsR0FFaEMsSUFBSSxDQUFDOUcsS0FBSyxDQUFDMEMsV0FBVyxnQkFDckIvRixNQUFBLFlBQUFzSCxhQUFBLENBQUM5RyxnQkFBQSxXQUFlLE1BQUE0SixTQUFBLGlCQUNWWixtQkFBbUI7UUFDdkJ2RSxhQUFhLEVBQUUsSUFBQUQsb0JBQU8sRUFBQyxJQUFJLENBQUMzQixLQUFLLENBQUM0QixhQUFhLENBQUU7UUFDakRrRCxXQUFXLEVBQUUsSUFBSSxDQUFDOUUsS0FBSyxDQUFDOEUsV0FBWTtRQUNwQ2tDLFVBQVUsRUFBRSxJQUFJLENBQUNDLFdBQVk7UUFDN0JDLFlBQVksRUFBRSxJQUFJLENBQUNsSCxLQUFLLENBQUNrSCxZQUFhO1FBQ3RDQyx1QkFBdUIsRUFBRSxJQUFJLENBQUNuSCxLQUFLLENBQUNtSCx1QkFBd0I7UUFDNURyQixVQUFVLEVBQUVBO01BQVcsRUFDeEIsQ0FBQyxnQkFFRm5KLE1BQUEsWUFBQXNILGFBQUEsQ0FBQ3ZHLGVBQUEsV0FBYyxNQUFBcUosU0FBQSxpQkFDVFosbUJBQW1CO1FBQ3ZCbEQsS0FBSyxFQUFFK0MsUUFBUSxDQUFDLENBQUMsQ0FBRTtRQUNuQmxCLFdBQVcsRUFBRSxJQUFJLENBQUM5RSxLQUFLLENBQUM4RSxXQUFZO1FBQ3BDc0MsUUFBUSxFQUFFLElBQUksQ0FBQ3BILEtBQUssQ0FBQ29ILFFBQVM7UUFDOUJDLFNBQVMsRUFBRSxJQUFJLENBQUNySCxLQUFLLENBQUNxSCxTQUFVO1FBQ2hDQyxPQUFPLEVBQUUsSUFBSSxDQUFDQyxRQUFTO1FBQ3ZCQyxZQUFZLEVBQUUsSUFBSSxDQUFDaEIsY0FBZTtRQUNsQ2YsK0JBQStCLEVBQUUsSUFBSSxDQUFDekYsS0FBSyxDQUFDeUY7TUFBZ0MsRUFDN0UsQ0FDRixFQUVBLElBQUksQ0FBQzlCLGVBQWUsQ0FBQ0MsSUFBSSxDQUN2QixDQUNGLENBQUM7SUFFVjtFQUFDO0FBQUEsRUFsTmtDNkQsZ0JBQVM7QUFBQSxJQUFBMUcsZ0JBQUEsYUFBeENYLHNCQUFzQixrQkFDSjtFQUNwQnNDLFdBQVcsRUFBRSxJQUFJO0VBQ2pCb0MsV0FBVyxFQUFFLHdCQUF3QjtFQUNyQzNDLGFBQWEsRUFBRSxJQUFJO0VBQ25CdUQsVUFBVSxFQUFFLElBQUk7RUFDaEJMLHVCQUF1QixFQUFFcUMsd0JBQVk7RUFDckNqQywrQkFBK0IsRUFBRWtDLHNCQUFRO0VBQ3pDM0Qsd0JBQXdCLEVBQUVwRSxlQUFlO0VBQ3pDc0gsWUFBWSxFQUFFVSxTQUFTO0VBQ3ZCeEIsU0FBUyxFQUFFO0FBQ2IsQ0FBQztBQTBNSCxJQUFNeUIsWUFBWSxnQkFBR0MsaUJBQUssQ0FBQ0MsSUFBSSxDQUFDM0gsc0JBQXNCLENBQUM7QUFDdkR5SCxZQUFZLENBQUNHLFdBQVcsR0FBRyxjQUFjO0FBQUMsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLGNBRTNCLElBQUFDLHFCQUFVLEVBQUNOLFlBQVksQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==