matrix-react-sdk
Version:
SDK for matrix.org using React
162 lines (158 loc) • 21.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var maplibregl = _interopRequireWildcard(require("maplibre-gl"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _logger = require("matrix-js-sdk/src/logger");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _useEventEmitter = require("../../../hooks/useEventEmitter");
var _location = require("../../../utils/location");
var _WellKnownUtils = require("../../../utils/WellKnownUtils");
var _useMap = require("../../../utils/location/useMap");
var _Modal = _interopRequireDefault(require("../../../Modal"));
var _ErrorDialog = _interopRequireDefault(require("../dialogs/ErrorDialog"));
var _languageHandler = require("../../../languageHandler");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (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; }
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const useMapWithStyle = ({
id,
centerGeoUri,
onError,
interactive,
bounds,
allowGeolocate
}) => {
const bodyId = `mx_Map_${id}`;
// style config
const context = (0, _react.useContext)(_MatrixClientContext.default);
const mapStyleUrl = (0, _useEventEmitter.useEventEmitterState)(context, _matrix.ClientEvent.ClientWellKnown, clientWellKnown => (0, _WellKnownUtils.tileServerFromWellKnown)(clientWellKnown)?.["map_style_url"]);
const map = (0, _useMap.useMap)({
interactive,
bodyId,
onError
});
(0, _react.useEffect)(() => {
if (mapStyleUrl && map) {
map.setStyle(mapStyleUrl);
}
}, [mapStyleUrl, map]);
(0, _react.useEffect)(() => {
if (map && centerGeoUri) {
try {
const coords = (0, _location.parseGeoUri)(centerGeoUri);
if (!coords) {
throw new Error("Invalid geo URI");
}
map.setCenter({
lon: coords.longitude,
lat: coords.latitude
});
} catch (_error) {
_logger.logger.error("Could not set map center");
}
}
}, [map, centerGeoUri]);
(0, _react.useEffect)(() => {
if (map && bounds) {
try {
const lngLatBounds = new maplibregl.LngLatBounds([bounds.west, bounds.south], [bounds.east, bounds.north]);
map.fitBounds(lngLatBounds, {
padding: 100,
maxZoom: 15
});
} catch (_error) {
_logger.logger.error("Invalid map bounds");
}
}
}, [map, bounds]);
const [geolocate, setGeolocate] = (0, _react.useState)(null);
(0, _react.useEffect)(() => {
if (!map) {
return;
}
if (allowGeolocate && !geolocate) {
const geolocate = new maplibregl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: false
});
setGeolocate(geolocate);
map.addControl(geolocate);
}
if (!allowGeolocate && geolocate) {
map.removeControl(geolocate);
setGeolocate(null);
}
}, [map, geolocate, allowGeolocate]);
(0, _react.useEffect)(() => {
if (geolocate) {
geolocate.on("error", onGeolocateError);
return () => {
geolocate.off("error", onGeolocateError);
};
}
}, [geolocate]);
return {
map,
bodyId
};
};
const onGeolocateError = e => {
_logger.logger.error("Could not fetch location", e);
_Modal.default.createDialog(_ErrorDialog.default, {
title: (0, _languageHandler._t)("location_sharing|error_fetch_location"),
description: (0, _location.positionFailureMessage)(e.code) ?? ""
});
};
const MapComponent = ({
bounds,
centerGeoUri,
children,
className,
allowGeolocate,
id,
interactive,
onError,
onClick
}) => {
const {
map,
bodyId
} = useMapWithStyle({
centerGeoUri,
onError,
id,
interactive,
bounds,
allowGeolocate
});
const onMapClick = event => {
// Eat click events when clicking the attribution button
const target = event.target;
if (target.classList.contains("maplibregl-ctrl-attrib-button")) {
return;
}
onClick && onClick();
};
return /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)("mx_Map", className),
id: bodyId,
onClick: onMapClick
}, !!children && !!map && children({
map
}));
};
var _default = exports.default = MapComponent;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJtYXBsaWJyZWdsIiwiX21hdHJpeCIsIl9sb2dnZXIiLCJfTWF0cml4Q2xpZW50Q29udGV4dCIsIl91c2VFdmVudEVtaXR0ZXIiLCJfbG9jYXRpb24iLCJfV2VsbEtub3duVXRpbHMiLCJfdXNlTWFwIiwiX01vZGFsIiwiX0Vycm9yRGlhbG9nIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsInVzZU1hcFdpdGhTdHlsZSIsImlkIiwiY2VudGVyR2VvVXJpIiwib25FcnJvciIsImludGVyYWN0aXZlIiwiYm91bmRzIiwiYWxsb3dHZW9sb2NhdGUiLCJib2R5SWQiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsIk1hdHJpeENsaWVudENvbnRleHQiLCJtYXBTdHlsZVVybCIsInVzZUV2ZW50RW1pdHRlclN0YXRlIiwiQ2xpZW50RXZlbnQiLCJDbGllbnRXZWxsS25vd24iLCJjbGllbnRXZWxsS25vd24iLCJ0aWxlU2VydmVyRnJvbVdlbGxLbm93biIsIm1hcCIsInVzZU1hcCIsInVzZUVmZmVjdCIsInNldFN0eWxlIiwiY29vcmRzIiwicGFyc2VHZW9VcmkiLCJFcnJvciIsInNldENlbnRlciIsImxvbiIsImxvbmdpdHVkZSIsImxhdCIsImxhdGl0dWRlIiwiX2Vycm9yIiwibG9nZ2VyIiwiZXJyb3IiLCJsbmdMYXRCb3VuZHMiLCJMbmdMYXRCb3VuZHMiLCJ3ZXN0Iiwic291dGgiLCJlYXN0Iiwibm9ydGgiLCJmaXRCb3VuZHMiLCJwYWRkaW5nIiwibWF4Wm9vbSIsImdlb2xvY2F0ZSIsInNldEdlb2xvY2F0ZSIsInVzZVN0YXRlIiwiR2VvbG9jYXRlQ29udHJvbCIsInBvc2l0aW9uT3B0aW9ucyIsImVuYWJsZUhpZ2hBY2N1cmFjeSIsInRyYWNrVXNlckxvY2F0aW9uIiwiYWRkQ29udHJvbCIsInJlbW92ZUNvbnRyb2wiLCJvbiIsIm9uR2VvbG9jYXRlRXJyb3IiLCJvZmYiLCJNb2RhbCIsImNyZWF0ZURpYWxvZyIsIkVycm9yRGlhbG9nIiwidGl0bGUiLCJfdCIsImRlc2NyaXB0aW9uIiwicG9zaXRpb25GYWlsdXJlTWVzc2FnZSIsImNvZGUiLCJNYXBDb21wb25lbnQiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJvbk1hcENsaWNrIiwiZXZlbnQiLCJ0YXJnZXQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWVzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvbG9jYXRpb24vTWFwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0ICogYXMgbWFwbGlicmVnbCBmcm9tIFwibWFwbGlicmUtZ2xcIjtcbmltcG9ydCB7IENsaWVudEV2ZW50LCBJQ2xpZW50V2VsbEtub3duIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuXG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgdXNlRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgeyBwYXJzZUdlb1VyaSwgcG9zaXRpb25GYWlsdXJlTWVzc2FnZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2NhdGlvblwiO1xuaW1wb3J0IHsgdGlsZVNlcnZlckZyb21XZWxsS25vd24gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvV2VsbEtub3duVXRpbHNcIjtcbmltcG9ydCB7IHVzZU1hcCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2NhdGlvbi91c2VNYXBcIjtcbmltcG9ydCB7IEJvdW5kcyB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9iZWFjb24vYm91bmRzXCI7XG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uLy4uL01vZGFsXCI7XG5pbXBvcnQgRXJyb3JEaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvRXJyb3JEaWFsb2dcIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuXG5jb25zdCB1c2VNYXBXaXRoU3R5bGUgPSAoe1xuICAgIGlkLFxuICAgIGNlbnRlckdlb1VyaSxcbiAgICBvbkVycm9yLFxuICAgIGludGVyYWN0aXZlLFxuICAgIGJvdW5kcyxcbiAgICBhbGxvd0dlb2xvY2F0ZSxcbn06IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNlbnRlckdlb1VyaT86IHN0cmluZztcbiAgICBvbkVycm9yPyhlcnJvcjogRXJyb3IpOiB2b2lkO1xuICAgIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgICBib3VuZHM/OiBCb3VuZHM7XG4gICAgYWxsb3dHZW9sb2NhdGU/OiBib29sZWFuO1xufSk6IHtcbiAgICBtYXA6IG1hcGxpYnJlZ2wuTWFwIHwgdW5kZWZpbmVkO1xuICAgIGJvZHlJZDogc3RyaW5nO1xufSA9PiB7XG4gICAgY29uc3QgYm9keUlkID0gYG14X01hcF8ke2lkfWA7XG5cbiAgICAvLyBzdHlsZSBjb25maWdcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNYXRyaXhDbGllbnRDb250ZXh0KTtcbiAgICBjb25zdCBtYXBTdHlsZVVybCA9IHVzZUV2ZW50RW1pdHRlclN0YXRlKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBDbGllbnRFdmVudC5DbGllbnRXZWxsS25vd24sXG4gICAgICAgIChjbGllbnRXZWxsS25vd246IElDbGllbnRXZWxsS25vd24pID0+IHRpbGVTZXJ2ZXJGcm9tV2VsbEtub3duKGNsaWVudFdlbGxLbm93bik/LltcIm1hcF9zdHlsZV91cmxcIl0sXG4gICAgKTtcblxuICAgIGNvbnN0IG1hcCA9IHVzZU1hcCh7IGludGVyYWN0aXZlLCBib2R5SWQsIG9uRXJyb3IgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobWFwU3R5bGVVcmwgJiYgbWFwKSB7XG4gICAgICAgICAgICBtYXAuc2V0U3R5bGUobWFwU3R5bGVVcmwpO1xuICAgICAgICB9XG4gICAgfSwgW21hcFN0eWxlVXJsLCBtYXBdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChtYXAgJiYgY2VudGVyR2VvVXJpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IHBhcnNlR2VvVXJpKGNlbnRlckdlb1VyaSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBnZW8gVVJJXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXAuc2V0Q2VudGVyKHsgbG9uOiBjb29yZHMubG9uZ2l0dWRlLCBsYXQ6IGNvb3Jkcy5sYXRpdHVkZSB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkNvdWxkIG5vdCBzZXQgbWFwIGNlbnRlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFttYXAsIGNlbnRlckdlb1VyaV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1hcCAmJiBib3VuZHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG5nTGF0Qm91bmRzID0gbmV3IG1hcGxpYnJlZ2wuTG5nTGF0Qm91bmRzKFxuICAgICAgICAgICAgICAgICAgICBbYm91bmRzLndlc3QsIGJvdW5kcy5zb3V0aF0sXG4gICAgICAgICAgICAgICAgICAgIFtib3VuZHMuZWFzdCwgYm91bmRzLm5vcnRoXSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG1hcC5maXRCb3VuZHMobG5nTGF0Qm91bmRzLCB7IHBhZGRpbmc6IDEwMCwgbWF4Wm9vbTogMTUgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJJbnZhbGlkIG1hcCBib3VuZHNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbbWFwLCBib3VuZHNdKTtcblxuICAgIGNvbnN0IFtnZW9sb2NhdGUsIHNldEdlb2xvY2F0ZV0gPSB1c2VTdGF0ZTxtYXBsaWJyZWdsLkdlb2xvY2F0ZUNvbnRyb2wgfCBudWxsPihudWxsKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghbWFwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93R2VvbG9jYXRlICYmICFnZW9sb2NhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb2xvY2F0ZSA9IG5ldyBtYXBsaWJyZWdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0cmFja1VzZXJMb2NhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldEdlb2xvY2F0ZShnZW9sb2NhdGUpO1xuICAgICAgICAgICAgbWFwLmFkZENvbnRyb2woZ2VvbG9jYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFsbG93R2VvbG9jYXRlICYmIGdlb2xvY2F0ZSkge1xuICAgICAgICAgICAgbWFwLnJlbW92ZUNvbnRyb2woZ2VvbG9jYXRlKTtcbiAgICAgICAgICAgIHNldEdlb2xvY2F0ZShudWxsKTtcbiAgICAgICAgfVxuICAgIH0sIFttYXAsIGdlb2xvY2F0ZSwgYWxsb3dHZW9sb2NhdGVdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChnZW9sb2NhdGUpIHtcbiAgICAgICAgICAgIGdlb2xvY2F0ZS5vbihcImVycm9yXCIsIG9uR2VvbG9jYXRlRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZW9sb2NhdGUub2ZmKFwiZXJyb3JcIiwgb25HZW9sb2NhdGVFcnJvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgW2dlb2xvY2F0ZV0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWFwLFxuICAgICAgICBib2R5SWQsXG4gICAgfTtcbn07XG5cbmNvbnN0IG9uR2VvbG9jYXRlRXJyb3IgPSAoZTogR2VvbG9jYXRpb25Qb3NpdGlvbkVycm9yKTogdm9pZCA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKFwiQ291bGQgbm90IGZldGNoIGxvY2F0aW9uXCIsIGUpO1xuICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhFcnJvckRpYWxvZywge1xuICAgICAgICB0aXRsZTogX3QoXCJsb2NhdGlvbl9zaGFyaW5nfGVycm9yX2ZldGNoX2xvY2F0aW9uXCIpLFxuICAgICAgICBkZXNjcmlwdGlvbjogcG9zaXRpb25GYWlsdXJlTWVzc2FnZShlLmNvZGUpID8/IFwiXCIsXG4gICAgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcFByb3BzIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBzZXQgbWFwIGNlbnRlciB0byBnZW9VcmkgY29vcmRzXG4gICAgICogQ2VudGVyIHdpbGwgb25seSBiZSBzZXQgdG8gdmFsaWQgZ2VvVXJpXG4gICAgICogdGhpcyBwcm9wIGlzIG9ubHkgc2ltcGx5IGRpZmZlZCBieSB1c2VFZmZlY3QsIHNvIHRvIHRyaWdnZXIgKnJlY2VudGVyaW5nKiBvZiB0aGUgc2FtZSBnZW9VcmlcbiAgICAgKiBhcHBlbmQgdGhlIHVyaSB3aXRoIGEgdmFyIG5vdCB1c2VkIGJ5IHRoZSBnZW9Vcmkgc3BlY1xuICAgICAqIGVnIGEgdGltZXN0YW1wOiBgZ2VvOjU0LDQyO214VHM9MTIzYFxuICAgICAqL1xuICAgIGNlbnRlckdlb1VyaT86IHN0cmluZztcbiAgICBib3VuZHM/OiBCb3VuZHM7XG4gICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIGFsbG93R2VvbG9jYXRlPzogYm9vbGVhbjtcbiAgICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgICBjaGlsZHJlbj86IChyZW5kZXJQcm9wczogeyBtYXA6IG1hcGxpYnJlZ2wuTWFwIH0pID0+IFJlYWN0Tm9kZTtcbn1cblxuY29uc3QgTWFwQ29tcG9uZW50OiBSZWFjdC5GQzxNYXBQcm9wcz4gPSAoe1xuICAgIGJvdW5kcyxcbiAgICBjZW50ZXJHZW9VcmksXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGFsbG93R2VvbG9jYXRlLFxuICAgIGlkLFxuICAgIGludGVyYWN0aXZlLFxuICAgIG9uRXJyb3IsXG4gICAgb25DbGljayxcbn0pID0+IHtcbiAgICBjb25zdCB7IG1hcCwgYm9keUlkIH0gPSB1c2VNYXBXaXRoU3R5bGUoeyBjZW50ZXJHZW9VcmksIG9uRXJyb3IsIGlkLCBpbnRlcmFjdGl2ZSwgYm91bmRzLCBhbGxvd0dlb2xvY2F0ZSB9KTtcblxuICAgIGNvbnN0IG9uTWFwQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQsIE1vdXNlRXZlbnQ+KTogdm9pZCA9PiB7XG4gICAgICAgIC8vIEVhdCBjbGljayBldmVudHMgd2hlbiBjbGlja2luZyB0aGUgYXR0cmlidXRpb24gYnV0dG9uXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBFbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcIm1hcGxpYnJlZ2wtY3RybC1hdHRyaWItYnV0dG9uXCIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2soKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJteF9NYXBcIiwgY2xhc3NOYW1lKX0gaWQ9e2JvZHlJZH0gb25DbGljaz17b25NYXBDbGlja30+XG4gICAgICAgICAgICB7ISFjaGlsZHJlbiAmJiAhIW1hcCAmJiBjaGlsZHJlbih7IG1hcCB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9y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Q0osQ0FBQyxFQUFFLENBQUNWLFNBQVMsQ0FBQyxDQUFDO0VBRWYsT0FBTztJQUNIeEIsR0FBRztJQUNIVjtFQUNKLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTTRDLGdCQUFnQixHQUFJdEUsQ0FBMkIsSUFBVztFQUM1RGlELGNBQU0sQ0FBQ0MsS0FBSyxDQUFDLDBCQUEwQixFQUFFbEQsQ0FBQyxDQUFDO0VBQzNDd0UsY0FBSyxDQUFDQyxZQUFZLENBQUNDLG9CQUFXLEVBQUU7SUFDNUJDLEtBQUssRUFBRSxJQUFBQyxtQkFBRSxFQUFDLHVDQUF1QyxDQUFDO0lBQ2xEQyxXQUFXLEVBQUUsSUFBQUMsZ0NBQXNCLEVBQUM5RSxDQUFDLENBQUMrRSxJQUFJLENBQUMsSUFBSTtFQUNuRCxDQUFDLENBQUM7QUFDTixDQUFDO0FBcUJELE1BQU1DLFlBQWdDLEdBQUdBLENBQUM7RUFDdEN4RCxNQUFNO0VBQ05ILFlBQVk7RUFDWjRELFFBQVE7RUFDUkMsU0FBUztFQUNUekQsY0FBYztFQUNkTCxFQUFFO0VBQ0ZHLFdBQVc7RUFDWEQsT0FBTztFQUNQNkQ7QUFDSixDQUFDLEtBQUs7RUFDRixNQUFNO0lBQUUvQyxHQUFHO0lBQUVWO0VBQU8sQ0FBQyxHQUFHUCxlQUFlLENBQUM7SUFBRUUsWUFBWTtJQUFFQyxPQUFPO0lBQUVGLEVBQUU7SUFBRUcsV0FBVztJQUFFQyxNQUFNO0lBQUVDO0VBQWUsQ0FBQyxDQUFDO0VBRTNHLE1BQU0yRCxVQUFVLEdBQUlDLEtBQW1ELElBQVc7SUFDOUU7SUFDQSxNQUFNQyxNQUFNLEdBQUdELEtBQUssQ0FBQ0MsTUFBaUI7SUFDdEMsSUFBSUEsTUFBTSxDQUFDQyxTQUFTLENBQUNDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFO01BQzVEO0lBQ0o7SUFFQUwsT0FBTyxJQUFJQSxPQUFPLENBQUMsQ0FBQztFQUN4QixDQUFDO0VBRUQsb0JBQ0lwRyxNQUFBLENBQUFzQixPQUFBLENBQUFvRixhQUFBO0lBQUtQLFNBQVMsRUFBRSxJQUFBUSxtQkFBVSxFQUFDLFFBQVEsRUFBRVIsU0FBUyxDQUFFO0lBQUM5RCxFQUFFLEVBQUVNLE1BQU87SUFBQ3lELE9BQU8sRUFBRUM7RUFBVyxHQUM1RSxDQUFDLENBQUNILFFBQVEsSUFBSSxDQUFDLENBQUM3QyxHQUFHLElBQUk2QyxRQUFRLENBQUM7SUFBRTdDO0VBQUksQ0FBQyxDQUN2QyxDQUFDO0FBRWQsQ0FBQztBQUFDLElBQUF1RCxRQUFBLEdBQUFDLE9BQUEsQ0FBQXZGLE9BQUEsR0FFYTJFLFlBQVkiLCJpZ25vcmVMaXN0IjpbXX0=