@impargo/react-here-maps
Version:
React.js HERE Maps component
214 lines • 20.1 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HEREMap = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
require("./bundle");
var lodash_1 = require("lodash");
var react_1 = require("react");
var context_1 = require("./context");
var useLegacyRasterLayers_1 = require("./useLegacyRasterLayers");
var useRasterLayers_1 = require("./useRasterLayers");
var useVectorLayers_1 = require("./useVectorLayers");
var get_platform_1 = require("./utils/get-platform");
var languages_1 = require("./utils/languages");
exports.HEREMap = (0, react_1.forwardRef)(function (_a, ref) {
var children = _a.children, center = _a.center, hidpi = _a.hidpi, _b = _a.interactive, interactive = _b === void 0 ? true : _b, zoom = _a.zoom, useSatellite = _a.useSatellite, trafficLayer = _a.trafficLayer, onMapAvailable = _a.onMapAvailable, disableMapSettings = _a.disableMapSettings, _c = _a.language, language = _c === void 0 ? 'en' : _c, congestion = _a.congestion, truckRestrictions = _a.truckRestrictions, showActiveAndInactiveTruckRestrictions = _a.showActiveAndInactiveTruckRestrictions, hideTruckRestrictionsWhenZooming = _a.hideTruckRestrictionsWhenZooming, apiKey = _a.apiKey, animateZoom = _a.animateZoom, animateCenter = _a.animateCenter, useVectorTiles = _a.useVectorTiles, _d = _a.engineType, engineType = _d === void 0 ? H.Map.EngineType.HARP : _d;
if (engineType === H.Map.EngineType.WEBGL) {
throw new Error('WEBGL Engine is not supported.');
}
if (engineType !== H.Map.EngineType.HARP && useVectorTiles) {
throw new Error('Vector tiles can only be used with the HARP engine.');
}
var uniqueIdRef = (0, react_1.useRef)((0, lodash_1.uniqueId)());
var _e = (0, react_1.useState)(null), map = _e[0], setMap = _e[1];
var _f = (0, react_1.useState)(null), routesGroup = _f[0], setRoutesGroup = _f[1];
var markersGroupsRef = (0, react_1.useRef)({});
var defaultLayersRef = (0, react_1.useRef)(null);
(0, useVectorLayers_1.useVectorLayers)({
congestion: congestion,
defaultLayers: defaultLayersRef.current,
map: map,
trafficLayer: trafficLayer,
truckRestrictions: truckRestrictions,
useSatellite: useSatellite,
enableVectorLayers: useVectorTiles,
});
(0, useRasterLayers_1.useRasterLayers)({
apiKey: apiKey,
congestion: congestion,
defaultLayers: defaultLayersRef.current,
language: language,
map: map,
trafficLayer: trafficLayer,
truckRestrictions: truckRestrictions,
showActiveAndInactiveTruckRestrictions: showActiveAndInactiveTruckRestrictions,
useSatellite: useSatellite,
enableRasterLayers: !useVectorTiles && engineType === H.Map.EngineType.HARP,
hidpi: hidpi,
hideTruckRestrictionsWhenZooming: hideTruckRestrictionsWhenZooming,
});
(0, useLegacyRasterLayers_1.useLegacyRasterLayers)({
apiKey: apiKey,
congestion: congestion,
defaultLayers: defaultLayersRef.current,
language: language,
map: map,
trafficLayer: trafficLayer,
truckRestrictions: truckRestrictions,
useSatellite: useSatellite,
enableRasterLayers: !useVectorTiles && engineType === H.Map.EngineType.P2D,
hidpi: hidpi,
});
var unmountedRef = (0, react_1.useRef)(false);
var screenToGeo = function (x, y) {
return map.screenToGeo(x, y);
};
var zoomOnMarkersGroup = function (markersGroup, animate) {
if (animate === void 0) { animate = true; }
var DISTANCE_FACTOR = 0.1;
var BEARING_TOP_LEFT = 315;
var BEARING_BOTTOM_RIGHT = 135;
var boundingBox = markersGroup.getBoundingBox();
var topLeft = boundingBox.getTopLeft();
var bottomRight = boundingBox.getBottomRight();
var distance = topLeft.distance(bottomRight) * DISTANCE_FACTOR;
var viewBounds = H.geo.Rect.fromPoints(topLeft.walk(BEARING_TOP_LEFT, distance), bottomRight.walk(BEARING_BOTTOM_RIGHT, distance));
if (viewBounds) {
map.getViewModel().setLookAtData({ bounds: viewBounds }, animate, true);
}
};
var zoomOnMarkers = function (animate, group) {
if (animate === void 0) { animate = true; }
if (group === void 0) { group = 'default'; }
if (map) {
if (!markersGroupsRef.current[group]) {
return;
}
zoomOnMarkersGroup(markersGroupsRef.current[group], animate);
}
};
var zoomOnMarkersSet = function (markersSet, animate) {
if (animate === void 0) { animate = true; }
var markersGroupSet = new H.map.Group();
markersSet.map(function (m) { return markersGroupSet.addObject(m); });
zoomOnMarkersGroup(markersGroupSet, animate);
};
var addToMarkerGroup = function (marker, group) {
if (!markersGroupsRef.current[group]) {
markersGroupsRef.current[group] = new H.map.Group();
map.addObject(markersGroupsRef.current[group]);
}
markersGroupsRef.current[group].addObject(marker);
};
var removeFromMarkerGroup = function (marker, group) {
if (markersGroupsRef.current[group]) {
markersGroupsRef.current[group].removeObject(marker);
if (markersGroupsRef.current[group].getObjects().length === 0) {
if (map.getObjects().length > 0) {
map.removeObject(markersGroupsRef.current[group]);
}
markersGroupsRef.current[group] = null;
}
}
};
(0, react_1.useImperativeHandle)(ref, function () {
return {
addToMarkerGroup: addToMarkerGroup,
getElement: function () { return document.querySelector("#map-container-".concat(uniqueIdRef.current)); },
getMap: function () { return map; },
removeFromMarkerGroup: removeFromMarkerGroup,
screenToGeo: screenToGeo,
setCenter: function (point) {
map.setCenter(point, animateCenter);
},
setZoom: function (newZoom) {
map.setZoom(newZoom, animateZoom);
},
zoomOnMarkers: zoomOnMarkers,
zoomOnMarkersSet: zoomOnMarkersSet,
};
}, [map]);
(0, react_1.useEffect)(function () {
if (unmountedRef.current) {
return;
}
// get the platform to base the maps on
var platform = (0, get_platform_1.getPlatform)({
apikey: apiKey,
});
var ppi = engineType === H.Map.EngineType.P2D
? hidpi ? 320 : 72
: undefined;
defaultLayersRef.current = platform.createDefaultLayers({
lg: (0, languages_1.getTileLanguage)(language),
engineType: engineType,
ppi: ppi,
});
var hereMapEl = document.querySelector("#map-container-".concat(uniqueIdRef.current));
var baseLayer = useVectorTiles
? defaultLayersRef.current.vector.normal.logistics
: defaultLayersRef.current.raster.normal.map;
var newMap = new H.Map(hereMapEl, baseLayer, {
center: center,
engineType: engineType,
zoom: zoom,
});
var routesProvider = new H.map.provider.LocalObjectProvider();
var routesLayer = new H.map.layer.ObjectLayer(routesProvider);
newMap.addLayer(routesLayer);
var ui;
// make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom
var behavior = interactive ? new H.mapevents.Behavior(new H.mapevents.MapEvents(newMap)) : undefined;
if (behavior) {
behavior.disable(H.mapevents.Behavior.Feature.FRACTIONAL_ZOOM);
// create the default UI for the map
ui = H.ui.UI.createDefault(newMap, defaultLayersRef.current, (0, languages_1.getUILanguage)(language));
if (disableMapSettings) {
ui.removeControl('mapsettings');
}
}
setMap(newMap);
setRoutesGroup(routesProvider.getRootGroup());
onMapAvailable === null || onMapAvailable === void 0 ? void 0 : onMapAvailable({
behavior: behavior,
map: newMap,
markersGroups: markersGroupsRef.current,
routesGroup: routesProvider.getRootGroup(),
trafficLayer: trafficLayer,
ui: ui,
});
return function () {
unmountedRef.current = true;
map === null || map === void 0 ? void 0 : map.dispose();
};
}, []);
(0, react_1.useEffect)(function () {
if (map) {
var resizeMap = function () {
map.getViewPort().resize();
};
var debouncedResizeMap_1 = (0, lodash_1.debounce)(resizeMap, 200);
// make the map resize when the window gets resized
window.addEventListener('resize', debouncedResizeMap_1);
return function () {
window.removeEventListener('resize', debouncedResizeMap_1);
};
}
}, [map]);
return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "heremap", style: { height: '100%' } }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ className: "map-container", id: "map-container-".concat(uniqueIdRef.current), style: { height: '100%' } }, { children: map && (0, jsx_runtime_1.jsx)(context_1.HEREMapContext.Provider, __assign({ value: { map: map, routesGroup: routesGroup, removeFromMarkerGroup: removeFromMarkerGroup, addToMarkerGroup: addToMarkerGroup } }, { children: children })) })) })));
});
exports.default = exports.HEREMap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSEVSRU1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9IRVJFTWFwLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvQkFBaUI7QUFFakIsaUNBQTJDO0FBQzNDLCtCQUEyRjtBQUUzRixxQ0FBMEM7QUFFMUMsaUVBQStEO0FBQy9ELHFEQUFtRDtBQUNuRCxxREFBbUQ7QUFDbkQscURBQWtEO0FBQ2xELCtDQUFrRTtBQXFFckQsUUFBQSxPQUFPLEdBQUcsSUFBQSxrQkFBVSxFQUEyQixVQUFDLEVBb0I1RCxFQUFFLEdBQUc7UUFuQkosUUFBUSxjQUFBLEVBQ1IsTUFBTSxZQUFBLEVBQ04sS0FBSyxXQUFBLEVBQ0wsbUJBQWtCLEVBQWxCLFdBQVcsbUJBQUcsSUFBSSxLQUFBLEVBQ2xCLElBQUksVUFBQSxFQUNKLFlBQVksa0JBQUEsRUFDWixZQUFZLGtCQUFBLEVBQ1osY0FBYyxvQkFBQSxFQUNkLGtCQUFrQix3QkFBQSxFQUNsQixnQkFBZSxFQUFmLFFBQVEsbUJBQUcsSUFBSSxLQUFBLEVBQ2YsVUFBVSxnQkFBQSxFQUNWLGlCQUFpQix1QkFBQSxFQUNqQixzQ0FBc0MsNENBQUEsRUFDdEMsZ0NBQWdDLHNDQUFBLEVBQ2hDLE1BQU0sWUFBQSxFQUNOLFdBQVcsaUJBQUEsRUFDWCxhQUFhLG1CQUFBLEVBQ2IsY0FBYyxvQkFBQSxFQUNkLGtCQUFrQyxFQUFsQyxVQUFVLG1CQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksS0FBQTtJQUVsQyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUU7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0tBQ2xEO0lBRUQsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLGNBQWMsRUFBRTtRQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUE7S0FDdkU7SUFFRCxJQUFNLFdBQVcsR0FBRyxJQUFBLGNBQU0sRUFBUyxJQUFBLGlCQUFRLEdBQUUsQ0FBQyxDQUFBO0lBRXhDLElBQUEsS0FBZ0IsSUFBQSxnQkFBUSxFQUFRLElBQUksQ0FBQyxFQUFwQyxHQUFHLFFBQUEsRUFBRSxNQUFNLFFBQXlCLENBQUE7SUFDckMsSUFBQSxLQUFnQyxJQUFBLGdCQUFRLEVBQUMsSUFBSSxDQUFDLEVBQTdDLFdBQVcsUUFBQSxFQUFFLGNBQWMsUUFBa0IsQ0FBQTtJQUVwRCxJQUFNLGdCQUFnQixHQUFHLElBQUEsY0FBTSxFQUE4QixFQUFFLENBQUMsQ0FBQTtJQUVoRSxJQUFNLGdCQUFnQixHQUFHLElBQUEsY0FBTSxFQUFnQixJQUFJLENBQUMsQ0FBQTtJQUVwRCxJQUFBLGlDQUFlLEVBQUM7UUFDZCxVQUFVLFlBQUE7UUFDVixhQUFhLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztRQUN2QyxHQUFHLEtBQUE7UUFDSCxZQUFZLGNBQUE7UUFDWixpQkFBaUIsbUJBQUE7UUFDakIsWUFBWSxjQUFBO1FBQ1osa0JBQWtCLEVBQUUsY0FBYztLQUNuQyxDQUFDLENBQUE7SUFFRixJQUFBLGlDQUFlLEVBQUM7UUFDZCxNQUFNLFFBQUE7UUFDTixVQUFVLFlBQUE7UUFDVixhQUFhLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztRQUN2QyxRQUFRLFVBQUE7UUFDUixHQUFHLEtBQUE7UUFDSCxZQUFZLGNBQUE7UUFDWixpQkFBaUIsbUJBQUE7UUFDakIsc0NBQXNDLHdDQUFBO1FBQ3RDLFlBQVksY0FBQTtRQUNaLGtCQUFrQixFQUFFLENBQUMsY0FBYyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQzNFLEtBQUssT0FBQTtRQUNMLGdDQUFnQyxrQ0FBQTtLQUNqQyxDQUFDLENBQUE7SUFFRixJQUFBLDZDQUFxQixFQUFDO1FBQ3BCLE1BQU0sUUFBQTtRQUNOLFVBQVUsWUFBQTtRQUNWLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPO1FBQ3ZDLFFBQVEsVUFBQTtRQUNSLEdBQUcsS0FBQTtRQUNILFlBQVksY0FBQTtRQUNaLGlCQUFpQixtQkFBQTtRQUNqQixZQUFZLGNBQUE7UUFDWixrQkFBa0IsRUFBRSxDQUFDLGNBQWMsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRztRQUMxRSxLQUFLLE9BQUE7S0FDTixDQUFDLENBQUE7SUFFRixJQUFNLFlBQVksR0FBRyxJQUFBLGNBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQTtJQUVsQyxJQUFNLFdBQVcsR0FBRyxVQUFDLENBQVMsRUFBRSxDQUFTO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDOUIsQ0FBQyxDQUFBO0lBRUQsSUFBTSxrQkFBa0IsR0FBRyxVQUFDLFlBQXlCLEVBQUUsT0FBZ0M7UUFBaEMsd0JBQUEsRUFBQSxjQUFnQztRQUNyRixJQUFNLGVBQWUsR0FBRyxHQUFHLENBQUE7UUFDM0IsSUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUE7UUFDNUIsSUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUE7UUFDaEMsSUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ2pELElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN4QyxJQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDaEQsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxlQUFlLENBQUE7UUFDaEUsSUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxFQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxDQUNqRCxDQUFBO1FBQ0QsSUFBSSxVQUFVLEVBQUU7WUFBRSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQTtTQUFFO0lBQzdGLENBQUMsQ0FBQTtJQUVELElBQU0sYUFBYSxHQUFHLFVBQUMsT0FBZ0MsRUFBRSxLQUF5QjtRQUEzRCx3QkFBQSxFQUFBLGNBQWdDO1FBQUUsc0JBQUEsRUFBQSxpQkFBeUI7UUFDaEYsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUFFLE9BQU07YUFBRTtZQUNoRCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDN0Q7SUFDSCxDQUFDLENBQUE7SUFFRCxJQUFNLGdCQUFnQixHQUFHLFVBQUMsVUFBNkIsRUFBRSxPQUFnQztRQUFoQyx3QkFBQSxFQUFBLGNBQWdDO1FBQ3ZGLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUN6QyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUMsQ0FBQyxJQUFLLE9BQUEsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBNUIsQ0FBNEIsQ0FBQyxDQUFBO1FBQ25ELGtCQUFrQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM5QyxDQUFDLENBQUE7SUFFRCxJQUFNLGdCQUFnQixHQUFHLFVBQUMsTUFBb0IsRUFBRSxLQUFhO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUNuRCxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQy9DO1FBQ0QsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNuRCxDQUFDLENBQUE7SUFFRCxJQUFNLHFCQUFxQixHQUFHLFVBQUMsTUFBb0IsRUFBRSxLQUFhO1FBQ2hFLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDcEQsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDN0QsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDL0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtpQkFDbEQ7Z0JBQ0QsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQTthQUN2QztTQUNGO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsSUFBQSwyQkFBbUIsRUFBeUIsR0FBRyxFQUFFO1FBQy9DLE9BQU87WUFDTCxnQkFBZ0Isa0JBQUE7WUFDaEIsVUFBVSxFQUFFLGNBQU0sT0FBQSxRQUFRLENBQUMsYUFBYSxDQUFDLHlCQUFrQixXQUFXLENBQUMsT0FBTyxDQUFFLENBQUMsRUFBL0QsQ0FBK0Q7WUFDakYsTUFBTSxFQUFFLGNBQU0sT0FBQSxHQUFHLEVBQUgsQ0FBRztZQUNqQixxQkFBcUIsdUJBQUE7WUFDckIsV0FBVyxhQUFBO1lBQ1gsU0FBUyxFQUFFLFVBQUMsS0FBbUI7Z0JBQzdCLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1lBQ3JDLENBQUM7WUFDRCxPQUFPLEVBQUUsVUFBQyxPQUFlO2dCQUN2QixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNuQyxDQUFDO1lBQ0QsYUFBYSxlQUFBO1lBQ2IsZ0JBQWdCLGtCQUFBO1NBQ2pCLENBQUE7SUFDSCxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBRVQsSUFBQSxpQkFBUyxFQUFDO1FBQ1IsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQ3hCLE9BQU07U0FDUDtRQUVELHVDQUF1QztRQUN2QyxJQUFNLFFBQVEsR0FBRyxJQUFBLDBCQUFXLEVBQUM7WUFDM0IsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUE7UUFFRixJQUFNLEdBQUcsR0FBRyxVQUFVLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRztZQUM3QyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUViLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUM7WUFDdEQsRUFBRSxFQUFFLElBQUEsMkJBQWUsRUFBQyxRQUFRLENBQUM7WUFDN0IsVUFBVSxZQUFBO1lBQ1YsR0FBRyxLQUFBO1NBQ0osQ0FBa0IsQ0FBQTtRQUVuQixJQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHlCQUFrQixXQUFXLENBQUMsT0FBTyxDQUFFLENBQWdCLENBQUE7UUFDaEcsSUFBTSxTQUFTLEdBQUcsY0FBYztZQUM5QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNsRCxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFBO1FBQzlDLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FDdEIsU0FBUyxFQUNULFNBQVMsRUFDVDtZQUNFLE1BQU0sUUFBQTtZQUNOLFVBQVUsWUFBQTtZQUNWLElBQUksTUFBQTtTQUNMLENBQ0YsQ0FBQTtRQUVELElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUMvRCxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUMvRCxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRTVCLElBQUksRUFBVyxDQUFBO1FBRWYsMkJBQTJCO1FBQzNCLHFDQUFxQztRQUNyQyx3REFBd0Q7UUFDeEQsSUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRXRHLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7WUFFOUQsb0NBQW9DO1lBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFBLHlCQUFhLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUNyRixJQUFJLGtCQUFrQixFQUFFO2dCQUN0QixFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2FBQ2hDO1NBQ0Y7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDZCxjQUFjLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUE7UUFFN0MsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFHO1lBQ2YsUUFBUSxVQUFBO1lBQ1IsR0FBRyxFQUFFLE1BQU07WUFDWCxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztZQUN2QyxXQUFXLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRTtZQUMxQyxZQUFZLGNBQUE7WUFDWixFQUFFLElBQUE7U0FDSCxDQUFDLENBQUE7UUFFRixPQUFPO1lBQ0wsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDM0IsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE9BQU8sRUFBRSxDQUFBO1FBQ2hCLENBQUMsQ0FBQTtJQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVOLElBQUEsaUJBQVMsRUFBQztRQUNSLElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBTSxTQUFTLEdBQUc7Z0JBQ2hCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUM1QixDQUFDLENBQUE7WUFFRCxJQUFNLG9CQUFrQixHQUFHLElBQUEsaUJBQVEsRUFBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFFbkQsbURBQW1EO1lBQ25ELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsb0JBQWtCLENBQUMsQ0FBQTtZQUNyRCxPQUFPO2dCQUNMLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsb0JBQWtCLENBQUMsQ0FBQTtZQUMxRCxDQUFDLENBQUE7U0FDRjtJQUNILENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFFVCxPQUFPLENBQ0wseUNBQUssU0FBUyxFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGdCQUNoRCx5Q0FDRSxTQUFTLEVBQUMsZUFBZSxFQUN6QixFQUFFLEVBQUUsd0JBQWlCLFdBQVcsQ0FBQyxPQUFPLENBQUUsRUFDMUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxnQkFFeEIsR0FBRyxJQUFJLHVCQUFDLHdCQUFjLENBQUMsUUFBUSxhQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsS0FBQSxFQUFFLFdBQVcsYUFBQSxFQUFFLHFCQUFxQix1QkFBQSxFQUFFLGdCQUFnQixrQkFBQSxFQUFFLGdCQUNsRyxRQUFRLElBQ2UsSUFDdEIsSUFDRixDQUNQLENBQUE7QUFDSCxDQUFDLENBQUMsQ0FBQTtBQUVGLGtCQUFlLGVBQU8sQ0FBQSJ9