25 lines
39 KiB
JavaScript
25 lines
39 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
exports.id = "components_MapComponent_js";
|
|
exports.ids = ["components_MapComponent_js"];
|
|
exports.modules = {
|
|
|
|
/***/ "./components/MapComponent.js":
|
|
/*!************************************!*\
|
|
!*** ./components/MapComponent.js ***!
|
|
\************************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"react/jsx-dev-runtime\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var leaflet__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! leaflet */ \"leaflet\");\n/* harmony import */ var leaflet__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(leaflet__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! leaflet/dist/leaflet.css */ \"./node_modules/leaflet/dist/leaflet.css\");\n/* harmony import */ var leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(leaflet_dist_leaflet_css__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! leaflet-contextmenu/dist/leaflet.contextmenu.css */ \"./node_modules/leaflet-contextmenu/dist/leaflet.contextmenu.css\");\n/* harmony import */ var leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(leaflet_contextmenu_dist_leaflet_contextmenu_css__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! leaflet-contextmenu */ \"leaflet-contextmenu\");\n/* harmony import */ var leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(leaflet_contextmenu__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\nconst MapComponent = ({ locations, onLocationUpdate })=>{\n const mapRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const [map, setMap] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [online, setOnline] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(navigator.onLine);\n const offlineTileLayer = \"../TileMap/mapTiles/{z}/{x}/{y}.png\";\n const onlineTileLayer = \"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\";\n let initialMap = [];\n // Funktionen zur Überwachung der Internetverbindung\n const checkInternet = ()=>{\n console.log(\"Checking internet connectivity...\");\n fetch(\"https://tile.openstreetmap.org/1/1/1.png\", {\n method: \"HEAD\"\n }).then((response)=>setOnline(response.ok)).catch(()=>setOnline(false));\n };\n // Initialisiere die Karte\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (mapRef.current && !map) {\n initialMap = leaflet__WEBPACK_IMPORTED_MODULE_2___default().map(mapRef.current, {\n center: [\n 53.111111,\n 8.4625\n ],\n zoom: 10,\n zoomControl: false,\n contextmenu: true,\n contextmenuItems: [\n {\n text: \"Station hinzuf\\xfcgen\",\n callback: showAddStationPopup\n },\n {\n text: \"Station \\xf6ffnen (Tab)\",\n icon: \"img/screen_new.png\",\n callback: newLink\n },\n {\n text: \"Station \\xf6ffnen\",\n icon: \"img/screen_same.png\",\n callback: sameLink\n },\n {\n text: \"Koordinaten\",\n icon: \"img/screen_same.png\",\n callback: lata\n },\n \"-\",\n {\n text: \"Reinzoomen\",\n callback: zoomIn\n },\n {\n text: \"Rauszoomen\",\n callback: zoomOut\n },\n {\n text: \"Hier zentrieren\",\n callback: centerHere\n }\n ]\n });\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().tileLayer(online ? onlineTileLayer : offlineTileLayer, {\n attribution: '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n }).addTo(initialMap);\n setMap(initialMap);\n }\n }, [\n mapRef,\n map\n ]);\n // Handle online/offline status\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n window.addEventListener(\"online\", checkInternet);\n window.addEventListener(\"offline\", checkInternet);\n return ()=>{\n window.removeEventListener(\"online\", checkInternet);\n window.removeEventListener(\"offline\", checkInternet);\n };\n }, []);\n // Update map layers based on online status\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (map) {\n const newLayer = leaflet__WEBPACK_IMPORTED_MODULE_2___default().tileLayer(online ? onlineTileLayer : offlineTileLayer, {\n minZoom: 7,\n maxZoom: online ? 19 : 14,\n attribution: 'Map data \\xa9 <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n });\n map.eachLayer((layer)=>{\n if (layer instanceof (leaflet__WEBPACK_IMPORTED_MODULE_2___default().TileLayer)) {\n map.removeLayer(layer);\n }\n });\n newLayer.addTo(map);\n }\n }, [\n online,\n map\n ]);\n // Marker handling\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n // Remove old markers\n if (map) {\n map.eachLayer((layer)=>{\n if (layer instanceof (leaflet__WEBPACK_IMPORTED_MODULE_2___default().Marker)) {\n map.removeLayer(layer);\n }\n });\n // Add new markers\n locations.forEach((location)=>{\n const { latitude, longitude } = parsePoint(location.position);\n const marker = leaflet__WEBPACK_IMPORTED_MODULE_2___default().marker([\n latitude,\n longitude\n ], {\n icon: leaflet__WEBPACK_IMPORTED_MODULE_2___default().icon({\n iconUrl: \"/location.svg\",\n iconSize: [\n 34,\n 34\n ],\n iconAnchor: [\n 17,\n 34\n ],\n popupAnchor: [\n 0,\n -34\n ]\n }),\n draggable: true,\n id: location.idPoi\n });\n marker.bindPopup(`<b>${location.description || \"Unbekannt\"}</b><br>Type: ${location.idPoiTyp || \"N/A\"}<br>Lat: ${latitude.toFixed(5)}, Lng: ${longitude.toFixed(5)}`);\n marker.on(\"dragend\", function(e) {\n const newLat = e.target.getLatLng().lat;\n const newLng = e.target.getLatLng().lng;\n const markerId = e.target.options.id;\n updateLocationInDatabase(markerId, newLat, newLng).then(()=>{\n onLocationUpdate(markerId, newLat, newLng);\n });\n });\n marker.addTo(map);\n });\n }\n }, [\n map,\n locations,\n onLocationUpdate\n ]);\n //------------------------------------------\n function parsePoint(pointString) {\n const match = pointString.match(/POINT\\s*\\((\\d+(\\.\\d+)?)\\s+(\\d+(\\.\\d+)?)\\)/);\n if (match) {\n return {\n longitude: parseFloat(match[1]),\n latitude: parseFloat(match[3])\n };\n } else {\n // Handle the error or return a default/fallback value\n console.error(\"Invalid POINT format:\", pointString);\n return null; // Oder eine sinnvolle Standardantwort\n }\n }\n //----------------------------------\n //-----Kontextmenu----------------\n const newLink = (e)=>{\n try {\n if (!e.relatedTarget || !e.relatedTarget.options) {\n throw new Error(\"relatedTarget or options not defined\");\n }\n alert(\"Neues Fenster: \" + e.relatedTarget.options.test);\n window.open(`../devices/${e.relatedTarget.options.test}`, \"_blank\").focus();\n } catch (error) {\n console.error(\"Failed in newLink function:\", error);\n }\n };\n const sameLink = (e)=>{\n alert(e.relatedTarget.options.test);\n window.open(\"../devices/\" + e.relatedTarget.options.test, \"_parent\").focus();\n };\n const lata = (e)=>{\n alert(\"Breitengrad: \" + e.latlng.lat);\n };\n const zoomIn = (e)=>{\n initialMap.flyTo(e.latlng, 12);\n };\n const zoomOut = (e)=>{\n fly();\n };\n const centerHere = (e)=>{\n initialMap.panTo(e.latlng);\n };\n const showCoordinates = (e)=>{\n alert(\"Breitengrad: \" + e.latlng.lat + \"\\nL\\xe4ngengrad: \" + e.latlng.lng);\n };\n const showData = (e)=>{\n console.log(e);\n };\n const showTalas = (e)=>{\n map.addLayer(TALAS);\n loadData();\n };\n const hideTalas = (e)=>{\n map.removeLayer(TALAS);\n loadData();\n };\n const showGSM = (e)=>{\n map.addLayer(GMA);\n loadData();\n };\n const hideGSM = (e)=>{\n map.removeLayer(GMA);\n loadData();\n };\n //-----Kontextmenu----ende------------\n const showAddStationPopup = (e, map)=>{\n const popupContent = `\r\n <form id=\"addStationForm\" class=\"m-0 p-2 w-full\">\r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"name\" class=\"block mr-2 flex-none\">Name:</label>\r\n <input\r\n type=\"text\"\r\n id=\"name\"\r\n name=\"name\"\r\n placeholder=\"Name der Station\"\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"type\" class=\"block mr-3 flex-none\">Type:</label>\r\n <input\r\n type=\"text\"\r\n id=\"type\"\r\n name=\"type\"\r\n placeholder=\"Typ der Station\"\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\">\r\n <label for=\"lat\" class=\"block mr-2 flex-none\">Breitengrad:</label>\r\n <input\r\n type=\"text\"\r\n id=\"lat\"\r\n name=\"lat\"\r\n value=\"${e.latlng.lat.toFixed(5)}\"\r\n readonly\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <div class=\"flex items-center mb-4\"> \r\n <label for=\"lng\" class=\"block mr-2 flex-none\">Längengrad:</label>\r\n <input\r\n type=\"text\"\r\n id=\"lng\"\r\n name=\"lng\"\r\n value=\"${e.latlng.lng.toFixed(5)}\"\r\n readonly\r\n class=\"block p-2 flex-grow border-2 border-gray-200 rounded-md text-sm\"\r\n />\r\n </div>\r\n \r\n <button\r\n type=\"submit\"\r\n class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full\"\r\n >\r\n Station hinzufügen\r\n </button>\r\n </form>\r\n `;\n console.log(\"intialMap in hinzuf\\xfcgen: \", initialMap);\n leaflet__WEBPACK_IMPORTED_MODULE_2___default().popup().setLatLng(e.latlng).setContent(popupContent).openOn(initialMap);\n };\n setTimeout(()=>{\n const form = document.getElementById(\"addStationForm\");\n if (form) {\n form.addEventListener(\"submit\", async (event)=>{\n event.preventDefault();\n const name = event.target.description.value;\n const type = event.target.position.value;\n const lat = event.target.lat.value;\n const lng = event.target.lng.value;\n // Hier wird `onAddLocation` mit den Werten aufgerufen, die aus dem Formular gesammelt wurden\n await onAddLocation(name, type, lat, lng);\n map.closePopup();\n });\n }\n }, 10);\n function fly(stationValue) {\n var x = 51.41321407879154;\n var y = 7.739617925303934;\n var zoom = 7;\n /* for (var i = 0; i < dataStaticlength; i++) {\r\n var gisStatics = dataStatic[i];\r\n if (stationValue === gisStatics.Area_Name) {\r\n //console.log(gisStatics.X+\",\"+gisStatics.Y);\r\n x = gisStatics.X;\r\n y = gisStatics.Y;\r\n }\r\n }\r\n if (y === 7.739617925303934) {\r\n zoom = 8;\r\n } */ initialMap.flyTo([\n x,\n y\n ], zoom);\n /* var popup = new L.Popup();\r\n oms.addListener(\"click\", function (marker) {\r\n popup.setContent(marker.desc);\r\n popup.setLatLng(marker.getLatLng());\r\n map.openPopup(popup);\r\n });\r\n\r\n for (var i = 0; i < window.mapData.length; i++) {\r\n var datum = window.mapData[i];\r\n var loc = new L.LatLng(datum.lat, datum.lon);\r\n var marker = new L.Marker(loc);\r\n marker.desc = datum.d;\r\n map.addLayer(marker);\r\n //oms.addMarker(marker); // <-- here\r\n } */ }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n id: \"map\",\n ref: mapRef,\n style: {\n height: \"100vh\",\n width: \"100vw\",\n overflow: \"hidden\"\n }\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\isa.LTW\\\\Desktop\\\\15.04.2024\\\\wwwrootTalas5NodeMap\\\\components\\\\MapComponent.js\",\n lineNumber: 327,\n columnNumber: 5\n }, undefined);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MapComponent);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFjSSxNQUFNLENBQUNqRztJQUNoRTtJQUNBa0csV0FBVztRQUNULE1BQU1DLE9BQU9DLFNBQVNDLGNBQWMsQ0FBQztRQUNyQyxJQUFJRixNQUFNO1lBQ1JBLEtBQUtyRSxnQkFBZ0IsQ0FBQyxVQUFVLE9BQU93RTtnQkFDckNBLE1BQU1DLGNBQWM7Z0JBQ3BCLE1BQU1DLE9BQU9GLE1BQU16QyxNQUFNLENBQUNOLFdBQVcsQ0FBQ2tELEtBQUs7Z0JBQzNDLE1BQU1DLE9BQU9KLE1BQU16QyxNQUFNLENBQUNoQixRQUFRLENBQUM0RCxLQUFLO2dCQUN4QyxNQUFNMUMsTUFBTXVDLE1BQU16QyxNQUFNLENBQUNFLEdBQUcsQ0FBQzBDLEtBQUs7Z0JBQ2xDLE1BQU14QyxNQUFNcUMsTUFBTXpDLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDd0MsS0FBSztnQkFFbEMsNkZBQTZGO2dCQUM3RixNQUFNRSxjQUFjSCxNQUFNRSxNQUFNM0MsS0FBS0U7Z0JBQ3JDekUsSUFBSW9ILFVBQVU7WUFDaEI7UUFDRjtJQUNGLEdBQUc7SUFFSCxTQUFTM0IsSUFBSTRCLFlBQVk7UUFDdkIsSUFBSUMsSUFBSTtRQUNSLElBQUlDLElBQUk7UUFDUixJQUFJbkcsT0FBTztRQUVYOzs7Ozs7Ozs7O01BVUUsR0FDRlosV0FBV2dGLEtBQUssQ0FBQztZQUFDOEI7WUFBR0M7U0FBRSxFQUFFbkc7SUFFekI7Ozs7Ozs7Ozs7Ozs7O01BY0UsR0FDSjtJQUVBLHFCQUNFLDhEQUFDb0c7UUFDQzVELElBQUc7UUFDSDZELEtBQUsxSDtRQUNMMkgsT0FBTztZQUFFQyxRQUFRO1lBQVNDLE9BQU87WUFBU0MsVUFBVTtRQUFTOzs7Ozs7QUFHbkU7QUFFQSxpRUFBZWpJLFlBQVlBLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9jb21wb25lbnRzL01hcENvbXBvbmVudC5qcz9kMDdkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IEwgZnJvbSBcImxlYWZsZXRcIjtcclxuaW1wb3J0IFwibGVhZmxldC9kaXN0L2xlYWZsZXQuY3NzXCI7XHJcbmltcG9ydCBcImxlYWZsZXQtY29udGV4dG1lbnUvZGlzdC9sZWFmbGV0LmNvbnRleHRtZW51LmNzc1wiO1xyXG5pbXBvcnQgXCJsZWFmbGV0LWNvbnRleHRtZW51XCI7XHJcbmNvbnN0IE1hcENvbXBvbmVudCA9ICh7IGxvY2F0aW9ucywgb25Mb2NhdGlvblVwZGF0ZSB9KSA9PiB7XHJcbiAgY29uc3QgbWFwUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gIGNvbnN0IFttYXAsIHNldE1hcF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICBjb25zdCBbb25saW5lLCBzZXRPbmxpbmVdID0gdXNlU3RhdGUobmF2aWdhdG9yLm9uTGluZSk7XHJcbiAgY29uc3Qgb2ZmbGluZVRpbGVMYXllciA9IFwiLi4vVGlsZU1hcC9tYXBUaWxlcy97en0ve3h9L3t5fS5wbmdcIjtcclxuICBjb25zdCBvbmxpbmVUaWxlTGF5ZXIgPSBcImh0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nXCI7XHJcblxyXG4gIGxldCBpbml0aWFsTWFwID0gW107XHJcblxyXG4gIC8vIEZ1bmt0aW9uZW4genVyIMOcYmVyd2FjaHVuZyBkZXIgSW50ZXJuZXR2ZXJiaW5kdW5nXHJcbiAgY29uc3QgY2hlY2tJbnRlcm5ldCA9ICgpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiQ2hlY2tpbmcgaW50ZXJuZXQgY29ubmVjdGl2aXR5Li4uXCIpO1xyXG4gICAgZmV0Y2goXCJodHRwczovL3RpbGUub3BlbnN0cmVldG1hcC5vcmcvMS8xLzEucG5nXCIsIHsgbWV0aG9kOiBcIkhFQURcIiB9KVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHNldE9ubGluZShyZXNwb25zZS5vaykpXHJcbiAgICAgIC5jYXRjaCgoKSA9PiBzZXRPbmxpbmUoZmFsc2UpKTtcclxuICB9O1xyXG4gIC8vIEluaXRpYWxpc2llcmUgZGllIEthcnRlXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChtYXBSZWYuY3VycmVudCAmJiAhbWFwKSB7XHJcbiAgICAgIGluaXRpYWxNYXAgPSBMLm1hcChtYXBSZWYuY3VycmVudCwge1xyXG4gICAgICAgIGNlbnRlcjogWzUzLjExMTExMSwgOC40NjI1XSxcclxuICAgICAgICB6b29tOiAxMCxcclxuICAgICAgICB6b29tQ29udHJvbDogZmFsc2UsIC8vIERlYWt0aXZpZXJlIGRpZSBTdGFuZGFyZC1ab29tc3RldWVydW5nXHJcbiAgICAgICAgY29udGV4dG1lbnU6IHRydWUsXHJcbiAgICAgICAgY29udGV4dG1lbnVJdGVtczogW1xyXG4gICAgICAgICAgeyB0ZXh0OiBcIlN0YXRpb24gaGluenVmw7xnZW5cIiwgY2FsbGJhY2s6IHNob3dBZGRTdGF0aW9uUG9wdXAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGV4dDogXCJTdGF0aW9uIMO2ZmZuZW4gKFRhYilcIixcclxuICAgICAgICAgICAgaWNvbjogXCJpbWcvc2NyZWVuX25ldy5wbmdcIixcclxuICAgICAgICAgICAgY2FsbGJhY2s6IG5ld0xpbmssXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlN0YXRpb24gw7ZmZm5lblwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImltZy9zY3JlZW5fc2FtZS5wbmdcIixcclxuICAgICAgICAgICAgY2FsbGJhY2s6IHNhbWVMaW5rLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGV4dDogXCJLb29yZGluYXRlblwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImltZy9zY3JlZW5fc2FtZS5wbmdcIixcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGxhdGEsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCItXCIsIC8vIERpdmlkZXJcclxuICAgICAgICAgIHsgdGV4dDogXCJSZWluem9vbWVuXCIsIGNhbGxiYWNrOiB6b29tSW4gfSxcclxuICAgICAgICAgIHsgdGV4dDogXCJSYXVzem9vbWVuXCIsIGNhbGxiYWNrOiB6b29tT3V0IH0sXHJcbiAgICAgICAgICB7IHRleHQ6IFwiSGllciB6ZW50cmllcmVuXCIsIGNhbGxiYWNrOiBjZW50ZXJIZXJlIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgfSk7XHJcbiAgICAgIEwudGlsZUxheWVyKG9ubGluZSA/IG9ubGluZVRpbGVMYXllciA6IG9mZmxpbmVUaWxlTGF5ZXIsIHtcclxuICAgICAgICBhdHRyaWJ1dGlvbjpcclxuICAgICAgICAgICcmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycsXHJcbiAgICAgIH0pLmFkZFRvKGluaXRpYWxNYXApO1xyXG5cclxuICAgICAgc2V0TWFwKGluaXRpYWxNYXApO1xyXG4gICAgfVxyXG4gIH0sIFttYXBSZWYsIG1hcF0pO1xyXG5cclxuICAvLyBIYW5kbGUgb25saW5lL29mZmxpbmUgc3RhdHVzXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIGNoZWNrSW50ZXJuZXQpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIGNoZWNrSW50ZXJuZXQpO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgY2hlY2tJbnRlcm5ldCk7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCBjaGVja0ludGVybmV0KTtcclxuICAgIH07XHJcbiAgfSwgW10pO1xyXG5cclxuICAvLyBVcGRhdGUgbWFwIGxheWVycyBiYXNlZCBvbiBvbmxpbmUgc3RhdHVzXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGlmIChtYXApIHtcclxuICAgICAgY29uc3QgbmV3TGF5ZXIgPSBMLnRpbGVMYXllcihcclxuICAgICAgICBvbmxpbmUgPyBvbmxpbmVUaWxlTGF5ZXIgOiBvZmZsaW5lVGlsZUxheWVyLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG1pblpvb206IDcsXHJcbiAgICAgICAgICBtYXhab29tOiBvbmxpbmUgPyAxOSA6IDE0LFxyXG4gICAgICAgICAgYXR0cmlidXRpb246XHJcbiAgICAgICAgICAgICdNYXAgZGF0YSDCqSA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJyxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBtYXAuZWFjaExheWVyKChsYXllcikgPT4ge1xyXG4gICAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIEwuVGlsZUxheWVyKSB7XHJcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBuZXdMYXllci5hZGRUbyhtYXApO1xyXG4gICAgfVxyXG4gIH0sIFtvbmxpbmUsIG1hcF0pO1xyXG5cclxuICAvLyBNYXJrZXIgaGFuZGxpbmdcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgLy8gUmVtb3ZlIG9sZCBtYXJrZXJzXHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIG1hcC5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgTC5NYXJrZXIpIHtcclxuICAgICAgICAgIG1hcC5yZW1vdmVMYXllcihsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIEFkZCBuZXcgbWFya2Vyc1xyXG4gICAgICBsb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcclxuICAgICAgICBjb25zdCB7IGxhdGl0dWRlLCBsb25naXR1ZGUgfSA9IHBhcnNlUG9pbnQobG9jYXRpb24ucG9zaXRpb24pO1xyXG4gICAgICAgIGNvbnN0IG1hcmtlciA9IEwubWFya2VyKFtsYXRpdHVkZSwgbG9uZ2l0dWRlXSwge1xyXG4gICAgICAgICAgaWNvbjogTC5pY29uKHtcclxuICAgICAgICAgICAgaWNvblVybDogXCIvbG9jYXRpb24uc3ZnXCIsXHJcbiAgICAgICAgICAgIGljb25TaXplOiBbMzQsIDM0XSxcclxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzE3LCAzNF0sXHJcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTM0XSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgaWQ6IGxvY2F0aW9uLmlkUG9pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBtYXJrZXIuYmluZFBvcHVwKFxyXG4gICAgICAgICAgYDxiPiR7bG9jYXRpb24uZGVzY3JpcHRpb24gfHwgXCJVbmJla2FubnRcIn08L2I+PGJyPlR5cGU6ICR7bG9jYXRpb24uaWRQb2lUeXAgfHwgXCJOL0FcIn08YnI+TGF0OiAke2xhdGl0dWRlLnRvRml4ZWQoNSl9LCBMbmc6ICR7bG9uZ2l0dWRlLnRvRml4ZWQoNSl9YFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIG1hcmtlci5vbihcImRyYWdlbmRcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgIGNvbnN0IG5ld0xhdCA9IGUudGFyZ2V0LmdldExhdExuZygpLmxhdDtcclxuICAgICAgICAgIGNvbnN0IG5ld0xuZyA9IGUudGFyZ2V0LmdldExhdExuZygpLmxuZztcclxuICAgICAgICAgIGNvbnN0IG1hcmtlcklkID0gZS50YXJnZXQub3B0aW9ucy5pZDtcclxuICAgICAgICAgIHVwZGF0ZUxvY2F0aW9uSW5EYXRhYmFzZShtYXJrZXJJZCwgbmV3TGF0LCBuZXdMbmcpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBvbkxvY2F0aW9uVXBkYXRlKG1hcmtlcklkLCBuZXdMYXQsIG5ld0xuZyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbWFya2VyLmFkZFRvKG1hcCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sIFttYXAsIGxvY2F0aW9ucywgb25Mb2NhdGlvblVwZGF0ZV0pO1xyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIGZ1bmN0aW9uIHBhcnNlUG9pbnQocG9pbnRTdHJpbmcpIHtcclxuICAgIGNvbnN0IG1hdGNoID0gcG9pbnRTdHJpbmcubWF0Y2goXHJcbiAgICAgIC9QT0lOVFxccypcXCgoXFxkKyhcXC5cXGQrKT8pXFxzKyhcXGQrKFxcLlxcZCspPylcXCkvXHJcbiAgICApO1xyXG4gICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbG9uZ2l0dWRlOiBwYXJzZUZsb2F0KG1hdGNoWzFdKSxcclxuICAgICAgICBsYXRpdHVkZTogcGFyc2VGbG9hdChtYXRjaFszXSksIC8vIEFjaHR1bmc6IEluZGV4IDMgZsO8ciBkaWUgendlaXRlIEtvb3JkaW5hdGUsIHdlZ2VuIGRlciBHcnVwcGUgKFxcLlxcZCspP1xyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSGFuZGxlIHRoZSBlcnJvciBvciByZXR1cm4gYSBkZWZhdWx0L2ZhbGxiYWNrIHZhbHVlXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIFBPSU5UIGZvcm1hdDpcIiwgcG9pbnRTdHJpbmcpO1xyXG4gICAgICByZXR1cm4gbnVsbDsgLy8gT2RlciBlaW5lIHNpbm52b2xsZSBTdGFuZGFyZGFudHdvcnRcclxuICAgIH1cclxuICB9XHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8tLS0tLUtvbnRleHRtZW51LS0tLS0tLS0tLS0tLS0tLVxyXG4gIGNvbnN0IG5ld0xpbmsgPSAoZSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCFlLnJlbGF0ZWRUYXJnZXQgfHwgIWUucmVsYXRlZFRhcmdldC5vcHRpb25zKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVsYXRlZFRhcmdldCBvciBvcHRpb25zIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGFsZXJ0KFwiTmV1ZXMgRmVuc3RlcjogXCIgKyBlLnJlbGF0ZWRUYXJnZXQub3B0aW9ucy50ZXN0KTtcclxuICAgICAgd2luZG93XHJcbiAgICAgICAgLm9wZW4oYC4uL2RldmljZXMvJHtlLnJlbGF0ZWRUYXJnZXQub3B0aW9ucy50ZXN0fWAsIFwiX2JsYW5rXCIpXHJcbiAgICAgICAgLmZvY3VzKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIGluIG5ld0xpbmsgZnVuY3Rpb246XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBzYW1lTGluayA9IChlKSA9PiB7XHJcbiAgICBhbGVydChlLnJlbGF0ZWRUYXJnZXQub3B0aW9ucy50ZXN0KTtcclxuICAgIHdpbmRvd1xyXG4gICAgICAub3BlbihcIi4uL2RldmljZXMvXCIgKyBlLnJlbGF0ZWRUYXJnZXQub3B0aW9ucy50ZXN0LCBcIl9wYXJlbnRcIilcclxuICAgICAgLmZvY3VzKCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgbGF0YSA9IChlKSA9PiB7XHJcbiAgICBhbGVydChcIkJyZWl0ZW5ncmFkOiBcIiArIGUubGF0bG5nLmxhdCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgem9vbUluID0gKGUpID0+IHtcclxuICAgIGluaXRpYWxNYXAuZmx5VG8oZS5sYXRsbmcsIDEyKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB6b29tT3V0ID0gKGUpID0+IHtcclxuICAgIGZseSgpO1xyXG4gIH07XHJcbiAgY29uc3QgY2VudGVySGVyZSA9IChlKSA9PiB7XHJcbiAgICBpbml0aWFsTWFwLnBhblRvKGUubGF0bG5nKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBzaG93Q29vcmRpbmF0ZXMgPSAoZSkgPT4ge1xyXG4gICAgYWxlcnQoXCJCcmVpdGVuZ3JhZDogXCIgKyBlLmxhdGxuZy5sYXQgKyBcIlxcbkzDpG5nZW5ncmFkOiBcIiArIGUubGF0bG5nLmxuZyk7XHJcbiAgfTtcclxuICBjb25zdCBzaG93RGF0YSA9IChlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhlKTtcclxuICB9O1xyXG4gIGNvbnN0IHNob3dUYWxhcyA9IChlKSA9PiB7XHJcbiAgICBtYXAuYWRkTGF5ZXIoVEFMQVMpO1xyXG4gICAgbG9hZERhdGEoKTtcclxuICB9O1xyXG4gIGNvbnN0IGhpZGVUYWxhcyA9IChlKSA9PiB7XHJcbiAgICBtYXAucmVtb3ZlTGF5ZXIoVEFMQVMpO1xyXG4gICAgbG9hZERhdGEoKTtcclxuICB9O1xyXG4gIGNvbnN0IHNob3dHU00gPSAoZSkgPT4ge1xyXG4gICAgbWFwLmFkZExheWVyKEdNQSk7XHJcbiAgICBsb2FkRGF0YSgpO1xyXG4gIH07XHJcbiAgY29uc3QgaGlkZUdTTSA9IChlKSA9PiB7XHJcbiAgICBtYXAucmVtb3ZlTGF5ZXIoR01BKTtcclxuICAgIGxvYWREYXRhKCk7XHJcbiAgfTtcclxuICAvLy0tLS0tS29udGV4dG1lbnUtLS0tZW5kZS0tLS0tLS0tLS0tLVxyXG4gIGNvbnN0IHNob3dBZGRTdGF0aW9uUG9wdXAgPSAoZSwgbWFwKSA9PiB7XHJcbiAgICBjb25zdCBwb3B1cENvbnRlbnQgPSBgXHJcbiAgICAgIDxmb3JtIGlkPVwiYWRkU3RhdGlvbkZvcm1cIiBjbGFzcz1cIm0tMCBwLTIgdy1mdWxsXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtYi00XCI+ICAgICAgXHJcbiAgICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIiBjbGFzcz1cImJsb2NrIG1yLTIgZmxleC1ub25lXCI+TmFtZTo8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgaWQ9XCJuYW1lXCJcclxuICAgICAgICAgIG5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSBkZXIgU3RhdGlvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJsb2NrIHAtMiBmbGV4LWdyb3cgYm9yZGVyLTIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWQgdGV4dC1zbVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItNFwiPiAgIFxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJ0eXBlXCIgY2xhc3M9XCJibG9jayBtci0zIGZsZXgtbm9uZVwiPlR5cGU6PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIGlkPVwidHlwZVwiXHJcbiAgICAgICAgICBuYW1lPVwidHlwZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cCBkZXIgU3RhdGlvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJsb2NrIHAtMiBmbGV4LWdyb3cgYm9yZGVyLTIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWQgdGV4dC1zbVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItNFwiPlxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJsYXRcIiBjbGFzcz1cImJsb2NrIG1yLTIgZmxleC1ub25lXCI+QnJlaXRlbmdyYWQ6PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIGlkPVwibGF0XCJcclxuICAgICAgICAgIG5hbWU9XCJsYXRcIlxyXG4gICAgICAgICAgdmFsdWU9XCIke2UubGF0bG5nLmxhdC50b0ZpeGVkKDUpfVwiXHJcbiAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgICAgY2xhc3M9XCJibG9jayBwLTIgZmxleC1ncm93IGJvcmRlci0yIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLW1kIHRleHQtc21cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICAgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtYi00XCI+ICAgXHJcbiAgICAgICAgPGxhYmVsIGZvcj1cImxuZ1wiIGNsYXNzPVwiYmxvY2sgbXItMiBmbGV4LW5vbmVcIj5Mw6RuZ2VuZ3JhZDo8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgaWQ9XCJsbmdcIlxyXG4gICAgICAgICAgbmFtZT1cImxuZ1wiXHJcbiAgICAgICAgICB2YWx1ZT1cIiR7ZS5sYXRsbmcubG5nLnRvRml4ZWQoNSl9XCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgICBjbGFzcz1cImJsb2NrIHAtMiBmbGV4LWdyb3cgYm9yZGVyLTIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbWQgdGV4dC1zbVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgY2xhc3M9XCJiZy1ibHVlLTUwMCBob3ZlcjpiZy1ibHVlLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBweS0yIHB4LTQgcm91bmRlZCB3LWZ1bGxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU3RhdGlvbiBoaW56dWbDvGdlblxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZm9ybT5cclxuICAgIGA7XHJcbiAgICBjb25zb2xlLmxvZyhcImludGlhbE1hcCBpbiAgaGluenVmw7xnZW46IFwiLCBpbml0aWFsTWFwKTtcclxuICAgIEwucG9wdXAoKS5zZXRMYXRMbmcoZS5sYXRsbmcpLnNldENvbnRlbnQocG9wdXBDb250ZW50KS5vcGVuT24oaW5pdGlhbE1hcCk7XHJcbiAgfTtcclxuICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkZFN0YXRpb25Gb3JtXCIpO1xyXG4gICAgaWYgKGZvcm0pIHtcclxuICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IGV2ZW50LnRhcmdldC5kZXNjcmlwdGlvbi52YWx1ZTtcclxuICAgICAgICBjb25zdCB0eXBlID0gZXZlbnQudGFyZ2V0LnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGxhdCA9IGV2ZW50LnRhcmdldC5sYXQudmFsdWU7XHJcbiAgICAgICAgY29uc3QgbG5nID0gZXZlbnQudGFyZ2V0LmxuZy52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gSGllciB3aXJkIGBvbkFkZExvY2F0aW9uYCBtaXQgZGVuIFdlcnRlbiBhdWZnZXJ1ZmVuLCBkaWUgYXVzIGRlbSBGb3JtdWxhciBnZXNhbW1lbHQgd3VyZGVuXHJcbiAgICAgICAgYXdhaXQgb25BZGRMb2NhdGlvbihuYW1lLCB0eXBlLCBsYXQsIGxuZyk7XHJcbiAgICAgICAgbWFwLmNsb3NlUG9wdXAoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSwgMTApO1xyXG5cclxuICBmdW5jdGlvbiBmbHkoc3RhdGlvblZhbHVlKSB7XHJcbiAgICB2YXIgeCA9IDUxLjQxMzIxNDA3ODc5MTU0O1xyXG4gICAgdmFyIHkgPSA3LjczOTYxNzkyNTMwMzkzNDtcclxuICAgIHZhciB6b29tID0gNztcclxuXHJcbiAgICAvKiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhU3RhdGljbGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIGdpc1N0YXRpY3MgPSBkYXRhU3RhdGljW2ldO1xyXG4gICAgICBpZiAoc3RhdGlvblZhbHVlID09PSBnaXNTdGF0aWNzLkFyZWFfTmFtZSkge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coZ2lzU3RhdGljcy5YK1wiLFwiK2dpc1N0YXRpY3MuWSk7XHJcbiAgICAgICAgeCA9IGdpc1N0YXRpY3MuWDtcclxuICAgICAgICB5ID0gZ2lzU3RhdGljcy5ZO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoeSA9PT0gNy43Mzk2MTc5MjUzMDM5MzQpIHtcclxuICAgICAgem9vbSA9IDg7XHJcbiAgICB9ICovXHJcbiAgICBpbml0aWFsTWFwLmZseVRvKFt4LCB5XSwgem9vbSk7XHJcblxyXG4gICAgLyogdmFyIHBvcHVwID0gbmV3IEwuUG9wdXAoKTtcclxuICAgIG9tcy5hZGRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uIChtYXJrZXIpIHtcclxuICAgICAgcG9wdXAuc2V0Q29udGVudChtYXJrZXIuZGVzYyk7XHJcbiAgICAgIHBvcHVwLnNldExhdExuZyhtYXJrZXIuZ2V0TGF0TG5nKCkpO1xyXG4gICAgICBtYXAub3BlblBvcHVwKHBvcHVwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2luZG93Lm1hcERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIGRhdHVtID0gd2luZG93Lm1hcERhdGFbaV07XHJcbiAgICAgIHZhciBsb2MgPSBuZXcgTC5MYXRMbmcoZGF0dW0ubGF0LCBkYXR1bS5sb24pO1xyXG4gICAgICB2YXIgbWFya2VyID0gbmV3IEwuTWFya2VyKGxvYyk7XHJcbiAgICAgIG1hcmtlci5kZXNjID0gZGF0dW0uZDtcclxuICAgICAgbWFwLmFkZExheWVyKG1hcmtlcik7XHJcbiAgICAgIC8vb21zLmFkZE1hcmtlcihtYXJrZXIpOyAgLy8gPC0tIGhlcmVcclxuICAgIH0gKi9cclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIGlkPVwibWFwXCJcclxuICAgICAgcmVmPXttYXBSZWZ9XHJcbiAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxMDB2aFwiLCB3aWR0aDogXCIxMDB2d1wiLCBvdmVyZmxvdzogXCJoaWRkZW5cIiB9fVxyXG4gICAgPjwvZGl2PlxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXBDb21wb25lbnQ7XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiTCIsIk1hcENvbXBvbmVudCIsImxvY2F0aW9ucyIsIm9uTG9jYXRpb25VcGRhdGUiLCJtYXBSZWYiLCJtYXAiLCJzZXRNYXAiLCJvbmxpbmUiLCJzZXRPbmxpbmUiLCJuYXZpZ2F0b3IiLCJvbkxpbmUiLCJvZmZsaW5lVGlsZUxheWVyIiwib25saW5lVGlsZUxheWVyIiwiaW5pdGlhbE1hcCIsImNoZWNrSW50ZXJuZXQiLCJjb25zb2xlIiwibG9nIiwiZmV0Y2giLCJtZXRob2QiLCJ0aGVuIiwicmVzcG9uc2UiLCJvayIsImNhdGNoIiwiY3VycmVudCIsImNlbnRlciIsInpvb20iLCJ6b29tQ29udHJvbCIsImNvbnRleHRtZW51IiwiY29udGV4dG1lbnVJdGVtcyIsInRleHQiLCJjYWxsYmFjayIsInNob3dBZGRTdGF0aW9uUG9wdXAiLCJpY29uIiwibmV3TGluayIsInNhbWVMaW5rIiwibGF0YSIsInpvb21JbiIsInpvb21PdXQiLCJjZW50ZXJIZXJlIiwidGlsZUxheWVyIiwiYXR0cmlidXRpb24iLCJhZGRUbyIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibmV3TGF5ZXIiLCJtaW5ab29tIiwibWF4Wm9vbSIsImVhY2hMYXllciIsImxheWVyIiwiVGlsZUxheWVyIiwicmVtb3ZlTGF5ZXIiLCJNYXJrZXIiLCJmb3JFYWNoIiwibG9jYXRpb24iLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInBhcnNlUG9pbnQiLCJwb3NpdGlvbiIsIm1hcmtlciIsImljb25VcmwiLCJpY29uU2l6ZSIsImljb25BbmNob3IiLCJwb3B1cEFuY2hvciIsImRyYWdnYWJsZSIsImlkIiwiaWRQb2kiLCJiaW5kUG9wdXAiLCJkZXNjcmlwdGlvbiIsImlkUG9pVHlwIiwidG9GaXhlZCIsIm9uIiwiZSIsIm5ld0xhdCIsInRhcmdldCIsImdldExhdExuZyIsImxhdCIsIm5ld0xuZyIsImxuZyIsIm1hcmtlcklkIiwib3B0aW9ucyIsInVwZGF0ZUxvY2F0aW9uSW5EYXRhYmFzZSIsInBvaW50U3RyaW5nIiwibWF0Y2giLCJwYXJzZUZsb2F0IiwiZXJyb3IiLCJyZWxhdGVkVGFyZ2V0IiwiRXJyb3IiLCJhbGVydCIsInRlc3QiLCJvcGVuIiwiZm9jdXMiLCJsYXRsbmciLCJmbHlUbyIsImZseSIsInBhblRvIiwic2hvd0Nvb3JkaW5hdGVzIiwic2hvd0RhdGEiLCJzaG93VGFsYXMiLCJhZGRMYXllciIsIlRBTEFTIiwibG9hZERhdGEiLCJoaWRlVGFsYXMiLCJzaG93R1NNIiwiR01BIiwiaGlkZUdTTSIsInBvcHVwQ29udGVudCIsInBvcHVwIiwic2V0TGF0TG5nIiwic2V0Q29udGVudCIsIm9wZW5PbiIsInNldFRpbWVvdXQiLCJmb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwib25BZGRMb2NhdGlvbiIsImNsb3NlUG9wdXAiLCJzdGF0aW9uVmFsdWUiLCJ4IiwieSIsImRpdiIsInJlZiIsInN0eWxlIiwiaGVpZ2h0Iiwid2lkdGgiLCJvdmVyZmxvdyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/MapComponent.js\n");
|
|
|
|
/***/ })
|
|
|
|
};
|
|
; |