From 6626c2b2be3f514c600ed103decb4424c1f44c3f Mon Sep 17 00:00:00 2001 From: AliyanH Date: Thu, 13 Apr 2023 23:03:06 -0400 Subject: [PATCH 1/3] remove use of document.querySelector --- src/components/DistortableImage.Keymapper.js | 4 ++-- src/edit/actions/EditAction.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/DistortableImage.Keymapper.js b/src/components/DistortableImage.Keymapper.js index 0f191a1ab..f55287483 100644 --- a/src/components/DistortableImage.Keymapper.js +++ b/src/components/DistortableImage.Keymapper.js @@ -126,7 +126,7 @@ L.DistortableImage.Keymapper = L.Handler.extend({ }, _injectIconSet() { - if (document.querySelector('#keymapper-iconset')) { return; } + if (this._map.getContainer().querySelector('#keymapper-iconset')) { return; } const el = L.DomUtil.create('div', ''); el.id = 'keymapper-iconset'; @@ -135,7 +135,7 @@ L.DistortableImage.Keymapper = L.Handler.extend({ this._iconset = new L.KeymapperIconSet().render(); el.innerHTML = this._iconset; - document.querySelector('.leaflet-control-container').appendChild(el); + this._map.getContainer().querySelector('.leaflet-control-container').appendChild(el); }, }); diff --git a/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index ed8073575..e90d845d5 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -69,7 +69,7 @@ L.EditAction = L.Toolbar2.Action.extend({ }, _injectIconSet() { - if (document.querySelector('#iconset')) { + if (this._map.getContainer().querySelector('#iconset')) { return; } @@ -78,7 +78,7 @@ L.EditAction = L.Toolbar2.Action.extend({ el.setAttribute('hidden', 'hidden'); el.innerHTML = new L.ToolbarIconSet().render(); - document.querySelector('.leaflet-marker-pane').appendChild(el); + this._map.getContainer().querySelector('.leaflet-marker-pane').appendChild(el); }, _enableAction() { From f9048e6758e61f6cc332415300a1c037bb51e932 Mon Sep 17 00:00:00 2001 From: AliyanH Date: Thu, 13 Apr 2023 23:30:51 -0400 Subject: [PATCH 2/3] Add dist file changes --- dist/leaflet.distortableimage.js | 8117 +------------------------- dist/leaflet.distortableimage.js.map | 2 +- 2 files changed, 3 insertions(+), 8116 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 824eebf3d..bcafc43b9 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,8116 +1,3 @@ -/******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/ansi-html-community/index.js": -/*!***************************************************!*\ - !*** ./node_modules/ansi-html-community/index.js ***! - \***************************************************/ -/***/ (function(module) { - -"use strict"; - - -module.exports = ansiHTML - -// Reference to https://github.com/sindresorhus/ansi-regex -var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ - -var _defColors = { - reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] - black: '000', - red: 'ff0000', - green: '209805', - yellow: 'e8bf03', - blue: '0000ff', - magenta: 'ff00ff', - cyan: '00ffee', - lightgrey: 'f0f0f0', - darkgrey: '888' -} -var _styles = { - 30: 'black', - 31: 'red', - 32: 'green', - 33: 'yellow', - 34: 'blue', - 35: 'magenta', - 36: 'cyan', - 37: 'lightgrey' -} -var _openTags = { - '1': 'font-weight:bold', // bold - '2': 'opacity:0.5', // dim - '3': '', // italic - '4': '', // underscore - '8': 'display:none', // hidden - '9': '' // delete -} -var _closeTags = { - '23': '', // reset italic - '24': '', // reset underscore - '29': '' // reset delete -} - -;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) { - _closeTags[n] = '' -}) - -/** - * Converts text with ANSI color codes to HTML markup. - * @param {String} text - * @returns {*} - */ -function ansiHTML (text) { - // Returns the text if the string has no ANSI escape code. - if (!_regANSI.test(text)) { - return text - } - - // Cache opened sequence. - var ansiCodes = [] - // Replace with markup. - var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) { - var ot = _openTags[seq] - if (ot) { - // If current sequence has been opened, close it. - if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast - ansiCodes.pop() - return '' - } - // Open tag. - ansiCodes.push(seq) - return ot[0] === '<' ? ot : '' - } - - var ct = _closeTags[seq] - if (ct) { - // Pop sequence - ansiCodes.pop() - return ct - } - return '' - }) - - // Make sure tags are closed. - var l = ansiCodes.length - ;(l > 0) && (ret += Array(l + 1).join('')) - - return ret -} - -/** - * Customize colors. - * @param {Object} colors reference to _defColors - */ -ansiHTML.setColors = function (colors) { - if (typeof colors !== 'object') { - throw new Error('`colors` parameter must be an Object.') - } - - var _finalColors = {} - for (var key in _defColors) { - var hex = colors.hasOwnProperty(key) ? colors[key] : null - if (!hex) { - _finalColors[key] = _defColors[key] - continue - } - if ('reset' === key) { - if (typeof hex === 'string') { - hex = [hex] - } - if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) { - return typeof h !== 'string' - })) { - throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000') - } - var defHexColor = _defColors[key] - if (!hex[0]) { - hex[0] = defHexColor[0] - } - if (hex.length === 1 || !hex[1]) { - hex = [hex[0]] - hex.push(defHexColor[1]) - } - - hex = hex.slice(0, 2) - } else if (typeof hex !== 'string') { - throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000') - } - _finalColors[key] = hex - } - _setTags(_finalColors) -} - -/** - * Reset colors. - */ -ansiHTML.reset = function () { - _setTags(_defColors) -} - -/** - * Expose tags, including open and close. - * @type {Object} - */ -ansiHTML.tags = {} - -if (Object.defineProperty) { - Object.defineProperty(ansiHTML.tags, 'open', { - get: function () { return _openTags } - }) - Object.defineProperty(ansiHTML.tags, 'close', { - get: function () { return _closeTags } - }) -} else { - ansiHTML.tags.open = _openTags - ansiHTML.tags.close = _closeTags -} - -function _setTags (colors) { - // reset all - _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1] - // inverse - _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0] - // dark grey - _openTags['90'] = 'color:#' + colors.darkgrey - - for (var code in _styles) { - var color = _styles[code] - var oriColor = colors[color] || '000' - _openTags[code] = 'color:#' + oriColor - code = parseInt(code) - _openTags[(code + 10).toString()] = 'background:#' + oriColor - } -} - -ansiHTML.reset() - - -/***/ }), - -/***/ "./src/DistortableCollection.js": -/*!**************************************!*\ - !*** ./src/DistortableCollection.js ***! - \**************************************/ -/***/ (function() { - -function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } -var arr = []; -L.DistortableCollection = L.FeatureGroup.extend({ - options: { - editable: true, - exportOpts: { - exportStartUrl: '//export.mapknitter.org/export', - statusUrl: '//export.mapknitter.org', - exportUrl: 'http://export.mapknitter.org/' - } - }, - initialize: function initialize(options) { - L.setOptions(this, options); - L.FeatureGroup.prototype.initialize.call(this, options); - L.Utils.initTranslation.call(this); - this.editable = this.options.editable; - }, - onAdd: function onAdd(map) { - L.FeatureGroup.prototype.onAdd.call(this, map); - this._map = map; - if (this.editable) { - this.editing.enable(); - } - - /** - * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, - * events that need to be added on individual images are kept here to do so through `layeradd`. - */ - this.on('layeradd', this._addEvents, this); - this.on('layerremove', this._removeEvents, this); - }, - onRemove: function onRemove() { - if (this.editing) { - this.editing.disable(); - } - this.off('layeradd', this._addEvents, this); - this.off('layerremove', this._removeEvents, this); - }, - _addEvents: function _addEvents(e) { - var layer = e.layer; - L.DomEvent.on(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.on(layer.getElement(), { - mousedown: this._deselectOthers, - /* Enable longpress for multi select for touch devices. */ - contextmenu: this._longPressMultiSelect - }, this); - }, - _removeEvents: function _removeEvents(e) { - var layer = e.layer; - L.DomEvent.off(layer, { - dragstart: this._dragStartMultiple, - drag: this._dragMultiple - }, this); - L.DomEvent.off(layer.getElement(), { - mousedown: this._deselectOthers, - contextmenu: this._longPressMultiSelect - }, this); - }, - _longPressMultiSelect: function _longPressMultiSelect(e) { - var _this = this; - if (!this.editable) { - return; - } - e.preventDefault(); - this.eachLayer(function (layer) { - var edit = layer.editing; - if (layer.getElement() === e.target && edit.enabled()) { - L.DomUtil.toggleClass(layer.getElement(), 'collected'); - if (_this.anyCollected()) { - layer.deselect(); - _this.editing._addToolbar(); - } else { - _this.editing._removeToolbar(); - } - } - }); - }, - isCollected: function isCollected(overlay) { - return L.DomUtil.hasClass(overlay.getElement(), 'collected'); - }, - anyCollected: function anyCollected() { - var layerArr = this.getLayers(); - return layerArr.some(this.isCollected.bind(this)); - }, - _toggleCollected: function _toggleCollected(e, layer) { - if (e.shiftKey) { - /* conditional prevents disabled images from flickering multi-select mode */ - if (layer.editing.enabled()) { - L.DomUtil.toggleClass(e.target, 'collected'); - // re-order layers by _leaflet_id to match their display order in UI - // add new layer to right position and avoid repitition - var newArr = arr.every(function (each) { - return each._leaflet_id !== layer._leaflet_id; - }); - if (newArr) { - arr.push(layer); - } else { - arr.splice(arr.indexOf(layer), 1); - } - } - } - if (this.anyCollected()) { - layer.deselect(); - } else { - this.editing._removeToolbar(); - } - }, - _deselectOthers: function _deselectOthers(e) { - var _this2 = this; - if (!this.editable) { - return; - } - this.eachLayer(function (layer) { - if (layer.getElement() !== e.target) { - layer.deselect(); - } else { - _this2._toggleCollected(e, layer); - } - }); - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _dragStartMultiple: function _dragStartMultiple(e) { - var overlay = e.target; - var map = this._map; - var i; - if (!this.isCollected(overlay)) { - return; - } - this.eachLayer(function (layer) { - layer._dragStartPoints = {}; - layer.deselect(); - for (i = 0; i < 4; i++) { - var c = layer.getCorner(i); - layer._dragStartPoints[i] = map.latLngToLayerPoint(c); - } - }); - }, - _dragMultiple: function _dragMultiple(e) { - var overlay = e.target; - var map = this._map; - if (!this.isCollected(overlay)) { - return; - } - var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); - var delta = overlay._dragStartPoints[0].subtract(topLeft); - this._updateCollectionFromPoints(delta, overlay); - }, - _toRemove: function _toRemove() { - var _this3 = this; - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return _this3.isCollected(layer) && mode !== 'lock'; - }); - }, - _toMove: function _toMove(overlay) { - var _this4 = this; - var layerArr = this.getLayers(); - return layerArr.filter(function (layer) { - var mode = layer.editing._mode; - return layer !== overlay && _this4.isCollected(layer) && mode !== 'lock'; - }); - }, - _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { - var layersToMove = this._toMove(overlay); - var p = new L.Transformation(1, -delta.x, 1, -delta.y); - var i; - layersToMove.forEach(function (layer) { - var movedPoints = {}; - for (i = 0; i < 4; i++) { - movedPoints[i] = p.transform(layer._dragStartPoints[i]); - } - layer.setCornersFromPoints(movedPoints); - }); - }, - _getAvgCmPerPixel: function _getAvgCmPerPixel(imgs) { - var reduce = imgs.reduce(function (sum, img) { - return sum + img.cm_per_pixel; - }, 0); - return reduce / imgs.length; - }, - // connects to JSON file and fetches JSON data therein from remote source - fetchRemoteJson: function fetchRemoteJson(url) { - return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { - var index, imgCollectionProps, response; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - index = 0; - imgCollectionProps = []; - _context.prev = 2; - _context.next = 5; - return axios.get(url); - case 5: - response = _context.sent; - if (!response.data.hasOwnProperty('avg_cm_per_pixel')) { - _context.next = 14; - break; - } - if (!(response.data.collection.length > 1)) { - _context.next = 10; - break; - } - response.data.collection.forEach(function (data) { - imgCollectionProps[index] = data; - index++; - }); - return _context.abrupt("return", { - avg_cm_per_pixel: response.data.avg_cm_per_pixel, - imgCollectionProps: imgCollectionProps - }); - case 10: - imgCollectionProps[index] = response.data.collection; - return _context.abrupt("return", { - avg_cm_per_pixel: response.data.avg_cm_per_pixel, - imgCollectionProps: imgCollectionProps - }); - case 14: - if (!(response.data.length > 1)) { - _context.next = 17; - break; - } - response.data.forEach(function (data) { - imgCollectionProps[index] = data; - index++; - }); - return _context.abrupt("return", { - imgCollectionProps: imgCollectionProps - }); - case 17: - imgCollectionProps[index] = response.data; - return _context.abrupt("return", { - imgCollectionProps: imgCollectionProps - }); - case 19: - _context.next = 24; - break; - case 21: - _context.prev = 21; - _context.t0 = _context["catch"](2); - console.log('err', _context.t0); - case 24: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[2, 21]]); - }))(); - }, - // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json - recreateImagesFromJsonUrl: function recreateImagesFromJsonUrl(url) { - var _this5 = this; - return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - var imageCollectionObj; - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - imageCollectionObj = {}; - if (!url) { - _context2.next = 6; - break; - } - _context2.next = 4; - return _this5.fetchRemoteJson(url); - case 4: - imageCollectionObj = _context2.sent; - return _context2.abrupt("return", imageCollectionObj); - case 6: - ; - return _context2.abrupt("return", imageCollectionObj); - case 8: - case "end": - return _context2.stop(); - } - } - }, _callee2); - }))(); - }, - generateExportJson: function generateExportJson() { - var allImages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var json = {}; - json.images = []; - this.eachLayer(function (layer) { - if (allImages || this.isCollected(layer)) { - var sections = layer._image.src.split('/'); - var filename = sections[sections.length - 1]; - var zc = layer.getCorners(); - var corners = [{ - lat: zc[0].lat, - lon: zc[0].lng || zc[0].lon - }, { - lat: zc[1].lat, - lon: zc[1].lng || zc[1].lon - }, { - lat: zc[3].lat, - lon: zc[3].lng || zc[3].lon - }, { - lat: zc[2].lat, - lon: zc[2].lng || zc[2].lon - }]; - json.images.push({ - id: layer._leaflet_id, - src: layer._image.src, - width: layer._image.width, - height: layer._image.height, - tooltipText: layer.getTooltipText(), - image_file_name: filename, - nodes: corners, - cm_per_pixel: L.ImageUtil.getCmPerPixel(layer) - }); - } - }, this); - json.images = json.images.reverse(); - json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); - return json; - } -}); -L.distortableCollection = function (id, options) { - return new L.DistortableCollection(id, options); -}; - -/***/ }), - -/***/ "./src/DistortableImageOverlay.js": -/*!****************************************!*\ - !*** ./src/DistortableImageOverlay.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImageOverlay = L.ImageOverlay.extend({ - options: { - height: 200, - crossOrigin: true, - // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding) - edgeMinWidth: 50, - editable: true, - mode: 'distort', - selected: false, - interactive: true, - tooltipText: '' - }, - initialize: function initialize(url, options) { - L.setOptions(this, options); - L.Utils.initTranslation.call(this); - this.edgeMinWidth = this.options.edgeMinWidth; - this.editable = this.options.editable; - this._selected = this.options.selected; - this._url = url; - this.rotation = {}; - this.interactive = this.options.interactive; - this.tooltipText = this.options.tooltipText; - }, - onAdd: function onAdd(map) { - var _this = this; - this._map = map; - if (!this.getElement()) { - this._initImage(); - } - map.on('viewreset', this._reset, this); - if (this.options.corners) { - this._corners = this.options.corners; - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', this._animateZoom, this); - } - } - - // Have to wait for the image to load because need to access its w/h - L.DomEvent.on(this.getElement(), 'load', function () { - _this.getPane().appendChild(_this.getElement()); - _this._initImageDimensions(); - if (_this.options.rotation) { - var units = _this.options.rotation.deg >= 0 ? 'deg' : 'rad'; - _this.setAngle(_this.options.rotation[units], units); - } else { - _this.rotation = { - deg: 0, - rad: 0 - }; - _this._reset(); - } - - /* Initialize default corners if not already set */ - if (!_this._corners) { - if (map.options.zoomAnimation && L.Browser.any3d) { - map.on('zoomanim', _this._animateZoom, _this); - } - } - - /** if there is a featureGroup, only its editable option matters */ - var eventParents = _this._eventParents; - if (eventParents) { - _this.eP = eventParents[Object.keys(eventParents)[0]]; - if (_this.eP.editable) { - _this.editing.enable(); - } - } else { - if (_this.editable) { - _this.editing.enable(); - } - _this.eP = null; - } - }); - L.DomEvent.on(this.getElement(), 'click', this.select, this); - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - - /** - * custom events fired from DoubleClickLabels.js. Used to differentiate - * single / dblclick to not deselect images on map dblclick. - */ - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this.deselect, this); - } - this.fire('add'); - L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this); - L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); - }, - onRemove: function onRemove(map) { - L.DomEvent.off(this.getElement(), 'click', this.select, this); - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick - }, this); - L.DomEvent.off(map, 'click', this.deselect, this); - if (this.editing) { - this.editing.disable(); - } - this.fire('remove'); - L.ImageOverlay.prototype.onRemove.call(this, map); - L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); - L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this); - }, - _initImageDimensions: function _initImageDimensions() { - var map = this._map; - var originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width'); - var originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height'); - var aspectRatio = parseInt(originalImageWidth) / parseInt(originalImageHeight); - var imageHeight = this.options.height; - var imageWidth = parseInt(aspectRatio * imageHeight); - var center = map.project(map.getCenter()); - var offset = L.point(imageWidth, imageHeight).divideBy(2); - if (this.options.corners) { - this._corners = this.options.corners; - } else { - this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; - } - this._initialDimensions = { - 'center': center, - 'offset': offset, - 'zoom': map.getZoom() - }; - this.setBounds(L.latLngBounds(this.getCorners())); - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this.deselect(); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._map; - L.DomEvent.off(map, 'click', this.deselect, this); - L.DomEvent.on(map, 'singleclick', this.deselect, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._map; - L.DomEvent.on(map, 'click', this.deselect, this); - L.DomEvent.off(map, 'singleclick', this.deselect, this); - }, - isSelected: function isSelected() { - return this._selected; - }, - deselect: function deselect() { - var edit = this.editing; - if (!edit.enabled()) { - return; - } - edit._removeToolbar(); - edit._hideMarkers(); - this._selected = false; - this.fire('deselect'); - return this; - }, - select: function select(e) { - var edit = this.editing; - var eP = this.eP; - if (!edit.enabled()) { - return; - } - if (e) { - L.DomEvent.stopPropagation(e); - } - - // this ensures deselection of all other images, allowing us to keep collection group optional - this._programmaticGrouping(); - this._selected = true; - edit._addToolbar(); - edit._showMarkers(); - this.fire('select'); - - // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it - if (eP && eP.anyCollected()) { - this.deselect(); - return; - } - return this; - }, - _programmaticGrouping: function _programmaticGrouping() { - this._map.eachLayer(function (layer) { - if (layer instanceof L.DistortableImageOverlay) { - layer.deselect(); - } - }); - }, - setCorner: function setCorner(corner, latlng) { - var edit = this.editing; - this._corners[corner] = latlng; - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - this.edited = true; - return this; - }, - _cornerExceedsMapLats: function _cornerExceedsMapLats(zoom, corner, map) { - if (map.options.crs.Simple == L.CRS.Simple) { - return false; - } else { - var exceedsTop; - var exceedsBottom; - if (zoom === 0) { - exceedsTop = map.project(corner).y < 2; - exceedsBottom = map.project(corner).y >= 255; - } else { - exceedsTop = map.project(corner).y / zoom < 2; - exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; - } - return exceedsTop || exceedsBottom; - } - }, - activateTooltip: function activateTooltip() { - if (!this._selected) { - this.bindTooltip(this.tooltipText, { - direction: 'top' - }).openTooltip(); - } - }, - closeToolTip: function closeToolTip() { - this.closeTooltip(); - }, - deactivateTooltip: function deactivateTooltip() { - this.unbindTooltip(); - }, - getTooltipText: function getTooltipText() { - return this.tooltipText; - }, - setCorners: function setCorners(latlngObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; - - // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 - for (var k in latlngObj) { - if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - for (var _k in latlngObj) { - this._corners[i] = latlngObj[_k]; - i += 1; - } - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - this.edited = true; - return this; - }, - setCornersFromPoints: function setCornersFromPoints(pointsObj) { - var map = this._map; - var zoom = map.getZoom(); - var edit = this.editing; - var i = 0; - for (var k in pointsObj) { - var corner = map.layerPointToLatLng(pointsObj[k]); - if (this._cornerExceedsMapLats(zoom, corner, map)) { - // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - return; - } - } - for (var _k2 in pointsObj) { - this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); - i += 1; - } - this.setBounds(L.latLngBounds(this.getCorners())); - this.fire('update'); - if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { - edit._updateToolbarPos(); - } - this.edited = true; - return this; - }, - scaleBy: function scaleBy(scale) { - var map = this._map; - var center = map.project(this.getCenter()); - var i; - var p; - var scaledCorners = {}; - if (scale === 0) { - return; - } - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); - scaledCorners[i] = map.unproject(p); - } - this.setCorners(scaledCorners); - return this; - }, - getAngle: function getAngle() { - var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'deg'; - var matrix = this.getElement().style[L.DomUtil.TRANSFORM].split('matrix3d')[1].slice(1, -1).split(','); - var row0x = matrix[0]; - var row0y = matrix[1]; - var row1x = matrix[4]; - var row1y = matrix[5]; - var determinant = row0x * row1y - row0y * row1x; - var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); - if (determinant < 0) { - angle += angle < 0 ? Math.PI : -Math.PI; - } - if (angle < 0) { - angle = 2 * Math.PI + angle; - } - return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); - }, - setAngle: function setAngle(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var currentAngle = this.getAngle(unit); - var angleToRotateBy = angle - currentAngle; - this.rotateBy(angleToRotateBy, unit); - return this; - }, - rotateBy: function rotateBy(angle) { - var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; - var map = this._map; - var center = map.project(this.getCenter()); - var corners = {}; - var i; - var p; - var q; - if (unit === 'deg') { - angle = L.TrigUtil.degreesToRadians(angle); - } - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(center); - q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); - corners[i] = map.unproject(q.add(center)); - } - this.setCorners(corners); - return this; - }, - dragBy: function dragBy(formerPoint, newPoint) { - var map = this._map; - var i; - var p; - var transCorners = {}; - var delta = map.project(formerPoint).subtract(map.project(newPoint)); - for (i = 0; i < 4; i++) { - p = map.project(this.getCorner(i)).subtract(delta); - transCorners[i] = map.unproject(p); - } - this.setCorners(transCorners); - }, - restore: function restore() { - var map = this._map; - var center = this._initialDimensions.center; - var offset = this._initialDimensions.offset; - var zoom = this._initialDimensions.zoom; - var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; - for (var i = 0; i < 4; i++) { - if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { - this.setCorner(i, map.unproject(corners[i], zoom)); - } - } - this.edited = false; - this.fire('restore'); - return this; - }, - /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ - /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ - _getTranslateString: function _getTranslateString(point) { - // on WebKit browsers (Chrome/Safari/iOS Safari/Android) - // using translate3d instead of translate - // makes animation smoother as it ensures HW accel is used. - // Firefox 13 doesn't care - // (same speed either way), Opera 12 doesn't support translate3d - - var is3d = L.Browser.webkit3d; - var open = 'translate' + (is3d ? '3d' : '') + '('; - var close = (is3d ? ',0' : '') + ')'; - return open + point.x + 'px,' + point.y + 'px' + close; - }, - _reset: function _reset() { - var map = this._map; - var image = this.getElement(); - var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); - var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); - var topLeft = latLngToLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - var translation = this._getTranslateString(topLeft); - - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - - /* Set origin to the upper-left corner rather than - * the center of the image, which is the default. - */ - image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; - this.rotation.deg = this.getAngle(); - this.rotation.rad = this.getAngle('rad'); - }, - /* - * Calculates the transform string that will be - * correct *at the end* of zooming. - * Leaflet then generates a CSS3 animation between the current transform and - * future transform which makes the transition appear smooth. - */ - _animateZoom: function _animateZoom(event) { - var map = this._map; - var image = this.getElement(); - var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { - return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); - }; - var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); - var topLeft = latLngToNewLayerPoint(this.getCorner(0)); - var warp = L.DomUtil.getMatrixString(transformMatrix); - var translation = this._getTranslateString(topLeft); - - /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ - image._leaflet_pos = topLeft; - image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); - }, - getCorners: function getCorners() { - return this._corners; - }, - getCorner: function getCorner(i) { - return this._corners[i]; - }, - // image (vertex) centroid calculation - getCenter: function getCenter() { - var map = this._map; - var reduce = this.getCorners().reduce(function (agg, corner) { - return agg.add(map.project(corner)); - }, L.point(0, 0)); - return map.unproject(reduce.divideBy(4)); - }, - _calculateProjectiveTransform: function _calculateProjectiveTransform(latLngToCartesian) { - /* Setting reasonable but made-up image defaults - * allow us to place images on the map before - * they've finished downloading. */ - var offset = latLngToCartesian(this.getCorner(0)); - var w = this.getElement().offsetWidth || 500; - var h = this.getElement().offsetHeight || 375; - var c = []; - var j; - /* Convert corners to container points (i.e. cartesian coordinates). */ - for (j = 0; j < 4; j++) { - c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); - } - - /* - * This matrix describes the action of - * the CSS transform on each corner of the image. - * It maps from the coordinate system centered - * at the upper left corner of the image - * to the region bounded by the latlngs in this._corners. - * For example: - * 0, 0, c[0].x, c[0].y - * says that the upper-left corner of the image - * maps to the first latlng in this._corners. - */ - return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); - } -}); -L.distortableImageOverlay = function (id, options) { - return new L.DistortableImageOverlay(id, options); -}; -L.Map.addInitHook(function () { - if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { - L.DomUtil.addClass(this.getContainer(), 'ldi'); - } -}); - -/***/ }), - -/***/ "./src/components/DistortableImage.Keymapper.js": -/*!******************************************************!*\ - !*** ./src/components/DistortableImage.Keymapper.js ***! - \******************************************************/ -/***/ (function() { - -var _this = this; -L.DomUtil = L.DomUtil || {}; -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.Keymapper = L.Handler.extend({ - options: { - position: 'topright' - }, - initialize: function initialize(map, options) { - this._map = map; - L.setOptions(this, options); - }, - addHooks: function addHooks() { - if (!this._keymapper) { - this._container = this._buildContainer(); - this._scrollWrapper = this._wrap(); - this._toggler = this._createButton(); - this._setMapper(this._container, this._scrollWrapper, this._toggler); - L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this); - L.DomEvent.disableClickPropagation(this._container); - L.DomEvent.disableScrollPropagation(this._container); - } - }, - removeHooks: function removeHooks() { - if (this._keymapper) { - L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this); - L.DomUtil.remove(this._toggler); - L.DomUtil.remove(this._scrollWrapper); - L.DomUtil.remove(this._container); - this._keymapper = false; - } - }, - _buildContainer: function _buildContainer() { - var container = L.DomUtil.create('div', 'ldi-keymapper-hide'); - container.setAttribute('id', 'ldi-keymapper'); - var divider = L.DomUtil.create('br', 'divider'); - container.appendChild(divider); - return container; - }, - _createButton: function _createButton() { - var toggler = L.DomUtil.create('a', ''); - toggler.innerHTML = L.IconUtil.create('keyboard_open'); - toggler.setAttribute('id', 'toggle-keymapper'); - toggler.setAttribute('href', '#'); - toggler.setAttribute('title', 'Show keymap'); - // Will force screen readers like VoiceOver to read this as "Show keymap - button" - toggler.setAttribute('role', 'button'); - toggler.setAttribute('aria-label', 'Show keymap'); - return toggler; - }, - _wrap: function _wrap() { - var wrap = L.DomUtil.create('div', ''); - wrap.setAttribute('id', 'keymapper-wrapper'); - wrap.style.display = 'none'; - return wrap; - }, - _setMapper: function _setMapper(container, wrap, button) { - this._keymapper = L.control({ - position: this.options.position - }); - this._keymapper.onAdd = function () { - container.appendChild(wrap); - wrap.insertAdjacentHTML('beforeend', '' + '
' + /* eslint-disable */ - '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\xa0u
Stack up / down
q\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\xa0backspace
Export Image(s)
e
'); - /* eslint-enable */ - container.appendChild(button); - return container; - }; - this._keymapper.addTo(this._map); - }, - _toggleKeymapper: function _toggleKeymapper(e) { - e.preventDefault(); - this._container.className = this._container.className === 'ldi-keymapper leaflet-control' ? 'ldi-keymapper-hide leaflet-control' : 'ldi-keymapper leaflet-control'; - this._scrollWrapper.style.display = this._scrollWrapper.style.display === 'none' ? 'block' : 'none'; - this._toggler.innerHTML = this._toggler.innerHTML === 'close' ? L.IconUtil.create('keyboard_open') : 'close'; - L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap'); - L.DomUtil.toggleClass(this._toggler, 'close-icon'); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#keymapper-iconset')) { - return; - } - var el = L.DomUtil.create('div', ''); - el.id = 'keymapper-iconset'; - el.setAttribute('hidden', 'hidden'); - this._iconset = new L.KeymapperIconSet().render(); - el.innerHTML = this._iconset; - document.querySelector('.leaflet-control-container').appendChild(el); - } -}); -L.DistortableImage.Keymapper.addInitHook(function () { - L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; - // dont enable keymapper for mobile - if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { - _this.enable(); - _this._injectIconSet(); - } -}); -L.distortableImage.keymapper = function (map, options) { - return new L.DistortableImage.Keymapper(map, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableCollection.Edit.js": -/*!************************************************!*\ - !*** ./src/edit/DistortableCollection.Edit.js ***! - \************************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; - -// this class holds the keybindings and toolbar API for an image collection instance -L.DistortableCollection.Edit = L.Handler.extend({ - options: { - keymap: L.distortableImage.group_action_map - }, - initialize: function initialize(group, options) { - this._group = group; - this._exportOpts = group.options.exportOpts; - L.setOptions(this, options); - L.distortableImage.group_action_map.Escape = '_decollectAll'; - }, - addHooks: function addHooks() { - var group = this._group; - var map = group._map; - this.editActions = this.options.actions; - this.runExporter = L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') || this.startExport, this); - L.DomEvent.on(document, 'keydown', this._onKeyDown, this); - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.on(map, 'click', this._decollectAll, this); - } - L.DomEvent.on(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - this._group.editable = true; - this._group.eachLayer(function (layer) { - return layer.editing.enable(); - }); - }, - removeHooks: function removeHooks() { - var group = this._group; - var map = group._map; - L.DomEvent.off(document, 'keydown', this._onKeyDown, this); - if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { - L.DomEvent.off(map, 'click', this._decollectAll, this); - } - L.DomEvent.off(map, { - singleclickon: this._singleClickListeners, - singleclickoff: this._resetClickListeners, - singleclick: this._singleClick, - boxcollectend: this._addCollections - }, this); - this._decollectAll(); - this._group.editable = false; - this._group.eachLayer(function (layer) { - return layer.editing.disable(); - }); - }, - enable: function enable() { - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - this._enabled = false; - this.removeHooks(); - return this; - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - if (!this[handlerName]) { - return; - } - if (this._group.anyCollected()) { - this[handlerName].call(this); - } - }, - _singleClick: function _singleClick(e) { - if (e.type === 'singleclick') { - this._decollectAll(e); - } else { - return; - } - }, - _singleClickListeners: function _singleClickListeners() { - var map = this._group._map; - L.DomEvent.off(map, 'click', this._decollectAll, this); - L.DomEvent.on(map, 'singleclick', this._decollectAll, this); - }, - _resetClickListeners: function _resetClickListeners() { - var map = this._group._map; - L.DomEvent.on(map, 'click', this._decollectAll, this); - L.DomEvent.off(map, 'singleclick', this._decollectAll, this); - }, - _decollectAll: function _decollectAll(e) { - var oe; - if (e) { - oe = e.originalEvent; - } - /** - * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete - * also prevents deselection following a click on a disabled img by differentiating it from the map - */ - if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { - return; - } - this._group.eachLayer(function (layer) { - L.DomUtil.removeClass(layer.getElement(), 'collected'); - layer.deselect(); - }); - this._removeToolbar(); - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - _unlockGroup: function _unlockGroup() { - var _this = this; - if (!this.hasTool(L.UnlockAction)) { - return; - } - this._group.eachLayer(function (layer) { - if (_this._group.isCollected(layer)) { - var edit = layer.editing; - edit._unlock(); - // unlock updates the layer's handles; deselect to ensure they're hidden - layer.deselect(); - } - }); - }, - _lockGroup: function _lockGroup() { - var _this2 = this; - if (!this.hasTool(L.LockAction)) { - return; - } - this._group.eachLayer(function (layer) { - if (_this2._group.isCollected(layer)) { - var edit = layer.editing; - edit._lock(); - // map.addLayer also deselects the image, so we reselect here - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _addCollections: function _addCollections(e) { - var _this3 = this; - var box = e.boxCollectBounds; - var map = this._group._map; - this._group.eachLayer(function (layer) { - var edit = layer.editing; - if (layer.isSelected()) { - layer.deselect(); - } - var zoom = map.getZoom(); - var center = map.getCenter(); - var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); - imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); - if (box.intersects(imgBounds) && edit.enabled()) { - if (!_this3.toolbar) { - _this3._addToolbar(); - } - L.DomUtil.addClass(layer.getElement(), 'collected'); - } - }); - }, - _removeGroup: function _removeGroup(e) { - var _this4 = this; - if (!this.hasTool(L.DeleteAction)) { - return; - } - var layersToRemove = this._group._toRemove(); - var n = layersToRemove.length; - if (n === 0) { - return; - } - var choice = L.DomUtil.confirmDeletes(n); - if (choice) { - layersToRemove.forEach(function (layer) { - _this4._group.removeLayer(layer); - }); - if (!this._group.anyCollected()) { - this._removeToolbar(); - } - } - if (e) { - L.DomEvent.stopPropagation(e); - } - }, - cancelExport: function cancelExport() { - if (!this.customCollection) { - this._exportOpts.collection = undefined; - } - clearInterval(this.updateInterval); - }, - _addToolbar: function _addToolbar() { - var group = this._group; - var map = group._map; - if (group.options.suppressToolbar || this.toolbar) { - return; - } - this.toolbar = L.distortableImage.controlBar({ - actions: this.editActions, - position: 'topleft' - }).addTo(map, group); - }, - _removeToolbar: function _removeToolbar() { - var map = this._group._map; - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } else { - return false; - } - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - this.editActions.push(value); - this._addToolbar(); - } - return this; - }, - removeTool: function removeTool(value) { - var _this5 = this; - this.editActions.some(function (item, idx) { - if (_this5.editActions[idx] === value) { - _this5._removeToolbar(); - _this5.editActions.splice(idx, 1); - _this5._addToolbar(); - return true; - } else { - return false; - } - }); - return this; - }, - startExport: function startExport() { - var _this6 = this; - if (!this.hasTool(L.ExportAction)) { - return; - } - return new Promise(function (resolve) { - var opts = _this6._exportOpts; - opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion - - var statusUrl; - _this6.updateInterval = null; - - // this may be overridden to update the UI to show export progress or completion - var _defaultUpdater = function _defaultUpdater(data) { - data = JSON.parse(data); - // optimization: fetch status directly from google storage: - if (data.status_url) { - if (statusUrl !== data.status_url && data.status_url.match('.json')) { - // if (data.status_url && data.status_url.substr(0,1) === "/") { - // opts.statusUrl = opts.statusUrl + data.status_url; - // } else { - statusUrl = data.status_url; - // } - } - - if (data.status === 'complete') { - clearInterval(_this6.updateInterval); - if (!_this6.customCollection) { - _this6._exportOpts.collection = undefined; - } - resolve(); - if (data.jpg !== null) { - alert('Export succeeded. ' + opts.exportUrl + data.jpg); - } - } - - // TODO: update to clearInterval when status == "failed" if we update that in this file: - // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb - console.log(data); - } - }; - - // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; - // this may be overridden to integrate with any UI - var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { - statusUrl = opts.statusUrl + data; - // repeatedly fetch the status.json - _this6.updateInterval = setInterval(function () { - var reqOpts = { - method: 'GET' - }; - var req = new Request("".concat(statusUrl, "?").concat(Date.now()), reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(opts.updater); - }, opts.frequency); - }; - - // initiate the export - var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { - var form = new FormData(); - form.append('collection', JSON.stringify(mergedOpts.collection)); - form.append('scale', mergedOpts.scale); - form.append('upload', true); - var reqOpts = { - method: 'POST', - body: form - }; - var req = new Request(mergedOpts.exportStartUrl, reqOpts); - fetch(req).then(function (res) { - if (res.ok) { - return res.text(); - } - }).then(mergedOpts.handleStatusRes); - }; - - // If the user has passed collection property - _this6.customCollection = !!opts.collection; - if (!_this6.customCollection) { - opts.collection = _this6._group.generateExportJson().images; - } - opts.frequency = opts.frequency || 3000; - opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! - opts.updater = opts.updater || _defaultUpdater; - opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; - opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; - opts.fetchStatusUrl(opts); - }); - } -}); -L.distortableCollection.edit = function (group, options) { - return new L.DistortableCollection.Edit(group, options); -}; - -/***/ }), - -/***/ "./src/edit/DistortableImage.Edit.js": -/*!*******************************************!*\ - !*** ./src/edit/DistortableImage.Edit.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; - -// holds the keybindings & toolbar API for an individual image instance -L.DistortableImage.Edit = L.Handler.extend({ - options: { - opacity: 0.5, - outline: '1px solid red', - keymap: L.distortableImage.action_map - }, - initialize: function initialize(overlay, options) { - this._overlay = overlay; - this._toggledImage = false; - this._mode = overlay.options.mode; - this._transparent = false; - this._outlined = false; - this._opacity = options.opacity; - L.setOptions(this, options); - L.distortableImage.action_map.Escape = '_deselect'; - }, - /* Run on image selection. */addHooks: function addHooks() { - var overlay = this._overlay; - this.editActions = this.options.actions; - - /* bring the selected image into view */ - overlay.bringToFront(); - this._initModes(); - this._initHandles(); - this._appendHandlesandDragable(); - if (overlay.isSelected() && !overlay.options.suppressToolbar) { - this._addToolbar(); - } - this.parentGroup = overlay.eP ? overlay.eP : false; - L.DomEvent.on(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.on(window, 'keydown', this._onKeyDown, this); - }, - /* Run on image deselection. */removeHooks: function removeHooks() { - var overlay = this._overlay; - var eP = this.parentGroup; - - // First, check if dragging exists - it may be off due to locking - this._disableDragging(); - if (this.toolbar) { - this._removeToolbar(); - } - for (var handle in this._handles) { - L.DomUtil.remove(handle); - } - - /** - * ensures if you disable an image while it is multi-selected - * additional deselection logic is run - */ - if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { - L.DomUtil.removeClass(overlay.getElement(), 'collected'); - } - if (eP && !eP.anyCollected() && eP.editing.toolbar) { - eP.editing._removeToolbar(); - } - L.DomEvent.off(overlay.getElement(), { - dblclick: this.nextMode - }, this); - L.DomEvent.off(window, 'keydown', this._onKeyDown, this); - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - this._overlay.deselect(); - this._enabled = false; - this.removeHooks(); - return this; - }, - _initModes: function _initModes() { - this._modes = {}; - // passed from L.DistortablImage.PopupBar. If the mode is one - // of the current toolbar actions, adds it to this._modes - for (var mode in L.DistortableImage.Edit.MODES) { - var action = L.DistortableImage.Edit.MODES[mode]; - if (this.editActions.indexOf(action) !== -1) { - this._modes[mode] = action; - } - } - - // sets the current mode to the 1st available one if the one selected - // during initialization is not available - if (!this._modes[this._mode]) { - this._mode = Object.keys(this._modes)[0]; - } - }, - _initHandles: function _initHandles() { - var overlay = this._overlay; - var i; - this._dragHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { - this._dragHandles.addLayer(L.dragHandle(overlay, i)); - } - this._scaleHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { - this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); - } - this._distortHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { - this._distortHandles.addLayer(L.distortHandle(overlay, i)); - } - this._rotateHandles = L.layerGroup(); // individual rotate - for (i = 0; i < 4; i++) { - this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); - } - - // handle includes rotate AND scale - this._freeRotateHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { - this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); - } - this._lockHandles = L.layerGroup(); - for (i = 0; i < 4; i++) { - this._lockHandles.addLayer(L.lockHandle(overlay, i, { - draggable: false - })); - } - this._handles = { - drag: this._dragHandles, - scale: this._scaleHandles, - distort: this._distortHandles, - rotate: this._rotateHandles, - freeRotate: this._freeRotateHandles, - lock: this._lockHandles - }; - }, - _appendHandlesandDragable: function _appendHandlesandDragable() { - var ov = this._overlay; - - // won't throw error if user adds 0 mode actions to toolbar - if (!this._mode) { - this._enableDragging(); - return; - } - this._updateHandle(); - if (!ov.isSelected() && this.currentHandle) { - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - if (handle.dragging) { - handle.dragging.disable(); - } - }); - } - if (!this.isMode('lock')) { - this._enableDragging(); - } - }, - _onKeyDown: function _onKeyDown(e) { - var keymap = this.options.keymap; - var handlerName = keymap[e.key]; - var ov = this._overlay; - var eP = this.parentGroup; - if (eP && eP.anyCollected()) { - return; - } - if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { - if (ov.isSelected() && this.toolbar) { - this[handlerName].call(this); - } - } - }, - replaceTool: function replaceTool(old, next) { - var _this = this; - if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { - return this; - } - this.editActions.some(function (item, idx) { - if (item === old) { - _this._removeToolbar(); - _this.editActions[idx] = next; - _this._addToolbar(); - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === old) { - delete _this._modes[mode]; - _this._nextOrNone(mode); - } else if (L.DistortableImage.Edit.MODES[mode] === next) { - _this._modes[mode] = next; - } - } - return true; - } - }); - return this; - }, - addTool: function addTool(value) { - if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { - this._removeToolbar(); - this.editActions.push(value); - this._addToolbar(); - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - this._modes[mode] = value; - } - } - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - } - return this; - }, - hasTool: function hasTool(value) { - return this.editActions.some(function (action) { - return action === value; - }); - }, - removeTool: function removeTool(value) { - var _this2 = this; - this.editActions.some(function (item, idx) { - if (item === value) { - _this2._removeToolbar(); - _this2.editActions.splice(idx, 1); - _this2._addToolbar(); - for (var mode in L.DistortableImage.Edit.MODES) { - if (L.DistortableImage.Edit.MODES[mode] === value) { - delete _this2._modes[mode]; - _this2._nextOrNone(mode); - } - } - return true; - } - }); - if (!this._overlay.isSelected()) { - this._removeToolbar(); - } - return this; - }, - // set the mode to the next mode or if that was the last one set mode to '' - _nextOrNone: function _nextOrNone(mode) { - if (this.isMode(mode)) { - if (Object.keys(this.getModes()).length >= 1) { - this.nextMode(); - } else { - if (mode === 'lock') { - this._enableDragging(); - } - this._mode = ''; - this._updateHandle(); - } - } - }, - _removeToolbar: function _removeToolbar() { - var ov = this._overlay; - var map = ov._map; - if (this.toolbar) { - map.removeLayer(this.toolbar); - this.toolbar = false; - } - }, - _enableDragging: function _enableDragging() { - var _this3 = this; - var overlay = this._overlay; - var map = overlay._map; - this.dragging = new L.Draggable(overlay.getElement()); - this.dragging.enable(); - - /* Hide toolbars and markers while dragging; click will re-show it */ - this.dragging.on('dragstart', function () { - overlay.fire('dragstart'); - _this3._removeToolbar(); - }); - - /* - * Adjust default behavior of L.Draggable, which overwrites the CSS3 - * distort transformations that we set when it calls L.DomUtil.setPosition. - */ - this.dragging._updatePosition = function () { - var topLeft = overlay.getCorner(0); - var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); - var currentPoint; - var corners = {}; - var i; - this.fire('predrag'); - for (i = 0; i < 4; i++) { - currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); - corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); - } - overlay.setCorners(corners); - overlay.fire('drag'); - this.fire('drag'); - }; - this.dragging.on('dragend', function () { - overlay.fire('dragend'); - }); - }, - _disableDragging: function _disableDragging() { - if (this.dragging) { - this.dragging.disable(); - delete this.dragging; - } - }, - _dragMode: function _dragMode() { - this.setMode('drag'); - }, - _scaleMode: function _scaleMode() { - this.setMode('scale'); - }, - _distortMode: function _distortMode() { - this.setMode('distort'); - }, - _rotateMode: function _rotateMode() { - this.setMode('rotate'); - }, - _freeRotateMode: function _freeRotateMode() { - this.setMode('freeRotate'); - }, - _toggleLockMode: function _toggleLockMode() { - if (this.isMode('lock')) { - this._unlock(); - } else { - this._lock(); - } - }, - _toggleOpacity: function _toggleOpacity() { - var image = this._overlay.getElement(); - if (!this.hasTool(L.OpacityAction)) { - return; - } - this._transparent = !this._transparent; - var opacity = this._transparent ? this.options.opacity : 1; - L.DomUtil.setOpacity(image, opacity); - image.setAttribute('opacity', opacity); - this._refresh(); - }, - _setOpacities: function _setOpacities(o) { - var image = this._overlay.getElement(); - this._opacity = o; - if (!this.hasTool(L.OpacitiesAction)) { - return; - } - this._opacity < 1 ? this._transparent = true : this._transparent = false; - L.DomUtil.setOpacity(image, this._opacity); - image.setAttribute('opacity', this._opacity); - this._refresh(); - }, - _toggleBorder: function _toggleBorder() { - var image = this._overlay.getElement(); - if (!this.hasTool(L.BorderAction)) { - return; - } - this._outlined = !this._outlined; - var outline = this._outlined ? this.options.outline : 'none'; - image.style.outline = outline; - this._refresh(); - }, - // compare this to using overlay zIndex - _toggleOrder: function _toggleOrder() { - if (this._toggledImage) { - this._stackUp(); - } else { - this._stackDown(); - } - }, - _removeOverlay: function _removeOverlay() { - var ov = this._overlay; - var eP = this.parentGroup; - if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { - return; - } - var choice = L.DomUtil.confirmDelete(); - if (!choice) { - return; - } - this._removeToolbar(); - if (eP) { - eP.removeLayer(ov); - } else { - ov._map.removeLayer(ov); - } - }, - // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82 - _getExport: function _getExport() { - var overlay = this._overlay; - var map = overlay._map; - var img = overlay.getElement(); - if (!this.hasTool(L.ExportAction)) { - return; - } - - // make a new image - var downloadable = new Image(); - downloadable.id = downloadable.id || 'tempId12345'; - document.body.appendChild(downloadable); - downloadable.onload = function onLoadDownloadableImage() { - var height = downloadable.height; - var width = downloadable.width; - var nw = map.latLngToLayerPoint(overlay.getCorner(0)); - var ne = map.latLngToLayerPoint(overlay.getCorner(1)); - var sw = map.latLngToLayerPoint(overlay.getCorner(2)); - var se = map.latLngToLayerPoint(overlay.getCorner(3)); - - // I think this is to move the image to the upper left corner, - // eslint-disable-next-line max-len - // jywarren: i think we may need these or the image goes off the edge of the canvas - // jywarren: but these seem to break the distortion math... - - // jywarren: i think it should be rejiggered so it - // finds the most negative values of x and y and then - // adds those to all coordinates - - // nw.x -= nw.x; - // ne.x -= nw.x; - // se.x -= nw.x; - // sw.x -= nw.x; - - // nw.y -= nw.y; - // ne.y -= nw.y; - // se.y -= nw.y; - // sw.y -= nw.y; - - // run once warping is complete - downloadable.onload = function () { - L.DomUtil.remove(downloadable); - }; - if (window && window.hasOwnProperty('warpWebGl')) { - warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download - ); - } - }; - - downloadable.src = overlay.options.fullResolutionSrc || img.src; - }, - _stackUp: function _stackUp() { - var t = this._toggledImage; - if (!t || !this.hasTool(L.StackAction)) { - return; - } - this._toggledImage = false; - this._overlay.bringToFront(); - this._refresh(); - }, - _stackDown: function _stackDown() { - var t = this._toggledImage; - if (t || !this.hasTool(L.StackAction)) { - return; - } - this._toggledImage = true; - this._overlay.bringToBack(); - this._refresh(); - }, - _unlock: function _unlock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - if (!this.isMode('lock')) { - return; - } - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { - this._mode = ''; - this.currentHandle = ''; - } else { - this._mode = ov.options.mode; - } - this._updateHandle(); - this._enableDragging(); - this._refresh(); - }, - _lock: function _lock() { - var ov = this._overlay; - var map = ov._map; - var eP = this.parentGroup; - if (this.isMode('lock')) { - return; - } - if (eP && !eP.isCollected(ov) || !eP) { - if (!this.hasTool(L.LockAction)) { - return; - } - } - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - this._mode = 'lock'; - this._updateHandle(); - this._disableDragging(); - this._refresh(); - }, - _deselect: function _deselect() { - this._overlay.deselect(); - }, - _showMarkers: function _showMarkers(e) { - var eP = this.parentGroup; - if (!this.currentHandle) { - return; - } - // only markers we want in collect interface for now is lock - if (!this.isMode('lock') && eP && eP.anyCollected()) { - return; - } - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(1); - if (handle.dragging) { - handle.dragging.enable(); - } - L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _hideMarkers: function _hideMarkers() { - var ov = this._overlay; - var eP = this.parentGroup; - - // workaround for race condition w/ feature group - if (!this._handles) { - this._initHandles(); - } - if (!this.currentHandle) { - return; - } - if (this.isMode('lock') && eP && eP.isCollected(ov)) { - return; - } - this.currentHandle.eachLayer(function (handle) { - handle.setOpacity(0); - if (handle.dragging) { - handle.dragging.disable(); - } - L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); - }); - }, - _updateHandle: function _updateHandle() { - var ov = this._overlay; - var map = ov._map; - var mode = this.getMode(); - if (this.currentHandle) { - map.removeLayer(this.currentHandle); - } - this.currentHandle = mode === '' ? '' : this._handles[mode]; - if (this.currentHandle !== '') { - map.addLayer(this.currentHandle); - } - }, - _addToolbar: function _addToolbar() { - var ov = this._overlay; - var eP = this.parentGroup; - var map = ov._map; - // Find the topmost point on the image. - var corners = ov.getCorners(); - var maxLat = -Infinity; - if (eP && eP.anyCollected()) { - eP.editing._addToolbar(); - return; - } - if (ov.options.suppressToolbar || this.toolbar) { - return; - } - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } - - // Longitude is based on the centroid of the image. - var raisedPoint = ov.getCenter(); - raisedPoint.lat = maxLat; - this.toolbar = L.distortableImage.popupBar(raisedPoint, { - actions: this.editActions - }).addTo(map, ov); - ov.fire('toolbar:created'); - }, - _refresh: function _refresh() { - if (this.toolbar) { - this._removeToolbar(); - } - this._addToolbar(); - }, - _updateToolbarPos: function _updateToolbarPos() { - var overlay = this._overlay; - // Find the topmost point on the image. - var corners = overlay.getCorners(); - var toolbar = this.toolbar; - var maxLat = -Infinity; - if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { - for (var i = 0; i < corners.length; i++) { - if (corners[i].lat > maxLat) { - maxLat = corners[i].lat; - } - } - - // Longitude is based on the centroid of the image. - var raisedPoint = overlay.getCenter(); - raisedPoint.lat = maxLat; - if (!overlay.options.suppressToolbar) { - this.toolbar.setLatLng(raisedPoint); - } - } - }, - hasMode: function hasMode(mode) { - return !!this._modes[mode]; - }, - getMode: function getMode() { - if (!this.enabled()) { - return; - } - return this._mode; - }, - getModes: function getModes() { - return this._modes; - }, - isMode: function isMode(mode) { - if (!this.enabled()) { - return false; - } - return this._mode === mode; - }, - setMode: function setMode(newMode) { - var ov = this._overlay; - var eP = this.parentGroup; - var mode = this.getMode(); - if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { - return; - } - if (this.toolbar) { - this.toolbar.clickTool(newMode); - } - if (this.isMode('lock') && !this.dragging) { - this._enableDragging(); - } - this._mode = newMode; - if (this.isMode('lock')) { - this._disableDragging(); - } - this._updateHandle(); - this._refresh(); - if (eP && eP.isCollected(ov)) { - ov.deselect(); - } - return this; - }, - /** - * need to attach a stop to img dblclick or it will propagate to - * the map and fire the handler that shows map location labels on map dblclick. - */ - nextMode: function nextMode(e) { - var mode = this.getMode(); - var eP = this.parentGroup; - var modesArray = Object.keys(this.getModes()); - var idx = modesArray.indexOf(mode); - var nextIdx = (idx + 1) % modesArray.length; - var newMode = modesArray[nextIdx]; - if (e) { - if (eP && eP.anyCollected()) { - return; - } - L.DomEvent.stop(e); - } - return this.setMode(newMode); - } -}); -L.distortableImage.edit = function (overlay, options) { - return new L.DistortableImage.Edit(overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/BorderAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/BorderAction.js ***! - \******************************************/ -/***/ (function() { - -L.BorderAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - if (edit._outlined) { - use = 'border_outer'; - tooltip = overlay.options.translation.removeBorder; - } else { - use = 'border_clear'; - tooltip = overlay.options.translation.addBorder; - } - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; - - // conditional for disabling keybindings for this action when the image is locked. - L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); - L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); - edit._toggleBorder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DeleteAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/DeleteAction.js ***! - \******************************************/ -/***/ (function() { - -L.DeleteAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use = 'delete_forever'; - var tooltip; - /** - * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only - * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. - */ - if (edit instanceof L.DistortableImage.Edit) { - tooltip = overlay.options.translation.deleteImage; - // backspace windows / delete mac - L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; - } else { - tooltip = overlay.options.translation.deleteImages; - L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; - } - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - if (edit instanceof L.DistortableImage.Edit) { - edit._removeOverlay(); - } else { - edit._removeGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DistortAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/DistortAction.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'distort', - tooltip: overlay.options.translation.distortImage, - className: 'distort' - }; - L.DistortableImage.action_map.d = '_distortMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - edit._distortMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/DragAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/DragAction.js ***! - \****************************************/ -/***/ (function() { - -L.DragAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'drag', - tooltip: overlay.options.translation.dragImage, - className: 'drag' - }; - L.DistortableImage.action_map.D = '_dragMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - edit._dragMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/EditAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/EditAction.js ***! - \****************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.action_map = {}; -L.EditAction = L.Toolbar2.Action.extend({ - options: { - toolbarIcon: { - svg: false, - html: '', - className: '', - tooltip: '' - } - }, - initialize: function initialize(map, overlay, options) { - this._overlay = overlay; - this._map = map; - L.setOptions(this, options); - L.Toolbar2.Action.prototype.initialize.call(this, options); - this._injectIconSet(); - }, - _createIcon: function _createIcon(toolbar, container, args) { - var _this = this; - var iconOptions = this.options.toolbarIcon; - var className = iconOptions.className; - var edit = this._overlay.editing; - var style = this.options.toolbarIcon.style; - this.toolbar = toolbar; - this._icon = L.DomUtil.create('li', '', container); - this._link = L.DomUtil.create('a', '', this._icon); - if (iconOptions.svg) { - this._link.innerHTML = L.IconUtil.create(iconOptions.html); - } else { - this._link.innerHTML = iconOptions.html; - } - this._link.setAttribute('href', '#'); - this._link.setAttribute('title', iconOptions.tooltip); - if (style) { - this._link.setAttribute('style', style); - } - ; - this._link.setAttribute('role', 'button'); - L.DomUtil.addClass(this._link, this.constructor.baseClass); - if (className) { - L.DomUtil.addClass(this._link, className); - if (className === 'disabled') { - L.DomUtil.addClass(this._icon, className); - } - if (className === edit._mode) { - L.DomUtil.addClass(this._link, 'selected-mode'); - } else { - L.DomUtil.removeClass(this._link, 'selected-mode'); - } - } - L.DomEvent.on(this._link, 'click', this.enable, this); - L.DomEvent.on(this._overlay, 'update', function () { - var match = _this._link.innerHTML.match(/xlink:href="#restore"/); - if (match && match.length === 1) { - _this._enableAction(); - } - }); - - /* Add secondary toolbar */ - this._addSubToolbar(toolbar, this._icon, args); - }, - _injectIconSet: function _injectIconSet() { - if (document.querySelector('#iconset')) { - return; - } - var el = document.createElement('div'); - el.id = 'iconset'; - el.setAttribute('hidden', 'hidden'); - el.innerHTML = new L.ToolbarIconSet().render(); - document.querySelector('.leaflet-marker-pane').appendChild(el); - }, - _enableAction: function _enableAction() { - L.DomUtil.removeClass(this._link.parentElement, 'disabled'); - L.DomUtil.removeClass(this._link, 'disabled'); - }, - _disableAction: function _disableAction() { - L.DomUtil.addClass(this._link.parentElement, 'disabled'); - L.DomUtil.addClass(this._link, 'disabled'); - } -}); -L.editAction = function (map, overlay, options) { - return new L.EditAction(map, overlay, options); -}; - -/***/ }), - -/***/ "./src/edit/actions/ExportAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/ExportAction.js ***! - \******************************************/ -/***/ (function() { - -L.ExportAction = L.EditAction.extend({ - // This function is executed every time we select an image - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var tooltip; - this.isExporting = false; - this.mouseLeaveSkip = true; - this.isHooksExecuted = false; - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.e = '_getExport'; - tooltip = overlay.options.translation.exportImage; - } else { - L.DistortableImage.group_action_map.e = 'runExporter'; - tooltip = overlay.options.translation.exportImages; - } - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'get_app', - tooltip: tooltip - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - if (edit instanceof L.DistortableImage.Edit) { - edit._getExport(); - return; - } - - // Make sure that addHooks is executed only once, event listeners will handle the rest - if (this.isHooksExecuted) { - return; - } else { - this.isHooksExecuted = true; - } - var exportTool = this._link.parentElement; - this.mouseEnterHandler = this.handleMouseEnter.bind(this); - this.mouseLeaveHandler = this.handleMouseLeave.bind(this); - L.DomEvent.on(exportTool, 'click', function () { - if (!this.isExporting) { - this.isExporting = true; - this.renderExportIcon(); - setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100); - edit.runExporter().then(function () { - this.resetState(); - this.detachMouseEventListeners(exportTool); - }.bind(this)); - } else { - // Clicking on the export icon after export has started will be ignored - if (this.mouseLeaveSkip) { - return; - } - this.resetState(); - this.detachMouseEventListeners(exportTool); - edit.cancelExport(); - } - }, this); - }, - resetState: function resetState() { - this.renderDownloadIcon(); - this.isExporting = false; - this.mouseLeaveSkip = true; - }, - attachMouseEventListeners: function attachMouseEventListeners(element) { - element.addEventListener('mouseenter', this.mouseEnterHandler); - element.addEventListener('mouseleave', this.mouseLeaveHandler); - }, - detachMouseEventListeners: function detachMouseEventListeners(element) { - element.removeEventListener('mouseenter', this.mouseEnterHandler); - element.removeEventListener('mouseleave', this.mouseLeaveHandler); - }, - handleMouseEnter: function handleMouseEnter() { - this.renderCancelIcon(); - }, - handleMouseLeave: function handleMouseLeave() { - if (this.mouseLeaveSkip) { - this.mouseLeaveSkip = false; - } else { - this.renderExportIcon(); - } - }, - renderDownloadIcon: function renderDownloadIcon() { - L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner'); - L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); - L.DomUtil.removeClass(this._link.firstChild, 'loader'); - }, - renderExportIcon: function renderExportIcon() { - L.IconUtil.toggleXlink(this._link, 'spinner'); - L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); - L.IconUtil.addClassToSvg(this._link, 'loader'); - }, - renderCancelIcon: function renderCancelIcon() { - L.IconUtil.toggleXlink(this._link, 'cancel'); - L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...'); - L.DomUtil.removeClass(this._link.firstChild, 'loader'); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/FreeRotateAction.js": -/*!**********************************************!*\ - !*** ./src/edit/actions/FreeRotateAction.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'crop_rotate', - tooltip: overlay.options.translation.freeRotateImage, - className: 'freeRotate' - }; - L.DistortableImage.action_map.f = '_freeRotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - edit._freeRotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/GeolocateAction.js": -/*!*********************************************!*\ - !*** ./src/edit/actions/GeolocateAction.js ***! - \*********************************************/ -/***/ (function() { - -L.GeolocateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'explore', - tooltip: overlay.options.translation.geolocateImage, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var image = this._overlay.getElement(); - EXIF.getData(image, L.EXIF(image)); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/LockAction.js": -/*!****************************************!*\ - !*** ./src/edit/actions/LockAction.js ***! - \****************************************/ -/***/ (function() { - -L.LockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - if (edit instanceof L.DistortableImage.Edit) { - L.DistortableImage.action_map.u = '_unlock'; - L.DistortableImage.action_map.l = '_lock'; - tooltip = overlay.options.translation.lockMode; - use = edit.isMode('lock') ? 'lock' : 'unlock'; - } else { - L.DistortableImage.group_action_map.l = '_lockGroup'; - tooltip = overlay.options.translation.lockImages; - use = 'lock'; - } - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: 'lock' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - if (edit instanceof L.DistortableImage.Edit) { - edit._toggleLockMode(); - } else { - edit._lockGroup(); - } - } -}); - -/***/ }), - -/***/ "./src/edit/actions/OpacitiesAction.js": -/*!*********************************************!*\ - !*** ./src/edit/actions/OpacitiesAction.js ***! - \*********************************************/ -/***/ (function() { - -var opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. - -// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers. -var subtoolbarCss = new CSSStyleSheet(); -subtoolbarCss.replaceSync(".leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n "); -subtoolbarCss.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"); -document.adoptedStyleSheets = [subtoolbarCss]; -opacities = opacities.map(function (o) { - isNaN(o) || o > 100 ? o = 100 : o; - o < 0 ? o = 0 : o; - return L.EditAction.extend({ - options: { - toolbarIcon: { - html: o, - tooltip: 'Opacity ' + o + '%', - className: 'leaflet-toolbar-icon-vertical', - style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);' - } - }, - addHooks: function addHooks() { - this._overlay.editing._setOpacities(o / 100); - } - }); -}); -L.OpacitiesToolbar2 = L.Toolbar2.extend({ - options: { - className: '', - filter: function filter() { - return true; - }, - actions: [], - style: "translate(-1px, -".concat((opacities.length + 1) * 30, "px)") - }, - appendToContainer: function appendToContainer(container) { - var baseClass = this.constructor.baseClass + '-' + this._calculateDepth(); - var className = baseClass + ' ' + this.options.className; - var Action; - var action; - var i; - var j; - var l; - var m; - this._container = container; - this._ul = L.DomUtil.create('ul', className, container); - this._ul.style.transform = this.options.style ? this.options.style : ''; - - // Ensure that clicks, drags, etc. don't bubble up to the map. - // These are the map events that the L.Draw.Polyline handler listens for. - // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but - // if only 'mouseup' is silenced, then the map gets stuck in a halfway - // state because it receives a 'mousedown' event and is waiting for the - // corresponding 'mouseup' event. - this._disabledEvents = ['click', 'mousemove', 'dblclick', 'mousedown', 'mouseup', 'touchstart']; - for (j = 0, m = this._disabledEvents.length; j < m; j++) { - L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation); - } - - /* Instantiate each toolbar action and add its corresponding toolbar icon. */ - for (i = 0, l = this.options.actions.length; i < l; i++) { - Action = this._getActionConstructor(this.options.actions[i]); - action = new Action(); - action._createIcon(this, this._ul, this._arguments); - } - } -}); -L.OpacitiesAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'opacities', - tooltip: 'Set custom opacity', - className: mode === 'lock' ? 'disabled' : '' - }; - options.subToolbar = new L.OpacitiesToolbar2({ - actions: opacities - }); - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var _this = this; - var link = this._link; - if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) { - L.DomUtil.removeClass(link, 'subtoolbar_enabled'); - setTimeout(function () { - _this.options.subToolbar._hide(); - }, 100); - } else { - L.DomUtil.addClass(link, 'subtoolbar_enabled'); - } - ; - L.IconUtil.toggleXlink(link, 'opacities', 'cancel'); - L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel'); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/OpacityAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/OpacityAction.js ***! - \*******************************************/ -/***/ (function() { - -L.OpacityAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var mode = edit._mode; - var use; - var tooltip; - if (edit._transparent) { - use = 'opacity_empty'; - tooltip = overlay.options.translation.makeImageOpaque; - } else { - use = 'opacity'; - tooltip = overlay.options.translation.makeImageTransparent; - } - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - var link = this._link; - L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); - L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); - edit._toggleOpacity(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RestoreAction.js": -/*!*******************************************!*\ - !*** ./src/edit/actions/RestoreAction.js ***! - \*******************************************/ -/***/ (function() { - -L.RestoreAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var mode = L.Utils.getNestedVal(overlay, 'editing', '_mode'); - var edited = overlay.edited; - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'restore', - tooltip: overlay.options.translation.restoreImage, - className: edited && mode !== 'lock' ? '' : 'disabled' - }; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var ov = this._overlay; - L.DomEvent.on(ov, { - edit: this._enableAction, - restore: this._disableAction - }, this); - ov.restore(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/RotateAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/RotateAction.js ***! - \******************************************/ -/***/ (function() { - -L.RotateAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'rotate', - tooltip: overlay.options.translation.rotateImage, - className: 'rotate' - }; - L.DistortableImage.action_map.r = '_rotateMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - edit._rotateMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/ScaleAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/ScaleAction.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'scale', - tooltip: overlay.options.translation.scaleImage, - className: 'scale' - }; - L.DistortableImage.action_map.s = '_scaleMode'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - edit._scaleMode(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/StackAction.js": -/*!*****************************************!*\ - !*** ./src/edit/actions/StackAction.js ***! - \*****************************************/ -/***/ (function() { - -L.StackAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - var edit = overlay.editing; - var use; - var tooltip; - if (edit._toggledImage) { - use = 'flip_to_back'; - tooltip = overlay.options.translation.stackToFront; - } else { - use = 'flip_to_front'; - tooltip = overlay.options.translation.stackToBack; - } - options = options || {}; - options.toolbarIcon = { - svg: true, - html: use, - tooltip: tooltip, - className: edit._mode === 'lock' ? 'disabled' : '' - }; - L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp'; - L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); - L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); - edit._toggleOrder(); - } -}); - -/***/ }), - -/***/ "./src/edit/actions/UnlockAction.js": -/*!******************************************!*\ - !*** ./src/edit/actions/UnlockAction.js ***! - \******************************************/ -/***/ (function() { - -L.UnlockAction = L.EditAction.extend({ - initialize: function initialize(map, overlay, options) { - options = options || {}; - options.toolbarIcon = { - svg: true, - html: 'unlock', - tooltip: overlay.options.translation.unlockImages - }; - L.DistortableImage.group_action_map.u = '_unlockGroup'; - L.EditAction.prototype.initialize.call(this, map, overlay, options); - }, - addHooks: function addHooks() { - var edit = this._overlay.editing; - edit._unlockGroup(); - } -}); - -/***/ }), - -/***/ "./src/edit/getEXIFdata.js": -/*!*********************************!*\ - !*** ./src/edit/getEXIFdata.js ***! - \*********************************/ -/***/ (function() { - -/* eslint-disable no-unused-vars */ -L.EXIF = function getEXIFdata(img) { - if (Object.keys(EXIF.getAllTags(img)).length !== 0) { - console.log(EXIF.getAllTags(img)); - var GPS = EXIF.getAllTags(img); - var altitude; - - /* If the lat/lng is available. */ - if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { - // sadly, encoded in [degrees,minutes,seconds] - // primitive value = GPS.GPSLatitude[x].numerator - var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; - var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; - if (GPS.GPSLatitudeRef !== 'N') { - lat = lat * -1; - } - if (GPS.GPSLongitudeRef === 'W') { - lng = lng * -1; - } - } - - // Attempt to use GPS compass heading; will require - // some trig to calc corner points, which you can find below: - - var angle = 0; - // "T" refers to "True north", so -90. - if (GPS.GPSImgDirectionRef === 'T') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); - // "M" refers to "Magnetic north" - } else if (GPS.GPSImgDirectionRef === 'M') { - angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); - } else { - console.log('No compass data found'); - } - console.log('Orientation:', GPS.Orientation); - - /* If there is orientation data -- i.e. landscape/portrait etc */ - if (GPS.Orientation === 6) { - // CCW - angle += Math.PI / 180 * -90; - } else if (GPS.Orientation === 8) { - // CW - angle += Math.PI / 180 * 90; - } else if (GPS.Orientation === 3) { - // 180 - angle += Math.PI / 180 * 180; - } - - /* If there is altitude data */ - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - // Attempt to use GPS altitude: - // (may eventually need to find EXIF field of view for correction) - if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { - altitude = GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator + GPS.GPSAltitudeRef; - } else { - altitude = 0; // none - } - } - } else { - alert('EXIF initialized. Press again to view data in console.'); - } -}; - -/***/ }), - -/***/ "./src/edit/handles/DistortHandle.js": -/*!*******************************************!*\ - !*** ./src/edit/handles/DistortHandle.js ***! - \*******************************************/ -/***/ (function() { - -L.DistortHandle = L.EditHandle.extend({ - options: { - TYPE: 'distort', - icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - overlay.setCorner(this._corner, this.getLatLng()); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); -L.distortHandle = function (overlay, idx, options) { - return new L.DistortHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/DragHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/DragHandle.js ***! - \****************************************/ -/***/ (function() { - -L.DragHandle = L.EditHandle.extend({ - options: { - TYPE: 'drag', - icon: L.icon({ - // eslint-disable-next-line max-len - iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - overlay.dragBy(formerLatLng, newLatLng); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); -L.dragHandle = function (overlay, idx, options) { - return new L.DragHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/EditHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/EditHandle.js ***! - \****************************************/ -/***/ (function() { - -L.EditHandle = L.Marker.extend({ - initialize: function initialize(overlay, corner, options) { - var latlng = overlay.getCorner(corner); - L.setOptions(this, options); - this._handled = overlay; - this._corner = corner; - var markerOptions = { - draggable: true, - zIndexOffset: 10 - }; - if (options && options.hasOwnProperty('draggable')) { - markerOptions.draggable = options.draggable; - } - L.Marker.prototype.initialize.call(this, latlng, markerOptions); - }, - onAdd: function onAdd(map) { - L.Marker.prototype.onAdd.call(this, map); - this._bindListeners(); - this.updateHandle(); - }, - onRemove: function onRemove(map) { - this._unbindListeners(); - L.Marker.prototype.onRemove.call(this, map); - }, - _onHandleDragStart: function _onHandleDragStart() { - this._handled.fire('editstart'); - }, - _onHandleDragEnd: function _onHandleDragEnd() { - this._fireEdit(); - }, - _fireEdit: function _fireEdit() { - this._handled.edited = true; - this._handled.fire('edit'); - }, - _bindListeners: function _bindListeners() { - this.on({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - this._handled._map.on('zoomend', this.updateHandle, this); - this._handled.on('update', this.updateHandle, this); - }, - _unbindListeners: function _unbindListeners() { - this.off({ - contextmenu: L.DomEvent.stop, - dragstart: this._onHandleDragStart, - drag: this._onHandleDrag, - dragend: this._onHandleDragEnd - }, this); - this._handled._map.off('zoomend', this.updateHandle, this); - this._handled.off('update', this.updateHandle, this); - }, - /* Takes two latlngs and calculates the scaling difference. */_calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - var formerRadiusSquared = this._d2(centerPoint, formerPoint); - var newRadiusSquared = this._d2(centerPoint, newPoint); - return Math.sqrt(newRadiusSquared / formerRadiusSquared); - }, - /* Distance between two points in cartesian space, squared (distance formula). */_d2: function _d2(a, b) { - var dx = a.x - b.x; - var dy = a.y - b.y; - return Math.pow(dx, 2) + Math.pow(dy, 2); - }, - /* Takes two latlngs and calculates the angle between them. */calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { - var overlay = this._handled; - var map = overlay._map; - var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); - var formerPoint = map.latLngToLayerPoint(latlngA); - var newPoint = map.latLngToLayerPoint(latlngB); - var initialAngle = Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x); - var newAngle = Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x); - return newAngle - initialAngle; - } -}); - -/***/ }), - -/***/ "./src/edit/handles/FreeRotateHandle.js": -/*!**********************************************!*\ - !*** ./src/edit/handles/FreeRotateHandle.js ***! - \**********************************************/ -/***/ (function() { - -L.FreeRotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'freeRotate', - icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - if (angle !== 0) { - overlay.rotateBy(angle, 'rad'); - } - var edgeMinWidth = overlay.edgeMinWidth; - if (!edgeMinWidth) { - edgeMinWidth = 50; - } /* just in case */ - - var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); -L.freeRotateHandle = function (overlay, idx, options) { - return new L.FreeRotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/LockHandle.js": -/*!****************************************!*\ - !*** ./src/edit/handles/LockHandle.js ***! - \****************************************/ -/***/ (function() { - -L.LockHandle = L.EditHandle.extend({ - options: { - TYPE: 'lock', - interactive: false, - icon: L.icon({ - // eslint-disable-next-line max-len - iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - onRemove: function onRemove(map) { - this.unbindTooltip(); - L.EditHandle.prototype.onRemove.call(this, map); - }, - _bindListeners: function _bindListeners() { - var icon = this.getElement(); - L.EditHandle.prototype._bindListeners.call(this); - L.DomEvent.on(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this); - }, - _unbindListeners: function _unbindListeners() { - var icon = this.getElement(); - L.EditHandle.prototype._bindListeners.call(this); - L.DomEvent.off(icon, { - mousedown: this._tooltipOn, - mouseup: this._tooltipOff - }, this); - L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); - }, - /* cannot be dragged */_onHandleDrag: function _onHandleDrag() {}, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - }, - _tooltipOn: function _tooltipOn(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - if (e.shiftKey) { - return; - } - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - var handlesArr = edit._lockHandles; - this._timer = setTimeout(L.bind(function () { - if (this._timeout) { - clearTimeout(this._timeout); - } - if (!this.getTooltip()) { - this.bindTooltip('Locked!', { - permanent: true - }); - } else { - handlesArr.eachLayer(function (handle) { - if (this !== handle) { - handle.closeTooltip(); - } - }); - } - this.openTooltip(); - }, this), 500); - }, - _tooltipOff: function _tooltipOff(e) { - var eP = this._handled.parentGroup; - var edit = eP ? eP.editing : this._handled.editing; - if (e.shiftKey) { - return; - } - if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { - return; - } - var handlesArr = edit._lockHandles; - if (e.currentTarget === document) { - handlesArr.eachLayer(function (handle) { - handle.closeTooltip(); - }); - } - if (this._timer) { - clearTimeout(this._timer); - } - this._timeout = setTimeout(L.bind(function () { - this.closeTooltip(); - }, this), 400); - } -}); -L.lockHandle = function (overlay, idx, options) { - return new L.LockHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/RotateHandle.js": -/*!******************************************!*\ - !*** ./src/edit/handles/RotateHandle.js ***! - \******************************************/ -/***/ (function() { - -L.RotateHandle = L.EditHandle.extend({ - options: { - TYPE: 'rotate', - icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var angle = this.calculateAngleDelta(formerLatLng, newLatLng); - - /* - * running rotation logic even for an angle delta of 0 - * prevents a small, occasional marker flicker - */ - overlay.rotateBy(angle, 'rad'); - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); -L.rotateHandle = function (overlay, idx, options) { - return new L.RotateHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/handles/ScaleHandle.js": -/*!*****************************************!*\ - !*** ./src/edit/handles/ScaleHandle.js ***! - \*****************************************/ -/***/ (function() { - -L.ScaleHandle = L.EditHandle.extend({ - options: { - TYPE: 'scale', - icon: L.icon({ - iconUrl: - // eslint-disable-next-line max-len - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', - iconSize: [32, 32], - iconAnchor: [16, 16] - }) - }, - _onHandleDrag: function _onHandleDrag() { - var overlay = this._handled; - var map = overlay._map; - var edgeMinWidth = overlay.edgeMinWidth; - var formerLatLng = overlay.getCorner(this._corner); - var newLatLng = this.getLatLng(); - var scale = this._calculateScalingFactor(formerLatLng, newLatLng); - - /* - * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; - * this enables preventing scaling to zero, but we might also add an overall scale limit - */ - - if (!edgeMinWidth) { - edgeMinWidth = 50; - } /* just in case */ - var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); - var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); - var w = Math.abs(corner1.x - corner2.x); - var h = Math.abs(corner1.y - corner2.y); - var distance = Math.sqrt(w * w + h * h); - if (distance > edgeMinWidth || scale > 1) { - overlay.scaleBy(scale); - /* - * running scale logic even for a scale ratio of 1 - * prevents a small, occasional marker flicker - */ - } else { - overlay.scaleBy(1); - } - }, - updateHandle: function updateHandle() { - this.setLatLng(this._handled.getCorner(this._corner)); - } -}); -L.scaleHandle = function (overlay, idx, options) { - return new L.ScaleHandle(overlay, idx, options); -}; - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.ControlBar.js": -/*!**********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.ControlBar.js ***! - \**********************************************************/ -/***/ (function() { - -L.distortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.group_action_map = {}; -L.DistortableImage.ControlBar = L.Toolbar2.Control.extend({}); -L.distortableImage.controlBar = function (options) { - return new L.DistortableImage.ControlBar(options); -}; - -/** addInitHooks run before onAdd */ -L.DistortableCollection.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; - - // all possible modes - L.DistortableCollection.Edit.MODES = { - lock: L.LockAction, - unlock: L.UnlockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableCollection.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/edit/toolbars/DistortableImage.PopupBar.js": -/*!********************************************************!*\ - !*** ./src/edit/toolbars/DistortableImage.PopupBar.js ***! - \********************************************************/ -/***/ (function() { - -L.DistortableImage = L.DistortableImage || {}; -L.distortableImage = L.DistortableImage; -L.DistortableImage.action_map = {}; -L.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({ - options: { - anchor: [0, -10] - }, - initialize: function initialize(latlng, options) { - L.setOptions(this, options); - L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options); - }, - addHooks: function addHooks(map, ov) { - this.map = map; - this.ov = ov; - }, - tools: function tools() { - if (this._ul) { - return this._ul.children; - } - }, - clickTool: function clickTool(name) { - var tools = this.tools(); - for (var i = 0; i < tools.length; i++) { - var tool = tools.item(i).children[0]; - if (L.DomUtil.hasClass(tool, name)) { - tool.click(); - return tool; - } - } - return false; - } -}); -L.distortableImage.popupBar = function (latlng, options) { - return new L.DistortableImage.PopupBar(latlng, options); -}; -L.DistortableImageOverlay.addInitHook(function () { - /** Default actions */ - this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction]; - - // all possible modes - L.DistortableImage.Edit.MODES = { - drag: L.DragAction, - scale: L.ScaleAction, - distort: L.DistortAction, - rotate: L.RotateAction, - freeRotate: L.FreeRotateAction, - lock: L.LockAction - }; - var a = this.options.actions ? this.options.actions : this.ACTIONS; - this.editing = L.distortableImage.edit(this, { - actions: a - }); -}); - -/***/ }), - -/***/ "./src/iconsets/IconSet.js": -/*!*********************************!*\ - !*** ./src/iconsets/IconSet.js ***! - \*********************************/ -/***/ (function() { - -/* this is the baseclass other IconSets inherit from, -* we don't use it directly */ -L.IconSet = L.Class.extend({ - _svg: '', - _symbols: '', - render: function render() { - this.addSymbols(this._symbols); - return this._svg; - }, - addSymbols: function addSymbols(symbols) { - this._svg += symbols; - } -}); - -/***/ }), - -/***/ "./src/iconsets/KeymapperIconSet.js": -/*!******************************************!*\ - !*** ./src/iconsets/KeymapperIconSet.js ***! - \******************************************/ -/***/ (function() { - -L.KeymapperIconSet = L.IconSet.extend({ - _symbols: - // eslint-disable-next-line max-len - '' -}); - -/***/ }), - -/***/ "./src/iconsets/ToolbarIconSet.js": -/*!****************************************!*\ - !*** ./src/iconsets/ToolbarIconSet.js ***! - \****************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.ToolbarIconSet = L.IconSet.extend({ - _symbols: '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' -}); - -/***/ }), - -/***/ "./src/mapmixins/BoxCollector.js": -/*!***************************************!*\ - !*** ./src/mapmixins/BoxCollector.js ***! - \***************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - boxCollector: true, - boxZoom: false -}); - -/** - * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with - * our `L.DistortableCollection` class instead of a zoom box. - * */ -L.Map.BoxCollector = L.Map.BoxZoom.extend({ - initialize: function initialize(map) { - this._map = map; - this._container = map._container; - this._pane = map._panes.overlayPane; - this._resetStateTimeout = 0; - map.on('unload', this._destroy, this); - }, - addHooks: function addHooks() { - L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this); - }, - removeHooks: function removeHooks() { - L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this); - }, - moved: function moved() { - return this._moved; - }, - _destroy: function _destroy() { - L.DomUtil.remove(this._pane); - delete this._pane; - }, - _resetState: function _resetState() { - this._resetStateTimeout = 0; - this._moved = false; - }, - _clearDeferredResetState: function _clearDeferredResetState() { - if (this._resetStateTimeout !== 0) { - clearTimeout(this._resetStateTimeout); - this._resetStateTimeout = 0; - } - }, - _onMouseDown: function _onMouseDown(e) { - if (!e.shiftKey || e.which !== 1 && e.button !== 1) { - return false; - } - - // Clear the deferred resetState if it hasn't executed yet, otherwise it - // will interrupt the interaction and orphan a box element in the container. - this._clearDeferredResetState(); - this._resetState(); - L.DomUtil.disableTextSelection(); - L.DomUtil.disableImageDrag(); - this._startPoint = this._map.mouseEventToContainerPoint(e); - L.DomEvent.on(document, { - contextmenu: L.DomEvent.stop, - mousemove: this._onMouseMove, - mouseup: this._onMouseUp - }, this); - }, - _onMouseMove: function _onMouseMove(e) { - if (!this._moved) { - this._moved = true; - this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container); - L.DomUtil.addClass(this._container, 'leaflet-crosshair'); - this._map.fire('boxzoomstart'); - } - this._point = this._map.mouseEventToContainerPoint(e); - this._bounds = L.bounds(this._startPoint, this._point); - var size = this._bounds.getSize(); - L.DomUtil.setPosition(this._box, this._bounds.min); - this._box.style.width = size.x + 'px'; - this._box.style.height = size.y + 'px'; - }, - _finish: function _finish() { - if (this._moved) { - L.DomUtil.remove(this._box); - L.DomUtil.removeClass(this._container, 'leaflet-crosshair'); - } - L.DomUtil.enableTextSelection(); - L.DomUtil.enableImageDrag(); - L.DomEvent.off(document, { - contextmenu: L.DomEvent.stop, - mousemove: this._onMouseMove, - mouseup: this._onMouseUp - }, this); - }, - _onMouseUp: function _onMouseUp(e) { - if (e.which !== 1 && e.button !== 1) { - return; - } - this._finish(); - if (!this._moved) { - return; - } - - // Postpone to next JS tick so internal click event handling - // still see it as "moved". - this._clearDeferredResetState(); - this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); - var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); - var zoom = this._map.getZoom(); - var center = this._map.getCenter(); - - // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 - bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); - this._map.fire('boxcollectend', { - boxCollectBounds: bounds - }); - } -}); -L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickLabels.js": -/*!********************************************!*\ - !*** ./src/mapmixins/DoubleClickLabels.js ***! - \********************************************/ -/***/ (function() { - -L.Map.mergeOptions({ - doubleClickLabels: true -}); - -/** - * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` - * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. - */ -L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ - enable: function enable() { - var map = this._map; - if (this._enabled) { - return this; - } - - // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. - if (map.doubleClickZoom.enabled()) { - map.doubleClickZoom.disable(); - } - this._map.fire('singleclickon'); - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; - - // prevents deselection in case of box selector - if (oe && oe.shiftKey) { - return; - } - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - map.fire('dblclick'); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick() { - var map = this._map; - var labels = map._labels; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - if (!labels) { - return; - } - if (labels.options.opacity === 1) { - labels.options.opacity = 0; - labels.setOpacity(0); - } else { - labels.options.opacity = 1; - labels.setOpacity(1); - } - } -}); -L.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels); - -/***/ }), - -/***/ "./src/mapmixins/DoubleClickZoom.js": -/*!******************************************!*\ - !*** ./src/mapmixins/DoubleClickZoom.js ***! - \******************************************/ -/***/ (function() { - -/** - * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it - * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`. - * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler - */ -L.Map.DoubleClickZoom.include({ - addHooks: function addHooks() { - this._map.on({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - removeHooks: function removeHooks() { - this._map.off({ - click: this._fireIfSingle, - dblclick: this._onDoubleClick - }, this); - }, - enable: function enable() { - if (this._enabled) { - return this; - } - - // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first - if (this._map.doubleClickLabels) { - if (this._map.doubleClickLabels.enabled()) { - return this; - } - } - - // signify to collection/instance classes to turn on 'singleclick' listeners - this._map.fire('singleclickon'); - this._enabled = true; - this.addHooks(); - return this; - }, - disable: function disable() { - if (!this._enabled) { - return this; - } - - // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. - this._map.fire('singleclickoff'); - this._enabled = false; - this.removeHooks(); - return this; - }, - _fireIfSingle: function _fireIfSingle(e) { - var map = this._map; - var oe = e.originalEvent; - - // prevents deselection in case of box selector - if (oe && oe.shiftKey) { - return; - } - map._clicked += 1; - this._map._clickTimeout = setTimeout(function () { - if (map._clicked === 1) { - map._clicked = 0; - map.fire('singleclick', { - type: 'singleclick' - }); - } else { - // manually fire doubleclick event only for touch screens that don't natively fire it - if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { - /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the - passed "e" (for now). To generate a 'real' DOM event that will have all of its corresponding core - properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */ - map._fireDOMEvent(oe, 'dblclick', [map]); - } - } - }, 250); - }, - _onDoubleClick: function _onDoubleClick(e) { - var map = this._map; - var oe = e.originalEvent; - setTimeout(function () { - map._clicked = 0; - clearTimeout(map._clickTimeout); - }, 0); - if (!oe) { - return false; - } - var oldZoom = map.getZoom(); - var delta = map.options.zoomDelta; - var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; - if (map.options.doubleClickZoom === 'center') { - map.setZoom(zoom); - } else { - map.setZoomAround(e.containerPoint, zoom); - } - } -}); - -/***/ }), - -/***/ "./src/mapmixins/MapMixins.js": -/*!************************************!*\ - !*** ./src/mapmixins/MapMixins.js ***! - \************************************/ -/***/ (function() { - -/* eslint-disable max-len */ -L.Map.include({ - _clicked: 0, - addGoogleMutant: function addGoogleMutant(opts) { - var url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}'; - opts = this.mutantOptions = L.extend({ - mutantOpacity: 0.8, - maxZoom: 24, - maxNativeZoom: 20, - minZoom: 0, - labels: true, - labelOpacity: 1, - doubleClickLabels: true - }, opts); - if (!opts.labels) { - this.mutantOptions = L.extend(this.mutantOptions, { - labelOpacity: opts.labels ? 1 : undefined, - doubleClickLabels: opts.labels ? true : undefined - }); - } - this._googleMutant = L.tileLayer(url, { - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - opacity: opts.mutantOpacity - }).addTo(this); - if (opts.labels) { - this._addLabels(opts); - } - // shouldn't have this handler at all if there are no labels to toggle - else { - this.doubleClickLabels = undefined; - } - return this; - }, - _addLabels: function _addLabels(opts) { - var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; - if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { - opts.labelOpacity = 1; - } - this._labels = L.tileLayer(url, { - attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', - subdomains: 'abcd', - interactive: false, - opacity: opts.labelOpacity, - maxZoom: opts.maxZoom, - maxNativeZoom: opts.maxNativeZoom, - minZoom: opts.minZoom, - ext: 'png' - }).addTo(this); - if (this.mutantOptions.doubleClickLabels) { - this.doubleClickLabels.enable(); - } - return this; - } -}); -// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead -// during initialization -L.Map.addInitHook(function () { - this.doubleClickLabels.disable(); - this.doubleClickZoom.enable(); -}); - -/***/ }), - -/***/ "./src/util/DomUtil.js": -/*!*****************************!*\ - !*** ./src/util/DomUtil.js ***! - \*****************************/ -/***/ (function() { - -L.DomUtil = L.extend(L.DomUtil, { - initTranslation: function initTranslation(obj) { - this.translation = obj; - }, - getMatrixString: function getMatrixString(m) { - var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; - - /* - * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, - * which act as the identity on the z-axis. - * See: - * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry - */ - var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; - var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; - if (!is3d) { - console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); - } - return str; - }, - toggleClass: function toggleClass(el, className) { - var c = className; - return this.hasClass(el, c) ? this.removeClass(el, c) : this.addClass(el, c); - }, - confirmDelete: function confirmDelete() { - return window.confirm(this.translation.confirmImageDelete); - }, - confirmDeletes: function confirmDeletes(n) { - if (n === 1) { - return this.confirmDelete(); - } - var translation = this.translation.confirmImagesDeletes; - var warningMsg = ''; - if (typeof translation === 'function') { - warningMsg = translation(n); - } else { - warningMsg = translation; - } - return window.confirm(warningMsg); - } -}); - -/***/ }), - -/***/ "./src/util/IconUtil.js": -/*!******************************!*\ - !*** ./src/util/IconUtil.js ***! - \******************************/ -/***/ (function() { - -L.IconUtil = { - /* creates an svg elemenet with built in accessibility properties - * and standardized classes for styling, takes in the fragment - * identifier (id) of the symbol to reference. note for symplicity - * we allow providing the icon target with or without the '#' prefix - */ - create: function create(ref) { - if (/^#/.test(ref)) { - ref = ref.replace(/^#/, ''); - } - return '' + '' + ''; - }, - addClassToSvg: function addClassToSvg(container, loader) { - var svg = container.querySelector('svg'); - if (svg) { - L.DomUtil.addClass(svg, loader); - } - }, - // finds the use element and toggles its icon reference - toggleXlink: function toggleXlink(container, ref1, ref2) { - if (!/^#/.test(ref1)) { - ref1 = '#' + ref1; - } - if (!/^#/.test(ref2)) { - ref2 = '#' + ref2; - } - var use = container.querySelector('use'); - if (use) { - var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; - use.setAttribute('xlink:href', toggled); - return toggled; - } - return false; - }, - toggleTitle: function toggleTitle(container, title1, title2) { - var toggled = container.getAttribute('title') === title1 ? title2 : title1; - container.setAttribute('title', toggled); - if (container.hasAttribute('aria-label')) { - container.setAttribute('aria-label', toggled); - } - return toggled; - } -}; - -/***/ }), - -/***/ "./src/util/ImageUtil.js": -/*!*******************************!*\ - !*** ./src/util/ImageUtil.js ***! - \*******************************/ -/***/ (function() { - -L.ImageUtil = { - getCmPerPixel: function getCmPerPixel(overlay) { - var map = overlay._map; - var dist = map.latLngToLayerPoint(overlay.getCorner(0)).distanceTo(map.latLngToLayerPoint(overlay.getCorner(1))); - return dist * 100 / overlay.getElement().width; - } -}; - -/***/ }), - -/***/ "./src/util/MatrixUtil.js": -/*!********************************!*\ - !*** ./src/util/MatrixUtil.js ***! - \********************************/ -/***/ (function() { - -L.MatrixUtil = { - // Compute the adjugate of m - adj: function adj(m) { - return [m[4] * m[8] - m[5] * m[7], m[2] * m[7] - m[1] * m[8], m[1] * m[5] - m[2] * m[4], m[5] * m[6] - m[3] * m[8], m[0] * m[8] - m[2] * m[6], m[2] * m[3] - m[0] * m[5], m[3] * m[7] - m[4] * m[6], m[1] * m[6] - m[0] * m[7], m[0] * m[4] - m[1] * m[3]]; - }, - // multiply two 3*3 matrices - multmm: function multmm(a, b) { - var c = []; - var i; - for (i = 0; i < 3; i++) { - for (var j = 0; j < 3; j++) { - var cij = 0; - for (var k = 0; k < 3; k++) { - cij += a[3 * i + k] * b[3 * k + j]; - } - c[3 * i + j] = cij; - } - } - return c; - }, - // multiply a 3*3 matrix and a 3-vector - multmv: function multmv(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - }, - // multiply a scalar and a 3*3 matrix - multsm: function multsm(s, m) { - var matrix = []; - for (var i = 0, l = m.length; i < l; i++) { - matrix.push(s * m[i]); - } - return matrix; - }, - basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { - var m = [x1, x2, x3, y1, y2, y3, 1, 1, 1]; - var v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]); - return L.MatrixUtil.multmm(m, [v[0], 0, 0, 0, v[1], 0, 0, 0, v[2]]); - }, - project: function project(m, x, y) { - var v = L.MatrixUtil.multmv(m, [x, y, 1]); - return [v[0] / v[2], v[1] / v[2]]; - }, - general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { - var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); - var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); - var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); - - // Normalize to the unique matrix with m[8] == 1. - // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ - - return L.MatrixUtil.multsm(1 / m[8], m); - } -}; - -/***/ }), - -/***/ "./src/util/TrigUtil.js": -/*!******************************!*\ - !*** ./src/util/TrigUtil.js ***! - \******************************/ -/***/ (function() { - -L.TrigUtil = { - calcAngle: function calcAngle(x, y) { - var unit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'deg'; - return unit === 'deg' ? this.radiansToDegrees(Math.atan2(y, x)) : Math.atan2(y, x); - }, - radiansToDegrees: function radiansToDegrees(angle) { - return angle * 180 / Math.PI; - }, - degreesToRadians: function degreesToRadians(angle) { - return angle * Math.PI / 180; - } -}; - -/***/ }), - -/***/ "./src/util/Utils.js": -/*!***************************!*\ - !*** ./src/util/Utils.js ***! - \***************************/ -/***/ (function() { - -L.Utils = { - initTranslation: function initTranslation() { - var translation = { - deleteImage: 'Delete Image', - deleteImages: 'Delete Images', - distortImage: 'Distort Image', - dragImage: 'Drag Image', - exportImage: 'Export Image', - exportImages: 'Export Images', - removeBorder: 'Remove Border', - addBorder: 'Add Border', - freeRotateImage: 'Free rotate Image', - geolocateImage: 'Geolocate Image', - lockMode: 'Lock Mode', - lockImages: 'Lock Images', - makeImageOpaque: 'Make Image Opaque', - makeImageTransparent: 'Make Image Transparent', - restoreImage: 'Restore Natural Image', - rotateImage: 'Rotate Image', - scaleImage: 'Scale Image', - stackToFront: 'Stack to Front', - stackToBack: 'Stack to Back', - unlockImages: 'Unlock Images', - confirmImageDelete: 'Are you sure? This image will be permanently deleted from the map.', - confirmImagesDeletes: 'Are you sure? These images will be permanently deleted from the map.' - }; - if (!this.options.translation) { - this.options.translation = translation; - } else { - // If the translation for a word is not specified, fallback to English. - for (var key in translation) { - if (!this.options.translation.hasOwnProperty(key)) { - this.options.translation[key] = translation[key]; - } - } - } - L.DomUtil.initTranslation(this.options.translation); - }, - getNestedVal: function getNestedVal(obj, key, nestedKey) { - var dig = [key, nestedKey]; - return dig.reduce(function (obj, k) { - return obj && obj[k]; - }, obj); - } -}; - -/***/ }), - -/***/ "./node_modules/events/events.js": -/*!***************************************!*\ - !*** ./node_modules/events/events.js ***! - \***************************************/ -/***/ (function(module) { - -"use strict"; -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -var R = typeof Reflect === 'object' ? Reflect : null -var ReflectApply = R && typeof R.apply === 'function' - ? R.apply - : function ReflectApply(target, receiver, args) { - return Function.prototype.apply.call(target, receiver, args); - } - -var ReflectOwnKeys -if (R && typeof R.ownKeys === 'function') { - ReflectOwnKeys = R.ownKeys -} else if (Object.getOwnPropertySymbols) { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target) - .concat(Object.getOwnPropertySymbols(target)); - }; -} else { - ReflectOwnKeys = function ReflectOwnKeys(target) { - return Object.getOwnPropertyNames(target); - }; -} - -function ProcessEmitWarning(warning) { - if (console && console.warn) console.warn(warning); -} - -var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { - return value !== value; -} - -function EventEmitter() { - EventEmitter.init.call(this); -} -module.exports = EventEmitter; -module.exports.once = once; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._eventsCount = 0; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -function checkListener(listener) { - if (typeof listener !== 'function') { - throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); - } -} - -Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { - throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); - } - defaultMaxListeners = arg; - } -}); - -EventEmitter.init = function() { - - if (this._events === undefined || - this._events === Object.getPrototypeOf(this)._events) { - this._events = Object.create(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -}; - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { - throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); - } - this._maxListeners = n; - return this; -}; - -function _getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return _getMaxListeners(this); -}; - -EventEmitter.prototype.emit = function emit(type) { - var args = []; - for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); - var doError = (type === 'error'); - - var events = this._events; - if (events !== undefined) - doError = (doError && events.error === undefined); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - var er; - if (args.length > 0) - er = args[0]; - if (er instanceof Error) { - // Note: The comments on the `throw` lines are intentional, they show - // up in Node's output if this results in an unhandled exception. - throw er; // Unhandled 'error' event - } - // At least give some kind of context to the user - var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); - err.context = er; - throw err; // Unhandled 'error' event - } - - var handler = events[type]; - - if (handler === undefined) - return false; - - if (typeof handler === 'function') { - ReflectApply(handler, this, args); - } else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - ReflectApply(listeners[i], this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - checkListener(listener); - - events = target._events; - if (events === undefined) { - events = target._events = Object.create(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener !== undefined) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (existing === undefined) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - // If we've already got an array, just append. - } else if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - - // Check for listener leak - m = _getMaxListeners(target); - if (m > 0 && existing.length > m && !existing.warned) { - existing.warned = true; - // No error code for this since it is a Warning - // eslint-disable-next-line no-restricted-syntax - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' ' + String(type) + ' listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - ProcessEmitWarning(w); - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - if (arguments.length === 0) - return this.listener.call(this.target); - return this.listener.apply(this.target, arguments); - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = onceWrapper.bind(state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - checkListener(listener); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - checkListener(listener); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - checkListener(listener); - - events = this._events; - if (events === undefined) - return this; - - list = events[type]; - if (list === undefined) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else { - spliceOne(list, position); - } - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.off = EventEmitter.prototype.removeListener; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (events === undefined) - return this; - - // not listening for removeListener, no need to emit - if (events.removeListener === undefined) { - if (arguments.length === 0) { - this._events = Object.create(null); - this._eventsCount = 0; - } else if (events[type] !== undefined) { - if (--this._eventsCount === 0) - this._events = Object.create(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = Object.keys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = Object.create(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners !== undefined) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (events === undefined) - return []; - - var evlistener = events[type]; - if (evlistener === undefined) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events !== undefined) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener !== undefined) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; -}; - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function spliceOne(list, index) { - for (; index + 1 < list.length; index++) - list[index] = list[index + 1]; - list.pop(); -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function once(emitter, name) { - return new Promise(function (resolve, reject) { - function errorListener(err) { - emitter.removeListener(name, resolver); - reject(err); - } - - function resolver() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener('error', errorListener); - } - resolve([].slice.call(arguments)); - }; - - eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); - } - }); -} - -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - -function eventTargetAgnosticAddListener(emitter, name, listener, flags) { - if (typeof emitter.on === 'function') { - if (flags.once) { - emitter.once(name, listener); - } else { - emitter.on(name, listener); - } - } else if (typeof emitter.addEventListener === 'function') { - // EventTarget does not have `error` event semantics like Node - // EventEmitters, we do not listen for `error` events here. - emitter.addEventListener(name, function wrapListener(arg) { - // IE does not have builtin `{ once: true }` support so we - // have to do it manually. - if (flags.once) { - emitter.removeEventListener(name, wrapListener); - } - listener(arg); - }); - } else { - throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); - } -} - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/index.js": -/*!*************************************************!*\ - !*** ./node_modules/html-entities/lib/index.js ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -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 })); -var named_references_1 = __webpack_require__(/*! ./named-references */ "./node_modules/html-entities/lib/named-references.js"); -var numeric_unicode_map_1 = __webpack_require__(/*! ./numeric-unicode-map */ "./node_modules/html-entities/lib/numeric-unicode-map.js"); -var surrogate_pairs_1 = __webpack_require__(/*! ./surrogate-pairs */ "./node_modules/html-entities/lib/surrogate-pairs.js"); -var allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 }); -var encodeRegExps = { - specialChars: /[<>'"&]/g, - nonAscii: /(?:[<>'"&\u0080-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - nonAsciiPrintable: /(?:[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, - extensive: /(?:[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g -}; -var defaultEncodeOptions = { - mode: 'specialChars', - level: 'all', - numeric: 'decimal' -}; -/** Encodes all the necessary (specified by `level`) characters in the text */ -function encode(text, _a) { - var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e; - if (!text) { - return ''; - } - var encodeRegExp = encodeRegExps[mode]; - var references = allNamedReferences[level].characters; - var isHex = numeric === 'hexadecimal'; - encodeRegExp.lastIndex = 0; - var _b = encodeRegExp.exec(text); - var _c; - if (_b) { - _c = ''; - var _d = 0; - do { - if (_d !== _b.index) { - _c += text.substring(_d, _b.index); - } - var _e = _b[0]; - var result_1 = references[_e]; - if (!result_1) { - var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0); - result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';'; - } - _c += result_1; - _d = _b.index + _e.length; - } while ((_b = encodeRegExp.exec(text))); - if (_d !== text.length) { - _c += text.substring(_d); - } - } - else { - _c = - text; - } - return _c; -} -exports.encode = encode; -var defaultDecodeOptions = { - scope: 'body', - level: 'all' -}; -var strict = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g; -var attribute = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g; -var baseDecodeRegExps = { - xml: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.xml - }, - html4: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html4 - }, - html5: { - strict: strict, - attribute: attribute, - body: named_references_1.bodyRegExps.html5 - } -}; -var decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 }); -var fromCharCode = String.fromCharCode; -var outOfBoundsChar = fromCharCode(65533); -var defaultDecodeEntityOptions = { - level: 'all' -}; -/** Decodes a single entity */ -function decodeEntity(entity, _a) { - var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b; - if (!entity) { - return ''; - } - var _b = entity; - var decodeEntityLastChar_1 = entity[entity.length - 1]; - if (false) {} - else if (false) {} - else { - var decodeResultByReference_1 = allNamedReferences[level].entities[entity]; - if (decodeResultByReference_1) { - _b = decodeResultByReference_1; - } - else if (entity[0] === '&' && entity[1] === '#') { - var decodeSecondChar_1 = entity[2]; - var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X' - ? parseInt(entity.substr(3), 16) - : parseInt(entity.substr(2)); - _b = - decodeCode_1 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_1 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_1) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1); - } - } - return _b; -} -exports.decodeEntity = decodeEntity; -/** Decodes all entities in the text */ -function decode(text, _a) { - var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b; - if (!text) { - return ''; - } - var decodeRegExp = decodeRegExps[level][scope]; - var references = allNamedReferences[level].entities; - var isAttribute = scope === 'attribute'; - var isStrict = scope === 'strict'; - decodeRegExp.lastIndex = 0; - var replaceMatch_1 = decodeRegExp.exec(text); - var replaceResult_1; - if (replaceMatch_1) { - replaceResult_1 = ''; - var replaceLastIndex_1 = 0; - do { - if (replaceLastIndex_1 !== replaceMatch_1.index) { - replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index); - } - var replaceInput_1 = replaceMatch_1[0]; - var decodeResult_1 = replaceInput_1; - var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1]; - if (isAttribute - && decodeEntityLastChar_2 === '=') { - decodeResult_1 = replaceInput_1; - } - else if (isStrict - && decodeEntityLastChar_2 !== ';') { - decodeResult_1 = replaceInput_1; - } - else { - var decodeResultByReference_2 = references[replaceInput_1]; - if (decodeResultByReference_2) { - decodeResult_1 = decodeResultByReference_2; - } - else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') { - var decodeSecondChar_2 = replaceInput_1[2]; - var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X' - ? parseInt(replaceInput_1.substr(3), 16) - : parseInt(replaceInput_1.substr(2)); - decodeResult_1 = - decodeCode_2 >= 0x10ffff - ? outOfBoundsChar - : decodeCode_2 > 65535 - ? surrogate_pairs_1.fromCodePoint(decodeCode_2) - : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2); - } - } - replaceResult_1 += decodeResult_1; - replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length; - } while ((replaceMatch_1 = decodeRegExp.exec(text))); - if (replaceLastIndex_1 !== text.length) { - replaceResult_1 += text.substring(replaceLastIndex_1); - } - } - else { - replaceResult_1 = - text; - } - return replaceResult_1; -} -exports.decode = decode; - - -/***/ }), - -/***/ "./node_modules/html-entities/lib/named-references.js": -/*!************************************************************!*\ - !*** ./node_modules/html-entities/lib/named-references.js ***! - \************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.bodyRegExps={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{"<":"<",">":">",""":'"',"'":"'","&":"&"},characters:{"<":"<",">":">",'"':""","'":"'","&":"&"}},html4:{entities:{"'":"'"," ":" "," ":" ","¡":"¡","¡":"¡","¢":"¢","¢":"¢","£":"£","£":"£","¤":"¤","¤":"¤","¥":"¥","¥":"¥","¦":"¦","¦":"¦","§":"§","§":"§","¨":"¨","¨":"¨","©":"©","©":"©","ª":"ª","ª":"ª","«":"«","«":"«","¬":"¬","¬":"¬","­":"­","­":"­","®":"®","®":"®","¯":"¯","¯":"¯","°":"°","°":"°","±":"±","±":"±","²":"²","²":"²","³":"³","³":"³","´":"´","´":"´","µ":"µ","µ":"µ","¶":"¶","¶":"¶","·":"·","·":"·","¸":"¸","¸":"¸","¹":"¹","¹":"¹","º":"º","º":"º","»":"»","»":"»","¼":"¼","¼":"¼","½":"½","½":"½","¾":"¾","¾":"¾","¿":"¿","¿":"¿","À":"À","À":"À","Á":"Á","Á":"Á","Â":"Â","Â":"Â","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","Å":"Å","Å":"Å","Æ":"Æ","Æ":"Æ","Ç":"Ç","Ç":"Ç","È":"È","È":"È","É":"É","É":"É","Ê":"Ê","Ê":"Ê","Ë":"Ë","Ë":"Ë","Ì":"Ì","Ì":"Ì","Í":"Í","Í":"Í","Î":"Î","Î":"Î","Ï":"Ï","Ï":"Ï","Ð":"Ð","Ð":"Ð","Ñ":"Ñ","Ñ":"Ñ","Ò":"Ò","Ò":"Ò","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","Õ":"Õ","Õ":"Õ","Ö":"Ö","Ö":"Ö","×":"×","×":"×","Ø":"Ø","Ø":"Ø","Ù":"Ù","Ù":"Ù","Ú":"Ú","Ú":"Ú","Û":"Û","Û":"Û","Ü":"Ü","Ü":"Ü","Ý":"Ý","Ý":"Ý","Þ":"Þ","Þ":"Þ","ß":"ß","ß":"ß","à":"à","à":"à","á":"á","á":"á","â":"â","â":"â","ã":"ã","ã":"ã","ä":"ä","ä":"ä","å":"å","å":"å","æ":"æ","æ":"æ","ç":"ç","ç":"ç","è":"è","è":"è","é":"é","é":"é","ê":"ê","ê":"ê","ë":"ë","ë":"ë","ì":"ì","ì":"ì","í":"í","í":"í","î":"î","î":"î","ï":"ï","ï":"ï","ð":"ð","ð":"ð","ñ":"ñ","ñ":"ñ","ò":"ò","ò":"ò","ó":"ó","ó":"ó","ô":"ô","ô":"ô","õ":"õ","õ":"õ","ö":"ö","ö":"ö","÷":"÷","÷":"÷","ø":"ø","ø":"ø","ù":"ù","ù":"ù","ú":"ú","ú":"ú","û":"û","û":"û","ü":"ü","ü":"ü","ý":"ý","ý":"ý","þ":"þ","þ":"þ","ÿ":"ÿ","ÿ":"ÿ",""":'"',""":'"',"&":"&","&":"&","<":"<","<":"<",">":">",">":">","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ˆ":"ˆ","˜":"˜"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"⁄","℘":"℘","ℑ":"ℑ","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"},characters:{"'":"'"," ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Á":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Å":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","Ì":"Ì","Í":"Í","Î":"Î","Ï":"Ï","Ð":"Ð","Ñ":"Ñ","Ò":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ý":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","å":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",'"':""","&":"&","<":"<",">":">","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ˆ":"ˆ","˜":"˜"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"⁄","℘":"℘","ℑ":"ℑ","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"⟨","〉":"⟩","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"}},html5:{entities:{"Æ":"Æ","Æ":"Æ","&":"&","&":"&","Á":"Á","Á":"Á","Ă":"Ă","Â":"Â","Â":"Â","А":"А","𝔄":"𝔄","À":"À","À":"À","Α":"Α","Ā":"Ā","⩓":"⩓","Ą":"Ą","𝔸":"𝔸","⁡":"⁡","Å":"Å","Å":"Å","𝒜":"𝒜","≔":"≔","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","∖":"∖","⫧":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Β","𝔅":"𝔅","𝔹":"𝔹","˘":"˘","ℬ":"ℬ","≎":"≎","Ч":"Ч","©":"©","©":"©","Ć":"Ć","⋒":"⋒","ⅅ":"ⅅ","ℭ":"ℭ","Č":"Č","Ç":"Ç","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"Ċ","¸":"¸","·":"·","ℭ":"ℭ","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"”","’":"’","∷":"∷","⩴":"⩴","≡":"≡","∯":"∯","∮":"∮","ℂ":"ℂ","∐":"∐","∳":"∳","⨯":"⨯","𝒞":"𝒞","⋓":"⋓","≍":"≍","ⅅ":"ⅅ","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ѕ","Џ":"Џ","‡":"‡","↡":"↡","⫤":"⫤","Ď":"Ď","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"𝔇","´":"´","˙":"˙","˝":"˝","`":"`","˜":"˜","⋄":"⋄","ⅆ":"ⅆ","𝔻":"𝔻","¨":"¨","⃜":"⃜","≐":"≐","∯":"∯","¨":"¨","⇓":"⇓","⇐":"⇐","⇔":"⇔","⫤":"⫤","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"̑","⥐":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","⇓":"⇓","𝒟":"𝒟","Đ":"Đ","Ŋ":"Ŋ","Ð":"Ð","Ð":"Ð","É":"É","É":"É","Ě":"Ě","Ê":"Ê","Ê":"Ê","Э":"Э","Ė":"Ė","𝔈":"𝔈","È":"È","È":"È","∈":"∈","Ē":"Ē","◻":"◻","▫":"▫","Ę":"Ę","𝔼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","Ë":"Ë","∃":"∃","ⅇ":"ⅇ","Ф":"Ф","𝔉":"𝔉","◼":"◼","▪":"▪","𝔽":"𝔽","∀":"∀","ℱ":"ℱ","ℱ":"ℱ","Ѓ":"Ѓ",">":">",">":">","Γ":"Γ","Ϝ":"Ϝ","Ğ":"Ğ","Ģ":"Ģ","Ĝ":"Ĝ","Г":"Г","Ġ":"Ġ","𝔊":"𝔊","⋙":"⋙","𝔾":"𝔾","≥":"≥","⋛":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"ℋ","ℍ":"ℍ","─":"─","ℋ":"ℋ","Ħ":"Ħ","≎":"≎","≏":"≏","Е":"Е","IJ":"IJ","Ё":"Ё","Í":"Í","Í":"Í","Î":"Î","Î":"Î","И":"И","İ":"İ","ℑ":"ℑ","Ì":"Ì","Ì":"Ì","ℑ":"ℑ","Ī":"Ī","ⅈ":"ⅈ","⇒":"⇒","∬":"∬","∫":"∫","⋂":"⋂","⁣":"⁣","⁢":"⁢","Į":"Į","𝕀":"𝕀","Ι":"Ι","ℐ":"ℐ","Ĩ":"Ĩ","І":"І","Ï":"Ï","Ï":"Ï","Ĵ":"Ĵ","Й":"Й","𝔍":"𝔍","𝕁":"𝕁","𝒥":"𝒥","Ј":"Ј","Є":"Є","Х":"Х","Ќ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"𝔎","𝕂":"𝕂","𝒦":"𝒦","Љ":"Љ","<":"<","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"ℒ","↞":"↞","Ľ":"Ľ","Ļ":"Ļ","Л":"Л","⟨":"⟨","←":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⇐":"⇐","⇔":"⇔","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"𝔏","⋘":"⋘","⇚":"⇚","Ŀ":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","⟸":"⟸","⟺":"⟺","⟹":"⟹","𝕃":"𝕃","↙":"↙","↘":"↘","ℒ":"ℒ","↰":"↰","Ł":"Ł","≪":"≪","⤅":"⤅","М":"М"," ":" ","ℳ":"ℳ","𝔐":"𝔐","∓":"∓","𝕄":"𝕄","ℳ":"ℳ","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Ņ","Н":"Н","​":"​","​":"​","​":"​","​":"​","≫":"≫","≪":"≪"," ":"\n","𝔑":"𝔑","⁠":"⁠"," ":" ","ℕ":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"≏̸","⋪":"⋪","⧏̸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"⋠","∌":"∌","⋫":"⋫","⧐̸":"⧐̸","⋭":"⋭","⊏̸":"⊏̸","⋢":"⋢","⊐̸":"⊐̸","⋣":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"⊁","⪰̸":"⪰̸","⋡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"𝒩","Ñ":"Ñ","Ñ":"Ñ","Ν":"Ν","Œ":"Œ","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","О":"О","Ő":"Ő","𝔒":"𝔒","Ò":"Ò","Ò":"Ò","Ō":"Ō","Ω":"Ω","Ο":"Ο","𝕆":"𝕆","“":"“","‘":"‘","⩔":"⩔","𝒪":"𝒪","Ø":"Ø","Ø":"Ø","Õ":"Õ","Õ":"Õ","⨷":"⨷","Ö":"Ö","Ö":"Ö","‾":"‾","⏞":"⏞","⎴":"⎴","⏜":"⏜","∂":"∂","П":"П","𝔓":"𝔓","Φ":"Φ","Π":"Π","±":"±","ℌ":"ℌ","ℙ":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"∏","∷":"∷","∝":"∝","𝒫":"𝒫","Ψ":"Ψ",""":'"',""":'"',"𝔔":"𝔔","ℚ":"ℚ","𝒬":"𝒬","⤐":"⤐","®":"®","®":"®","Ŕ":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","ℜ":"ℜ","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"⧐","⊵":"⊵","⥏":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","⇒":"⇒","ℝ":"ℝ","⥰":"⥰","⇛":"⇛","ℛ":"ℛ","↱":"↱","⧴":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Ś","⪼":"⪼","Š":"Š","Ş":"Ş","Ŝ":"Ŝ","С":"С","𝔖":"𝔖","↓":"↓","←":"←","→":"→","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"𝕊","√":"√","□":"□","⊓":"⊓","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊔":"⊔","𝒮":"𝒮","⋆":"⋆","⋐":"⋐","⋐":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∋":"∋","∑":"∑","⋑":"⋑","⊃":"⊃","⊇":"⊇","⋑":"⋑","Þ":"Þ","Þ":"Þ","™":"™","Ћ":"Ћ","Ц":"Ц"," ":"\t","Τ":"Τ","Ť":"Ť","Ţ":"Ţ","Т":"Т","𝔗":"𝔗","∴":"∴","Θ":"Θ","  ":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"𝕋","⃛":"⃛","𝒯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"Ў","Ŭ":"Ŭ","Û":"Û","Û":"Û","У":"У","Ű":"Ű","𝔘":"𝔘","Ù":"Ù","Ù":"Ù","Ū":"Ū","_":"_","⏟":"⏟","⎵":"⎵","⏝":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"𝕌","↑":"↑","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","⇑":"⇑","⇕":"⇕","↖":"↖","↗":"↗","ϒ":"ϒ","Υ":"Υ","Ů":"Ů","𝒰":"𝒰","Ũ":"Ũ","Ü":"Ü","Ü":"Ü","⊫":"⊫","⫫":"⫫","В":"В","⊩":"⊩","⫦":"⫦","⋁":"⋁","‖":"‖","‖":"‖","∣":"∣","|":"|","❘":"❘","≀":"≀"," ":" ","𝔙":"𝔙","𝕍":"𝕍","𝒱":"𝒱","⊪":"⊪","Ŵ":"Ŵ","⋀":"⋀","𝔚":"𝔚","𝕎":"𝕎","𝒲":"𝒲","𝔛":"𝔛","Ξ":"Ξ","𝕏":"𝕏","𝒳":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ý","Ý":"Ý","Ŷ":"Ŷ","Ы":"Ы","𝔜":"𝔜","𝕐":"𝕐","𝒴":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Ż","​":"​","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"𝒵","á":"á","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","â":"â","´":"´","´":"´","а":"а","æ":"æ","æ":"æ","⁡":"⁡","𝔞":"𝔞","à":"à","à":"à","ℵ":"ℵ","ℵ":"ℵ","α":"α","ā":"ā","⨿":"⨿","&":"&","&":"&","∧":"∧","⩕":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∠":"∠","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"⦝","∢":"∢","Å":"Å","⍼":"⍼","ą":"ą","𝕒":"𝕒","≈":"≈","⩰":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","≈":"≈","≊":"≊","å":"å","å":"å","𝒶":"𝒶","*":"*","≈":"≈","≍":"≍","ã":"ã","ã":"ã","ä":"ä","ä":"ä","∳":"∳","⨑":"⨑","⫭":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"⋍","⊽":"⊽","⌅":"⌅","⌅":"⌅","⎵":"⎵","⎶":"⎶","≌":"≌","б":"б","„":"„","∵":"∵","∵":"∵","⦰":"⦰","϶":"϶","ℬ":"ℬ","β":"β","ℶ":"ℶ","≬":"≬","𝔟":"𝔟","⋂":"⋂","◯":"◯","⋃":"⋃","⨀":"⨀","⨁":"⨁","⨂":"⨂","⨆":"⨆","★":"★","▽":"▽","△":"△","⨄":"⨄","⋁":"⋁","⋀":"⋀","⤍":"⤍","⧫":"⧫","▪":"▪","▴":"▴","▾":"▾","◂":"◂","▸":"▸","␣":"␣","▒":"▒","░":"░","▓":"▓","█":"█","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"⌐","𝕓":"𝕓","⊥":"⊥","⊥":"⊥","⋈":"⋈","╗":"╗","╔":"╔","╖":"╖","╓":"╓","═":"═","╦":"╦","╩":"╩","╤":"╤","╧":"╧","╝":"╝","╚":"╚","╜":"╜","╙":"╙","║":"║","╬":"╬","╣":"╣","╠":"╠","╫":"╫","╢":"╢","╟":"╟","⧉":"⧉","╕":"╕","╒":"╒","┐":"┐","┌":"┌","─":"─","╥":"╥","╨":"╨","┬":"┬","┴":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"╛","╘":"╘","┘":"┘","└":"└","│":"│","╪":"╪","╡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","‵":"‵","˘":"˘","¦":"¦","¦":"¦","𝒷":"𝒷","⁏":"⁏","∽":"∽","⋍":"⋍","\":"\\","⧅":"⧅","⟈":"⟈","•":"•","•":"•","≎":"≎","⪮":"⪮","≏":"≏","≏":"≏","ć":"ć","∩":"∩","⩄":"⩄","⩉":"⩉","⩋":"⩋","⩇":"⩇","⩀":"⩀","∩︀":"∩︀","⁁":"⁁","ˇ":"ˇ","⩍":"⩍","č":"č","ç":"ç","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"⩐","ċ":"ċ","¸":"¸","¸":"¸","⦲":"⦲","¢":"¢","¢":"¢","·":"·","𝔠":"𝔠","ч":"ч","✓":"✓","✓":"✓","χ":"χ","○":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","®":"®","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"⊝","≗":"≗","⨐":"⨐","⫯":"⫯","⧂":"⧂","♣":"♣","♣":"♣",":":":","≔":"≔","≔":"≔",",":",","@":"@","∁":"∁","∘":"∘","∁":"∁","ℂ":"ℂ","≅":"≅","⩭":"⩭","∮":"∮","𝕔":"𝕔","∐":"∐","©":"©","©":"©","℗":"℗","↵":"↵","✗":"✗","𝒸":"𝒸","⫏":"⫏","⫑":"⫑","⫐":"⫐","⫒":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"⊍","⩅":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋞":"⋞","⋟":"⋟","⋎":"⋎","⋏":"⋏","¤":"¤","¤":"¤","↶":"↶","↷":"↷","⋎":"⋎","⋏":"⋏","∲":"∲","∱":"∱","⌭":"⌭","⇓":"⇓","⥥":"⥥","†":"†","ℸ":"ℸ","↓":"↓","‐":"‐","⊣":"⊣","⤏":"⤏","˝":"˝","ď":"ď","д":"д","ⅆ":"ⅆ","‡":"‡","⇊":"⇊","⩷":"⩷","°":"°","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"𝔡","⇃":"⇃","⇂":"⇂","⋄":"⋄","⋄":"⋄","♦":"♦","♦":"♦","¨":"¨","ϝ":"ϝ","⋲":"⋲","÷":"÷","÷":"÷","÷":"÷","⋇":"⋇","⋇":"⋇","ђ":"ђ","⌞":"⌞","⌍":"⌍","$":"$","𝕕":"𝕕","˙":"˙","≐":"≐","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌆":"⌆","↓":"↓","⇊":"⇊","⇃":"⇃","⇂":"⇂","⤐":"⤐","⌟":"⌟","⌌":"⌌","𝒹":"𝒹","ѕ":"ѕ","⧶":"⧶","đ":"đ","⋱":"⋱","▿":"▿","▾":"▾","⇵":"⇵","⥯":"⥯","⦦":"⦦","џ":"џ","⟿":"⟿","⩷":"⩷","≑":"≑","é":"é","é":"é","⩮":"⩮","ě":"ě","≖":"≖","ê":"ê","ê":"ê","≕":"≕","э":"э","ė":"ė","ⅇ":"ⅇ","≒":"≒","𝔢":"𝔢","⪚":"⪚","è":"è","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"⏧","ℓ":"ℓ","⪕":"⪕","⪗":"⪗","ē":"ē","∅":"∅","∅":"∅","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"ŋ"," ":" ","ę":"ę","𝕖":"𝕖","⋕":"⋕","⧣":"⧣","⩱":"⩱","ε":"ε","ε":"ε","ϵ":"ϵ","≖":"≖","≕":"≕","≂":"≂","⪖":"⪖","⪕":"⪕","=":"=","≟":"≟","≡":"≡","⩸":"⩸","⧥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","≐":"≐","≂":"≂","η":"η","ð":"ð","ð":"ð","ë":"ë","ë":"ë","€":"€","!":"!","∃":"∃","ℰ":"ℰ","ⅇ":"ⅇ","≒":"≒","ф":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"𝔣","fi":"fi","fj":"fj","♭":"♭","fl":"fl","▱":"▱","ƒ":"ƒ","𝕗":"𝕗","∀":"∀","⋔":"⋔","⫙":"⫙","⨍":"⨍","½":"½","½":"½","⅓":"⅓","¼":"¼","¼":"¼","⅕":"⅕","⅙":"⅙","⅛":"⅛","⅔":"⅔","⅖":"⅖","¾":"¾","¾":"¾","⅗":"⅗","⅜":"⅜","⅘":"⅘","⅚":"⅚","⅝":"⅝","⅞":"⅞","⁄":"⁄","⌢":"⌢","𝒻":"𝒻","≧":"≧","⪌":"⪌","ǵ":"ǵ","γ":"γ","ϝ":"ϝ","⪆":"⪆","ğ":"ğ","ĝ":"ĝ","г":"г","ġ":"ġ","≥":"≥","⋛":"⋛","≥":"≥","≧":"≧","⩾":"⩾","⩾":"⩾","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"𝔤","≫":"≫","⋙":"⋙","ℷ":"ℷ","ѓ":"ѓ","≷":"≷","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪊":"⪊","⪈":"⪈","⪈":"⪈","≩":"≩","⋧":"⋧","𝕘":"𝕘","`":"`","ℊ":"ℊ","≳":"≳","⪎":"⪎","⪐":"⪐",">":">",">":">","⪧":"⪧","⩺":"⩺","⋗":"⋗","⦕":"⦕","⩼":"⩼","⪆":"⪆","⥸":"⥸","⋗":"⋗","⋛":"⋛","⪌":"⪌","≷":"≷","≳":"≳","≩︀":"≩︀","≩︀":"≩︀","⇔":"⇔"," ":" ","½":"½","ℋ":"ℋ","ъ":"ъ","↔":"↔","⥈":"⥈","↭":"↭","ℏ":"ℏ","ĥ":"ĥ","♥":"♥","♥":"♥","…":"…","⊹":"⊹","𝔥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"𝕙","―":"―","𝒽":"𝒽","ℏ":"ℏ","ħ":"ħ","⁃":"⁃","‐":"‐","í":"í","í":"í","⁣":"⁣","î":"î","î":"î","и":"и","е":"е","¡":"¡","¡":"¡","⇔":"⇔","𝔦":"𝔦","ì":"ì","ì":"ì","ⅈ":"ⅈ","⨌":"⨌","∭":"∭","⧜":"⧜","℩":"℩","ij":"ij","ī":"ī","ℑ":"ℑ","ℐ":"ℐ","ℑ":"ℑ","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","∈":"∈","℅":"℅","∞":"∞","⧝":"⧝","ı":"ı","∫":"∫","⊺":"⊺","ℤ":"ℤ","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"ё","į":"į","𝕚":"𝕚","ι":"ι","⨼":"⨼","¿":"¿","¿":"¿","𝒾":"𝒾","∈":"∈","⋹":"⋹","⋵":"⋵","⋴":"⋴","⋳":"⋳","∈":"∈","⁢":"⁢","ĩ":"ĩ","і":"і","ï":"ï","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"𝔧","ȷ":"ȷ","𝕛":"𝕛","𝒿":"𝒿","ј":"ј","є":"є","κ":"κ","ϰ":"ϰ","ķ":"ķ","к":"к","𝔨":"𝔨","ĸ":"ĸ","х":"х","ќ":"ќ","𝕜":"𝕜","𝓀":"𝓀","⇚":"⇚","⇐":"⇐","⤛":"⤛","⤎":"⤎","≦":"≦","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","ℒ":"ℒ","λ":"λ","⟨":"⟨","⦑":"⦑","⟨":"⟨","⪅":"⪅","«":"«","«":"«","←":"←","⇤":"⇤","⤟":"⤟","⤝":"⤝","↩":"↩","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"❲","{":"{","[":"[","⦋":"⦋","⦏":"⦏","⦍":"⦍","ľ":"ľ","ļ":"ļ","⌈":"⌈","{":"{","л":"л","⤶":"⤶","“":"“","„":"„","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","←":"←","↢":"↢","↽":"↽","↼":"↼","⇇":"⇇","↔":"↔","⇆":"⇆","⇋":"⇋","↭":"↭","⋋":"⋋","⋚":"⋚","≤":"≤","≦":"≦","⩽":"⩽","⩽":"⩽","⪨":"⪨","⩿":"⩿","⪁":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⪅":"⪅","⋖":"⋖","⋚":"⋚","⪋":"⪋","≶":"≶","≲":"≲","⥼":"⥼","⌊":"⌊","𝔩":"𝔩","≶":"≶","⪑":"⪑","↽":"↽","↼":"↼","⥪":"⥪","▄":"▄","љ":"љ","≪":"≪","⇇":"⇇","⌞":"⌞","⥫":"⥫","◺":"◺","ŀ":"ŀ","⎰":"⎰","⎰":"⎰","≨":"≨","⪉":"⪉","⪉":"⪉","⪇":"⪇","⪇":"⪇","≨":"≨","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟦":"⟦","⟵":"⟵","⟷":"⟷","⟼":"⟼","⟶":"⟶","↫":"↫","↬":"↬","⦅":"⦅","𝕝":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","_":"_","◊":"◊","◊":"◊","⧫":"⧫","(":"(","⦓":"⦓","⇆":"⇆","⌟":"⌟","⇋":"⇋","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"𝓁","↰":"↰","≲":"≲","⪍":"⪍","⪏":"⪏","[":"[","‘":"‘","‚":"‚","ł":"ł","<":"<","<":"<","⪦":"⪦","⩹":"⩹","⋖":"⋖","⋋":"⋋","⋉":"⋉","⥶":"⥶","⩻":"⩻","⦖":"⦖","◃":"◃","⊴":"⊴","◂":"◂","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","≨︀":"≨︀","∺":"∺","¯":"¯","¯":"¯","♂":"♂","✠":"✠","✠":"✠","↦":"↦","↦":"↦","↧":"↧","↤":"↤","↥":"↥","▮":"▮","⨩":"⨩","м":"м","—":"—","∡":"∡","𝔪":"𝔪","℧":"℧","µ":"µ","µ":"µ","∣":"∣","*":"*","⫰":"⫰","·":"·","·":"·","−":"−","⊟":"⊟","∸":"∸","⨪":"⨪","⫛":"⫛","…":"…","∓":"∓","⊧":"⊧","𝕞":"𝕞","∓":"∓","𝓂":"𝓂","∾":"∾","μ":"μ","⊸":"⊸","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","≫̸":"≫̸","⇍":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","≪̸":"≪̸","⇏":"⇏","⊯":"⊯","⊮":"⊮","∇":"∇","ń":"ń","∠⃒":"∠⃒","≉":"≉","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","≉":"≉","♮":"♮","♮":"♮","ℕ":"ℕ"," ":" "," ":" ","≎̸":"≎̸","≏̸":"≏̸","⩃":"⩃","ň":"ň","ņ":"ņ","≇":"≇","⩭̸":"⩭̸","⩂":"⩂","н":"н","–":"–","≠":"≠","⇗":"⇗","⤤":"⤤","↗":"↗","↗":"↗","≐̸":"≐̸","≢":"≢","⤨":"⤨","≂̸":"≂̸","∄":"∄","∄":"∄","𝔫":"𝔫","≧̸":"≧̸","≱":"≱","≱":"≱","≧̸":"≧̸","⩾̸":"⩾̸","⩾̸":"⩾̸","≵":"≵","≯":"≯","≯":"≯","⇎":"⇎","↮":"↮","⫲":"⫲","∋":"∋","⋼":"⋼","⋺":"⋺","∋":"∋","њ":"њ","⇍":"⇍","≦̸":"≦̸","↚":"↚","‥":"‥","≰":"≰","↚":"↚","↮":"↮","≰":"≰","≦̸":"≦̸","⩽̸":"⩽̸","⩽̸":"⩽̸","≮":"≮","≴":"≴","≮":"≮","⋪":"⋪","⋬":"⋬","∤":"∤","𝕟":"𝕟","¬":"¬","¬":"¬","∉":"∉","⋹̸":"⋹̸","⋵̸":"⋵̸","∉":"∉","⋷":"⋷","⋶":"⋶","∌":"∌","∌":"∌","⋾":"⋾","⋽":"⋽","∦":"∦","∦":"∦","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","⊀":"⊀","⋠":"⋠","⪯̸":"⪯̸","⊀":"⊀","⪯̸":"⪯̸","⇏":"⇏","↛":"↛","⤳̸":"⤳̸","↝̸":"↝̸","↛":"↛","⋫":"⋫","⋭":"⋭","⊁":"⊁","⋡":"⋡","⪰̸":"⪰̸","𝓃":"𝓃","∤":"∤","∦":"∦","≁":"≁","≄":"≄","≄":"≄","∤":"∤","∦":"∦","⋢":"⋢","⋣":"⋣","⊄":"⊄","⫅̸":"⫅̸","⊈":"⊈","⊂⃒":"⊂⃒","⊈":"⊈","⫅̸":"⫅̸","⊁":"⊁","⪰̸":"⪰̸","⊅":"⊅","⫆̸":"⫆̸","⊉":"⊉","⊃⃒":"⊃⃒","⊉":"⊉","⫆̸":"⫆̸","≹":"≹","ñ":"ñ","ñ":"ñ","≸":"≸","⋪":"⋪","⋬":"⋬","⋫":"⋫","⋭":"⋭","ν":"ν","#":"#","№":"№"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","↖":"↖","↖":"↖","⤧":"⤧","Ⓢ":"Ⓢ","ó":"ó","ó":"ó","⊛":"⊛","⊚":"⊚","ô":"ô","ô":"ô","о":"о","⊝":"⊝","ő":"ő","⨸":"⨸","⊙":"⊙","⦼":"⦼","œ":"œ","⦿":"⦿","𝔬":"𝔬","˛":"˛","ò":"ò","ò":"ò","⧁":"⧁","⦵":"⦵","Ω":"Ω","∮":"∮","↺":"↺","⦾":"⦾","⦻":"⦻","‾":"‾","⧀":"⧀","ō":"ō","ω":"ω","ο":"ο","⦶":"⦶","⊖":"⊖","𝕠":"𝕠","⦷":"⦷","⦹":"⦹","⊕":"⊕","∨":"∨","↻":"↻","⩝":"⩝","ℴ":"ℴ","ℴ":"ℴ","ª":"ª","ª":"ª","º":"º","º":"º","⊶":"⊶","⩖":"⩖","⩗":"⩗","⩛":"⩛","ℴ":"ℴ","ø":"ø","ø":"ø","⊘":"⊘","õ":"õ","õ":"õ","⊗":"⊗","⨶":"⨶","ö":"ö","ö":"ö","⌽":"⌽","∥":"∥","¶":"¶","¶":"¶","∥":"∥","⫳":"⫳","⫽":"⫽","∂":"∂","п":"п","%":"%",".":".","‰":"‰","⊥":"⊥","‱":"‱","𝔭":"𝔭","φ":"φ","ϕ":"ϕ","ℳ":"ℳ","☎":"☎","π":"π","⋔":"⋔","ϖ":"ϖ","ℏ":"ℏ","ℎ":"ℎ","ℏ":"ℏ","+":"+","⨣":"⨣","⊞":"⊞","⨢":"⨢","∔":"∔","⨥":"⨥","⩲":"⩲","±":"±","±":"±","⨦":"⨦","⨧":"⨧","±":"±","⨕":"⨕","𝕡":"𝕡","£":"£","£":"£","≺":"≺","⪳":"⪳","⪷":"⪷","≼":"≼","⪯":"⪯","≺":"≺","⪷":"⪷","≼":"≼","⪯":"⪯","⪹":"⪹","⪵":"⪵","⋨":"⋨","≾":"≾","′":"′","ℙ":"ℙ","⪵":"⪵","⪹":"⪹","⋨":"⋨","∏":"∏","⌮":"⌮","⌒":"⌒","⌓":"⌓","∝":"∝","∝":"∝","≾":"≾","⊰":"⊰","𝓅":"𝓅","ψ":"ψ"," ":" ","𝔮":"𝔮","⨌":"⨌","𝕢":"𝕢","⁗":"⁗","𝓆":"𝓆","ℍ":"ℍ","⨖":"⨖","?":"?","≟":"≟",""":'"',""":'"',"⇛":"⇛","⇒":"⇒","⤜":"⤜","⤏":"⤏","⥤":"⥤","∽̱":"∽̱","ŕ":"ŕ","√":"√","⦳":"⦳","⟩":"⟩","⦒":"⦒","⦥":"⦥","⟩":"⟩","»":"»","»":"»","→":"→","⥵":"⥵","⇥":"⇥","⤠":"⤠","⤳":"⤳","⤞":"⤞","↪":"↪","↬":"↬","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"↝","⤚":"⤚","∶":"∶","ℚ":"ℚ","⤍":"⤍","❳":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"⦐","ř":"ř","ŗ":"ŗ","⌉":"⌉","}":"}","р":"р","⤷":"⤷","⥩":"⥩","”":"”","”":"”","↳":"↳","ℜ":"ℜ","ℛ":"ℛ","ℜ":"ℜ","ℝ":"ℝ","▭":"▭","®":"®","®":"®","⥽":"⥽","⌋":"⌋","𝔯":"𝔯","⇁":"⇁","⇀":"⇀","⥬":"⥬","ρ":"ρ","ϱ":"ϱ","→":"→","↣":"↣","⇁":"⇁","⇀":"⇀","⇄":"⇄","⇌":"⇌","⇉":"⇉","↝":"↝","⋌":"⋌","˚":"˚","≓":"≓","⇄":"⇄","⇌":"⇌","‏":"‏","⎱":"⎱","⎱":"⎱","⫮":"⫮","⟭":"⟭","⇾":"⇾","⟧":"⟧","⦆":"⦆","𝕣":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","⇉":"⇉","›":"›","𝓇":"𝓇","↱":"↱","]":"]","’":"’","’":"’","⋌":"⋌","⋊":"⋊","▹":"▹","⊵":"⊵","▸":"▸","⧎":"⧎","⥨":"⥨","℞":"℞","ś":"ś","‚":"‚","≻":"≻","⪴":"⪴","⪸":"⪸","š":"š","≽":"≽","⪰":"⪰","ş":"ş","ŝ":"ŝ","⪶":"⪶","⪺":"⪺","⋩":"⋩","⨓":"⨓","≿":"≿","с":"с","⋅":"⋅","⊡":"⊡","⩦":"⩦","⇘":"⇘","⤥":"⤥","↘":"↘","↘":"↘","§":"§","§":"§",";":";","⤩":"⤩","∖":"∖","∖":"∖","✶":"✶","𝔰":"𝔰","⌢":"⌢","♯":"♯","щ":"щ","ш":"ш","∣":"∣","∥":"∥","­":"­","­":"­","σ":"σ","ς":"ς","ς":"ς","∼":"∼","⩪":"⩪","≃":"≃","≃":"≃","⪞":"⪞","⪠":"⪠","⪝":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","←":"←","∖":"∖","⨳":"⨳","⧤":"⧤","∣":"∣","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ь","/":"/","⧄":"⧄","⌿":"⌿","𝕤":"𝕤","♠":"♠","♠":"♠","∥":"∥","⊓":"⊓","⊓︀":"⊓︀","⊔":"⊔","⊔︀":"⊔︀","⊏":"⊏","⊑":"⊑","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊐":"⊐","⊒":"⊒","□":"□","□":"□","▪":"▪","▪":"▪","→":"→","𝓈":"𝓈","∖":"∖","⌣":"⌣","⋆":"⋆","☆":"☆","★":"★","ϵ":"ϵ","ϕ":"ϕ","¯":"¯","⊂":"⊂","⫅":"⫅","⪽":"⪽","⊆":"⊆","⫃":"⫃","⫁":"⫁","⫋":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⊂":"⊂","⊆":"⊆","⫅":"⫅","⊊":"⊊","⫋":"⫋","⫇":"⫇","⫕":"⫕","⫓":"⫓","≻":"≻","⪸":"⪸","≽":"≽","⪰":"⪰","⪺":"⪺","⪶":"⪶","⋩":"⋩","≿":"≿","∑":"∑","♪":"♪","¹":"¹","¹":"¹","²":"²","²":"²","³":"³","³":"³","⊃":"⊃","⫆":"⫆","⪾":"⪾","⫘":"⫘","⊇":"⊇","⫄":"⫄","⟉":"⟉","⫗":"⫗","⥻":"⥻","⫂":"⫂","⫌":"⫌","⊋":"⊋","⫀":"⫀","⊃":"⊃","⊇":"⊇","⫆":"⫆","⊋":"⊋","⫌":"⫌","⫈":"⫈","⫔":"⫔","⫖":"⫖","⇙":"⇙","⤦":"⤦","↙":"↙","↙":"↙","⤪":"⤪","ß":"ß","ß":"ß","⌖":"⌖","τ":"τ","⎴":"⎴","ť":"ť","ţ":"ţ","т":"т","⃛":"⃛","⌕":"⌕","𝔱":"𝔱","∴":"∴","∴":"∴","θ":"θ","ϑ":"ϑ","ϑ":"ϑ","≈":"≈","∼":"∼"," ":" ","≈":"≈","∼":"∼","þ":"þ","þ":"þ","˜":"˜","×":"×","×":"×","⊠":"⊠","⨱":"⨱","⨰":"⨰","∭":"∭","⤨":"⤨","⊤":"⊤","⌶":"⌶","⫱":"⫱","𝕥":"𝕥","⫚":"⫚","⤩":"⤩","‴":"‴","™":"™","▵":"▵","▿":"▿","◃":"◃","⊴":"⊴","≜":"≜","▹":"▹","⊵":"⊵","◬":"◬","≜":"≜","⨺":"⨺","⨹":"⨹","⧍":"⧍","⨻":"⨻","⏢":"⏢","𝓉":"𝓉","ц":"ц","ћ":"ћ","ŧ":"ŧ","≬":"≬","↞":"↞","↠":"↠","⇑":"⇑","⥣":"⥣","ú":"ú","ú":"ú","↑":"↑","ў":"ў","ŭ":"ŭ","û":"û","û":"û","у":"у","⇅":"⇅","ű":"ű","⥮":"⥮","⥾":"⥾","𝔲":"𝔲","ù":"ù","ù":"ù","↿":"↿","↾":"↾","▀":"▀","⌜":"⌜","⌜":"⌜","⌏":"⌏","◸":"◸","ū":"ū","¨":"¨","¨":"¨","ų":"ų","𝕦":"𝕦","↑":"↑","↕":"↕","↿":"↿","↾":"↾","⊎":"⊎","υ":"υ","ϒ":"ϒ","υ":"υ","⇈":"⇈","⌝":"⌝","⌝":"⌝","⌎":"⌎","ů":"ů","◹":"◹","𝓊":"𝓊","⋰":"⋰","ũ":"ũ","▵":"▵","▴":"▴","⇈":"⇈","ü":"ü","ü":"ü","⦧":"⦧","⇕":"⇕","⫨":"⫨","⫩":"⫩","⊨":"⊨","⦜":"⦜","ϵ":"ϵ","ϰ":"ϰ","∅":"∅","ϕ":"ϕ","ϖ":"ϖ","∝":"∝","↕":"↕","ϱ":"ϱ","ς":"ς","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","ϑ":"ϑ","⊲":"⊲","⊳":"⊳","в":"в","⊢":"⊢","∨":"∨","⊻":"⊻","≚":"≚","⋮":"⋮","|":"|","|":"|","𝔳":"𝔳","⊲":"⊲","⊂⃒":"⊂⃒","⊃⃒":"⊃⃒","𝕧":"𝕧","∝":"∝","⊳":"⊳","𝓋":"𝓋","⫋︀":"⫋︀","⊊︀":"⊊︀","⫌︀":"⫌︀","⊋︀":"⊋︀","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","∧":"∧","≙":"≙","℘":"℘","𝔴":"𝔴","𝕨":"𝕨","℘":"℘","≀":"≀","≀":"≀","𝓌":"𝓌","⋂":"⋂","◯":"◯","⋃":"⋃","▽":"▽","𝔵":"𝔵","⟺":"⟺","⟷":"⟷","ξ":"ξ","⟸":"⟸","⟵":"⟵","⟼":"⟼","⋻":"⋻","⨀":"⨀","𝕩":"𝕩","⨁":"⨁","⨂":"⨂","⟹":"⟹","⟶":"⟶","𝓍":"𝓍","⨆":"⨆","⨄":"⨄","△":"△","⋁":"⋁","⋀":"⋀","ý":"ý","ý":"ý","я":"я","ŷ":"ŷ","ы":"ы","¥":"¥","¥":"¥","𝔶":"𝔶","ї":"ї","𝕪":"𝕪","𝓎":"𝓎","ю":"ю","ÿ":"ÿ","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ℨ":"ℨ","ζ":"ζ","𝔷":"𝔷","ж":"ж","⇝":"⇝","𝕫":"𝕫","𝓏":"𝓏","‍":"‍","‌":"‌"},characters:{"Æ":"Æ","&":"&","Á":"Á","Ă":"Ă","Â":"Â","А":"А","𝔄":"𝔄","À":"À","Α":"Α","Ā":"Ā","⩓":"⩓","Ą":"Ą","𝔸":"𝔸","⁡":"⁡","Å":"Å","𝒜":"𝒜","≔":"≔","Ã":"Ã","Ä":"Ä","∖":"∖","⫧":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Β","𝔅":"𝔅","𝔹":"𝔹","˘":"˘","≎":"≎","Ч":"Ч","©":"©","Ć":"Ć","⋒":"⋒","ⅅ":"ⅅ","ℭ":"ℭ","Č":"Č","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"Ċ","¸":"¸","·":"·","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"”","’":"’","∷":"∷","⩴":"⩴","≡":"≡","∯":"∯","∮":"∮","ℂ":"ℂ","∐":"∐","∳":"∳","⨯":"⨯","𝒞":"𝒞","⋓":"⋓","≍":"≍","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ѕ","Џ":"Џ","‡":"‡","↡":"↡","⫤":"⫤","Ď":"Ď","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"𝔇","´":"´","˙":"˙","˝":"˝","`":"`","˜":"˜","⋄":"⋄","ⅆ":"ⅆ","𝔻":"𝔻","¨":"¨","⃜":"⃜","≐":"≐","⇓":"⇓","⇐":"⇐","⇔":"⇔","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"̑","⥐":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","𝒟":"𝒟","Đ":"Đ","Ŋ":"Ŋ","Ð":"Ð","É":"É","Ě":"Ě","Ê":"Ê","Э":"Э","Ė":"Ė","𝔈":"𝔈","È":"È","∈":"∈","Ē":"Ē","◻":"◻","▫":"▫","Ę":"Ę","𝔼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","∃":"∃","ⅇ":"ⅇ","Ф":"Ф","𝔉":"𝔉","◼":"◼","▪":"▪","𝔽":"𝔽","∀":"∀","ℱ":"ℱ","Ѓ":"Ѓ",">":">","Γ":"Γ","Ϝ":"Ϝ","Ğ":"Ğ","Ģ":"Ģ","Ĝ":"Ĝ","Г":"Г","Ġ":"Ġ","𝔊":"𝔊","⋙":"⋙","𝔾":"𝔾","≥":"≥","⋛":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"ℋ","ℍ":"ℍ","─":"─","Ħ":"Ħ","≏":"≏","Е":"Е","IJ":"IJ","Ё":"Ё","Í":"Í","Î":"Î","И":"И","İ":"İ","ℑ":"ℑ","Ì":"Ì","Ī":"Ī","ⅈ":"ⅈ","∬":"∬","∫":"∫","⋂":"⋂","⁣":"⁣","⁢":"⁢","Į":"Į","𝕀":"𝕀","Ι":"Ι","ℐ":"ℐ","Ĩ":"Ĩ","І":"І","Ï":"Ï","Ĵ":"Ĵ","Й":"Й","𝔍":"𝔍","𝕁":"𝕁","𝒥":"𝒥","Ј":"Ј","Є":"Є","Х":"Х","Ќ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"𝔎","𝕂":"𝕂","𝒦":"𝒦","Љ":"Љ","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"ℒ","↞":"↞","Ľ":"Ľ","Ļ":"Ļ","Л":"Л","⟨":"⟨","←":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"𝔏","⋘":"⋘","⇚":"⇚","Ŀ":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","𝕃":"𝕃","↙":"↙","↘":"↘","↰":"↰","Ł":"Ł","≪":"≪","⤅":"⤅","М":"М"," ":" ","ℳ":"ℳ","𝔐":"𝔐","∓":"∓","𝕄":"𝕄","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Ņ","Н":"Н","​":"​","\n":" ","𝔑":"𝔑","⁠":"⁠"," ":" ","ℕ":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"≏̸","⋪":"⋪","⧏̸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"⋠","∌":"∌","⋫":"⋫","⧐̸":"⧐̸","⋭":"⋭","⊏̸":"⊏̸","⋢":"⋢","⊐̸":"⊐̸","⋣":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"⊁","⪰̸":"⪰̸","⋡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"𝒩","Ñ":"Ñ","Ν":"Ν","Œ":"Œ","Ó":"Ó","Ô":"Ô","О":"О","Ő":"Ő","𝔒":"𝔒","Ò":"Ò","Ō":"Ō","Ω":"Ω","Ο":"Ο","𝕆":"𝕆","“":"“","‘":"‘","⩔":"⩔","𝒪":"𝒪","Ø":"Ø","Õ":"Õ","⨷":"⨷","Ö":"Ö","‾":"‾","⏞":"⏞","⎴":"⎴","⏜":"⏜","∂":"∂","П":"П","𝔓":"𝔓","Φ":"Φ","Π":"Π","±":"±","ℙ":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"∏","∝":"∝","𝒫":"𝒫","Ψ":"Ψ",'"':""","𝔔":"𝔔","ℚ":"ℚ","𝒬":"𝒬","⤐":"⤐","®":"®","Ŕ":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"⧐","⊵":"⊵","⥏":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","ℝ":"ℝ","⥰":"⥰","⇛":"⇛","ℛ":"ℛ","↱":"↱","⧴":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Ś","⪼":"⪼","Š":"Š","Ş":"Ş","Ŝ":"Ŝ","С":"С","𝔖":"𝔖","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"𝕊","√":"√","□":"□","⊓":"⊓","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊔":"⊔","𝒮":"𝒮","⋆":"⋆","⋐":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∑":"∑","⋑":"⋑","⊃":"⊃","⊇":"⊇","Þ":"Þ","™":"™","Ћ":"Ћ","Ц":"Ц","\t":" ","Τ":"Τ","Ť":"Ť","Ţ":"Ţ","Т":"Т","𝔗":"𝔗","∴":"∴","Θ":"Θ","  ":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"𝕋","⃛":"⃛","𝒯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"Ў","Ŭ":"Ŭ","Û":"Û","У":"У","Ű":"Ű","𝔘":"𝔘","Ù":"Ù","Ū":"Ū",_:"_","⏟":"⏟","⎵":"⎵","⏝":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"𝕌","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","↖":"↖","↗":"↗","ϒ":"ϒ","Υ":"Υ","Ů":"Ů","𝒰":"𝒰","Ũ":"Ũ","Ü":"Ü","⊫":"⊫","⫫":"⫫","В":"В","⊩":"⊩","⫦":"⫦","⋁":"⋁","‖":"‖","∣":"∣","|":"|","❘":"❘","≀":"≀"," ":" ","𝔙":"𝔙","𝕍":"𝕍","𝒱":"𝒱","⊪":"⊪","Ŵ":"Ŵ","⋀":"⋀","𝔚":"𝔚","𝕎":"𝕎","𝒲":"𝒲","𝔛":"𝔛","Ξ":"Ξ","𝕏":"𝕏","𝒳":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ý","Ŷ":"Ŷ","Ы":"Ы","𝔜":"𝔜","𝕐":"𝕐","𝒴":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Ż","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"𝒵","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","а":"а","æ":"æ","𝔞":"𝔞","à":"à","ℵ":"ℵ","α":"α","ā":"ā","⨿":"⨿","∧":"∧","⩕":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"⦝","∢":"∢","⍼":"⍼","ą":"ą","𝕒":"𝕒","⩰":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","å":"å","𝒶":"𝒶","*":"*","ã":"ã","ä":"ä","⨑":"⨑","⫭":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"⋍","⊽":"⊽","⌅":"⌅","⎶":"⎶","б":"б","„":"„","⦰":"⦰","β":"β","ℶ":"ℶ","≬":"≬","𝔟":"𝔟","◯":"◯","⨀":"⨀","⨁":"⨁","⨂":"⨂","⨆":"⨆","★":"★","▽":"▽","△":"△","⨄":"⨄","⤍":"⤍","⧫":"⧫","▴":"▴","▾":"▾","◂":"◂","▸":"▸","␣":"␣","▒":"▒","░":"░","▓":"▓","█":"█","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"⌐","𝕓":"𝕓","⋈":"⋈","╗":"╗","╔":"╔","╖":"╖","╓":"╓","═":"═","╦":"╦","╩":"╩","╤":"╤","╧":"╧","╝":"╝","╚":"╚","╜":"╜","╙":"╙","║":"║","╬":"╬","╣":"╣","╠":"╠","╫":"╫","╢":"╢","╟":"╟","⧉":"⧉","╕":"╕","╒":"╒","┐":"┐","┌":"┌","╥":"╥","╨":"╨","┬":"┬","┴":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"╛","╘":"╘","┘":"┘","└":"└","│":"│","╪":"╪","╡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","¦":"¦","𝒷":"𝒷","⁏":"⁏","\\":"\","⧅":"⧅","⟈":"⟈","•":"•","⪮":"⪮","ć":"ć","∩":"∩","⩄":"⩄","⩉":"⩉","⩋":"⩋","⩇":"⩇","⩀":"⩀","∩︀":"∩︀","⁁":"⁁","⩍":"⩍","č":"č","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"⩐","ċ":"ċ","⦲":"⦲","¢":"¢","𝔠":"𝔠","ч":"ч","✓":"✓","χ":"χ","○":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"⊝","⨐":"⨐","⫯":"⫯","⧂":"⧂","♣":"♣",":":":",",":",","@":"@","∁":"∁","⩭":"⩭","𝕔":"𝕔","℗":"℗","↵":"↵","✗":"✗","𝒸":"𝒸","⫏":"⫏","⫑":"⫑","⫐":"⫐","⫒":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"⊍","⩅":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋎":"⋎","⋏":"⋏","¤":"¤","∱":"∱","⌭":"⌭","⥥":"⥥","†":"†","ℸ":"ℸ","‐":"‐","⤏":"⤏","ď":"ď","д":"д","⇊":"⇊","⩷":"⩷","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"𝔡","♦":"♦","ϝ":"ϝ","⋲":"⋲","÷":"÷","⋇":"⋇","ђ":"ђ","⌞":"⌞","⌍":"⌍",$:"$","𝕕":"𝕕","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌟":"⌟","⌌":"⌌","𝒹":"𝒹","ѕ":"ѕ","⧶":"⧶","đ":"đ","⋱":"⋱","▿":"▿","⦦":"⦦","џ":"џ","⟿":"⟿","é":"é","⩮":"⩮","ě":"ě","≖":"≖","ê":"ê","≕":"≕","э":"э","ė":"ė","≒":"≒","𝔢":"𝔢","⪚":"⪚","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"⏧","ℓ":"ℓ","⪕":"⪕","⪗":"⪗","ē":"ē","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"ŋ"," ":" ","ę":"ę","𝕖":"𝕖","⋕":"⋕","⧣":"⧣","⩱":"⩱","ε":"ε","ϵ":"ϵ","=":"=","≟":"≟","⩸":"⩸","⧥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","η":"η","ð":"ð","ë":"ë","€":"€","!":"!","ф":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"𝔣","fi":"fi",fj:"fj","♭":"♭","fl":"fl","▱":"▱","ƒ":"ƒ","𝕗":"𝕗","⋔":"⋔","⫙":"⫙","⨍":"⨍","½":"½","⅓":"⅓","¼":"¼","⅕":"⅕","⅙":"⅙","⅛":"⅛","⅔":"⅔","⅖":"⅖","¾":"¾","⅗":"⅗","⅜":"⅜","⅘":"⅘","⅚":"⅚","⅝":"⅝","⅞":"⅞","⁄":"⁄","⌢":"⌢","𝒻":"𝒻","⪌":"⪌","ǵ":"ǵ","γ":"γ","⪆":"⪆","ğ":"ğ","ĝ":"ĝ","г":"г","ġ":"ġ","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"𝔤","ℷ":"ℷ","ѓ":"ѓ","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪈":"⪈","⋧":"⋧","𝕘":"𝕘","ℊ":"ℊ","⪎":"⪎","⪐":"⪐","⪧":"⪧","⩺":"⩺","⋗":"⋗","⦕":"⦕","⩼":"⩼","⥸":"⥸","≩︀":"≩︀","ъ":"ъ","⥈":"⥈","↭":"↭","ℏ":"ℏ","ĥ":"ĥ","♥":"♥","…":"…","⊹":"⊹","𝔥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"𝕙","―":"―","𝒽":"𝒽","ħ":"ħ","⁃":"⁃","í":"í","î":"î","и":"и","е":"е","¡":"¡","𝔦":"𝔦","ì":"ì","⨌":"⨌","∭":"∭","⧜":"⧜","℩":"℩","ij":"ij","ī":"ī","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","℅":"℅","∞":"∞","⧝":"⧝","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"ё","į":"į","𝕚":"𝕚","ι":"ι","¿":"¿","𝒾":"𝒾","⋹":"⋹","⋵":"⋵","⋴":"⋴","⋳":"⋳","ĩ":"ĩ","і":"і","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"𝔧","ȷ":"ȷ","𝕛":"𝕛","𝒿":"𝒿","ј":"ј","є":"є","κ":"κ","ϰ":"ϰ","ķ":"ķ","к":"к","𝔨":"𝔨","ĸ":"ĸ","х":"х","ќ":"ќ","𝕜":"𝕜","𝓀":"𝓀","⤛":"⤛","⤎":"⤎","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","λ":"λ","⦑":"⦑","⪅":"⪅","«":"«","⤟":"⤟","⤝":"⤝","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"❲","{":"{","[":"[","⦋":"⦋","⦏":"⦏","⦍":"⦍","ľ":"ľ","ļ":"ļ","л":"л","⤶":"⤶","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","⇇":"⇇","⋋":"⋋","⪨":"⪨","⩿":"⩿","⪁":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⋖":"⋖","⥼":"⥼","𝔩":"𝔩","⪑":"⪑","⥪":"⥪","▄":"▄","љ":"љ","⥫":"⥫","◺":"◺","ŀ":"ŀ","⎰":"⎰","≨":"≨","⪉":"⪉","⪇":"⪇","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟼":"⟼","↬":"↬","⦅":"⦅","𝕝":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","◊":"◊","(":"(","⦓":"⦓","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"𝓁","⪍":"⪍","⪏":"⪏","‚":"‚","ł":"ł","⪦":"⪦","⩹":"⩹","⋉":"⋉","⥶":"⥶","⩻":"⩻","⦖":"⦖","◃":"◃","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","∺":"∺","¯":"¯","♂":"♂","✠":"✠","▮":"▮","⨩":"⨩","м":"м","—":"—","𝔪":"𝔪","℧":"℧","µ":"µ","⫰":"⫰","−":"−","⨪":"⨪","⫛":"⫛","⊧":"⊧","𝕞":"𝕞","𝓂":"𝓂","μ":"μ","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","⇍":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","⇏":"⇏","⊯":"⊯","⊮":"⊮","ń":"ń","∠⃒":"∠⃒","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","♮":"♮","⩃":"⩃","ň":"ň","ņ":"ņ","⩭̸":"⩭̸","⩂":"⩂","н":"н","–":"–","⇗":"⇗","⤤":"⤤","≐̸":"≐̸","⤨":"⤨","𝔫":"𝔫","↮":"↮","⫲":"⫲","⋼":"⋼","⋺":"⋺","њ":"њ","≦̸":"≦̸","↚":"↚","‥":"‥","𝕟":"𝕟","¬":"¬","⋹̸":"⋹̸","⋵̸":"⋵̸","⋷":"⋷","⋶":"⋶","⋾":"⋾","⋽":"⋽","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","↛":"↛","⤳̸":"⤳̸","↝̸":"↝̸","𝓃":"𝓃","⊄":"⊄","⫅̸":"⫅̸","⊅":"⊅","⫆̸":"⫆̸","ñ":"ñ","ν":"ν","#":"#","№":"№"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","⤧":"⤧","ó":"ó","ô":"ô","о":"о","ő":"ő","⨸":"⨸","⦼":"⦼","œ":"œ","⦿":"⦿","𝔬":"𝔬","˛":"˛","ò":"ò","⧁":"⧁","⦵":"⦵","⦾":"⦾","⦻":"⦻","⧀":"⧀","ō":"ō","ω":"ω","ο":"ο","⦶":"⦶","𝕠":"𝕠","⦷":"⦷","⦹":"⦹","∨":"∨","⩝":"⩝","ℴ":"ℴ","ª":"ª","º":"º","⊶":"⊶","⩖":"⩖","⩗":"⩗","⩛":"⩛","ø":"ø","⊘":"⊘","õ":"õ","⨶":"⨶","ö":"ö","⌽":"⌽","¶":"¶","⫳":"⫳","⫽":"⫽","п":"п","%":"%",".":".","‰":"‰","‱":"‱","𝔭":"𝔭","φ":"φ","ϕ":"ϕ","☎":"☎","π":"π","ϖ":"ϖ","ℎ":"ℎ","+":"+","⨣":"⨣","⨢":"⨢","⨥":"⨥","⩲":"⩲","⨦":"⨦","⨧":"⨧","⨕":"⨕","𝕡":"𝕡","£":"£","⪳":"⪳","⪷":"⪷","⪹":"⪹","⪵":"⪵","⋨":"⋨","′":"′","⌮":"⌮","⌒":"⌒","⌓":"⌓","⊰":"⊰","𝓅":"𝓅","ψ":"ψ"," ":" ","𝔮":"𝔮","𝕢":"𝕢","⁗":"⁗","𝓆":"𝓆","⨖":"⨖","?":"?","⤜":"⤜","⥤":"⥤","∽̱":"∽̱","ŕ":"ŕ","⦳":"⦳","⦒":"⦒","⦥":"⦥","»":"»","⥵":"⥵","⤠":"⤠","⤳":"⤳","⤞":"⤞","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"↝","⤚":"⤚","∶":"∶","❳":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"⦐","ř":"ř","ŗ":"ŗ","р":"р","⤷":"⤷","⥩":"⥩","↳":"↳","▭":"▭","⥽":"⥽","𝔯":"𝔯","⥬":"⥬","ρ":"ρ","ϱ":"ϱ","⇉":"⇉","⋌":"⋌","˚":"˚","‏":"‏","⎱":"⎱","⫮":"⫮","⟭":"⟭","⇾":"⇾","⦆":"⦆","𝕣":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","›":"›","𝓇":"𝓇","⋊":"⋊","▹":"▹","⧎":"⧎","⥨":"⥨","℞":"℞","ś":"ś","⪴":"⪴","⪸":"⪸","š":"š","ş":"ş","ŝ":"ŝ","⪶":"⪶","⪺":"⪺","⋩":"⋩","⨓":"⨓","с":"с","⋅":"⋅","⩦":"⩦","⇘":"⇘","§":"§",";":";","⤩":"⤩","✶":"✶","𝔰":"𝔰","♯":"♯","щ":"щ","ш":"ш","­":"­","σ":"σ","ς":"ς","⩪":"⩪","⪞":"⪞","⪠":"⪠","⪝":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","⨳":"⨳","⧤":"⧤","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ь","/":"/","⧄":"⧄","⌿":"⌿","𝕤":"𝕤","♠":"♠","⊓︀":"⊓︀","⊔︀":"⊔︀","𝓈":"𝓈","☆":"☆","⊂":"⊂","⫅":"⫅","⪽":"⪽","⫃":"⫃","⫁":"⫁","⫋":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⫇":"⫇","⫕":"⫕","⫓":"⫓","♪":"♪","¹":"¹","²":"²","³":"³","⫆":"⫆","⪾":"⪾","⫘":"⫘","⫄":"⫄","⟉":"⟉","⫗":"⫗","⥻":"⥻","⫂":"⫂","⫌":"⫌","⊋":"⊋","⫀":"⫀","⫈":"⫈","⫔":"⫔","⫖":"⫖","⇙":"⇙","⤪":"⤪","ß":"ß","⌖":"⌖","τ":"τ","ť":"ť","ţ":"ţ","т":"т","⌕":"⌕","𝔱":"𝔱","θ":"θ","ϑ":"ϑ","þ":"þ","×":"×","⨱":"⨱","⨰":"⨰","⌶":"⌶","⫱":"⫱","𝕥":"𝕥","⫚":"⫚","‴":"‴","▵":"▵","≜":"≜","◬":"◬","⨺":"⨺","⨹":"⨹","⧍":"⧍","⨻":"⨻","⏢":"⏢","𝓉":"𝓉","ц":"ц","ћ":"ћ","ŧ":"ŧ","⥣":"⥣","ú":"ú","ў":"ў","ŭ":"ŭ","û":"û","у":"у","ű":"ű","⥾":"⥾","𝔲":"𝔲","ù":"ù","▀":"▀","⌜":"⌜","⌏":"⌏","◸":"◸","ū":"ū","ų":"ų","𝕦":"𝕦","υ":"υ","⇈":"⇈","⌝":"⌝","⌎":"⌎","ů":"ů","◹":"◹","𝓊":"𝓊","⋰":"⋰","ũ":"ũ","ü":"ü","⦧":"⦧","⫨":"⫨","⫩":"⫩","⦜":"⦜","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","в":"в","⊻":"⊻","≚":"≚","⋮":"⋮","𝔳":"𝔳","𝕧":"𝕧","𝓋":"𝓋","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","≙":"≙","℘":"℘","𝔴":"𝔴","𝕨":"𝕨","𝓌":"𝓌","𝔵":"𝔵","ξ":"ξ","⋻":"⋻","𝕩":"𝕩","𝓍":"𝓍","ý":"ý","я":"я","ŷ":"ŷ","ы":"ы","¥":"¥","𝔶":"𝔶","ї":"ї","𝕪":"𝕪","𝓎":"𝓎","ю":"ю","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ζ":"ζ","𝔷":"𝔷","ж":"ж","⇝":"⇝","𝕫":"𝕫","𝓏":"𝓏","‍":"‍","‌":"‌"}}}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/numeric-unicode-map.js": -/*!***************************************************************!*\ - !*** ./node_modules/html-entities/lib/numeric-unicode-map.js ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}; - -/***/ }), - -/***/ "./node_modules/html-entities/lib/surrogate-pairs.js": -/*!***********************************************************!*\ - !*** ./node_modules/html-entities/lib/surrogate-pairs.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js": -/*!***************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js ***! - \***************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* binding */ WebSocketClient; } -/* harmony export */ }); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } - - - -var WebSocketClient = /*#__PURE__*/function () { - /** - * @param {string} url - */ - function WebSocketClient(url) { - _classCallCheck(this, WebSocketClient); - - this.client = new WebSocket(url); - - this.client.onerror = function (error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_0__.log.error(error); - }; - } - /** - * @param {(...args: any[]) => void} f - */ - - - _createClass(WebSocketClient, [{ - key: "onOpen", - value: function onOpen(f) { - this.client.onopen = f; - } - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onClose", - value: function onClose(f) { - this.client.onclose = f; - } // call f with the message string as the first argument - - /** - * @param {(...args: any[]) => void} f - */ - - }, { - key: "onMessage", - value: function onMessage(f) { - this.client.onmessage = function (e) { - f(e.data); - }; - } - }]); - - return WebSocketClient; -}(); - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10": -/*!**********************************************************************************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10 ***! - \**********************************************************************************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var __resourceQuery = "?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/hot/log.js */ "./node_modules/webpack/hot/log.js"); -/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/stripAnsi.js */ "./node_modules/webpack-dev-server/client/utils/stripAnsi.js"); -/* harmony import */ var _utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/parseURL.js */ "./node_modules/webpack-dev-server/client/utils/parseURL.js"); -/* harmony import */ var _socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./socket.js */ "./node_modules/webpack-dev-server/client/socket.js"); -/* harmony import */ var _overlay_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./overlay.js */ "./node_modules/webpack-dev-server/client/overlay.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* harmony import */ var _utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/sendMessage.js */ "./node_modules/webpack-dev-server/client/utils/sendMessage.js"); -/* harmony import */ var _utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/reloadApp.js */ "./node_modules/webpack-dev-server/client/utils/reloadApp.js"); -/* harmony import */ var _utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/createSocketURL.js */ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js"); -/* global __resourceQuery, __webpack_hash__ */ -/// - - - - - - - - - -/** - * @typedef {Object} Options - * @property {boolean} hot - * @property {boolean} liveReload - * @property {boolean} progress - * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay - * @property {string} [logging] - * @property {number} [reconnect] - */ - -/** - * @typedef {Object} Status - * @property {boolean} isUnloading - * @property {string} currentHash - * @property {string} [previousHash] - */ - -/** - * @type {Status} - */ - -var status = { - isUnloading: false, - // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement - // eslint-disable-next-line camelcase - currentHash: true ? __webpack_require__.h() : 0 -}; -/** @type {Options} */ - -var options = { - hot: false, - liveReload: false, - progress: false, - overlay: false -}; -var parsedResourceQuery = (0,_utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__["default"])(__resourceQuery); - -if (parsedResourceQuery.hot === "true") { - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); -} - -if (parsedResourceQuery["live-reload"] === "true") { - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); -} - -if (parsedResourceQuery.logging) { - options.logging = parsedResourceQuery.logging; -} - -if (typeof parsedResourceQuery.reconnect !== "undefined") { - options.reconnect = Number(parsedResourceQuery.reconnect); -} -/** - * @param {string} level - */ - - -function setAllLogLevel(level) { - // This is needed because the HMR logger operate separately from dev server logger - webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default().setLogLevel(level === "verbose" || level === "log" ? "info" : level); - (0,_utils_log_js__WEBPACK_IMPORTED_MODULE_5__.setLogLevel)(level); -} - -if (options.logging) { - setAllLogLevel(options.logging); -} - -self.addEventListener("beforeunload", function () { - status.isUnloading = true; -}); -var onSocketMessage = { - hot: function hot() { - if (parsedResourceQuery.hot === "false") { - return; - } - - options.hot = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); - }, - liveReload: function liveReload() { - if (parsedResourceQuery["live-reload"] === "false") { - return; - } - - options.liveReload = true; - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); - }, - invalid: function invalid() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("App updated. Recompiling..."); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain. - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Invalid"); - }, - - /** - * @param {string} hash - */ - hash: function hash(_hash) { - status.previousHash = status.currentHash; - status.currentHash = _hash; - }, - logging: setAllLogLevel, - - /** - * @param {boolean} value - */ - overlay: function overlay(value) { - if (typeof document === "undefined") { - return; - } - - options.overlay = value; - }, - - /** - * @param {number} value - */ - reconnect: function reconnect(value) { - if (parsedResourceQuery.reconnect === "false") { - return; - } - - options.reconnect = value; - }, - - /** - * @param {boolean} value - */ - progress: function progress(value) { - options.progress = value; - }, - - /** - * @param {{ pluginName?: string, percent: number, msg: string }} data - */ - "progress-update": function progressUpdate(data) { - if (options.progress) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(data.pluginName ? "[".concat(data.pluginName, "] ") : "").concat(data.percent, "% - ").concat(data.msg, ".")); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Progress", data); - }, - "still-ok": function stillOk() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Nothing changed."); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("StillOk"); - }, - ok: function ok() { - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Ok"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - // TODO: remove in v5 in favor of 'static-changed' - - /** - * @param {string} file - */ - "content-changed": function contentChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {string} file - */ - "static-changed": function staticChanged(file) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); - self.location.reload(); - }, - - /** - * @param {Error[]} warnings - * @param {any} params - */ - warnings: function warnings(_warnings, params) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn("Warnings while compiling."); - - var printableWarnings = _warnings.map(function (error) { - var _formatProblem = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("warning", error), - header = _formatProblem.header, - body = _formatProblem.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Warnings", printableWarnings); - - for (var i = 0; i < printableWarnings.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn(printableWarnings[i]); - } - - var needShowOverlayForWarnings = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.warnings; - - if (needShowOverlayForWarnings) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("warning", _warnings, trustedTypesPolicyName || null); - } - - if (params && params.preventReloading) { - return; - } - - (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); - }, - - /** - * @param {Error[]} errors - */ - errors: function errors(_errors) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error("Errors while compiling. Reload prevented."); - - var printableErrors = _errors.map(function (error) { - var _formatProblem2 = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("error", error), - header = _formatProblem2.header, - body = _formatProblem2.body; - - return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); - }); - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Errors", printableErrors); - - for (var i = 0; i < printableErrors.length; i++) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(printableErrors[i]); - } - - var needShowOverlayForErrors = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.errors; - - if (needShowOverlayForErrors) { - var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("error", _errors, trustedTypesPolicyName || null); - } - }, - - /** - * @param {Error} error - */ - error: function error(_error) { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(_error); - }, - close: function close() { - _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Disconnected!"); - - if (options.overlay) { - (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); - } - - (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Close"); - } -}; -var socketURL = (0,_utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__["default"])(parsedResourceQuery); -(0,_socket_js__WEBPACK_IMPORTED_MODULE_3__["default"])(socketURL, onSocketMessage, options.reconnect); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/modules/logger/index.js": -/*!************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/modules/logger/index.js ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./client-src/modules/logger/SyncBailHookFake.js": -/*!*******************************************************!*\ - !*** ./client-src/modules/logger/SyncBailHookFake.js ***! - \*******************************************************/ -/***/ (function(module) { - - -/** - * Client stub for tapable SyncBailHook - */ - -module.exports = function clientTapableSyncBailHook() { - return { - call: function call() {} - }; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/Logger.js": -/*!****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/Logger.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -var LogType = Object.freeze({ - error: - /** @type {"error"} */ - "error", - // message, c style arguments - warn: - /** @type {"warn"} */ - "warn", - // message, c style arguments - info: - /** @type {"info"} */ - "info", - // message, c style arguments - log: - /** @type {"log"} */ - "log", - // message, c style arguments - debug: - /** @type {"debug"} */ - "debug", - // message, c style arguments - trace: - /** @type {"trace"} */ - "trace", - // no arguments - group: - /** @type {"group"} */ - "group", - // [label] - groupCollapsed: - /** @type {"groupCollapsed"} */ - "groupCollapsed", - // [label] - groupEnd: - /** @type {"groupEnd"} */ - "groupEnd", - // [label] - profile: - /** @type {"profile"} */ - "profile", - // [profileName] - profileEnd: - /** @type {"profileEnd"} */ - "profileEnd", - // [profileName] - time: - /** @type {"time"} */ - "time", - // name, time as [seconds, nanoseconds] - clear: - /** @type {"clear"} */ - "clear", - // no arguments - status: - /** @type {"status"} */ - "status" // message, arguments - -}); -exports.LogType = LogType; -/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */ - -var LOG_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger raw log method"); -var TIMERS_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger times"); -var TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger aggregated times"); - -var WebpackLogger = /*#__PURE__*/function () { - /** - * @param {function(LogTypeEnum, any[]=): void} log log function - * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger - */ - function WebpackLogger(log, getChildLogger) { - _classCallCheck(this, WebpackLogger); - - this[LOG_SYMBOL] = log; - this.getChildLogger = getChildLogger; - } - - _createClass(WebpackLogger, [{ - key: "error", - value: function error() { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - }, { - key: "warn", - value: function warn() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - this[LOG_SYMBOL](LogType.warn, args); - } - }, { - key: "info", - value: function info() { - for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - args[_key3] = arguments[_key3]; - } - - this[LOG_SYMBOL](LogType.info, args); - } - }, { - key: "log", - value: function log() { - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - args[_key4] = arguments[_key4]; - } - - this[LOG_SYMBOL](LogType.log, args); - } - }, { - key: "debug", - value: function debug() { - for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } - - this[LOG_SYMBOL](LogType.debug, args); - } - }, { - key: "assert", - value: function assert(assertion) { - if (!assertion) { - for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { - args[_key6 - 1] = arguments[_key6]; - } - - this[LOG_SYMBOL](LogType.error, args); - } - } - }, { - key: "trace", - value: function trace() { - this[LOG_SYMBOL](LogType.trace, ["Trace"]); - } - }, { - key: "clear", - value: function clear() { - this[LOG_SYMBOL](LogType.clear); - } - }, { - key: "status", - value: function status() { - for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - args[_key7] = arguments[_key7]; - } - - this[LOG_SYMBOL](LogType.status, args); - } - }, { - key: "group", - value: function group() { - for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { - args[_key8] = arguments[_key8]; - } - - this[LOG_SYMBOL](LogType.group, args); - } - }, { - key: "groupCollapsed", - value: function groupCollapsed() { - for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { - args[_key9] = arguments[_key9]; - } - - this[LOG_SYMBOL](LogType.groupCollapsed, args); - } - }, { - key: "groupEnd", - value: function groupEnd() { - for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) { - args[_key10] = arguments[_key10]; - } - - this[LOG_SYMBOL](LogType.groupEnd, args); - } - }, { - key: "profile", - value: function profile(label) { - this[LOG_SYMBOL](LogType.profile, [label]); - } - }, { - key: "profileEnd", - value: function profileEnd(label) { - this[LOG_SYMBOL](LogType.profileEnd, [label]); - } - }, { - key: "time", - value: function time(label) { - this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map(); - this[TIMERS_SYMBOL].set(label, process.hrtime()); - } - }, { - key: "timeLog", - value: function timeLog(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeLog()")); - } - - var time = process.hrtime(prev); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeEnd", - value: function timeEnd(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeEnd()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }, { - key: "timeAggregate", - value: function timeAggregate(label) { - var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); - - if (!prev) { - throw new Error("No such label '".concat(label, "' for WebpackLogger.timeAggregate()")); - } - - var time = process.hrtime(prev); - this[TIMERS_SYMBOL].delete(label); - this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map(); - var current = this[TIMERS_AGGREGATES_SYMBOL].get(label); - - if (current !== undefined) { - if (time[1] + current[1] > 1e9) { - time[0] += current[0] + 1; - time[1] = time[1] - 1e9 + current[1]; - } else { - time[0] += current[0]; - time[1] += current[1]; - } - } - - this[TIMERS_AGGREGATES_SYMBOL].set(label, time); - } - }, { - key: "timeAggregateEnd", - value: function timeAggregateEnd(label) { - if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return; - var time = this[TIMERS_AGGREGATES_SYMBOL].get(label); - if (time === undefined) return; - this[TIMERS_AGGREGATES_SYMBOL].delete(label); - this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); - } - }]); - - return WebpackLogger; -}(); - -exports.Logger = WebpackLogger; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/createConsoleLogger.js": -/*!*****************************************************************!*\ - !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***! - \*****************************************************************/ -/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_10785__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _iterableToArray(iter) { - if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); -} - -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) return _arrayLikeToArray(arr); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) { - arr2[i] = arr[i]; - } - - return arr2; -} - -var _require = __nested_webpack_require_10785__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - LogType = _require.LogType; -/** @typedef {import("../../declarations/WebpackOptions").FilterItemTypes} FilterItemTypes */ - -/** @typedef {import("../../declarations/WebpackOptions").FilterTypes} FilterTypes */ - -/** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */ - -/** @typedef {function(string): boolean} FilterFunction */ - -/** - * @typedef {Object} LoggerConsole - * @property {function(): void} clear - * @property {function(): void} trace - * @property {(...args: any[]) => void} info - * @property {(...args: any[]) => void} log - * @property {(...args: any[]) => void} warn - * @property {(...args: any[]) => void} error - * @property {(...args: any[]) => void=} debug - * @property {(...args: any[]) => void=} group - * @property {(...args: any[]) => void=} groupCollapsed - * @property {(...args: any[]) => void=} groupEnd - * @property {(...args: any[]) => void=} status - * @property {(...args: any[]) => void=} profile - * @property {(...args: any[]) => void=} profileEnd - * @property {(...args: any[]) => void=} logTime - */ - -/** - * @typedef {Object} LoggerOptions - * @property {false|true|"none"|"error"|"warn"|"info"|"log"|"verbose"} level loglevel - * @property {FilterTypes|boolean} debug filter for debug logging - * @property {LoggerConsole} console the console to log to - */ - -/** - * @param {FilterItemTypes} item an input item - * @returns {FilterFunction} filter function - */ - - -var filterToFunction = function filterToFunction(item) { - if (typeof item === "string") { - var regExp = new RegExp("[\\\\/]".concat(item.replace( // eslint-disable-next-line no-useless-escape - /[-[\]{}()*+?.\\^$|]/g, "\\$&"), "([\\\\/]|$|!|\\?)")); - return function (ident) { - return regExp.test(ident); - }; - } - - if (item && typeof item === "object" && typeof item.test === "function") { - return function (ident) { - return item.test(ident); - }; - } - - if (typeof item === "function") { - return item; - } - - if (typeof item === "boolean") { - return function () { - return item; - }; - } -}; -/** - * @enum {number} - */ - - -var LogLevel = { - none: 6, - false: 6, - error: 5, - warn: 4, - info: 3, - log: 2, - true: 2, - verbose: 1 -}; -/** - * @param {LoggerOptions} options options object - * @returns {function(string, LogTypeEnum, any[]): void} logging function - */ - -module.exports = function (_ref) { - var _ref$level = _ref.level, - level = _ref$level === void 0 ? "info" : _ref$level, - _ref$debug = _ref.debug, - debug = _ref$debug === void 0 ? false : _ref$debug, - console = _ref.console; - var debugFilters = typeof debug === "boolean" ? [function () { - return debug; - }] : - /** @type {FilterItemTypes[]} */ - [].concat(debug).map(filterToFunction); - /** @type {number} */ - - var loglevel = LogLevel["".concat(level)] || 0; - /** - * @param {string} name name of the logger - * @param {LogTypeEnum} type type of the log entry - * @param {any[]} args arguments of the log entry - * @returns {void} - */ - - var logger = function logger(name, type, args) { - var labeledArgs = function labeledArgs() { - if (Array.isArray(args)) { - if (args.length > 0 && typeof args[0] === "string") { - return ["[".concat(name, "] ").concat(args[0])].concat(_toConsumableArray(args.slice(1))); - } else { - return ["[".concat(name, "]")].concat(_toConsumableArray(args)); - } - } else { - return []; - } - }; - - var debug = debugFilters.some(function (f) { - return f(name); - }); - - switch (type) { - case LogType.debug: - if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.debug === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.debug.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.log: - if (!debug && loglevel > LogLevel.log) return; - console.log.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.info: - if (!debug && loglevel > LogLevel.info) return; - console.info.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.warn: - if (!debug && loglevel > LogLevel.warn) return; - console.warn.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.error: - if (!debug && loglevel > LogLevel.error) return; - console.error.apply(console, _toConsumableArray(labeledArgs())); - break; - - case LogType.trace: - if (!debug) return; - console.trace(); - break; - - case LogType.groupCollapsed: - if (!debug && loglevel > LogLevel.log) return; - - if (!debug && loglevel > LogLevel.verbose) { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.groupCollapsed === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - } - - // falls through - - case LogType.group: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.group === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.group.apply(console, _toConsumableArray(labeledArgs())); - } else { - console.log.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.groupEnd: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.groupEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.groupEnd(); - } - - break; - - case LogType.time: - { - if (!debug && loglevel > LogLevel.log) return; - var ms = args[1] * 1000 + args[2] / 1000000; - var msg = "[".concat(name, "] ").concat(args[0], ": ").concat(ms, " ms"); - - if (typeof console.logTime === "function") { - console.logTime(msg); - } else { - console.log(msg); - } - - break; - } - - case LogType.profile: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profile === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profile.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.profileEnd: - // eslint-disable-next-line node/no-unsupported-features/node-builtins - if (typeof console.profileEnd === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.profileEnd.apply(console, _toConsumableArray(labeledArgs())); - } - - break; - - case LogType.clear: - if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins - - if (typeof console.clear === "function") { - // eslint-disable-next-line node/no-unsupported-features/node-builtins - console.clear(); - } - - break; - - case LogType.status: - if (!debug && loglevel > LogLevel.info) return; - - if (typeof console.status === "function") { - if (args.length === 0) { - console.status(); - } else { - console.status.apply(console, _toConsumableArray(labeledArgs())); - } - } else { - if (args.length !== 0) { - console.info.apply(console, _toConsumableArray(labeledArgs())); - } - } - - break; - - default: - throw new Error("Unexpected LogType ".concat(type)); - } - }; - - return logger; -}; - -/***/ }), - -/***/ "./node_modules/webpack/lib/logging/runtime.js": -/*!*****************************************************!*\ - !*** ./node_modules/webpack/lib/logging/runtime.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_20872__) { - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - - -function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - return _extends.apply(this, arguments); -} - -var SyncBailHook = __nested_webpack_require_20872__(/*! tapable/lib/SyncBailHook */ "./client-src/modules/logger/SyncBailHookFake.js"); - -var _require = __nested_webpack_require_20872__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), - Logger = _require.Logger; - -var createConsoleLogger = __nested_webpack_require_20872__(/*! ./createConsoleLogger */ "./node_modules/webpack/lib/logging/createConsoleLogger.js"); -/** @type {createConsoleLogger.LoggerOptions} */ - - -var currentDefaultLoggerOptions = { - level: "info", - debug: false, - console: console -}; -var currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -/** - * @param {string} name name of the logger - * @returns {Logger} a logger - */ - -exports.getLogger = function (name) { - return new Logger(function (type, args) { - if (exports.hooks.log.call(name, type, args) === undefined) { - currentDefaultLogger(name, type, args); - } - }, function (childName) { - return exports.getLogger("".concat(name, "/").concat(childName)); - }); -}; -/** - * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options - * @returns {void} - */ - - -exports.configureDefaultLogger = function (options) { - _extends(currentDefaultLoggerOptions, options); - - currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); -}; - -exports.hooks = { - log: new SyncBailHook(["origin", "type", "args"]) -}; - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __nested_webpack_require_23009__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_23009__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __nested_webpack_require_23009__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__nested_webpack_require_23009__.o(definition, key) && !__nested_webpack_require_23009__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __nested_webpack_require_23009__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __nested_webpack_require_23009__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -!function() { -/*!********************************************!*\ - !*** ./client-src/modules/logger/index.js ***! - \********************************************/ -__nested_webpack_require_23009__.r(__webpack_exports__); -/* harmony export */ __nested_webpack_require_23009__.d(__webpack_exports__, { -/* harmony export */ "default": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; } -/* harmony export */ }); -/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_23009__(/*! webpack/lib/logging/runtime.js */ "./node_modules/webpack/lib/logging/runtime.js"); - -}(); -var __webpack_export_target__ = exports; -for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; -if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); -/******/ })() -; - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/overlay.js": -/*!***********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/overlay.js ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "formatProblem": function() { return /* binding */ formatProblem; }, -/* harmony export */ "hide": function() { return /* binding */ hide; }, -/* harmony export */ "show": function() { return /* binding */ show; } -/* harmony export */ }); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ansi-html-community */ "./node_modules/ansi-html-community/index.js"); -/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ansi_html_community__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); -/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_1__); -// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) -// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). - - -var colors = { - reset: ["transparent", "transparent"], - black: "181818", - red: "E36049", - green: "B3CB74", - yellow: "FFD080", - blue: "7CAFC2", - magenta: "7FACCA", - cyan: "C3C2EF", - lightgrey: "EBE7E3", - darkgrey: "6D7891" -}; -/** @type {HTMLIFrameElement | null | undefined} */ - -var iframeContainerElement; -/** @type {HTMLDivElement | null | undefined} */ - -var containerElement; -/** @type {Array<(element: HTMLDivElement) => void>} */ - -var onLoadQueue = []; -/** @type {TrustedTypePolicy | undefined} */ - -var overlayTrustedTypesPolicy; -ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default().setColors(colors); -/** - * @param {string | null} trustedTypesPolicyName - */ - -function createContainer(trustedTypesPolicyName) { - // Enable Trusted Types if they are available in the current browser. - if (window.trustedTypes) { - overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || "webpack-dev-server#overlay", { - createHTML: function createHTML(value) { - return value; - } - }); - } - - iframeContainerElement = document.createElement("iframe"); - iframeContainerElement.id = "webpack-dev-server-client-overlay"; - iframeContainerElement.src = "about:blank"; - iframeContainerElement.style.position = "fixed"; - iframeContainerElement.style.left = 0; - iframeContainerElement.style.top = 0; - iframeContainerElement.style.right = 0; - iframeContainerElement.style.bottom = 0; - iframeContainerElement.style.width = "100vw"; - iframeContainerElement.style.height = "100vh"; - iframeContainerElement.style.border = "none"; - iframeContainerElement.style.zIndex = 9999999999; - - iframeContainerElement.onload = function () { - containerElement = - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.createElement("div"); - containerElement.id = "webpack-dev-server-client-overlay-div"; - containerElement.style.position = "fixed"; - containerElement.style.boxSizing = "border-box"; - containerElement.style.left = 0; - containerElement.style.top = 0; - containerElement.style.right = 0; - containerElement.style.bottom = 0; - containerElement.style.width = "100vw"; - containerElement.style.height = "100vh"; - containerElement.style.backgroundColor = "rgba(0, 0, 0, 0.85)"; - containerElement.style.color = "#E8E8E8"; - containerElement.style.fontFamily = "Menlo, Consolas, monospace"; - containerElement.style.fontSize = "large"; - containerElement.style.padding = "2rem"; - containerElement.style.lineHeight = "1.2"; - containerElement.style.whiteSpace = "pre-wrap"; - containerElement.style.overflow = "auto"; - var headerElement = document.createElement("span"); - headerElement.innerText = "Compiled with problems:"; - var closeButtonElement = document.createElement("button"); - closeButtonElement.innerText = "X"; - closeButtonElement.style.background = "transparent"; - closeButtonElement.style.border = "none"; - closeButtonElement.style.fontSize = "20px"; - closeButtonElement.style.fontWeight = "bold"; - closeButtonElement.style.color = "white"; - closeButtonElement.style.cursor = "pointer"; - closeButtonElement.style.cssFloat = "right"; // @ts-ignore - - closeButtonElement.style.styleFloat = "right"; - closeButtonElement.addEventListener("click", function () { - hide(); - }); - containerElement.appendChild(headerElement); - containerElement.appendChild(closeButtonElement); - containerElement.appendChild(document.createElement("br")); - containerElement.appendChild(document.createElement("br")); - /** @type {Document} */ - - /** @type {HTMLIFrameElement} */ - iframeContainerElement.contentDocument.body.appendChild(containerElement); - onLoadQueue.forEach(function (onLoad) { - onLoad( - /** @type {HTMLDivElement} */ - containerElement); - }); - onLoadQueue = []; - /** @type {HTMLIFrameElement} */ - - iframeContainerElement.onload = null; - }; - - document.body.appendChild(iframeContainerElement); -} -/** - * @param {(element: HTMLDivElement) => void} callback - * @param {string | null} trustedTypesPolicyName - */ - - -function ensureOverlayExists(callback, trustedTypesPolicyName) { - if (containerElement) { - // Everything is ready, call the callback right away. - callback(containerElement); - return; - } - - onLoadQueue.push(callback); - - if (iframeContainerElement) { - return; - } - - createContainer(trustedTypesPolicyName); -} // Successful compilation. - - -function hide() { - if (!iframeContainerElement) { - return; - } // Clean up and reset internal state. - - - document.body.removeChild(iframeContainerElement); - iframeContainerElement = null; - containerElement = null; -} -/** - * @param {string} type - * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item - * @returns {{ header: string, body: string }} - */ - - -function formatProblem(type, item) { - var header = type === "warning" ? "WARNING" : "ERROR"; - var body = ""; - - if (typeof item === "string") { - body += item; - } else { - var file = item.file || ""; // eslint-disable-next-line no-nested-ternary - - var moduleName = item.moduleName ? item.moduleName.indexOf("!") !== -1 ? "".concat(item.moduleName.replace(/^(\s|\S)*!/, ""), " (").concat(item.moduleName, ")") : "".concat(item.moduleName) : ""; - var loc = item.loc; - header += "".concat(moduleName || file ? " in ".concat(moduleName ? "".concat(moduleName).concat(file ? " (".concat(file, ")") : "") : file).concat(loc ? " ".concat(loc) : "") : ""); - body += item.message || ""; - } - - return { - header: header, - body: body - }; -} // Compilation with errors (e.g. syntax error or missing modules). - -/** - * @param {string} type - * @param {Array} messages - * @param {string | null} trustedTypesPolicyName - */ - - -function show(type, messages, trustedTypesPolicyName) { - ensureOverlayExists(function () { - messages.forEach(function (message) { - var entryElement = document.createElement("div"); - var typeElement = document.createElement("span"); - - var _formatProblem = formatProblem(type, message), - header = _formatProblem.header, - body = _formatProblem.body; - - typeElement.innerText = header; - typeElement.style.color = "#".concat(colors.red); // Make it look similar to our terminal. - - var text = ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default()((0,html_entities__WEBPACK_IMPORTED_MODULE_1__.encode)(body)); - var messageTextNode = document.createElement("div"); - messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text; - entryElement.appendChild(typeElement); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(messageTextNode); - entryElement.appendChild(document.createElement("br")); - entryElement.appendChild(document.createElement("br")); - /** @type {HTMLDivElement} */ - - containerElement.appendChild(entryElement); - }); - }, trustedTypesPolicyName); -} - - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/socket.js": -/*!**********************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/socket.js ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "client": function() { return /* binding */ client; } -/* harmony export */ }); -/* harmony import */ var _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); -/* provided dependency */ var __webpack_dev_server_client__ = __webpack_require__(/*! ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); -/* global __webpack_dev_server_client__ */ - - // this WebsocketClient is here as a default fallback, in case the client is not injected - -/* eslint-disable camelcase */ - -var Client = // eslint-disable-next-line no-nested-ternary -typeof __webpack_dev_server_client__ !== "undefined" ? typeof __webpack_dev_server_client__.default !== "undefined" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__["default"]; -/* eslint-enable camelcase */ - -var retries = 0; -var maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance -// It is mutable to enforce singleton -// eslint-disable-next-line import/no-mutable-exports - -var client = null; -/** - * @param {string} url - * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers - * @param {number} [reconnect] - */ - -var socket = function initSocket(url, handlers, reconnect) { - client = new Client(url); - client.onOpen(function () { - retries = 0; - - if (typeof reconnect !== "undefined") { - maxRetries = reconnect; - } - }); - client.onClose(function () { - if (retries === 0) { - handlers.close(); - } // Try to reconnect. - - - client = null; // After 10 retries stop trying, to prevent logspam. - - if (retries < maxRetries) { - // Exponentially increase timeout to reconnect. - // Respectfully copied from the package `got`. - // eslint-disable-next-line no-restricted-properties - var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; - retries += 1; - _utils_log_js__WEBPACK_IMPORTED_MODULE_1__.log.info("Trying to reconnect..."); - setTimeout(function () { - socket(url, handlers, reconnect); - }, retryInMs); - } - }); - client.onMessage( - /** - * @param {any} data - */ - function (data) { - var message = JSON.parse(data); - - if (handlers[message.type]) { - handlers[message.type](message.data, message.params); - } - }); -}; - -/* harmony default export */ __webpack_exports__["default"] = (socket); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js": -/*!*************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/createSocketURL.js ***! - \*************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL - * @returns {string} - */ -function format(objURL) { - var protocol = objURL.protocol || ""; - - if (protocol && protocol.substr(-1) !== ":") { - protocol += ":"; - } - - var auth = objURL.auth || ""; - - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ":"); - auth += "@"; - } - - var host = ""; - - if (objURL.hostname) { - host = auth + (objURL.hostname.indexOf(":") === -1 ? objURL.hostname : "[".concat(objURL.hostname, "]")); - - if (objURL.port) { - host += ":".concat(objURL.port); - } - } - - var pathname = objURL.pathname || ""; - - if (objURL.slashes) { - host = "//".concat(host || ""); - - if (pathname && pathname.charAt(0) !== "/") { - pathname = "/".concat(pathname); - } - } else if (!host) { - host = ""; - } - - var search = objURL.search || ""; - - if (search && search.charAt(0) !== "?") { - search = "?".concat(search); - } - - var hash = objURL.hash || ""; - - if (hash && hash.charAt(0) !== "#") { - hash = "#".concat(hash); - } - - pathname = pathname.replace(/[?#]/g, - /** - * @param {string} match - * @returns {string} - */ - function (match) { - return encodeURIComponent(match); - }); - search = search.replace("#", "%23"); - return "".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash); -} -/** - * @param {URL & { fromCurrentScript?: boolean }} parsedURL - * @returns {string} - */ - - -function createSocketURL(parsedURL) { - var hostname = parsedURL.hostname; // Node.js module parses it as `::` - // `new URL(urlString, [baseURLString])` parses it as '[::]' - - var isInAddrAny = hostname === "0.0.0.0" || hostname === "::" || hostname === "[::]"; // why do we need this check? - // hostname n/a for file protocol (example, when using electron, ionic) - // see: https://github.com/webpack/webpack-dev-server/pull/384 - - if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf("http") === 0) { - hostname = self.location.hostname; - } - - var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets. - - if (socketURLProtocol === "auto:" || hostname && isInAddrAny && self.location.protocol === "https:") { - socketURLProtocol = self.location.protocol; - } - - socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, "ws"); - var socketURLAuth = ""; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property - // Parse authentication credentials in case we need them - - if (parsedURL.username) { - socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username, - // we only include password if the username is not empty. - - if (parsedURL.password) { - // Result: : - socketURLAuth = socketURLAuth.concat(":", parsedURL.password); - } - } // In case the host is a raw IPv6 address, it can be enclosed in - // the brackets as the brackets are needed in the final URL string. - // Need to remove those as url.format blindly adds its own set of brackets - // if the host string contains colons. That would lead to non-working - // double brackets (e.g. [[::]]) host - // - // All of these web socket url params are optionally passed in through resourceQuery, - // so we need to fall back to the default if they are not provided - - - var socketURLHostname = (hostname || self.location.hostname || "localhost").replace(/^\[(.*)\]$/, "$1"); - var socketURLPort = parsedURL.port; - - if (!socketURLPort || socketURLPort === "0") { - socketURLPort = self.location.port; - } // If path is provided it'll be passed in via the resourceQuery as a - // query param so it has to be parsed out of the querystring in order for the - // client to open the socket to the correct location. - - - var socketURLPathname = "/ws"; - - if (parsedURL.pathname && !parsedURL.fromCurrentScript) { - socketURLPathname = parsedURL.pathname; - } - - return format({ - protocol: socketURLProtocol, - auth: socketURLAuth, - hostname: socketURLHostname, - port: socketURLPort, - pathname: socketURLPathname, - slashes: true - }); -} - -/* harmony default export */ __webpack_exports__["default"] = (createSocketURL); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js": -/*!********************************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js ***! - \********************************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/** - * @returns {string} - */ -function getCurrentScriptSource() { - // `document.currentScript` is the most accurate way to find the current script, - // but is not supported in all browsers. - if (document.currentScript) { - return document.currentScript.getAttribute("src"); - } // Fallback to getting all scripts running in the document. - - - var scriptElements = document.scripts || []; - var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) { - return element.getAttribute("src"); - }); - - if (scriptElementsWithSrc.length > 0) { - var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1]; - return currentScript.getAttribute("src"); - } // Fail as there was no script to use. - - - throw new Error("[webpack-dev-server] Failed to get current script source."); -} - -/* harmony default export */ __webpack_exports__["default"] = (getCurrentScriptSource); - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/log.js": -/*!*************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/log.js ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "log": function() { return /* binding */ log; }, -/* harmony export */ "setLogLevel": function() { return /* binding */ setLogLevel; } -/* harmony export */ }); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger/index.js */ "./node_modules/webpack-dev-server/client/modules/logger/index.js"); -/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__); - -var name = "webpack-dev-server"; // default level is set on the client side, so it does not need -// to be set by the CLI or API - -var defaultLevel = "info"; // options new options, merge with old options - -/** - * @param {false | true | "none" | "error" | "warn" | "info" | "log" | "verbose"} level - * @returns {void} - */ - -function setLogLevel(level) { - _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().configureDefaultLogger({ - level: level - }); -} - -setLogLevel(defaultLevel); -var log = _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().getLogger(name); - - -/***/ }), - -/***/ "./node_modules/webpack-dev-server/client/utils/parseURL.js": -/*!******************************************************************!*\ - !*** ./node_modules/webpack-dev-server/client/utils/parseURL.js ***! - \******************************************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _getCurrentScriptSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCurrentScriptSource.js */ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js"); - -/** - * @param {string} resourceQuery - * @returns {{ [key: string]: string | boolean }} - */ - -function parseURL(resourceQuery) { - /** @type {{ [key: string]: string }} */ - var options = {}; - - if (typeof resourceQuery === "string" && resourceQuery !== "") { - var searchParams = resourceQuery.slice(1).split("&"); - - for (var i = 0; i < searchParams.length; i++) { - var pair = searchParams[i].split("="); - options[pair[0]] = decodeURIComponent(pair[1]); - } - } else { - // Else, get the url from the
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l u
Stack up / down
q a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete backspace
Export Image(s)
e
'),t.appendChild(i),t},this._keymapper.addTo(this._map)},_toggleKeymapper:function(t){t.preventDefault(),this._container.className="ldi-keymapper leaflet-control"===this._container.className?"ldi-keymapper-hide leaflet-control":"ldi-keymapper leaflet-control",this._scrollWrapper.style.display="none"===this._scrollWrapper.style.display?"block":"none",this._toggler.innerHTML="close"===this._toggler.innerHTML?L.IconUtil.create("keyboard_open"):"close",L.IconUtil.toggleTitle(this._toggler,"Show keymap","Hide keymap"),L.DomUtil.toggleClass(this._toggler,"close-icon")},_injectIconSet:function(){if(!this._map.getContainer().querySelector("#keymapper-iconset")){var t=L.DomUtil.create("div","");t.id="keymapper-iconset",t.setAttribute("hidden","hidden"),this._iconset=(new L.KeymapperIconSet).render(),t.innerHTML=this._iconset,this._map.getContainer().querySelector(".leaflet-control-container").appendChild(t)}}}),L.DistortableImage.Keymapper.addInitHook((function(){L.DistortableImage.Keymapper.prototype._n=L.DistortableImage.Keymapper.prototype._n?L.DistortableImage.Keymapper.prototype._n+1:1,1!==L.DistortableImage.Keymapper.prototype._n||L.Browser.mobile||(t.enable(),t._injectIconSet())})),L.distortableImage.keymapper=function(t,e){return new L.DistortableImage.Keymapper(t,e)}},428:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableCollection.Edit=L.Handler.extend({options:{keymap:L.distortableImage.group_action_map},initialize:function(t,e){this._group=t,this._exportOpts=t.options.exportOpts,L.setOptions(this,e),L.distortableImage.group_action_map.Escape="_decollectAll"},addHooks:function(){var t=this._group._map;this.editActions=this.options.actions,this.runExporter=L.bind(L.Utils.getNestedVal(this,"_exportOpts","exporter")||this.startExport,this),L.DomEvent.on(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.on(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._group.editable=!0,this._group.eachLayer((function(t){return t.editing.enable()}))},removeHooks:function(){var t=this._group._map;L.DomEvent.off(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.off(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._decollectAll(),this._group.editable=!1,this._group.eachLayer((function(t){return t.editing.disable()}))},enable:function(){return this._enabled=!0,this.addHooks(),this},disable:function(){return this._enabled=!1,this.removeHooks(),this},_onKeyDown:function(t){var e=this.options.keymap[t.key];this[e]&&this._group.anyCollected()&&this[e].call(this)},_singleClick:function(t){"singleclick"===t.type&&this._decollectAll(t)},_singleClickListeners:function(){var t=this._group._map;L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.on(t,"singleclick",this._decollectAll,this)},_resetClickListeners:function(){var t=this._group._map;L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.off(t,"singleclick",this._decollectAll,this)},_decollectAll:function(t){var e;t&&(e=t.originalEvent),e&&(e.shiftKey||e.target instanceof HTMLImageElement)||(this._group.eachLayer((function(t){L.DomUtil.removeClass(t.getElement(),"collected"),t.deselect()})),this._removeToolbar(),t&&L.DomEvent.stopPropagation(t))},_unlockGroup:function(){var t=this;this.hasTool(L.UnlockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._unlock(),e.deselect())}))},_lockGroup:function(){var t=this;this.hasTool(L.LockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._lock(),L.DomUtil.addClass(e.getElement(),"collected"))}))},_addCollections:function(t){var e=this,i=t.boxCollectBounds,o=this._group._map;this._group.eachLayer((function(t){var n=t.editing;t.isSelected()&&t.deselect();var a=o.getZoom(),r=o.getCenter(),s=L.latLngBounds(t.getCorner(2),t.getCorner(1));s=o._latLngBoundsToNewLayerBounds(s,a,r),i.intersects(s)&&n.enabled()&&(e.toolbar||e._addToolbar(),L.DomUtil.addClass(t.getElement(),"collected"))}))},_removeGroup:function(t){var e=this;if(this.hasTool(L.DeleteAction)){var i=this._group._toRemove(),o=i.length;0!==o&&(L.DomUtil.confirmDeletes(o)&&(i.forEach((function(t){e._group.removeLayer(t)})),this._group.anyCollected()||this._removeToolbar()),t&&L.DomEvent.stopPropagation(t))}},cancelExport:function(){this.customCollection||(this._exportOpts.collection=void 0),clearInterval(this.updateInterval)},_addToolbar:function(){var t=this._group,e=t._map;t.options.suppressToolbar||this.toolbar||(this.toolbar=L.distortableImage.controlBar({actions:this.editActions,position:"topleft"}).addTo(e,t))},_removeToolbar:function(){var t=this._group._map;if(!this.toolbar)return!1;t.removeLayer(this.toolbar),this.toolbar=!1},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},addTool:function(t){return"leaflet-toolbar-icon"!==t.baseClass||this.hasTool(t)||(this._removeToolbar(),this.editActions.push(t),this._addToolbar()),this},removeTool:function(t){var e=this;return this.editActions.some((function(i,o){return e.editActions[o]===t&&(e._removeToolbar(),e.editActions.splice(o,1),e._addToolbar(),!0)})),this},startExport:function(){var t=this;if(this.hasTool(L.ExportAction))return new Promise((function(e){var i,o=t._exportOpts;o.resolve=e,t.updateInterval=null,t.customCollection=!!o.collection,t.customCollection||(o.collection=t._group.generateExportJson().images),o.frequency=o.frequency||3e3,o.scale=o.scale||100,o.updater=o.updater||function(n){(n=JSON.parse(n)).status_url&&(i!==n.status_url&&n.status_url.match(".json")&&(i=n.status_url),"complete"===n.status&&(clearInterval(t.updateInterval),t.customCollection||(t._exportOpts.collection=void 0),e(),null!==n.jpg&&alert("Export succeeded. "+o.exportUrl+n.jpg)),console.log(n))},o.handleStatusRes=o.handleStatusRes||function(e){i=o.statusUrl+e,t.updateInterval=setInterval((function(){var t=new Request("".concat(i,"?").concat(Date.now()),{method:"GET"});fetch(t).then((function(t){if(t.ok)return t.text()})).then(o.updater)}),o.frequency)},o.fetchStatusUrl=o.fetchStatusUrl||function(t){var e=new FormData;e.append("collection",JSON.stringify(t.collection)),e.append("scale",t.scale),e.append("upload",!0);var i={method:"POST",body:e},o=new Request(t.exportStartUrl,i);fetch(o).then((function(t){if(t.ok)return t.text()})).then(t.handleStatusRes)},o.fetchStatusUrl(o)}))}}),L.distortableCollection.edit=function(t,e){return new L.DistortableCollection.Edit(t,e)}},397:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableImage.Edit=L.Handler.extend({options:{opacity:.5,outline:"1px solid red",keymap:L.distortableImage.action_map},initialize:function(t,e){this._overlay=t,this._toggledImage=!1,this._mode=t.options.mode,this._transparent=!1,this._outlined=!1,this._opacity=e.opacity,L.setOptions(this,e),L.distortableImage.action_map.Escape="_deselect"},addHooks:function(){var t=this._overlay;this.editActions=this.options.actions,t.bringToFront(),this._initModes(),this._initHandles(),this._appendHandlesandDragable(),t.isSelected()&&!t.options.suppressToolbar&&this._addToolbar(),this.parentGroup=!!t.eP&&t.eP,L.DomEvent.on(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.on(window,"keydown",this._onKeyDown,this)},removeHooks:function(){var t=this._overlay,e=this.parentGroup;for(var i in this._disableDragging(),this.toolbar&&this._removeToolbar(),this._handles)L.DomUtil.remove(i);L.DomUtil.hasClass(t.getElement(),"collected")&&L.DomUtil.removeClass(t.getElement(),"collected"),e&&!e.anyCollected()&&e.editing.toolbar&&e.editing._removeToolbar(),L.DomEvent.off(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.off(window,"keydown",this._onKeyDown,this)},disable:function(){return this._enabled?(this._overlay.deselect(),this._enabled=!1,this.removeHooks(),this):this},_initModes:function(){for(var t in this._modes={},L.DistortableImage.Edit.MODES){var e=L.DistortableImage.Edit.MODES[t];-1!==this.editActions.indexOf(e)&&(this._modes[t]=e)}this._modes[this._mode]||(this._mode=Object.keys(this._modes)[0])},_initHandles:function(){var t,e=this._overlay;for(this._dragHandles=L.layerGroup(),t=0;t<4;t++)this._dragHandles.addLayer(L.dragHandle(e,t));for(this._scaleHandles=L.layerGroup(),t=0;t<4;t++)this._scaleHandles.addLayer(L.scaleHandle(e,t));for(this._distortHandles=L.layerGroup(),t=0;t<4;t++)this._distortHandles.addLayer(L.distortHandle(e,t));for(this._rotateHandles=L.layerGroup(),t=0;t<4;t++)this._rotateHandles.addLayer(L.rotateHandle(e,t));for(this._freeRotateHandles=L.layerGroup(),t=0;t<4;t++)this._freeRotateHandles.addLayer(L.freeRotateHandle(e,t));for(this._lockHandles=L.layerGroup(),t=0;t<4;t++)this._lockHandles.addLayer(L.lockHandle(e,t,{draggable:!1}));this._handles={drag:this._dragHandles,scale:this._scaleHandles,distort:this._distortHandles,rotate:this._rotateHandles,freeRotate:this._freeRotateHandles,lock:this._lockHandles}},_appendHandlesandDragable:function(){var t=this._overlay;this._mode?(this._updateHandle(),!t.isSelected()&&this.currentHandle&&this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable()})),this.isMode("lock")||this._enableDragging()):this._enableDragging()},_onKeyDown:function(t){var e=this.options.keymap[t.key],i=this._overlay,o=this.parentGroup;o&&o.anyCollected()||void 0===this[e]||i.options.suppressToolbar||i.isSelected()&&this.toolbar&&this[e].call(this)},replaceTool:function(t,e){var i=this;return"leaflet-toolbar-icon"!==e.baseClass||this.hasTool(e)||this.editActions.some((function(o,n){if(o===t){for(var a in i._removeToolbar(),i.editActions[n]=e,i._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[a]===t?(delete i._modes[a],i._nextOrNone(a)):L.DistortableImage.Edit.MODES[a]===e&&(i._modes[a]=e);return!0}})),this},addTool:function(t){if("leaflet-toolbar-icon"===t.baseClass&&!this.hasTool(t)){for(var e in this._removeToolbar(),this.editActions.push(t),this._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[e]===t&&(this._modes[e]=t);this._overlay.isSelected()||this._removeToolbar()}return this},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},removeTool:function(t){var e=this;return this.editActions.some((function(i,o){if(i===t){for(var n in e._removeToolbar(),e.editActions.splice(o,1),e._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[n]===t&&(delete e._modes[n],e._nextOrNone(n));return!0}})),this._overlay.isSelected()||this._removeToolbar(),this},_nextOrNone:function(t){this.isMode(t)&&(Object.keys(this.getModes()).length>=1?this.nextMode():("lock"===t&&this._enableDragging(),this._mode="",this._updateHandle()))},_removeToolbar:function(){var t=this._overlay._map;this.toolbar&&(t.removeLayer(this.toolbar),this.toolbar=!1)},_enableDragging:function(){var t=this,e=this._overlay,i=e._map;this.dragging=new L.Draggable(e.getElement()),this.dragging.enable(),this.dragging.on("dragstart",(function(){e.fire("dragstart"),t._removeToolbar()})),this.dragging._updatePosition=function(){var t,o,n=e.getCorner(0),a=this._newPos.subtract(i.latLngToLayerPoint(n)),r={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),r[o]=i.layerPointToLatLng(t.add(a));e.setCorners(r),e.fire("drag"),this.fire("drag")},this.dragging.on("dragend",(function(){e.fire("dragend")}))},_disableDragging:function(){this.dragging&&(this.dragging.disable(),delete this.dragging)},_dragMode:function(){this.setMode("drag")},_scaleMode:function(){this.setMode("scale")},_distortMode:function(){this.setMode("distort")},_rotateMode:function(){this.setMode("rotate")},_freeRotateMode:function(){this.setMode("freeRotate")},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t=this._overlay.getElement();if(this.hasTool(L.OpacityAction)){this._transparent=!this._transparent;var e=this._transparent?this.options.opacity:1;L.DomUtil.setOpacity(t,e),t.setAttribute("opacity",e),this._refresh()}},_setOpacities:function(t){var e=this._overlay.getElement();this._opacity=t,this.hasTool(L.OpacitiesAction)&&(this._opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,this._opacity),e.setAttribute("opacity",this._opacity),this._refresh())},_toggleBorder:function(){var t=this._overlay.getElement();if(this.hasTool(L.BorderAction)){this._outlined=!this._outlined;var e=this._outlined?this.options.outline:"none";t.style.outline=e,this._refresh()}},_toggleOrder:function(){this._toggledImage?this._stackUp():this._stackDown()},_removeOverlay:function(){var t=this._overlay,e=this.parentGroup;!this.isMode("lock")&&this.hasTool(L.DeleteAction)&&L.DomUtil.confirmDelete()&&(this._removeToolbar(),e?e.removeLayer(t):t._map.removeLayer(t))},_getExport:function(){var t=this._overlay,e=t._map,i=t.getElement();if(this.hasTool(L.ExportAction)){var o=new Image;o.id=o.id||"tempId12345",document.body.appendChild(o),o.onload=function(){var i=o.height,n=o.width,a=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),s=e.latLngToLayerPoint(t.getCorner(2)),l=e.latLngToLayerPoint(t.getCorner(3));o.onload=function(){L.DomUtil.remove(o)},window&&window.hasOwnProperty("warpWebGl")&&warpWebGl(o.id,[0,0,n,0,n,i,0,i],[a.x,a.y,r.x,r.y,l.x,l.y,s.x,s.y],!0)},o.src=t.options.fullResolutionSrc||i.src}},_stackUp:function(){this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!1,this._overlay.bringToFront(),this._refresh())},_stackDown:function(){!this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!0,this._overlay.bringToBack(),this._refresh())},_unlock:function(){var t=this._overlay,e=t._map,i=this.parentGroup;this.isMode("lock")&&((!i||i.isCollected(t))&&i||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),"lock"!==t.options.mode&&this.hasMode(t.options.mode)?this._mode=t.options.mode:(this._mode="",this.currentHandle=""),this._updateHandle(),this._enableDragging(),this._refresh())},_lock:function(){var t=this._overlay,e=t._map,i=this.parentGroup;this.isMode("lock")||((!i||i.isCollected(t))&&i||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),this._mode="lock",this._updateHandle(),this._disableDragging(),this._refresh())},_deselect:function(){this._overlay.deselect()},_showMarkers:function(t){var e=this.parentGroup;this.currentHandle&&(!this.isMode("lock")&&e&&e.anyCollected()||this.currentHandle.eachLayer((function(t){t.setOpacity(1),t.dragging&&t.dragging.enable(),L.DomUtil.addClass(t.getElement(),"leaflet-interactive")})))},_hideMarkers:function(){var t=this._overlay,e=this.parentGroup;this._handles||this._initHandles(),this.currentHandle&&(this.isMode("lock")&&e&&e.isCollected(t)||this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable(),L.DomUtil.removeClass(t.getElement(),"leaflet-interactive")})))},_updateHandle:function(){var t=this._overlay._map,e=this.getMode();this.currentHandle&&t.removeLayer(this.currentHandle),this.currentHandle=""===e?"":this._handles[e],""!==this.currentHandle&&t.addLayer(this.currentHandle)},_addToolbar:function(){var t=this._overlay,e=this.parentGroup,i=t._map,o=t.getCorners(),n=-1/0;if(e&&e.anyCollected())e.editing._addToolbar();else if(!t.options.suppressToolbar&&!this.toolbar){for(var a=0;an&&(n=o[a].lat);var r=t.getCenter();r.lat=n,this.toolbar=L.distortableImage.popupBar(r,{actions:this.editActions}).addTo(i,t),t.fire("toolbar:created")}},_refresh:function(){this.toolbar&&this._removeToolbar(),this._addToolbar()},_updateToolbarPos:function(){var t=this._overlay,e=t.getCorners(),i=this.toolbar,o=-1/0;if(i&&i instanceof L.DistortableImage.PopupBar){for(var n=0;no&&(o=e[n].lat);var a=t.getCenter();a.lat=o,t.options.suppressToolbar||this.toolbar.setLatLng(a)}},hasMode:function(t){return!!this._modes[t]},getMode:function(){if(this.enabled())return this._mode},getModes:function(){return this._modes},isMode:function(t){return!!this.enabled()&&this._mode===t},setMode:function(t){var e=this._overlay,i=this.parentGroup;if(this.getMode()!==t&&this.hasMode(t)&&this.enabled())return this.toolbar&&this.toolbar.clickTool(t),this.isMode("lock")&&!this.dragging&&this._enableDragging(),this._mode=t,this.isMode("lock")&&this._disableDragging(),this._updateHandle(),this._refresh(),i&&i.isCollected(e)&&e.deselect(),this},nextMode:function(t){var e=this.getMode(),i=this.parentGroup,o=Object.keys(this.getModes()),n=o.indexOf(e),a=o[(n+1)%o.length];if(t){if(i&&i.anyCollected())return;L.DomEvent.stop(t)}return this.setMode(a)}}),L.distortableImage.edit=function(t,e){return new L.DistortableImage.Edit(t,e)}},426:function(){L.BorderAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,r=a._mode;a._outlined?(o="border_outer",n=e.options.translation.removeBorder):(o="border_clear",n=e.options.translation.addBorder),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===r?"disabled":""},L.DistortableImage.action_map.b="lock"===r?"":"_toggleBorder",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"border_clear","border_outer"),L.IconUtil.toggleTitle(this._link,"Remove Border","Add Border"),t._toggleBorder()}})},114:function(){L.DeleteAction=L.EditAction.extend({initialize:function(t,e,i){var o,n=e.editing;n instanceof L.DistortableImage.Edit?(o=e.options.translation.deleteImage,L.DistortableImage.action_map.Backspace="lock"===n._mode?"":"_removeOverlay"):(o=e.options.translation.deleteImages,L.DistortableImage.group_action_map.Backspace="lock"===n._mode?"":"_removeGroup"),(i=i||{}).toolbarIcon={svg:!0,html:"delete_forever",tooltip:o,className:"lock"===n._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._removeOverlay():t._removeGroup()}})},231:function(){L.DistortAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"distort",tooltip:e.options.translation.distortImage,className:"distort"},L.DistortableImage.action_map.d="_distortMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._distortMode()}})},541:function(){L.DragAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"drag",tooltip:e.options.translation.dragImage,className:"drag"},L.DistortableImage.action_map.D="_dragMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._dragMode()}})},280:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.EditAction=L.Toolbar2.Action.extend({options:{toolbarIcon:{svg:!1,html:"",className:"",tooltip:""}},initialize:function(t,e,i){this._overlay=e,this._map=t,L.setOptions(this,i),L.Toolbar2.Action.prototype.initialize.call(this,i),this._injectIconSet()},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,r=this._overlay.editing,s=this.options.toolbarIcon.style;this.toolbar=t,this._icon=L.DomUtil.create("li","",e),this._link=L.DomUtil.create("a","",this._icon),n.svg?this._link.innerHTML=L.IconUtil.create(n.html):this._link.innerHTML=n.html,this._link.setAttribute("href","#"),this._link.setAttribute("title",n.tooltip),s&&this._link.setAttribute("style",s),this._link.setAttribute("role","button"),L.DomUtil.addClass(this._link,this.constructor.baseClass),a&&(L.DomUtil.addClass(this._link,a),"disabled"===a&&L.DomUtil.addClass(this._icon,a),a===r._mode?L.DomUtil.addClass(this._link,"selected-mode"):L.DomUtil.removeClass(this._link,"selected-mode")),L.DomEvent.on(this._link,"click",this.enable,this),L.DomEvent.on(this._overlay,"update",(function(){var t=o._link.innerHTML.match(/xlink:href="#restore"/);t&&1===t.length&&o._enableAction()})),this._addSubToolbar(t,this._icon,i)},_injectIconSet:function(){if(!this._map.getContainer().querySelector("#iconset")){var t=document.createElement("div");t.id="iconset",t.setAttribute("hidden","hidden"),t.innerHTML=(new L.ToolbarIconSet).render(),this._map.getContainer().querySelector(".leaflet-marker-pane").appendChild(t)}},_enableAction:function(){L.DomUtil.removeClass(this._link.parentElement,"disabled"),L.DomUtil.removeClass(this._link,"disabled")},_disableAction:function(){L.DomUtil.addClass(this._link.parentElement,"disabled"),L.DomUtil.addClass(this._link,"disabled")}}),L.editAction=function(t,e,i){return new L.EditAction(t,e,i)}},149:function(){L.ExportAction=L.EditAction.extend({initialize:function(t,e,i){var o,n=e.editing;this.isExporting=!1,this.mouseLeaveSkip=!0,this.isHooksExecuted=!1,n instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.e="_getExport",o=e.options.translation.exportImage):(L.DistortableImage.group_action_map.e="runExporter",o=e.options.translation.exportImages),(i=i||{}).toolbarIcon={svg:!0,html:"get_app",tooltip:o},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;if(t instanceof L.DistortableImage.Edit)t._getExport();else if(!this.isHooksExecuted){this.isHooksExecuted=!0;var e=this._link.parentElement;this.mouseEnterHandler=this.handleMouseEnter.bind(this),this.mouseLeaveHandler=this.handleMouseLeave.bind(this),L.DomEvent.on(e,"click",(function(){if(this.isExporting){if(this.mouseLeaveSkip)return;this.resetState(),this.detachMouseEventListeners(e),t.cancelExport()}else this.isExporting=!0,this.renderExportIcon(),setTimeout(this.attachMouseEventListeners.bind(this,e),100),t.runExporter().then(function(){this.resetState(),this.detachMouseEventListeners(e)}.bind(this))}),this)}},resetState:function(){this.renderDownloadIcon(),this.isExporting=!1,this.mouseLeaveSkip=!0},attachMouseEventListeners:function(t){t.addEventListener("mouseenter",this.mouseEnterHandler),t.addEventListener("mouseleave",this.mouseLeaveHandler)},detachMouseEventListeners:function(t){t.removeEventListener("mouseenter",this.mouseEnterHandler),t.removeEventListener("mouseleave",this.mouseLeaveHandler)},handleMouseEnter:function(){this.renderCancelIcon()},handleMouseLeave:function(){this.mouseLeaveSkip?this.mouseLeaveSkip=!1:this.renderExportIcon()},renderDownloadIcon:function(){L.IconUtil.toggleXlink(this._link,"get_app","spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")},renderExportIcon:function(){L.IconUtil.toggleXlink(this._link,"spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.IconUtil.addClassToSvg(this._link,"loader")},renderCancelIcon:function(){L.IconUtil.toggleXlink(this._link,"cancel"),L.IconUtil.toggleTitle(this._link,"Cancel Export","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")}})},74:function(){L.FreeRotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"crop_rotate",tooltip:e.options.translation.freeRotateImage,className:"freeRotate"},L.DistortableImage.action_map.f="_freeRotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._freeRotateMode()}})},691:function(){L.GeolocateAction=L.EditAction.extend({initialize:function(t,e,i){var o=e.editing;(i=i||{}).toolbarIcon={svg:!0,html:"explore",tooltip:e.options.translation.geolocateImage,className:"lock"===o._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.getElement();EXIF.getData(t,L.EXIF(t))}})},105:function(){L.LockAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.u="_unlock",L.DistortableImage.action_map.l="_lock",n=e.options.translation.lockMode,o=a.isMode("lock")?"lock":"unlock"):(L.DistortableImage.group_action_map.l="_lockGroup",n=e.options.translation.lockImages,o="lock"),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._toggleLockMode():t._lockGroup()}})},496:function(){var t=[100,80,60,40,20,0],e=new CSSStyleSheet;e.replaceSync(".leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n "),e.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"),document.adoptedStyleSheets=[e],t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:t,tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:rgb("+(100-t)+"%,"+(100-t)+"%,"+(100-t)+"%);"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),L.OpacitiesToolbar2=L.Toolbar2.extend({options:{className:"",filter:function(){return!0},actions:[],style:"translate(-1px, -".concat(30*(t.length+1),"px)")},appendToContainer:function(t){var e,i,o,n,a=this.constructor.baseClass+"-"+this._calculateDepth()+" "+this.options.className;for(this._container=t,this._ul=L.DomUtil.create("ul",a,t),this._ul.style.transform=this.options.style?this.options.style:"",this._disabledEvents=["click","mousemove","dblclick","mousedown","mouseup","touchstart"],i=0,n=this._disabledEvents.length;ir||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.freeRotateHandle=function(t,e,i){return new L.FreeRotateHandle(t,e,i)}},789:function(){L.LockHandle=L.EditHandle.extend({options:{TYPE:"lock",interactive:!1,icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=",iconSize:[32,32],iconAnchor:[16,16]})},onRemove:function(t){this.unbindTooltip(),L.EditHandle.prototype.onRemove.call(this,t)},_bindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.on(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.on(document,"pointerleave",this._tooltipOff,this)},_unbindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.off(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.off(document,"pointerleave",this._tooltipOff,this)},_onHandleDrag:function(){},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))},_tooltipOn:function(t){var e=this._handled.parentGroup,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;this._timer=setTimeout(L.bind((function(){this._timeout&&clearTimeout(this._timeout),this.getTooltip()?o.eachLayer((function(t){this!==t&&t.closeTooltip()})):this.bindTooltip("Locked!",{permanent:!0}),this.openTooltip()}),this),500)}},_tooltipOff:function(t){var e=this._handled.parentGroup,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;t.currentTarget===document&&o.eachLayer((function(t){t.closeTooltip()})),this._timer&&clearTimeout(this._timer),this._timeout=setTimeout(L.bind((function(){this.closeTooltip()}),this),400)}}}),L.lockHandle=function(t,e,i){return new L.LockHandle(t,e,i)}},337:function(){L.RotateHandle=L.EditHandle.extend({options:{TYPE:"rotate",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng(),o=this.calculateAngleDelta(e,i);t.rotateBy(o,"rad")},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.rotateHandle=function(t,e,i){return new L.RotateHandle(t,e,i)}},350:function(){L.ScaleHandle=L.EditHandle.extend({options:{TYPE:"scale",icon:L.icon({iconUrl:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t._map,i=t.edgeMinWidth,o=t.getCorner(this._corner),n=this.getLatLng(),a=this._calculateScalingFactor(o,n);i||(i=50);var r=e.latLngToLayerPoint(t.getCorner(0)),s=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(r.x-s.x),c=Math.abs(r.y-s.y);Math.sqrt(l*l+c*c)>i||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.scaleHandle=function(t,e,i){return new L.ScaleHandle(t,e,i)}},719:function(){L.distortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.group_action_map={},L.DistortableImage.ControlBar=L.Toolbar2.Control.extend({}),L.distortableImage.controlBar=function(t){return new L.DistortableImage.ControlBar(t)},L.DistortableCollection.addInitHook((function(){this.ACTIONS=[L.ExportAction,L.DeleteAction,L.LockAction,L.UnlockAction],L.DistortableCollection.Edit.MODES={lock:L.LockAction,unlock:L.UnlockAction};var t=this.options.actions?this.options.actions:this.ACTIONS;this.editing=L.distortableCollection.edit(this,{actions:t})}))},93:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.DistortableImage.PopupBar=L.Toolbar2.Popup.extend({options:{anchor:[0,-10]},initialize:function(t,e){L.setOptions(this,e),L.Toolbar2.Popup.prototype.initialize.call(this,t,e)},addHooks:function(t,e){this.map=t,this.ov=e},tools:function(){if(this._ul)return this._ul.children},clickTool:function(t){for(var e=this.tools(),i=0;i',_symbols:"",render:function(){return this.addSymbols(this._symbols),this._svg},addSymbols:function(t){this._svg+=t}})},261:function(){L.KeymapperIconSet=L.IconSet.extend({_symbols:''})},929:function(){L.ToolbarIconSet=L.IconSet.extend({_symbols:''})},998:function(){L.Map.mergeOptions({boxCollector:!0,boxZoom:!1}),L.Map.BoxCollector=L.Map.BoxZoom.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){L.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.off(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){L.DomUtil.remove(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),L.DomUtil.disableTextSelection(),L.DomUtil.disableImageDrag(),this._startPoint=this._map.mouseEventToContainerPoint(t),L.DomEvent.on(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=L.DomUtil.create("div","leaflet-zoom-box",this._container),L.DomUtil.addClass(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t),this._bounds=L.bounds(this._startPoint,this._point);var e=this._bounds.getSize();L.DomUtil.setPosition(this._box,this._bounds.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(L.DomUtil.remove(this._box),L.DomUtil.removeClass(this._container,"leaflet-crosshair")),L.DomUtil.enableTextSelection(),L.DomUtil.enableImageDrag(),L.DomEvent.off(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(L.Util.bind(this._resetState,this),0);var e=L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()),this._map.containerPointToLatLng(this._bounds.getTopRight())),i=this._map.getZoom(),o=this._map.getCenter();e=this._map._latLngBoundsToNewLayerBounds(e,i,o),this._map.fire("boxcollectend",{boxCollectBounds:e})}}}),L.Map.addInitHook("addHandler","boxCollector",L.Map.BoxCollector)},291:function(){L.Map.mergeOptions({doubleClickLabels:!0}),L.Map.DoubleClickLabels=L.Map.DoubleClickZoom.extend({enable:function(){var t=this._map;return this._enabled||(t.doubleClickZoom.enabled()&&t.doubleClickZoom.disable(),this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e.fire("dblclick")}),250))},_onDoubleClick:function(){var t=this._map,e=t._labels;setTimeout((function(){t._clicked=0,clearTimeout(t._clickTimeout)}),0),e&&(1===e.options.opacity?(e.options.opacity=0,e.setOpacity(0)):(e.options.opacity=1,e.setOpacity(1)))}}),L.Map.addInitHook("addHandler","doubleClickLabels",L.Map.DoubleClickLabels)},752:function(){L.Map.DoubleClickZoom.include({addHooks:function(){this._map.on({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},removeHooks:function(){this._map.off({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},enable:function(){return this._enabled||this._map.doubleClickLabels&&this._map.doubleClickLabels.enabled()||(this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._map.fire("singleclickoff"),this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e._fireDOMEvent(i,"dblclick",[e])}),250))},_onDoubleClick:function(t){var e=this._map,i=t.originalEvent;if(setTimeout((function(){e._clicked=0,clearTimeout(e._clickTimeout)}),0),!i)return!1;var o=e.getZoom(),n=e.options.zoomDelta,a=i.shiftKey?o-n:o+n;"center"===e.options.doubleClickZoom?e.setZoom(a):e.setZoomAround(t.containerPoint,a)}})},131:function(){L.Map.include({_clicked:0,addGoogleMutant:function(t){return(t=this.mutantOptions=L.extend({mutantOpacity:.8,maxZoom:24,maxNativeZoom:20,minZoom:0,labels:!0,labelOpacity:1,doubleClickLabels:!0},t)).labels||(this.mutantOptions=L.extend(this.mutantOptions,{labelOpacity:t.labels?1:void 0,doubleClickLabels:!!t.labels||void 0})),this._googleMutant=L.tileLayer("http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}",{maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,opacity:t.mutantOpacity}).addTo(this),t.labels?this._addLabels(t):this.doubleClickLabels=void 0,this},_addLabels:function(t){return 0!==t.labelOpacity&&1!==t.labelOpacity&&(t.labelOpacity=1),this._labels=L.tileLayer("https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}",{attribution:'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',subdomains:"abcd",interactive:!1,opacity:t.labelOpacity,maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,ext:"png"}).addTo(this),this.mutantOptions.doubleClickLabels&&this.doubleClickLabels.enable(),this}}),L.Map.addInitHook((function(){this.doubleClickLabels.disable(),this.doubleClickZoom.enable()}))},999:function(){L.DomUtil=L.extend(L.DomUtil,{initTranslation:function(t){this.translation=t},getMatrixString:function(t){var e=L.Browser.webkit3d||L.Browser.gecko3d||L.Browser.ie3d,i=[t[0],t[3],0,t[6],t[1],t[4],0,t[7],0,0,1,0,t[2],t[5],0,t[8]],o=e?"matrix3d("+i.join(",")+")":"";return e||console.log("Your browser must support 3D CSS transformsin order to use DistortableImageOverlay."),o},toggleClass:function(t,e){var i=e;return this.hasClass(t,i)?this.removeClass(t,i):this.addClass(t,i)},confirmDelete:function(){return window.confirm(this.translation.confirmImageDelete)},confirmDeletes:function(t){if(1===t)return this.confirmDelete();var e,i=this.translation.confirmImagesDeletes;return e="function"==typeof i?i(t):i,window.confirm(e)}})},85:function(){L.IconUtil={create:function(t){return/^#/.test(t)&&(t=t.replace(/^#/,"")),''},addClassToSvg:function(t,e){var i=t.querySelector("svg");i&&L.DomUtil.addClass(i,e)},toggleXlink:function(t,e,i){/^#/.test(e)||(e="#"+e),/^#/.test(i)||(i="#"+i);var o=t.querySelector("use");if(o){var n=o.getAttribute("xlink:href")===e?i:e;return o.setAttribute("xlink:href",n),n}return!1},toggleTitle:function(t,e,i){var o=t.getAttribute("title")===e?i:e;return t.setAttribute("title",o),t.hasAttribute("aria-label")&&t.setAttribute("aria-label",o),o}}},351:function(){L.ImageUtil={getCmPerPixel:function(t){var e=t._map;return 100*e.latLngToLayerPoint(t.getCorner(0)).distanceTo(e.latLngToLayerPoint(t.getCorner(1)))/t.getElement().width}}},360:function(){L.MatrixUtil={adj:function(t){return[t[4]*t[8]-t[5]*t[7],t[2]*t[7]-t[1]*t[8],t[1]*t[5]-t[2]*t[4],t[5]*t[6]-t[3]*t[8],t[0]*t[8]-t[2]*t[6],t[2]*t[3]-t[0]*t[5],t[3]*t[7]-t[4]*t[6],t[1]*t[6]-t[0]*t[7],t[0]*t[4]-t[1]*t[3]]},multmm:function(t,e){var i,o=[];for(i=0;i<3;i++)for(var n=0;n<3;n++){for(var a=0,r=0;r<3;r++)a+=t[3*i+r]*e[3*r+n];o[3*i+n]=a}return o},multmv:function(t,e){return[t[0]*e[0]+t[1]*e[1]+t[2]*e[2],t[3]*e[0]+t[4]*e[1]+t[5]*e[2],t[6]*e[0]+t[7]*e[1]+t[8]*e[2]]},multsm:function(t,e){for(var i=[],o=0,n=e.length;o2&&void 0!==arguments[2]?arguments[2]:"deg";return"deg"===i?this.radiansToDegrees(Math.atan2(e,t)):Math.atan2(e,t)},radiansToDegrees:function(t){return 180*t/Math.PI},degreesToRadians:function(t){return t*Math.PI/180}}},866:function(){L.Utils={initTranslation:function(){var t={deleteImage:"Delete Image",deleteImages:"Delete Images",distortImage:"Distort Image",dragImage:"Drag Image",exportImage:"Export Image",exportImages:"Export Images",removeBorder:"Remove Border",addBorder:"Add Border",freeRotateImage:"Free rotate Image",geolocateImage:"Geolocate Image",lockMode:"Lock Mode",lockImages:"Lock Images",makeImageOpaque:"Make Image Opaque",makeImageTransparent:"Make Image Transparent",restoreImage:"Restore Natural Image",rotateImage:"Rotate Image",scaleImage:"Scale Image",stackToFront:"Stack to Front",stackToBack:"Stack to Back",unlockImages:"Unlock Images",confirmImageDelete:"Are you sure? This image will be permanently deleted from the map.",confirmImagesDeletes:"Are you sure? These images will be permanently deleted from the map."};if(this.options.translation)for(var e in t)this.options.translation.hasOwnProperty(e)||(this.options.translation[e]=t[e]);else this.options.translation=t;L.DomUtil.initTranslation(this.options.translation)},getNestedVal:function(t,e,i){return[e,i].reduce((function(t,e){return t&&t[e]}),t)}}}};t[999](),t[85](),t[351](),t[360](),t[682](),t[866](),t[477](),t[808](),t[743](),t[988](),t[92](),t[194](),t[206](),t[789](),t[337](),t[350](),t[376](),t[261](),t[929](),t[280](),t[426](),t[114](),t[231](),t[541](),t[149](),t[74](),t[691](),t[105](),t[496](),t[944](),t[954](),t[178](),t[547](),t[886](),t[129](),t[93](),t[719](),t[397](),t[428](),t[782](),t[752](),t[998](),t[291](),t[131]()}(); //# sourceMappingURL=leaflet.distortableimage.js.map \ No newline at end of file diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map index 002817e1e..310880005 100644 --- a/dist/leaflet.distortableimage.js.map +++ b/dist/leaflet.distortableimage.js.map @@ -1 +1 @@ -{"version":3,"file":"leaflet.distortableimage.js","mappings":";;;;;;;;;;AAAY;;AAEZ;;AAEA;AACA,mDAAmD,IAAI,SAAS,MAAM,IAAI;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB,GAAG;AACH;AACA,uBAAuB;AACvB,GAAG;AACH,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,UAAU,+BAA+B;AAChF;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;+CC9KA;AAAA;AAAA;AADA,IAAMA,GAAG,GAAG,EAAE;AACdC,CAAC,CAACC,qBAAqB,GAAGD,CAAC,CAACE,YAAY,CAACC,MAAM,CAAC;EAC9CC,OAAO,EAAE;IACPC,QAAQ,EAAE,IAAI;IACdC,UAAU,EAAE;MACVC,cAAc,EAAE,gCAAgC;MAChDC,SAAS,EAAE,yBAAyB;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AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AChfa;AACb;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,mBAAO,CAAC,gFAAoB;AACrD,4BAA4B,mBAAO,CAAC,sFAAuB;AAC3D,wBAAwB,mBAAO,CAAC,8EAAmB;AACnD,6CAA6C,yCAAyC,+CAA+C;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,sDAAsD;AACtD,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB,8BAA8B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,KACiC,EAAE,EAGtC;AACL,aAAa,KAC4B,EAAE,EAGtC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;;;;;;;;;;;ACrMD,8CAA2C,CAAC,WAAW,EAAC,CAAC,mBAAmB,EAAE,6CAA6C,qoBAAqoB,6pBAA6pB,KAAK,uBAAuB,EAAE,KAAK,UAAU,KAAK,WAAW,aAAa,aAAa,YAAY,MAAM,aAAa,SAAS,WAAW,aAAa,aAAa,YAAY,GAAG,QAAQ,UAAU,OAAO,yBAAyB,2BAA2B,yBAAyB,2BAA2B,6BAA6B,uBAAuB,6BAA6B,yBAAyB,uBAAuB,yBAAyB,yBAAyB,2BAA2B,uBAAuB,uBAAuB,uBAAuB,yBAAyB,uBAAuB,6BAA6B,yBAAyB,yBAAyB,2BAA2B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,2BAA2B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,uBAAuB,qBAAqB,qBAAqB,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,aAAa,eAAe,aAAa,YAAY,YAAY,YAAY,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,eAAe,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,iBAAiB,cAAc,YAAY,aAAa,eAAe,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa,cAAc,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,eAAe,aAAa,cAAc,cAAc,cAAc,aAAa,cAAc,WAAW,aAAa,YAAY,cAAc,eAAe,cAAc,aAAa,cAAc,YAAY,YAAY,WAAW,YAAY,YAAY,YAAY,eAAe,YAAY,aAAa,cAAc,WAAW,cAAc,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,cAAc,eAAe,aAAa,aAAa,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,YAAY,eAAe,cAAc,eAAe,cAAc,MAAM,aAAa,WAAW,aAAa,cAAc,aAAa,cAAc,eAAe,YAAY,eAAe,aAAa,YAAY,aAAa,aAAa,cAAc,YAAY,YAAY,YAAY,aAAa,YAAY,eAAe,aAAa,aAAa,cAAc,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,cAAc,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,eAAe,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,YAAY,WAAW,WAAW,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,aAAa,eAAe,aAAa,YAAY,YAAY,YAAY,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,cAAc,YAAY,gBAAgB,YAAY,YA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ACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,UAAU;AACvB;;AAEA,CAAC;AACD;AACA,cAAc,sCAAsC;;AAEpD,0EAA0E,WAAW;AACrF,6EAA6E,WAAW;AACxF,wFAAwF,WAAW;;AAEnG;AACA;AACA,aAAa,qCAAqC;AAClD,aAAa,sDAAsD;AACnE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0EAA0E,aAAa;AACvF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mGAAmG,eAAe;AAClH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,gFAAgF,iBAAiB;AACjG;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,WAAW,mFAAmF,WAAW;AAC/K;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA,eAAe,gCAAmB;AAClC;AACA,cAAc,6DAA6D;;AAE3E,cAAc,yDAAyD;;AAEvE,cAAc,gCAAgC;;AAE9C,cAAc,2BAA2B;;AAEzC;AACA,aAAa,QAAQ;AACrB,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC;;AAEA;AACA,aAAa,QAAQ;AACrB,cAAc,yDAAyD;AACvE,cAAc,qBAAqB;AACnC,cAAc,eAAe;AAC7B;;AAEA;AACA,WAAW,iBAAiB;AAC5B,aAAa,gBAAgB;AAC7B;;;AAGA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,4CAA4C;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,aAAa,mBAAmB;AAChC;AACA,aAAa,QAAQ;;AAErB;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,aAAa;AAC1B,aAAa,OAAO;AACpB,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,gCAAmB;;AAEtC,eAAe,gCAAmB;AAClC;;AAEA,0BAA0B,gCAAmB;AAC7C,WAAW,mCAAmC;;;AAG9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,gBAAgB,gCAAmB,wBAAwB,gCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB,2BAA2B;AACzD,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAmB;AACnB,qBAAqB,gCAAmB;AACxC,+CAA+C;AAC/C,sBAAsB;AACtB,uFAAuF,gCAAmB;;AAE1G,CAAC;AACD;AACA;AACA,oGAAoG,aAAa;AACjH,UAAU;AACV;;;;;;;;;;;;;;;;;;;;;AC1zBA;AACA;AAC2C;AACJ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;;AAEjD;AACA,WAAW,mCAAmC;;AAE9C;AACA,WAAW,0CAA0C;;AAErD;AACA,WAAW,+BAA+B;;AAE1C;AACA,oEAAkB;AAClB;AACA,WAAW,eAAe;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA,KAAK;AACL;AACA,eAAe,mBAAmB;;AAElC;AACA;;AAEA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,eAAe;AAC1B;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY,sEAAsE;AAC7F,eAAe;AACf;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA,WAAW,QAAQ;AACnB,WAAW,kBAAkB,oEAAoE,GAAG;AACpG,WAAW,eAAe;AAC1B;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wDAAwD;;AAExD,iBAAiB,0DAAQ,CAAC,qDAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;;AAEjC;AACA,KAAK;AACL,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACnNA;AAC2D;AACtB,CAAC;;AAEtC;;AAEA;AACA,OAAO,6BAA6B,0BAA0B,6BAA6B,2BAA2B,6BAA6B,WAAW,6BAA6B,GAAG,mEAAe;AAC7M;;AAEA;AACA,qBAAqB;AACrB;AACA;;AAEO;AACP;AACA,WAAW,QAAQ;AACnB,aAAa,wDAAwD;AACrE,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM;;;AAGN,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mDAAQ;AACd;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA,+DAAe,MAAM;;;;;;;;;;;;AChErB;AACA,aAAa,4IAA4I;AACzJ,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,QAAQ,+BAA+B;AAClD,aAAa;AACb;;;AAGA;AACA,qCAAqC;AACrC;;AAEA,wFAAwF;AACxF;AACA;;AAEA;AACA;AACA;;AAEA,wEAAwE;;AAExE;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,+DAAe,eAAe;;;;;;;;;;;;ACxI9B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA,+DAAe,sBAAsB;;;;;;;;;;;;;;;;;;ACzBW;AAChD,iCAAiC;AACjC;;AAEA,2BAA2B;;AAE3B;AACA,WAAW,uEAAuE;AAClF,aAAa;AACb;;AAEA;AACA,EAAE,sFAA6B;AAC/B;AACA,GAAG;AACH;;AAEA;AACA,UAAU,yEAAgB;;;;;;;;;;;;;;AClBuC;AACjE;AACA,WAAW,QAAQ;AACnB,eAAe;AACf;;AAEA;AACA,eAAe,yBAAyB;AACxC;;AAEA;AACA;;AAEA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA,IAAI;AACJ;AACA,uBAAuB,sEAAsB;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAAe,QAAQ;;;;;;;;;;;;;;;ACxCyB;AACjB;AAC/B,cAAc,4BAA4B;AAC1C,cAAc,2BAA2B;;AAEzC;AACA,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;;;AAGA;AACA;AACA,IAAI,6CAAQ;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,6CAAQ;AACZ,IAAI,kEAAe;;AAEnB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,+DAAe,SAAS;;;;;;;;;;;;ACvExB;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,+DAAe,OAAO;;;;;;;;;;;;AChBtB,sDAAsD,gBAAgB,6CAA6C,oDAAoD,IAAI,IAAI,IAAI,IAAI;AACvL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAAe,SAAS;;;;;;;;;;ACnBxB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAU;AACd;AACA;AACA,0BAA0B,uBAAgB;AAC1C;AACA,WAAW,mBAAO,CAAC,gDAAO;AAC1B;AACA,EAAE,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,mBAAO,CAAC,0EAAoB;;AAEhC;AACA;AACA;AACA,IAAI;AACJ;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,kBAAkB,mBAAO,CAAC,wDAAW;AACrC;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE,KAAK,EAEN;;;;;;;;;;;AC5DD,mBAAmB,mBAAO,CAAC,+CAAQ;AACnC;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,WAAW,mBAAO,CAAC,gDAAO;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3CA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB,6BAA6B;;AAE7B,uBAAuB;;AAEvB,0BAA0B;AAC1B;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;;;;;;UC1DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA,sBAAsB;UACtB,oDAAoD,uBAAuB;UAC3E;UACA;UACA,GAAG;UACH;UACA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WCxCA;WACA;WACA;WACA,eAAe,4BAA4B;WAC3C,eAAe;WACf,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;;;;;WCJA,wCAAwC;;;;;WCAxC,qCAAqC;;;;;WCArC,8CAA8C;;;;;WCA9C;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,4CAA4C,mBAAmB;WAC/D;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA;;;;;WCzCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,2BAA2B;WAC3B,4BAA4B;WAC5B,2BAA2B;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA,iBAAiB,qCAAqC;WACtD;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,iBAAiB;WACrC;WACA;WACA;WACA,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA,QAAQ;WACR;WACA,MAAM;WACN,KAAK;WACL,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;;WAEA;WACA;;WAEA;;WAEA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;;WAEA;WACA;WACA,EAAE;;WAEF;WACA;;WAEA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,oBAAoB,oBAAoB;WACxC;WACA;WACA;WACA;WACA,EAAE;;WAEF;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA,IAAI;WACJ;;WAEA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;WACA;WACA;;;;;WCrYA;;;;;WCAA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB,2BAA2B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,kBAAkB,cAAc;WAChC;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,cAAc,MAAM;WACpB;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA,cAAc,aAAa;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,iBAAiB,4BAA4B;WAC7C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kBAAkB,uCAAuC;WACzD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,iCAAiC;WACpD;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,uCAAuC;WAC7D;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,sBAAsB;WAC5C;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,wCAAwC;WAC3D;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,IAAI;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,sCAAsC;WACtC;WACA;WACA,EAAE;WACF;;WAEA;;WAEA;;;;;UE9fA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA","sources":["webpack://leaflet-distortableimage/./node_modules/ansi-html-community/index.js","webpack://leaflet-distortableimage/./src/DistortableCollection.js","webpack://leaflet-distortableimage/./src/DistortableImageOverlay.js","webpack://leaflet-distortableimage/./src/components/DistortableImage.Keymapper.js","webpack://leaflet-distortableimage/./src/edit/DistortableCollection.Edit.js","webpack://leaflet-distortableimage/./src/edit/DistortableImage.Edit.js","webpack://leaflet-distortableimage/./src/edit/actions/BorderAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DeleteAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DistortAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DragAction.js","webpack://leaflet-distortableimage/./src/edit/actions/EditAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ExportAction.js","webpack://leaflet-distortableimage/./src/edit/actions/FreeRotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/GeolocateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/LockAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacitiesAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacityAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RestoreAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ScaleAction.js","webpack://leaflet-distortableimage/./src/edit/actions/StackAction.js","webpack://leaflet-distortableimage/./src/edit/actions/UnlockAction.js","webpack://leaflet-distortableimage/./src/edit/getEXIFdata.js","webpack://leaflet-distortableimage/./src/edit/handles/DistortHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/DragHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/EditHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/FreeRotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/LockHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/RotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/ScaleHandle.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.ControlBar.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.PopupBar.js","webpack://leaflet-distortableimage/./src/iconsets/IconSet.js","webpack://leaflet-distortableimage/./src/iconsets/KeymapperIconSet.js","webpack://leaflet-distortableimage/./src/iconsets/ToolbarIconSet.js","webpack://leaflet-distortableimage/./src/mapmixins/BoxCollector.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickLabels.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/./node_modules/events/events.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/index.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/named-references.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/numeric-unicode-map.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/surrogate-pairs.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/clients/WebSocketClient.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/modules/logger/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/overlay.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/socket.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/createSocketURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/log.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/parseURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/reloadApp.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/sendMessage.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/stripAnsi.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/dev-server.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/emitter.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log-apply-result.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log.js","webpack://leaflet-distortableimage/webpack/bootstrap","webpack://leaflet-distortableimage/webpack/runtime/compat get default export","webpack://leaflet-distortableimage/webpack/runtime/define property getters","webpack://leaflet-distortableimage/webpack/runtime/get javascript update chunk filename","webpack://leaflet-distortableimage/webpack/runtime/get update manifest filename","webpack://leaflet-distortableimage/webpack/runtime/getFullHash","webpack://leaflet-distortableimage/webpack/runtime/hasOwnProperty shorthand","webpack://leaflet-distortableimage/webpack/runtime/load script","webpack://leaflet-distortableimage/webpack/runtime/make namespace object","webpack://leaflet-distortableimage/webpack/runtime/hot module replacement","webpack://leaflet-distortableimage/webpack/runtime/publicPath","webpack://leaflet-distortableimage/webpack/runtime/jsonp chunk loading","webpack://leaflet-distortableimage/webpack/before-startup","webpack://leaflet-distortableimage/webpack/startup","webpack://leaflet-distortableimage/webpack/after-startup"],"sourcesContent":["'use strict'\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n","const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng || zc[0].lon},\n {lat: zc[1].lat, lon: zc[1].lng || zc[1].lon},\n {lat: zc[3].lat, lon: zc[3].lng || zc[3].lon},\n {lat: zc[2].lat, lon: zc[2].lng || zc[2].lon},\n ];\n\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n tooltipText: layer.getTooltipText(),\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n interactive: true,\n tooltipText: '',\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n\n this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this);\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar named_references_1 = require(\"./named-references\");\nvar numeric_unicode_map_1 = require(\"./numeric-unicode-map\");\nvar surrogate_pairs_1 = require(\"./surrogate-pairs\");\nvar allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 });\nvar encodeRegExps = {\n specialChars: /[<>'\"&]/g,\n nonAscii: /(?:[<>'\"&\\u0080-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n nonAsciiPrintable: /(?:[<>'\"&\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n extensive: /(?:[\\x01-\\x0c\\x0e-\\x1f\\x21-\\x2c\\x2e-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7d\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g\n};\nvar defaultEncodeOptions = {\n mode: 'specialChars',\n level: 'all',\n numeric: 'decimal'\n};\n/** Encodes all the necessary (specified by `level`) characters in the text */\nfunction encode(text, _a) {\n var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e;\n if (!text) {\n return '';\n }\n var encodeRegExp = encodeRegExps[mode];\n var references = allNamedReferences[level].characters;\n var isHex = numeric === 'hexadecimal';\n encodeRegExp.lastIndex = 0;\n var _b = encodeRegExp.exec(text);\n var _c;\n if (_b) {\n _c = '';\n var _d = 0;\n do {\n if (_d !== _b.index) {\n _c += text.substring(_d, _b.index);\n }\n var _e = _b[0];\n var result_1 = references[_e];\n if (!result_1) {\n var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0);\n result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';';\n }\n _c += result_1;\n _d = _b.index + _e.length;\n } while ((_b = encodeRegExp.exec(text)));\n if (_d !== text.length) {\n _c += text.substring(_d);\n }\n }\n else {\n _c =\n text;\n }\n return _c;\n}\nexports.encode = encode;\nvar defaultDecodeOptions = {\n scope: 'body',\n level: 'all'\n};\nvar strict = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);/g;\nvar attribute = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;\nvar baseDecodeRegExps = {\n xml: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.xml\n },\n html4: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html4\n },\n html5: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html5\n }\n};\nvar decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 });\nvar fromCharCode = String.fromCharCode;\nvar outOfBoundsChar = fromCharCode(65533);\nvar defaultDecodeEntityOptions = {\n level: 'all'\n};\n/** Decodes a single entity */\nfunction decodeEntity(entity, _a) {\n var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b;\n if (!entity) {\n return '';\n }\n var _b = entity;\n var decodeEntityLastChar_1 = entity[entity.length - 1];\n if (false\n && decodeEntityLastChar_1 === '=') {\n _b =\n entity;\n }\n else if (false\n && decodeEntityLastChar_1 !== ';') {\n _b =\n entity;\n }\n else {\n var decodeResultByReference_1 = allNamedReferences[level].entities[entity];\n if (decodeResultByReference_1) {\n _b = decodeResultByReference_1;\n }\n else if (entity[0] === '&' && entity[1] === '#') {\n var decodeSecondChar_1 = entity[2];\n var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X'\n ? parseInt(entity.substr(3), 16)\n : parseInt(entity.substr(2));\n _b =\n decodeCode_1 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_1 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_1)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1);\n }\n }\n return _b;\n}\nexports.decodeEntity = decodeEntity;\n/** Decodes all entities in the text */\nfunction decode(text, _a) {\n var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b;\n if (!text) {\n return '';\n }\n var decodeRegExp = decodeRegExps[level][scope];\n var references = allNamedReferences[level].entities;\n var isAttribute = scope === 'attribute';\n var isStrict = scope === 'strict';\n decodeRegExp.lastIndex = 0;\n var replaceMatch_1 = decodeRegExp.exec(text);\n var replaceResult_1;\n if (replaceMatch_1) {\n replaceResult_1 = '';\n var replaceLastIndex_1 = 0;\n do {\n if (replaceLastIndex_1 !== replaceMatch_1.index) {\n replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index);\n }\n var replaceInput_1 = replaceMatch_1[0];\n var decodeResult_1 = replaceInput_1;\n var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1];\n if (isAttribute\n && decodeEntityLastChar_2 === '=') {\n decodeResult_1 = replaceInput_1;\n }\n else if (isStrict\n && decodeEntityLastChar_2 !== ';') {\n decodeResult_1 = replaceInput_1;\n }\n else {\n var decodeResultByReference_2 = references[replaceInput_1];\n if (decodeResultByReference_2) {\n decodeResult_1 = decodeResultByReference_2;\n }\n else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') {\n var decodeSecondChar_2 = replaceInput_1[2];\n var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X'\n ? parseInt(replaceInput_1.substr(3), 16)\n : parseInt(replaceInput_1.substr(2));\n decodeResult_1 =\n decodeCode_2 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_2 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_2)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2);\n }\n }\n replaceResult_1 += decodeResult_1;\n replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length;\n } while ((replaceMatch_1 = decodeRegExp.exec(text)));\n if (replaceLastIndex_1 !== text.length) {\n replaceResult_1 += text.substring(replaceLastIndex_1);\n }\n }\n else {\n replaceResult_1 =\n text;\n }\n return replaceResult_1;\n}\nexports.decode = decode;\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.bodyRegExps={xml:/&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\",\"&\":\"&\"},characters:{\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\",\"&\":\"&\"}},html4:{entities:{\"'\":\"'\",\" \":\" \",\" \":\" \",\"¡\":\"¡\",\"¡\":\"¡\",\"¢\":\"¢\",\"¢\":\"¢\",\"£\":\"£\",\"£\":\"£\",\"¤\":\"¤\",\"¤\":\"¤\",\"¥\":\"¥\",\"¥\":\"¥\",\"¦\":\"¦\",\"¦\":\"¦\",\"§\":\"§\",\"§\":\"§\",\"¨\":\"¨\",\"¨\":\"¨\",\"©\":\"©\",\"©\":\"©\",\"ª\":\"ª\",\"ª\":\"ª\",\"«\":\"«\",\"«\":\"«\",\"¬\":\"¬\",\"¬\":\"¬\",\"­\":\"­\",\"­\":\"­\",\"®\":\"®\",\"®\":\"®\",\"¯\":\"¯\",\"¯\":\"¯\",\"°\":\"°\",\"°\":\"°\",\"±\":\"±\",\"±\":\"±\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"´\":\"´\",\"´\":\"´\",\"µ\":\"µ\",\"µ\":\"µ\",\"¶\":\"¶\",\"¶\":\"¶\",\"·\":\"·\",\"·\":\"·\",\"¸\":\"¸\",\"¸\":\"¸\",\"¹\":\"¹\",\"¹\":\"¹\",\"º\":\"º\",\"º\":\"º\",\"»\":\"»\",\"»\":\"»\",\"¼\":\"¼\",\"¼\":\"¼\",\"½\":\"½\",\"½\":\"½\",\"¾\":\"¾\",\"¾\":\"¾\",\"¿\":\"¿\",\"¿\":\"¿\",\"À\":\"À\",\"À\":\"À\",\"Á\":\"Á\",\"Á\":\"Á\",\"Â\":\"Â\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"È\":\"È\",\"È\":\"È\",\"É\":\"É\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"×\":\"×\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"ß\":\"ß\",\"à\":\"à\",\"à\":\"à\",\"á\":\"á\",\"á\":\"á\",\"â\":\"â\",\"â\":\"â\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"å\":\"å\",\"å\":\"å\",\"æ\":\"æ\",\"æ\":\"æ\",\"ç\":\"ç\",\"ç\":\"ç\",\"è\":\"è\",\"è\":\"è\",\"é\":\"é\",\"é\":\"é\",\"ê\":\"ê\",\"ê\":\"ê\",\"ë\":\"ë\",\"ë\":\"ë\",\"ì\":\"ì\",\"ì\":\"ì\",\"í\":\"í\",\"í\":\"í\",\"î\":\"î\",\"î\":\"î\",\"ï\":\"ï\",\"ï\":\"ï\",\"ð\":\"ð\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ò\":\"ò\",\"ó\":\"ó\",\"ó\":\"ó\",\"ô\":\"ô\",\"ô\":\"ô\",\"õ\":\"õ\",\"õ\":\"õ\",\"ö\":\"ö\",\"ö\":\"ö\",\"÷\":\"÷\",\"÷\":\"÷\",\"ø\":\"ø\",\"ø\":\"ø\",\"ù\":\"ù\",\"ù\":\"ù\",\"ú\":\"ú\",\"ú\":\"ú\",\"û\":\"û\",\"û\":\"û\",\"ü\":\"ü\",\"ü\":\"ü\",\"ý\":\"ý\",\"ý\":\"ý\",\"þ\":\"þ\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\""\":'\"',\""\":'\"',\"&\":\"&\",\"&\":\"&\",\"<\":\"<\",\"<\":\"<\",\">\":\">\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"⟨\":\"〈\",\"⟩\":\"〉\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"},characters:{\"'\":\"'\",\" \":\" \",\"¡\":\"¡\",\"¢\":\"¢\",\"£\":\"£\",\"¤\":\"¤\",\"¥\":\"¥\",\"¦\":\"¦\",\"§\":\"§\",\"¨\":\"¨\",\"©\":\"©\",\"ª\":\"ª\",\"«\":\"«\",\"¬\":\"¬\",\"­\":\"­\",\"®\":\"®\",\"¯\":\"¯\",\"°\":\"°\",\"±\":\"±\",\"²\":\"²\",\"³\":\"³\",\"´\":\"´\",\"µ\":\"µ\",\"¶\":\"¶\",\"·\":\"·\",\"¸\":\"¸\",\"¹\":\"¹\",\"º\":\"º\",\"»\":\"»\",\"¼\":\"¼\",\"½\":\"½\",\"¾\":\"¾\",\"¿\":\"¿\",\"À\":\"À\",\"Á\":\"Á\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"È\":\"È\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"à\":\"à\",\"á\":\"á\",\"â\":\"â\",\"ã\":\"ã\",\"ä\":\"ä\",\"å\":\"å\",\"æ\":\"æ\",\"ç\":\"ç\",\"è\":\"è\",\"é\":\"é\",\"ê\":\"ê\",\"ë\":\"ë\",\"ì\":\"ì\",\"í\":\"í\",\"î\":\"î\",\"ï\":\"ï\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ó\":\"ó\",\"ô\":\"ô\",\"õ\":\"õ\",\"ö\":\"ö\",\"÷\":\"÷\",\"ø\":\"ø\",\"ù\":\"ù\",\"ú\":\"ú\",\"û\":\"û\",\"ü\":\"ü\",\"ý\":\"ý\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",'\"':\""\",\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"〈\":\"⟨\",\"〉\":\"⟩\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"}},html5:{entities:{\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"&\":\"&\",\"&\":\"&\",\"Á\":\"Á\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"ℬ\":\"ℬ\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"ℭ\":\"ℭ\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"ⅅ\":\"ⅅ\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"∯\":\"∯\",\"¨\":\"¨\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⫤\":\"⫤\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"⇓\":\"⇓\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"É\":\"É\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"ℋ\":\"ℋ\",\"Ħ\":\"Ħ\",\"≎\":\"≎\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"ℑ\":\"ℑ\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"⇒\":\"⇒\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"ℒ\":\"ℒ\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"ℳ\":\"ℳ\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"≫\":\"≫\",\"≪\":\"≪\",\" \":\"\\n\",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℌ\":\"ℌ\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∷\":\"∷\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",\""\":'\"',\""\":'\"',\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"ℜ\":\"ℜ\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"⇒\":\"⇒\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↓\":\"↓\",\"←\":\"←\",\"→\":\"→\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∋\":\"∋\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⋑\":\"⋑\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\" \":\"\\t\",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",\"_\":\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"↑\":\"↑\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"​\":\"​\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"â\":\"â\",\"´\":\"´\",\"´\":\"´\",\"а\":\"а\",\"æ\":\"æ\",\"æ\":\"æ\",\"⁡\":\"⁡\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"&\":\"&\",\"&\":\"&\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∠\":\"∠\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"Å\":\"Å\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"≈\":\"≈\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"≈\":\"≈\",\"≊\":\"≊\",\"å\":\"å\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"≈\":\"≈\",\"≍\":\"≍\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"∳\":\"∳\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⌅\":\"⌅\",\"⎵\":\"⎵\",\"⎶\":\"⎶\",\"≌\":\"≌\",\"б\":\"б\",\"„\":\"„\",\"∵\":\"∵\",\"∵\":\"∵\",\"⦰\":\"⦰\",\"϶\":\"϶\",\"ℬ\":\"ℬ\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▪\":\"▪\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⊥\":\"⊥\",\"⊥\":\"⊥\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"─\":\"─\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"‵\":\"‵\",\"˘\":\"˘\",\"¦\":\"¦\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"\\":\"\\\\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"•\":\"•\",\"≎\":\"≎\",\"⪮\":\"⪮\",\"≏\":\"≏\",\"≏\":\"≏\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"ˇ\":\"ˇ\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"¸\":\"¸\",\"¸\":\"¸\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"¢\":\"¢\",\"·\":\"·\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"®\":\"®\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"≗\":\"≗\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\"♣\":\"♣\",\":\":\":\",\"≔\":\"≔\",\"≔\":\"≔\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"∘\":\"∘\",\"∁\":\"∁\",\"ℂ\":\"ℂ\",\"≅\":\"≅\",\"⩭\":\"⩭\",\"∮\":\"∮\",\"𝕔\":\"𝕔\",\"∐\":\"∐\",\"©\":\"©\",\"©\":\"©\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"¤\":\"¤\",\"↶\":\"↶\",\"↷\":\"↷\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"∲\":\"∲\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⇓\":\"⇓\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"↓\":\"↓\",\"‐\":\"‐\",\"⊣\":\"⊣\",\"⤏\":\"⤏\",\"˝\":\"˝\",\"ď\":\"ď\",\"д\":\"д\",\"ⅆ\":\"ⅆ\",\"‡\":\"‡\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⋄\":\"⋄\",\"⋄\":\"⋄\",\"♦\":\"♦\",\"♦\":\"♦\",\"¨\":\"¨\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"÷\":\"÷\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",\"$\":\"$\",\"𝕕\":\"𝕕\",\"˙\":\"˙\",\"≐\":\"≐\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌆\":\"⌆\",\"↓\":\"↓\",\"⇊\":\"⇊\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⤐\":\"⤐\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"▾\":\"▾\",\"⇵\":\"⇵\",\"⥯\":\"⥯\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"⩷\":\"⩷\",\"≑\":\"≑\",\"é\":\"é\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\"∅\":\"∅\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"≖\":\"≖\",\"≕\":\"≕\",\"≂\":\"≂\",\"⪖\":\"⪖\",\"⪕\":\"⪕\",\"=\":\"=\",\"≟\":\"≟\",\"≡\":\"≡\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"≐\":\"≐\",\"≂\":\"≂\",\"η\":\"η\",\"ð\":\"ð\",\"ð\":\"ð\",\"ë\":\"ë\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"∃\":\"∃\",\"ℰ\":\"ℰ\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",\"fj\":\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"∀\":\"∀\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"≧\":\"≧\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"ϝ\":\"ϝ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≥\":\"≥\",\"≧\":\"≧\",\"⩾\":\"⩾\",\"⩾\":\"⩾\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"≫\":\"≫\",\"⋙\":\"⋙\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"≷\":\"≷\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⪈\":\"⪈\",\"≩\":\"≩\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"`\":\"`\",\"ℊ\":\"ℊ\",\"≳\":\"≳\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\">\":\">\",\">\":\">\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⪆\":\"⪆\",\"⥸\":\"⥸\",\"⋗\":\"⋗\",\"⋛\":\"⋛\",\"⪌\":\"⪌\",\"≷\":\"≷\",\"≳\":\"≳\",\"≩︀\":\"≩︀\",\"≩︀\":\"≩︀\",\"⇔\":\"⇔\",\" \":\" \",\"½\":\"½\",\"ℋ\":\"ℋ\",\"ъ\":\"ъ\",\"↔\":\"↔\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ℏ\":\"ℏ\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"‐\":\"‐\",\"í\":\"í\",\"í\":\"í\",\"⁣\":\"⁣\",\"î\":\"î\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"¡\":\"¡\",\"⇔\":\"⇔\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"ì\":\"ì\",\"ⅈ\":\"ⅈ\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ℑ\":\"ℑ\",\"ℐ\":\"ℐ\",\"ℑ\":\"ℑ\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"∈\":\"∈\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"ı\":\"ı\",\"∫\":\"∫\",\"⊺\":\"⊺\",\"ℤ\":\"ℤ\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"⨼\":\"⨼\",\"¿\":\"¿\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"∈\":\"∈\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"∈\":\"∈\",\"⁢\":\"⁢\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⇚\":\"⇚\",\"⇐\":\"⇐\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"≦\":\"≦\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"ℒ\":\"ℒ\",\"λ\":\"λ\",\"⟨\":\"⟨\",\"⦑\":\"⦑\",\"⟨\":\"⟨\",\"⪅\":\"⪅\",\"«\":\"«\",\"«\":\"«\",\"←\":\"←\",\"⇤\":\"⇤\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↩\":\"↩\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"⌈\":\"⌈\",\"{\":\"{\",\"л\":\"л\",\"⤶\":\"⤶\",\"“\":\"“\",\"„\":\"„\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"←\":\"←\",\"↢\":\"↢\",\"↽\":\"↽\",\"↼\":\"↼\",\"⇇\":\"⇇\",\"↔\":\"↔\",\"⇆\":\"⇆\",\"⇋\":\"⇋\",\"↭\":\"↭\",\"⋋\":\"⋋\",\"⋚\":\"⋚\",\"≤\":\"≤\",\"≦\":\"≦\",\"⩽\":\"⩽\",\"⩽\":\"⩽\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⪅\":\"⪅\",\"⋖\":\"⋖\",\"⋚\":\"⋚\",\"⪋\":\"⪋\",\"≶\":\"≶\",\"≲\":\"≲\",\"⥼\":\"⥼\",\"⌊\":\"⌊\",\"𝔩\":\"𝔩\",\"≶\":\"≶\",\"⪑\":\"⪑\",\"↽\":\"↽\",\"↼\":\"↼\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"≪\":\"≪\",\"⇇\":\"⇇\",\"⌞\":\"⌞\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⪇\":\"⪇\",\"≨\":\"≨\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟦\":\"⟦\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟼\":\"⟼\",\"⟶\":\"⟶\",\"↫\":\"↫\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"_\":\"_\",\"◊\":\"◊\",\"◊\":\"◊\",\"⧫\":\"⧫\",\"(\":\"(\",\"⦓\":\"⦓\",\"⇆\":\"⇆\",\"⌟\":\"⌟\",\"⇋\":\"⇋\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"↰\":\"↰\",\"≲\":\"≲\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"[\":\"[\",\"‘\":\"‘\",\"‚\":\"‚\",\"ł\":\"ł\",\"<\":\"<\",\"<\":\"<\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋖\":\"⋖\",\"⋋\":\"⋋\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"◂\":\"◂\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"✠\":\"✠\",\"↦\":\"↦\",\"↦\":\"↦\",\"↧\":\"↧\",\"↤\":\"↤\",\"↥\":\"↥\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"∡\":\"∡\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"µ\":\"µ\",\"∣\":\"∣\",\"*\":\"*\",\"⫰\":\"⫰\",\"·\":\"·\",\"·\":\"·\",\"−\":\"−\",\"⊟\":\"⊟\",\"∸\":\"∸\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"…\":\"…\",\"∓\":\"∓\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"∓\":\"∓\",\"𝓂\":\"𝓂\",\"∾\":\"∾\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"≫̸\":\"≫̸\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"≪̸\":\"≪̸\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"∇\":\"∇\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"≉\":\"≉\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"≉\":\"≉\",\"♮\":\"♮\",\"♮\":\"♮\",\"ℕ\":\"ℕ\",\" \":\" \",\" \":\" \",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"≇\":\"≇\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"≠\":\"≠\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"↗\":\"↗\",\"↗\":\"↗\",\"≐̸\":\"≐̸\",\"≢\":\"≢\",\"⤨\":\"⤨\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"∄\":\"∄\",\"𝔫\":\"𝔫\",\"≧̸\":\"≧̸\",\"≱\":\"≱\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"⩾̸\":\"⩾̸\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≯\":\"≯\",\"≯\":\"≯\",\"⇎\":\"⇎\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"∋\":\"∋\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"∋\":\"∋\",\"њ\":\"њ\",\"⇍\":\"⇍\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"≰\":\"≰\",\"↚\":\"↚\",\"↮\":\"↮\",\"≰\":\"≰\",\"≦̸\":\"≦̸\",\"⩽̸\":\"⩽̸\",\"⩽̸\":\"⩽̸\",\"≮\":\"≮\",\"≴\":\"≴\",\"≮\":\"≮\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"∤\":\"∤\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"¬\":\"¬\",\"∉\":\"∉\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"∉\":\"∉\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"∌\":\"∌\",\"∌\":\"∌\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"∦\":\"∦\",\"∦\":\"∦\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"⊀\":\"⊀\",\"⋠\":\"⋠\",\"⪯̸\":\"⪯̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⇏\":\"⇏\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"↛\":\"↛\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"⊁\":\"⊁\",\"⋡\":\"⋡\",\"⪰̸\":\"⪰̸\",\"𝓃\":\"𝓃\",\"∤\":\"∤\",\"∦\":\"∦\",\"≁\":\"≁\",\"≄\":\"≄\",\"≄\":\"≄\",\"∤\":\"∤\",\"∦\":\"∦\",\"⋢\":\"⋢\",\"⋣\":\"⋣\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊈\":\"⊈\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⫅̸\":\"⫅̸\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"⊉\":\"⊉\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"⫆̸\":\"⫆̸\",\"≹\":\"≹\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"≸\":\"≸\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"↖\":\"↖\",\"↖\":\"↖\",\"⤧\":\"⤧\",\"Ⓢ\":\"Ⓢ\",\"ó\":\"ó\",\"ó\":\"ó\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"ô\":\"ô\",\"ô\":\"ô\",\"о\":\"о\",\"⊝\":\"⊝\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⊙\":\"⊙\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"Ω\":\"Ω\",\"∮\":\"∮\",\"↺\":\"↺\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"‾\":\"‾\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"⊖\":\"⊖\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"⊕\":\"⊕\",\"∨\":\"∨\",\"↻\":\"↻\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"ª\":\"ª\",\"º\":\"º\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ℴ\":\"ℴ\",\"ø\":\"ø\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"õ\":\"õ\",\"⊗\":\"⊗\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"∥\":\"∥\",\"¶\":\"¶\",\"¶\":\"¶\",\"∥\":\"∥\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"∂\":\"∂\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"⊥\":\"⊥\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"ℳ\":\"ℳ\",\"☎\":\"☎\",\"π\":\"π\",\"⋔\":\"⋔\",\"ϖ\":\"ϖ\",\"ℏ\":\"ℏ\",\"ℎ\":\"ℎ\",\"ℏ\":\"ℏ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⊞\":\"⊞\",\"⨢\":\"⨢\",\"∔\":\"∔\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"±\":\"±\",\"±\":\"±\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"±\":\"±\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"£\":\"£\",\"≺\":\"≺\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"≺\":\"≺\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"≾\":\"≾\",\"′\":\"′\",\"ℙ\":\"ℙ\",\"⪵\":\"⪵\",\"⪹\":\"⪹\",\"⋨\":\"⋨\",\"∏\":\"∏\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"∝\":\"∝\",\"∝\":\"∝\",\"≾\":\"≾\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"⨌\":\"⨌\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"ℍ\":\"ℍ\",\"⨖\":\"⨖\",\"?\":\"?\",\"≟\":\"≟\",\""\":'\"',\""\":'\"',\"⇛\":\"⇛\",\"⇒\":\"⇒\",\"⤜\":\"⤜\",\"⤏\":\"⤏\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"√\":\"√\",\"⦳\":\"⦳\",\"⟩\":\"⟩\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"⟩\":\"⟩\",\"»\":\"»\",\"»\":\"»\",\"→\":\"→\",\"⥵\":\"⥵\",\"⇥\":\"⇥\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"↪\":\"↪\",\"↬\":\"↬\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"ℚ\":\"ℚ\",\"⤍\":\"⤍\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"⌉\":\"⌉\",\"}\":\"}\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"”\":\"”\",\"”\":\"”\",\"↳\":\"↳\",\"ℜ\":\"ℜ\",\"ℛ\":\"ℛ\",\"ℜ\":\"ℜ\",\"ℝ\":\"ℝ\",\"▭\":\"▭\",\"®\":\"®\",\"®\":\"®\",\"⥽\":\"⥽\",\"⌋\":\"⌋\",\"𝔯\":\"𝔯\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"→\":\"→\",\"↣\":\"↣\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"⇉\":\"⇉\",\"↝\":\"↝\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"≓\":\"≓\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⟧\":\"⟧\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"⇉\":\"⇉\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"↱\":\"↱\",\"]\":\"]\",\"’\":\"’\",\"’\":\"’\",\"⋌\":\"⋌\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"▸\":\"▸\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"‚\":\"‚\",\"≻\":\"≻\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"≿\":\"≿\",\"с\":\"с\",\"⋅\":\"⋅\",\"⊡\":\"⊡\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"⤥\":\"⤥\",\"↘\":\"↘\",\"↘\":\"↘\",\"§\":\"§\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"∖\":\"∖\",\"∖\":\"∖\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"⌢\":\"⌢\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"∣\":\"∣\",\"∥\":\"∥\",\"­\":\"­\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"ς\":\"ς\",\"∼\":\"∼\",\"⩪\":\"⩪\",\"≃\":\"≃\",\"≃\":\"≃\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"←\":\"←\",\"∖\":\"∖\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"∣\":\"∣\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"♠\":\"♠\",\"∥\":\"∥\",\"⊓\":\"⊓\",\"⊓︀\":\"⊓︀\",\"⊔\":\"⊔\",\"⊔︀\":\"⊔︀\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"□\":\"□\",\"□\":\"□\",\"▪\":\"▪\",\"▪\":\"▪\",\"→\":\"→\",\"𝓈\":\"𝓈\",\"∖\":\"∖\",\"⌣\":\"⌣\",\"⋆\":\"⋆\",\"☆\":\"☆\",\"★\":\"★\",\"ϵ\":\"ϵ\",\"ϕ\":\"ϕ\",\"¯\":\"¯\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⊆\":\"⊆\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⊂\":\"⊂\",\"⊆\":\"⊆\",\"⫅\":\"⫅\",\"⊊\":\"⊊\",\"⫋\":\"⫋\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"≻\":\"≻\",\"⪸\":\"⪸\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"⪺\":\"⪺\",\"⪶\":\"⪶\",\"⋩\":\"⋩\",\"≿\":\"≿\",\"∑\":\"∑\",\"♪\":\"♪\",\"¹\":\"¹\",\"¹\":\"¹\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"⊃\":\"⊃\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⊇\":\"⊇\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⫆\":\"⫆\",\"⊋\":\"⊋\",\"⫌\":\"⫌\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤦\":\"⤦\",\"↙\":\"↙\",\"↙\":\"↙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"⎴\":\"⎴\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⃛\":\"⃛\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"∴\":\"∴\",\"∴\":\"∴\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"ϑ\":\"ϑ\",\"≈\":\"≈\",\"∼\":\"∼\",\" \":\" \",\"≈\":\"≈\",\"∼\":\"∼\",\"þ\":\"þ\",\"þ\":\"þ\",\"˜\":\"˜\",\"×\":\"×\",\"×\":\"×\",\"⊠\":\"⊠\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"∭\":\"∭\",\"⤨\":\"⤨\",\"⊤\":\"⊤\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"⤩\":\"⤩\",\"‴\":\"‴\",\"™\":\"™\",\"▵\":\"▵\",\"▿\":\"▿\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"≜\":\"≜\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"◬\":\"◬\",\"≜\":\"≜\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"≬\":\"≬\",\"↞\":\"↞\",\"↠\":\"↠\",\"⇑\":\"⇑\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ú\":\"ú\",\"↑\":\"↑\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"û\":\"û\",\"у\":\"у\",\"⇅\":\"⇅\",\"ű\":\"ű\",\"⥮\":\"⥮\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"ù\":\"ù\",\"↿\":\"↿\",\"↾\":\"↾\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"¨\":\"¨\",\"¨\":\"¨\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"↑\":\"↑\",\"↕\":\"↕\",\"↿\":\"↿\",\"↾\":\"↾\",\"⊎\":\"⊎\",\"υ\":\"υ\",\"ϒ\":\"ϒ\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"▵\":\"▵\",\"▴\":\"▴\",\"⇈\":\"⇈\",\"ü\":\"ü\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⇕\":\"⇕\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⊨\":\"⊨\",\"⦜\":\"⦜\",\"ϵ\":\"ϵ\",\"ϰ\":\"ϰ\",\"∅\":\"∅\",\"ϕ\":\"ϕ\",\"ϖ\":\"ϖ\",\"∝\":\"∝\",\"↕\":\"↕\",\"ϱ\":\"ϱ\",\"ς\":\"ς\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"ϑ\":\"ϑ\",\"⊲\":\"⊲\",\"⊳\":\"⊳\",\"в\":\"в\",\"⊢\":\"⊢\",\"∨\":\"∨\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"|\":\"|\",\"|\":\"|\",\"𝔳\":\"𝔳\",\"⊲\":\"⊲\",\"⊂⃒\":\"⊂⃒\",\"⊃⃒\":\"⊃⃒\",\"𝕧\":\"𝕧\",\"∝\":\"∝\",\"⊳\":\"⊳\",\"𝓋\":\"𝓋\",\"⫋︀\":\"⫋︀\",\"⊊︀\":\"⊊︀\",\"⫌︀\":\"⫌︀\",\"⊋︀\":\"⊋︀\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"∧\":\"∧\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"℘\":\"℘\",\"≀\":\"≀\",\"≀\":\"≀\",\"𝓌\":\"𝓌\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"▽\":\"▽\",\"𝔵\":\"𝔵\",\"⟺\":\"⟺\",\"⟷\":\"⟷\",\"ξ\":\"ξ\",\"⟸\":\"⟸\",\"⟵\":\"⟵\",\"⟼\":\"⟼\",\"⋻\":\"⋻\",\"⨀\":\"⨀\",\"𝕩\":\"𝕩\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⟹\":\"⟹\",\"⟶\":\"⟶\",\"𝓍\":\"𝓍\",\"⨆\":\"⨆\",\"⨄\":\"⨄\",\"△\":\"△\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"ý\":\"ý\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ℨ\":\"ℨ\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"},characters:{\"Æ\":\"Æ\",\"&\":\"&\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"Ħ\":\"Ħ\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"\\n\":\" \",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",'\"':\""\",\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\"\\t\":\" \",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",_:\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"а\":\"а\",\"æ\":\"æ\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"ã\":\"ã\",\"ä\":\"ä\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⎶\":\"⎶\",\"б\":\"б\",\"„\":\"„\",\"⦰\":\"⦰\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"◯\":\"◯\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"\\\\\":\"\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"⪮\":\"⪮\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\":\":\":\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"⩭\":\"⩭\",\"𝕔\":\"𝕔\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"‐\":\"‐\",\"⤏\":\"⤏\",\"ď\":\"ď\",\"д\":\"д\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"♦\":\"♦\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",$:\"$\",\"𝕕\":\"𝕕\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"=\":\"=\",\"≟\":\"≟\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"η\":\"η\",\"ð\":\"ð\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",fj:\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"ℊ\":\"ℊ\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⥸\":\"⥸\",\"≩︀\":\"≩︀\",\"ъ\":\"ъ\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"í\":\"í\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"λ\":\"λ\",\"⦑\":\"⦑\",\"⪅\":\"⪅\",\"«\":\"«\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"л\":\"л\",\"⤶\":\"⤶\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"⇇\":\"⇇\",\"⋋\":\"⋋\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⋖\":\"⋖\",\"⥼\":\"⥼\",\"𝔩\":\"𝔩\",\"⪑\":\"⪑\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟼\":\"⟼\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"◊\":\"◊\",\"(\":\"(\",\"⦓\":\"⦓\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"‚\":\"‚\",\"ł\":\"ł\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"⫰\":\"⫰\",\"−\":\"−\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"𝓂\":\"𝓂\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"♮\":\"♮\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"≐̸\":\"≐̸\",\"⤨\":\"⤨\",\"𝔫\":\"𝔫\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"њ\":\"њ\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"𝓃\":\"𝓃\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"ñ\":\"ñ\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"⤧\":\"⤧\",\"ó\":\"ó\",\"ô\":\"ô\",\"о\":\"о\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"∨\":\"∨\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"¶\":\"¶\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"☎\":\"☎\",\"π\":\"π\",\"ϖ\":\"ϖ\",\"ℎ\":\"ℎ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⨢\":\"⨢\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"′\":\"′\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"⨖\":\"⨖\",\"?\":\"?\",\"⤜\":\"⤜\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"⦳\":\"⦳\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"»\":\"»\",\"⥵\":\"⥵\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"↳\":\"↳\",\"▭\":\"▭\",\"⥽\":\"⥽\",\"𝔯\":\"𝔯\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"⇉\":\"⇉\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"с\":\"с\",\"⋅\":\"⋅\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"⩪\":\"⩪\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"⊓︀\":\"⊓︀\",\"⊔︀\":\"⊔︀\",\"𝓈\":\"𝓈\",\"☆\":\"☆\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"♪\":\"♪\",\"¹\":\"¹\",\"²\":\"²\",\"³\":\"³\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"þ\":\"þ\",\"×\":\"×\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"‴\":\"‴\",\"▵\":\"▵\",\"≜\":\"≜\",\"◬\":\"◬\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"у\":\"у\",\"ű\":\"ű\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⦜\":\"⦜\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"в\":\"в\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"𝔳\":\"𝔳\",\"𝕧\":\"𝕧\",\"𝓋\":\"𝓋\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"𝓌\":\"𝓌\",\"𝔵\":\"𝔵\",\"ξ\":\"ξ\",\"⋻\":\"⋻\",\"𝕩\":\"𝕩\",\"𝓍\":\"𝓍\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"}}};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { log } from \"../utils/log.js\";\n\nvar WebSocketClient = /*#__PURE__*/function () {\n /**\n * @param {string} url\n */\n function WebSocketClient(url) {\n _classCallCheck(this, WebSocketClient);\n\n this.client = new WebSocket(url);\n\n this.client.onerror = function (error) {\n log.error(error);\n };\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n\n _createClass(WebSocketClient, [{\n key: \"onOpen\",\n value: function onOpen(f) {\n this.client.onopen = f;\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onClose\",\n value: function onClose(f) {\n this.client.onclose = f;\n } // call f with the message string as the first argument\n\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onMessage\",\n value: function onMessage(f) {\n this.client.onmessage = function (e) {\n f(e.data);\n };\n }\n }]);\n\n return WebSocketClient;\n}();\n\nexport { WebSocketClient as default };","/* global __resourceQuery, __webpack_hash__ */\n/// \nimport webpackHotLog from \"webpack/hot/log.js\";\nimport stripAnsi from \"./utils/stripAnsi.js\";\nimport parseURL from \"./utils/parseURL.js\";\nimport socket from \"./socket.js\";\nimport { formatProblem, show, hide } from \"./overlay.js\";\nimport { log, setLogLevel } from \"./utils/log.js\";\nimport sendMessage from \"./utils/sendMessage.js\";\nimport reloadApp from \"./utils/reloadApp.js\";\nimport createSocketURL from \"./utils/createSocketURL.js\";\n/**\n * @typedef {Object} Options\n * @property {boolean} hot\n * @property {boolean} liveReload\n * @property {boolean} progress\n * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay\n * @property {string} [logging]\n * @property {number} [reconnect]\n */\n\n/**\n * @typedef {Object} Status\n * @property {boolean} isUnloading\n * @property {string} currentHash\n * @property {string} [previousHash]\n */\n\n/**\n * @type {Status}\n */\n\nvar status = {\n isUnloading: false,\n // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement\n // eslint-disable-next-line camelcase\n currentHash: typeof __webpack_hash__ !== \"undefined\" ? __webpack_hash__ : \"\"\n};\n/** @type {Options} */\n\nvar options = {\n hot: false,\n liveReload: false,\n progress: false,\n overlay: false\n};\nvar parsedResourceQuery = parseURL(__resourceQuery);\n\nif (parsedResourceQuery.hot === \"true\") {\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n}\n\nif (parsedResourceQuery[\"live-reload\"] === \"true\") {\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n}\n\nif (parsedResourceQuery.logging) {\n options.logging = parsedResourceQuery.logging;\n}\n\nif (typeof parsedResourceQuery.reconnect !== \"undefined\") {\n options.reconnect = Number(parsedResourceQuery.reconnect);\n}\n/**\n * @param {string} level\n */\n\n\nfunction setAllLogLevel(level) {\n // This is needed because the HMR logger operate separately from dev server logger\n webpackHotLog.setLogLevel(level === \"verbose\" || level === \"log\" ? \"info\" : level);\n setLogLevel(level);\n}\n\nif (options.logging) {\n setAllLogLevel(options.logging);\n}\n\nself.addEventListener(\"beforeunload\", function () {\n status.isUnloading = true;\n});\nvar onSocketMessage = {\n hot: function hot() {\n if (parsedResourceQuery.hot === \"false\") {\n return;\n }\n\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n },\n liveReload: function liveReload() {\n if (parsedResourceQuery[\"live-reload\"] === \"false\") {\n return;\n }\n\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n },\n invalid: function invalid() {\n log.info(\"App updated. Recompiling...\"); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Invalid\");\n },\n\n /**\n * @param {string} hash\n */\n hash: function hash(_hash) {\n status.previousHash = status.currentHash;\n status.currentHash = _hash;\n },\n logging: setAllLogLevel,\n\n /**\n * @param {boolean} value\n */\n overlay: function overlay(value) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n options.overlay = value;\n },\n\n /**\n * @param {number} value\n */\n reconnect: function reconnect(value) {\n if (parsedResourceQuery.reconnect === \"false\") {\n return;\n }\n\n options.reconnect = value;\n },\n\n /**\n * @param {boolean} value\n */\n progress: function progress(value) {\n options.progress = value;\n },\n\n /**\n * @param {{ pluginName?: string, percent: number, msg: string }} data\n */\n \"progress-update\": function progressUpdate(data) {\n if (options.progress) {\n log.info(\"\".concat(data.pluginName ? \"[\".concat(data.pluginName, \"] \") : \"\").concat(data.percent, \"% - \").concat(data.msg, \".\"));\n }\n\n sendMessage(\"Progress\", data);\n },\n \"still-ok\": function stillOk() {\n log.info(\"Nothing changed.\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"StillOk\");\n },\n ok: function ok() {\n sendMessage(\"Ok\");\n\n if (options.overlay) {\n hide();\n }\n\n reloadApp(options, status);\n },\n // TODO: remove in v5 in favor of 'static-changed'\n\n /**\n * @param {string} file\n */\n \"content-changed\": function contentChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {string} file\n */\n \"static-changed\": function staticChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {Error[]} warnings\n * @param {any} params\n */\n warnings: function warnings(_warnings, params) {\n log.warn(\"Warnings while compiling.\");\n\n var printableWarnings = _warnings.map(function (error) {\n var _formatProblem = formatProblem(\"warning\", error),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Warnings\", printableWarnings);\n\n for (var i = 0; i < printableWarnings.length; i++) {\n log.warn(printableWarnings[i]);\n }\n\n var needShowOverlayForWarnings = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.warnings;\n\n if (needShowOverlayForWarnings) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"warning\", _warnings, trustedTypesPolicyName || null);\n }\n\n if (params && params.preventReloading) {\n return;\n }\n\n reloadApp(options, status);\n },\n\n /**\n * @param {Error[]} errors\n */\n errors: function errors(_errors) {\n log.error(\"Errors while compiling. Reload prevented.\");\n\n var printableErrors = _errors.map(function (error) {\n var _formatProblem2 = formatProblem(\"error\", error),\n header = _formatProblem2.header,\n body = _formatProblem2.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Errors\", printableErrors);\n\n for (var i = 0; i < printableErrors.length; i++) {\n log.error(printableErrors[i]);\n }\n\n var needShowOverlayForErrors = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.errors;\n\n if (needShowOverlayForErrors) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"error\", _errors, trustedTypesPolicyName || null);\n }\n },\n\n /**\n * @param {Error} error\n */\n error: function error(_error) {\n log.error(_error);\n },\n close: function close() {\n log.info(\"Disconnected!\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Close\");\n }\n};\nvar socketURL = createSocketURL(parsedResourceQuery);\nsocket(socketURL, onSocketMessage, options.reconnect);","/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./client-src/modules/logger/SyncBailHookFake.js\":\n/*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n/***/ (function(module) {\n\n\n/**\n * Client stub for tapable SyncBailHook\n */\n\nmodule.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/Logger.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nvar LogType = Object.freeze({\n error:\n /** @type {\"error\"} */\n \"error\",\n // message, c style arguments\n warn:\n /** @type {\"warn\"} */\n \"warn\",\n // message, c style arguments\n info:\n /** @type {\"info\"} */\n \"info\",\n // message, c style arguments\n log:\n /** @type {\"log\"} */\n \"log\",\n // message, c style arguments\n debug:\n /** @type {\"debug\"} */\n \"debug\",\n // message, c style arguments\n trace:\n /** @type {\"trace\"} */\n \"trace\",\n // no arguments\n group:\n /** @type {\"group\"} */\n \"group\",\n // [label]\n groupCollapsed:\n /** @type {\"groupCollapsed\"} */\n \"groupCollapsed\",\n // [label]\n groupEnd:\n /** @type {\"groupEnd\"} */\n \"groupEnd\",\n // [label]\n profile:\n /** @type {\"profile\"} */\n \"profile\",\n // [profileName]\n profileEnd:\n /** @type {\"profileEnd\"} */\n \"profileEnd\",\n // [profileName]\n time:\n /** @type {\"time\"} */\n \"time\",\n // name, time as [seconds, nanoseconds]\n clear:\n /** @type {\"clear\"} */\n \"clear\",\n // no arguments\n status:\n /** @type {\"status\"} */\n \"status\" // message, arguments\n\n});\nexports.LogType = LogType;\n/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\nvar LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger raw log method\");\nvar TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger times\");\nvar TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger aggregated times\");\n\nvar WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n\n return WebpackLogger;\n}();\n\nexports.Logger = WebpackLogger;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n\n/** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n/** @typedef {function(string): boolean} FilterFunction */\n\n/**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n/**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n/**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\n\n\nvar filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace( // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n\n if (typeof item === \"function\") {\n return item;\n }\n\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n};\n/**\n * @enum {number}\n */\n\n\nvar LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n};\n/**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\n\nmodule.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] :\n /** @type {FilterItemTypes[]} */\n [].concat(debug).map(filterToFunction);\n /** @type {number} */\n\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n\n switch (type) {\n case LogType.debug:\n if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n }\n\n // falls through\n\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n\n break;\n\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n\n break;\n }\n\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n\n break;\n\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n\n break;\n\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n\n return logger;\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nvar SyncBailHook = __webpack_require__(/*! tapable/lib/SyncBailHook */ \"./client-src/modules/logger/SyncBailHookFake.js\");\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\n\nvar createConsoleLogger = __webpack_require__(/*! ./createConsoleLogger */ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n/** @type {createConsoleLogger.LoggerOptions} */\n\n\nvar currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n};\nvar currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n/**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\n\nexports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n};\n/**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\n\n\nexports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n};\n\nexports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/lib/logging/runtime.js */ \"./node_modules/webpack/lib/logging/runtime.js\");\n\n}();\nvar __webpack_export_target__ = exports;\nfor(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\nif(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", { value: true });\n/******/ })()\n;","// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\nimport ansiHTML from \"ansi-html-community\";\nimport { encode } from \"html-entities\";\nvar colors = {\n reset: [\"transparent\", \"transparent\"],\n black: \"181818\",\n red: \"E36049\",\n green: \"B3CB74\",\n yellow: \"FFD080\",\n blue: \"7CAFC2\",\n magenta: \"7FACCA\",\n cyan: \"C3C2EF\",\n lightgrey: \"EBE7E3\",\n darkgrey: \"6D7891\"\n};\n/** @type {HTMLIFrameElement | null | undefined} */\n\nvar iframeContainerElement;\n/** @type {HTMLDivElement | null | undefined} */\n\nvar containerElement;\n/** @type {Array<(element: HTMLDivElement) => void>} */\n\nvar onLoadQueue = [];\n/** @type {TrustedTypePolicy | undefined} */\n\nvar overlayTrustedTypesPolicy;\nansiHTML.setColors(colors);\n/**\n * @param {string | null} trustedTypesPolicyName\n */\n\nfunction createContainer(trustedTypesPolicyName) {\n // Enable Trusted Types if they are available in the current browser.\n if (window.trustedTypes) {\n overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || \"webpack-dev-server#overlay\", {\n createHTML: function createHTML(value) {\n return value;\n }\n });\n }\n\n iframeContainerElement = document.createElement(\"iframe\");\n iframeContainerElement.id = \"webpack-dev-server-client-overlay\";\n iframeContainerElement.src = \"about:blank\";\n iframeContainerElement.style.position = \"fixed\";\n iframeContainerElement.style.left = 0;\n iframeContainerElement.style.top = 0;\n iframeContainerElement.style.right = 0;\n iframeContainerElement.style.bottom = 0;\n iframeContainerElement.style.width = \"100vw\";\n iframeContainerElement.style.height = \"100vh\";\n iframeContainerElement.style.border = \"none\";\n iframeContainerElement.style.zIndex = 9999999999;\n\n iframeContainerElement.onload = function () {\n containerElement =\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.createElement(\"div\");\n containerElement.id = \"webpack-dev-server-client-overlay-div\";\n containerElement.style.position = \"fixed\";\n containerElement.style.boxSizing = \"border-box\";\n containerElement.style.left = 0;\n containerElement.style.top = 0;\n containerElement.style.right = 0;\n containerElement.style.bottom = 0;\n containerElement.style.width = \"100vw\";\n containerElement.style.height = \"100vh\";\n containerElement.style.backgroundColor = \"rgba(0, 0, 0, 0.85)\";\n containerElement.style.color = \"#E8E8E8\";\n containerElement.style.fontFamily = \"Menlo, Consolas, monospace\";\n containerElement.style.fontSize = \"large\";\n containerElement.style.padding = \"2rem\";\n containerElement.style.lineHeight = \"1.2\";\n containerElement.style.whiteSpace = \"pre-wrap\";\n containerElement.style.overflow = \"auto\";\n var headerElement = document.createElement(\"span\");\n headerElement.innerText = \"Compiled with problems:\";\n var closeButtonElement = document.createElement(\"button\");\n closeButtonElement.innerText = \"X\";\n closeButtonElement.style.background = \"transparent\";\n closeButtonElement.style.border = \"none\";\n closeButtonElement.style.fontSize = \"20px\";\n closeButtonElement.style.fontWeight = \"bold\";\n closeButtonElement.style.color = \"white\";\n closeButtonElement.style.cursor = \"pointer\";\n closeButtonElement.style.cssFloat = \"right\"; // @ts-ignore\n\n closeButtonElement.style.styleFloat = \"right\";\n closeButtonElement.addEventListener(\"click\", function () {\n hide();\n });\n containerElement.appendChild(headerElement);\n containerElement.appendChild(closeButtonElement);\n containerElement.appendChild(document.createElement(\"br\"));\n containerElement.appendChild(document.createElement(\"br\"));\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.body.appendChild(containerElement);\n onLoadQueue.forEach(function (onLoad) {\n onLoad(\n /** @type {HTMLDivElement} */\n containerElement);\n });\n onLoadQueue = [];\n /** @type {HTMLIFrameElement} */\n\n iframeContainerElement.onload = null;\n };\n\n document.body.appendChild(iframeContainerElement);\n}\n/**\n * @param {(element: HTMLDivElement) => void} callback\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction ensureOverlayExists(callback, trustedTypesPolicyName) {\n if (containerElement) {\n // Everything is ready, call the callback right away.\n callback(containerElement);\n return;\n }\n\n onLoadQueue.push(callback);\n\n if (iframeContainerElement) {\n return;\n }\n\n createContainer(trustedTypesPolicyName);\n} // Successful compilation.\n\n\nfunction hide() {\n if (!iframeContainerElement) {\n return;\n } // Clean up and reset internal state.\n\n\n document.body.removeChild(iframeContainerElement);\n iframeContainerElement = null;\n containerElement = null;\n}\n/**\n * @param {string} type\n * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item\n * @returns {{ header: string, body: string }}\n */\n\n\nfunction formatProblem(type, item) {\n var header = type === \"warning\" ? \"WARNING\" : \"ERROR\";\n var body = \"\";\n\n if (typeof item === \"string\") {\n body += item;\n } else {\n var file = item.file || \"\"; // eslint-disable-next-line no-nested-ternary\n\n var moduleName = item.moduleName ? item.moduleName.indexOf(\"!\") !== -1 ? \"\".concat(item.moduleName.replace(/^(\\s|\\S)*!/, \"\"), \" (\").concat(item.moduleName, \")\") : \"\".concat(item.moduleName) : \"\";\n var loc = item.loc;\n header += \"\".concat(moduleName || file ? \" in \".concat(moduleName ? \"\".concat(moduleName).concat(file ? \" (\".concat(file, \")\") : \"\") : file).concat(loc ? \" \".concat(loc) : \"\") : \"\");\n body += item.message || \"\";\n }\n\n return {\n header: header,\n body: body\n };\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n/**\n * @param {string} type\n * @param {Array} messages\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction show(type, messages, trustedTypesPolicyName) {\n ensureOverlayExists(function () {\n messages.forEach(function (message) {\n var entryElement = document.createElement(\"div\");\n var typeElement = document.createElement(\"span\");\n\n var _formatProblem = formatProblem(type, message),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n typeElement.innerText = header;\n typeElement.style.color = \"#\".concat(colors.red); // Make it look similar to our terminal.\n\n var text = ansiHTML(encode(body));\n var messageTextNode = document.createElement(\"div\");\n messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text;\n entryElement.appendChild(typeElement);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(messageTextNode);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n /** @type {HTMLDivElement} */\n\n containerElement.appendChild(entryElement);\n });\n }, trustedTypesPolicyName);\n}\n\nexport { formatProblem, show, hide };","/* global __webpack_dev_server_client__ */\nimport WebSocketClient from \"./clients/WebSocketClient.js\";\nimport { log } from \"./utils/log.js\"; // this WebsocketClient is here as a default fallback, in case the client is not injected\n\n/* eslint-disable camelcase */\n\nvar Client = // eslint-disable-next-line no-nested-ternary\ntypeof __webpack_dev_server_client__ !== \"undefined\" ? typeof __webpack_dev_server_client__.default !== \"undefined\" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : WebSocketClient;\n/* eslint-enable camelcase */\n\nvar retries = 0;\nvar maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance\n// It is mutable to enforce singleton\n// eslint-disable-next-line import/no-mutable-exports\n\nexport var client = null;\n/**\n * @param {string} url\n * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers\n * @param {number} [reconnect]\n */\n\nvar socket = function initSocket(url, handlers, reconnect) {\n client = new Client(url);\n client.onOpen(function () {\n retries = 0;\n\n if (typeof reconnect !== \"undefined\") {\n maxRetries = reconnect;\n }\n });\n client.onClose(function () {\n if (retries === 0) {\n handlers.close();\n } // Try to reconnect.\n\n\n client = null; // After 10 retries stop trying, to prevent logspam.\n\n if (retries < maxRetries) {\n // Exponentially increase timeout to reconnect.\n // Respectfully copied from the package `got`.\n // eslint-disable-next-line no-restricted-properties\n var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n retries += 1;\n log.info(\"Trying to reconnect...\");\n setTimeout(function () {\n socket(url, handlers, reconnect);\n }, retryInMs);\n }\n });\n client.onMessage(\n /**\n * @param {any} data\n */\n function (data) {\n var message = JSON.parse(data);\n\n if (handlers[message.type]) {\n handlers[message.type](message.data, message.params);\n }\n });\n};\n\nexport default socket;","/**\n * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL\n * @returns {string}\n */\nfunction format(objURL) {\n var protocol = objURL.protocol || \"\";\n\n if (protocol && protocol.substr(-1) !== \":\") {\n protocol += \":\";\n }\n\n var auth = objURL.auth || \"\";\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, \":\");\n auth += \"@\";\n }\n\n var host = \"\";\n\n if (objURL.hostname) {\n host = auth + (objURL.hostname.indexOf(\":\") === -1 ? objURL.hostname : \"[\".concat(objURL.hostname, \"]\"));\n\n if (objURL.port) {\n host += \":\".concat(objURL.port);\n }\n }\n\n var pathname = objURL.pathname || \"\";\n\n if (objURL.slashes) {\n host = \"//\".concat(host || \"\");\n\n if (pathname && pathname.charAt(0) !== \"/\") {\n pathname = \"/\".concat(pathname);\n }\n } else if (!host) {\n host = \"\";\n }\n\n var search = objURL.search || \"\";\n\n if (search && search.charAt(0) !== \"?\") {\n search = \"?\".concat(search);\n }\n\n var hash = objURL.hash || \"\";\n\n if (hash && hash.charAt(0) !== \"#\") {\n hash = \"#\".concat(hash);\n }\n\n pathname = pathname.replace(/[?#]/g,\n /**\n * @param {string} match\n * @returns {string}\n */\n function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace(\"#\", \"%23\");\n return \"\".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash);\n}\n/**\n * @param {URL & { fromCurrentScript?: boolean }} parsedURL\n * @returns {string}\n */\n\n\nfunction createSocketURL(parsedURL) {\n var hostname = parsedURL.hostname; // Node.js module parses it as `::`\n // `new URL(urlString, [baseURLString])` parses it as '[::]'\n\n var isInAddrAny = hostname === \"0.0.0.0\" || hostname === \"::\" || hostname === \"[::]\"; // why do we need this check?\n // hostname n/a for file protocol (example, when using electron, ionic)\n // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf(\"http\") === 0) {\n hostname = self.location.hostname;\n }\n\n var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets.\n\n if (socketURLProtocol === \"auto:\" || hostname && isInAddrAny && self.location.protocol === \"https:\") {\n socketURLProtocol = self.location.protocol;\n }\n\n socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, \"ws\");\n var socketURLAuth = \"\"; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property\n // Parse authentication credentials in case we need them\n\n if (parsedURL.username) {\n socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username,\n // we only include password if the username is not empty.\n\n if (parsedURL.password) {\n // Result: :\n socketURLAuth = socketURLAuth.concat(\":\", parsedURL.password);\n }\n } // In case the host is a raw IPv6 address, it can be enclosed in\n // the brackets as the brackets are needed in the final URL string.\n // Need to remove those as url.format blindly adds its own set of brackets\n // if the host string contains colons. That would lead to non-working\n // double brackets (e.g. [[::]]) host\n //\n // All of these web socket url params are optionally passed in through resourceQuery,\n // so we need to fall back to the default if they are not provided\n\n\n var socketURLHostname = (hostname || self.location.hostname || \"localhost\").replace(/^\\[(.*)\\]$/, \"$1\");\n var socketURLPort = parsedURL.port;\n\n if (!socketURLPort || socketURLPort === \"0\") {\n socketURLPort = self.location.port;\n } // If path is provided it'll be passed in via the resourceQuery as a\n // query param so it has to be parsed out of the querystring in order for the\n // client to open the socket to the correct location.\n\n\n var socketURLPathname = \"/ws\";\n\n if (parsedURL.pathname && !parsedURL.fromCurrentScript) {\n socketURLPathname = parsedURL.pathname;\n }\n\n return format({\n protocol: socketURLProtocol,\n auth: socketURLAuth,\n hostname: socketURLHostname,\n port: socketURLPort,\n pathname: socketURLPathname,\n slashes: true\n });\n}\n\nexport default createSocketURL;","/**\n * @returns {string}\n */\nfunction getCurrentScriptSource() {\n // `document.currentScript` is the most accurate way to find the current script,\n // but is not supported in all browsers.\n if (document.currentScript) {\n return document.currentScript.getAttribute(\"src\");\n } // Fallback to getting all scripts running in the document.\n\n\n var scriptElements = document.scripts || [];\n var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) {\n return element.getAttribute(\"src\");\n });\n\n if (scriptElementsWithSrc.length > 0) {\n var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1];\n return currentScript.getAttribute(\"src\");\n } // Fail as there was no script to use.\n\n\n throw new Error(\"[webpack-dev-server] Failed to get current script source.\");\n}\n\nexport default getCurrentScriptSource;","import logger from \"../modules/logger/index.js\";\nvar name = \"webpack-dev-server\"; // default level is set on the client side, so it does not need\n// to be set by the CLI or API\n\nvar defaultLevel = \"info\"; // options new options, merge with old options\n\n/**\n * @param {false | true | \"none\" | \"error\" | \"warn\" | \"info\" | \"log\" | \"verbose\"} level\n * @returns {void}\n */\n\nfunction setLogLevel(level) {\n logger.configureDefaultLogger({\n level: level\n });\n}\n\nsetLogLevel(defaultLevel);\nvar log = logger.getLogger(name);\nexport { log, setLogLevel };","import getCurrentScriptSource from \"./getCurrentScriptSource.js\";\n/**\n * @param {string} resourceQuery\n * @returns {{ [key: string]: string | boolean }}\n */\n\nfunction parseURL(resourceQuery) {\n /** @type {{ [key: string]: string }} */\n var options = {};\n\n if (typeof resourceQuery === \"string\" && resourceQuery !== \"\") {\n var searchParams = resourceQuery.slice(1).split(\"&\");\n\n for (var i = 0; i < searchParams.length; i++) {\n var pair = searchParams[i].split(\"=\");\n options[pair[0]] = decodeURIComponent(pair[1]);\n }\n } else {\n // Else, get the url from the ' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (this._map.getContainer().querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n this._map.getContainer().querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (this._map.getContainer().querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n this._map.getContainer().querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// startup\n// Load entry module and return exports\n__webpack_modules__[999]();\n__webpack_modules__[85]();\n__webpack_modules__[351]();\n__webpack_modules__[360]();\n__webpack_modules__[682]();\n__webpack_modules__[866]();\n__webpack_modules__[477]();\n__webpack_modules__[808]();\n__webpack_modules__[743]();\n__webpack_modules__[988]();\n__webpack_modules__[92]();\n__webpack_modules__[194]();\n__webpack_modules__[206]();\n__webpack_modules__[789]();\n__webpack_modules__[337]();\n__webpack_modules__[350]();\n__webpack_modules__[376]();\n__webpack_modules__[261]();\n__webpack_modules__[929]();\n__webpack_modules__[280]();\n__webpack_modules__[426]();\n__webpack_modules__[114]();\n__webpack_modules__[231]();\n__webpack_modules__[541]();\n__webpack_modules__[149]();\n__webpack_modules__[74]();\n__webpack_modules__[691]();\n__webpack_modules__[105]();\n__webpack_modules__[496]();\n__webpack_modules__[944]();\n__webpack_modules__[954]();\n__webpack_modules__[178]();\n__webpack_modules__[547]();\n__webpack_modules__[886]();\n__webpack_modules__[129]();\n__webpack_modules__[93]();\n__webpack_modules__[719]();\n__webpack_modules__[397]();\n__webpack_modules__[428]();\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["arr","L","DistortableCollection","FeatureGroup","extend","options","editable","exportOpts","exportStartUrl","statusUrl","exportUrl","initialize","setOptions","this","prototype","call","Utils","initTranslation","onAdd","map","_map","editing","enable","on","_addEvents","_removeEvents","onRemove","disable","off","e","layer","DomEvent","dragstart","_dragStartMultiple","drag","_dragMultiple","getElement","mousedown","_deselectOthers","contextmenu","_longPressMultiSelect","preventDefault","eachLayer","edit","target","enabled","DomUtil","toggleClass","anyCollected","deselect","_addToolbar","_removeToolbar","isCollected","overlay","hasClass","getLayers","some","bind","_toggleCollected","shiftKey","every","each","_leaflet_id","push","splice","indexOf","stopPropagation","i","_dragStartPoints","c","getCorner","latLngToLayerPoint","topLeft","delta","subtract","_updateCollectionFromPoints","_toRemove","filter","mode","_mode","_toMove","layersToMove","p","Transformation","x","y","forEach","movedPoints","transform","setCornersFromPoints","_getAvgCmPerPixel","imgs","reduce","sum","img","cm_per_pixel","length","fetchRemoteJson","url","index","imgCollectionProps","axios","get","response","data","hasOwnProperty","collection","avg_cm_per_pixel","console","log","recreateImagesFromJsonUrl","imageCollectionObj","generateExportJson","allImages","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","id","width","height","tooltipText","getTooltipText","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","interactive","_selected","_url","rotation","_initImage","_reset","_corners","zoomAnimation","Browser","any3d","_animateZoom","getPane","appendChild","_initImageDimensions","units","deg","setAngle","rad","eventParents","_eventParents","eP","Object","keys","select","singleclickon","_singleClickListeners","singleclickoff","_resetClickListeners","singleclick","_singleClick","doubleClickZoom","doubleClickLabels","fire","activateTooltip","closeTooltip","deactivateTooltip","originalImageWidth","getStyle","originalImageHeight","aspectRatio","parseInt","imageHeight","imageWidth","center","project","getCenter","offset","point","divideBy","unproject","add","_initialDimensions","getZoom","setBounds","latLngBounds","type","isSelected","_hideMarkers","_programmaticGrouping","_showMarkers","setCorner","corner","latlng","toolbar","DistortableImage","PopupBar","_updateToolbarPos","edited","_cornerExceedsMapLats","zoom","crs","Simple","CRS","exceedsTop","exceedsBottom","Math","pow","bindTooltip","direction","openTooltip","closeToolTip","unbindTooltip","setCorners","latlngObj","k","pointsObj","layerPointToLatLng","scaleBy","scale","scaledCorners","multiplyBy","getAngle","unit","matrix","style","TRANSFORM","slice","row0x","row0y","row1x","row1y","determinant","angle","TrigUtil","calcAngle","PI","round","radiansToDegrees","Util","formatNum","currentAngle","angleToRotateBy","rotateBy","q","degreesToRadians","cos","sin","dragBy","formerPoint","newPoint","transCorners","restore","equals","_getTranslateString","is3d","webkit3d","close","image","transformMatrix","_calculateProjectiveTransform","warp","getMatrixString","translation","_leaflet_pos","join","event","latLngToNewLayerPoint","_latLngToNewLayerPoint","agg","latLngToCartesian","j","w","offsetWidth","h","offsetHeight","_subtract","MatrixUtil","general2DProjection","distortableImageOverlay","Map","addInitHook","getContainer","addClass","distortableImage","Keymapper","Handler","position","addHooks","_keymapper","_container","_buildContainer","_scrollWrapper","_wrap","_toggler","_createButton","_setMapper","_toggleKeymapper","disableClickPropagation","disableScrollPropagation","removeHooks","remove","container","create","setAttribute","divider","toggler","innerHTML","IconUtil","wrap","display","button","control","insertAdjacentHTML","addTo","className","toggleTitle","_injectIconSet","querySelector","el","_iconset","KeymapperIconSet","render","_n","mobile","keymapper","Edit","keymap","group_action_map","group","_group","_exportOpts","Escape","editActions","actions","runExporter","getNestedVal","startExport","document","_onKeyDown","_decollectAll","boxcollectend","_addCollections","_enabled","handlerName","key","oe","originalEvent","HTMLImageElement","removeClass","_unlockGroup","hasTool","UnlockAction","_unlock","_lockGroup","LockAction","_lock","box","boxCollectBounds","imgBounds","_latLngBoundsToNewLayerBounds","intersects","_removeGroup","DeleteAction","layersToRemove","n","confirmDeletes","removeLayer","cancelExport","customCollection","undefined","clearInterval","updateInterval","suppressToolbar","controlBar","value","action","addTool","baseClass","removeTool","item","idx","ExportAction","Promise","resolve","opts","frequency","updater","JSON","parse","status_url","match","status","jpg","alert","handleStatusRes","setInterval","req","Request","Date","now","method","fetch","then","res","ok","text","fetchStatusUrl","mergedOpts","form","FormData","append","stringify","reqOpts","body","opacity","outline","action_map","_overlay","_toggledImage","_transparent","_outlined","_opacity","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","_dragHandles","layerGroup","addLayer","dragHandle","_scaleHandles","scaleHandle","_distortHandles","distortHandle","_rotateHandles","rotateHandle","_freeRotateHandles","freeRotateHandle","_lockHandles","lockHandle","draggable","distort","rotate","freeRotate","lock","ov","_updateHandle","currentHandle","setOpacity","dragging","isMode","_enableDragging","replaceTool","old","next","_nextOrNone","getModes","Draggable","_updatePosition","currentPoint","_newPos","_dragMode","setMode","_scaleMode","_distortMode","_rotateMode","_freeRotateMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_setOpacities","o","OpacitiesAction","_toggleBorder","BorderAction","_toggleOrder","_stackUp","_stackDown","_removeOverlay","confirmDelete","_getExport","downloadable","Image","onload","nw","ne","sw","se","warpWebGl","fullResolutionSrc","StackAction","bringToBack","hasMode","_deselect","getMode","maxLat","raisedPoint","popupBar","setLatLng","newMode","clickTool","modesArray","stop","EditAction","use","tooltip","removeBorder","addBorder","toolbarIcon","svg","html","b","toggleXlink","_link","deleteImage","Backspace","deleteImages","DistortAction","distortImage","d","DragAction","dragImage","D","Toolbar2","Action","_createIcon","args","iconOptions","_icon","constructor","_enableAction","_addSubToolbar","createElement","ToolbarIconSet","parentElement","_disableAction","editAction","isExporting","mouseLeaveSkip","isHooksExecuted","exportImage","exportImages","exportTool","mouseEnterHandler","handleMouseEnter","mouseLeaveHandler","handleMouseLeave","resetState","detachMouseEventListeners","renderExportIcon","setTimeout","attachMouseEventListeners","renderDownloadIcon","element","addEventListener","removeEventListener","renderCancelIcon","firstChild","addClassToSvg","FreeRotateAction","freeRotateImage","f","GeolocateAction","geolocateImage","EXIF","getData","u","l","lockMode","lockImages","opacities","subtoolbarCss","CSSStyleSheet","replaceSync","insertRule","adoptedStyleSheets","isNaN","OpacitiesToolbar2","appendToContainer","m","_calculateDepth","_ul","_disabledEvents","_getActionConstructor","_arguments","subToolbar","link","_hide","makeImageOpaque","makeImageTransparent","RestoreAction","restoreImage","RotateAction","rotateImage","r","ScaleAction","scaleImage","s","stackToFront","stackToBack","a","unlockImages","getAllTags","GPS","GPSLatitude","GPSLongitude","GPSLatitudeRef","GPSLongitudeRef","GPSImgDirectionRef","GPSImgDirection","numerator","denominator","Orientation","GPSAltitude","GPSAltitudeRef","DistortHandle","EditHandle","TYPE","icon","iconUrl","iconSize","iconAnchor","_onHandleDrag","_handled","_corner","getLatLng","updateHandle","DragHandle","formerLatLng","newLatLng","Marker","markerOptions","zIndexOffset","_bindListeners","_unbindListeners","_onHandleDragStart","_onHandleDragEnd","_fireEdit","dragend","_calculateScalingFactor","latlngA","latlngB","centerPoint","formerRadiusSquared","_d2","newRadiusSquared","sqrt","dx","dy","calculateAngleDelta","initialAngle","atan2","FreeRotateHandle","corner1","latLngToContainerPoint","corner2","abs","LockHandle","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","permanent","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","children","name","tool","click","IconSet","Class","_svg","_symbols","addSymbols","symbols","mergeOptions","boxCollector","boxZoom","BoxCollector","BoxZoom","_pane","_panes","overlayPane","_resetStateTimeout","_destroy","_onMouseDown","moved","_moved","_resetState","_clearDeferredResetState","which","disableTextSelection","disableImageDrag","_startPoint","mouseEventToContainerPoint","mousemove","_onMouseMove","_onMouseUp","_box","_point","_bounds","bounds","size","getSize","setPosition","min","_finish","enableTextSelection","enableImageDrag","containerPointToLatLng","getBottomLeft","getTopRight","DoubleClickLabels","DoubleClickZoom","_fireIfSingle","_clicked","_clickTimeout","touch","sourceCapabilities","firesTouchEvents","_onDoubleClick","labels","_labels","include","_fireDOMEvent","oldZoom","zoomDelta","setZoom","setZoomAround","containerPoint","addGoogleMutant","mutantOptions","mutantOpacity","maxZoom","maxNativeZoom","minZoom","labelOpacity","_googleMutant","tileLayer","_addLabels","attribution","subdomains","ext","obj","gecko3d","ie3d","str","confirm","confirmImageDelete","warningMsg","confirmImagesDeletes","ref","test","replace","loader","ref1","ref2","toggled","getAttribute","title1","title2","hasAttribute","distanceTo","adj","multmm","cij","multmv","v","multsm","basisToPoints","x1","y1","x2","y2","x3","y3","x4","y4","x1s","y1s","x1d","y1d","x2s","y2s","x2d","y2d","x3s","y3s","x3d","y3d","x4s","y4s","x4d","y4d","nestedKey","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file From 7377ecdf6ea53d4be2b3fd028c8f196837bbfa17 Mon Sep 17 00:00:00 2001 From: AliyanH Date: Thu, 13 Apr 2023 23:37:58 -0400 Subject: [PATCH 3/3] Revert "Add dist file changes" This reverts commit f9048e6758e61f6cc332415300a1c037bb51e932. --- dist/leaflet.distortableimage.js | 8117 +++++++++++++++++++++++++- dist/leaflet.distortableimage.js.map | 2 +- 2 files changed, 8116 insertions(+), 3 deletions(-) diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index bcafc43b9..824eebf3d 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1,3 +1,8116 @@ -/*! For license information please see leaflet.distortableimage.js.LICENSE.txt */ -!function(){var t={808:function(){function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(){"use strict";e=function(){return i};var i={},o=Object.prototype,n=o.hasOwnProperty,a=Object.defineProperty||function(t,e,i){t[e]=i.value},r="function"==typeof Symbol?Symbol:{},s=r.iterator||"@@iterator",l=r.asyncIterator||"@@asyncIterator",c=r.toStringTag||"@@toStringTag";function d(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{d({},"")}catch(t){d=function(t,e,i){return t[e]=i}}function h(t,e,i,o){var n=e&&e.prototype instanceof g?e:g,r=Object.create(n.prototype),s=new T(o||[]);return a(r,"_invoke",{value:D(t,i,s)}),r}function u(t,e,i){try{return{type:"normal",arg:t.call(e,i)}}catch(t){return{type:"throw",arg:t}}}i.wrap=h;var m={};function g(){}function p(){}function f(){}var v={};d(v,s,(function(){return this}));var _=Object.getPrototypeOf,L=_&&_(_(E([])));L&&L!==o&&n.call(L,s)&&(v=L);var b=f.prototype=g.prototype=Object.create(v);function y(t){["next","throw","return"].forEach((function(e){d(t,e,(function(t){return this._invoke(e,t)}))}))}function k(e,i){function o(a,r,s,l){var c=u(e[a],e,r);if("throw"!==c.type){var d=c.arg,h=d.value;return h&&"object"==t(h)&&n.call(h,"__await")?i.resolve(h.__await).then((function(t){o("next",t,s,l)}),(function(t){o("throw",t,s,l)})):i.resolve(h).then((function(t){d.value=t,s(d)}),(function(t){return o("throw",t,s,l)}))}l(c.arg)}var r;a(this,"_invoke",{value:function(t,e){function n(){return new i((function(i,n){o(t,e,i,n)}))}return r=r?r.then(n,n):n()}})}function D(t,e,i){var o="suspendedStart";return function(n,a){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===n)throw a;return{value:void 0,done:!0}}for(i.method=n,i.arg=a;;){var r=i.delegate;if(r){var s=M(r,i);if(s){if(s===m)continue;return s}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===o)throw o="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);o="executing";var l=u(t,e,i);if("normal"===l.type){if(o=i.done?"completed":"suspendedYield",l.arg===m)continue;return{value:l.arg,done:i.done}}"throw"===l.type&&(o="completed",i.method="throw",i.arg=l.arg)}}}function M(t,e){var i=e.method,o=t.iterator[i];if(void 0===o)return e.delegate=null,"throw"===i&&t.iterator.return&&(e.method="return",e.arg=void 0,M(t,e),"throw"===e.method)||"return"!==i&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+i+"' method")),m;var n=u(o,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,m;var a=n.arg;return a?a.done?(e[t.resultName]=a.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,m):a:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,m)}function I(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function A(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(I,this),this.reset(!0)}function E(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,o=function e(){for(;++i=0;--o){var a=this.tryEntries[o],r=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var s=n.call(a,"catchLoc"),l=n.call(a,"finallyLoc");if(s&&l){if(this.prev=0;--i){var o=this.tryEntries[i];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),A(i),m}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var o=i.completion;if("throw"===o.type){var n=o.arg;A(i)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,i){return this.delegate={iterator:E(t),resultName:e,nextLoc:i},"next"===this.method&&(this.arg=void 0),m}},i}function i(t,e,i,o,n,a,r){try{var s=t[a](r),l=s.value}catch(t){return void i(t)}s.done?e(l):Promise.resolve(l).then(o,n)}function o(t){return function(){var e=this,o=arguments;return new Promise((function(n,a){var r=t.apply(e,o);function s(t){i(r,n,a,s,l,"next",t)}function l(t){i(r,n,a,s,l,"throw",t)}s(void 0)}))}}var n=[];L.DistortableCollection=L.FeatureGroup.extend({options:{editable:!0,exportOpts:{exportStartUrl:"//export.mapknitter.org/export",statusUrl:"//export.mapknitter.org",exportUrl:"http://export.mapknitter.org/"}},initialize:function(t){L.setOptions(this,t),L.FeatureGroup.prototype.initialize.call(this,t),L.Utils.initTranslation.call(this),this.editable=this.options.editable},onAdd:function(t){L.FeatureGroup.prototype.onAdd.call(this,t),this._map=t,this.editable&&this.editing.enable(),this.on("layeradd",this._addEvents,this),this.on("layerremove",this._removeEvents,this)},onRemove:function(){this.editing&&this.editing.disable(),this.off("layeradd",this._addEvents,this),this.off("layerremove",this._removeEvents,this)},_addEvents:function(t){var e=t.layer;L.DomEvent.on(e,{dragstart:this._dragStartMultiple,drag:this._dragMultiple},this),L.DomEvent.on(e.getElement(),{mousedown:this._deselectOthers,contextmenu:this._longPressMultiSelect},this)},_removeEvents:function(t){var e=t.layer;L.DomEvent.off(e,{dragstart:this._dragStartMultiple,drag:this._dragMultiple},this),L.DomEvent.off(e.getElement(),{mousedown:this._deselectOthers,contextmenu:this._longPressMultiSelect},this)},_longPressMultiSelect:function(t){var e=this;this.editable&&(t.preventDefault(),this.eachLayer((function(i){var o=i.editing;i.getElement()===t.target&&o.enabled()&&(L.DomUtil.toggleClass(i.getElement(),"collected"),e.anyCollected()?(i.deselect(),e.editing._addToolbar()):e.editing._removeToolbar())})))},isCollected:function(t){return L.DomUtil.hasClass(t.getElement(),"collected")},anyCollected:function(){return this.getLayers().some(this.isCollected.bind(this))},_toggleCollected:function(t,e){t.shiftKey&&e.editing.enabled()&&(L.DomUtil.toggleClass(t.target,"collected"),n.every((function(t){return t._leaflet_id!==e._leaflet_id}))?n.push(e):n.splice(n.indexOf(e),1)),this.anyCollected()?e.deselect():this.editing._removeToolbar()},_deselectOthers:function(t){var e=this;this.editable&&(this.eachLayer((function(i){i.getElement()!==t.target?i.deselect():e._toggleCollected(t,i)})),t&&L.DomEvent.stopPropagation(t))},_dragStartMultiple:function(t){var e,i=t.target,o=this._map;this.isCollected(i)&&this.eachLayer((function(t){for(t._dragStartPoints={},t.deselect(),e=0;e<4;e++){var i=t.getCorner(e);t._dragStartPoints[e]=o.latLngToLayerPoint(i)}}))},_dragMultiple:function(t){var e=t.target,i=this._map;if(this.isCollected(e)){var o=i.latLngToLayerPoint(e.getCorner(0)),n=e._dragStartPoints[0].subtract(o);this._updateCollectionFromPoints(n,e)}},_toRemove:function(){var t=this;return this.getLayers().filter((function(e){var i=e.editing._mode;return t.isCollected(e)&&"lock"!==i}))},_toMove:function(t){var e=this;return this.getLayers().filter((function(i){var o=i.editing._mode;return i!==t&&e.isCollected(i)&&"lock"!==o}))},_updateCollectionFromPoints:function(t,e){var i,o=this._toMove(e),n=new L.Transformation(1,-t.x,1,-t.y);o.forEach((function(t){var e={};for(i=0;i<4;i++)e[i]=n.transform(t._dragStartPoints[i]);t.setCornersFromPoints(e)}))},_getAvgCmPerPixel:function(t){return t.reduce((function(t,e){return t+e.cm_per_pixel}),0)/t.length},fetchRemoteJson:function(t){return o(e().mark((function i(){var o,n,a;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=0,n=[],e.prev=2,e.next=5,axios.get(t);case 5:if(!(a=e.sent).data.hasOwnProperty("avg_cm_per_pixel")){e.next=14;break}if(!(a.data.collection.length>1)){e.next=10;break}return a.data.collection.forEach((function(t){n[o]=t,o++})),e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 10:return n[o]=a.data.collection,e.abrupt("return",{avg_cm_per_pixel:a.data.avg_cm_per_pixel,imgCollectionProps:n});case 14:if(!(a.data.length>1)){e.next=17;break}return a.data.forEach((function(t){n[o]=t,o++})),e.abrupt("return",{imgCollectionProps:n});case 17:return n[o]=a.data,e.abrupt("return",{imgCollectionProps:n});case 19:e.next=24;break;case 21:e.prev=21,e.t0=e.catch(2),console.log("err",e.t0);case 24:case"end":return e.stop()}}),i,null,[[2,21]])})))()},recreateImagesFromJsonUrl:function(t){var i=this;return o(e().mark((function o(){var n;return e().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n={},!t){e.next=6;break}return e.next=4,i.fetchRemoteJson(t);case 4:return n=e.sent,e.abrupt("return",n);case 6:return e.abrupt("return",n);case 8:case"end":return e.stop()}}),o)})))()},generateExportJson:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e={images:[]};return this.eachLayer((function(i){if(t||this.isCollected(i)){var o=i._image.src.split("/"),n=o[o.length-1],a=i.getCorners(),r=[{lat:a[0].lat,lon:a[0].lng||a[0].lon},{lat:a[1].lat,lon:a[1].lng||a[1].lon},{lat:a[3].lat,lon:a[3].lng||a[3].lon},{lat:a[2].lat,lon:a[2].lng||a[2].lon}];e.images.push({id:i._leaflet_id,src:i._image.src,width:i._image.width,height:i._image.height,tooltipText:i.getTooltipText(),image_file_name:n,nodes:r,cm_per_pixel:L.ImageUtil.getCmPerPixel(i)})}}),this),e.images=e.images.reverse(),e.avg_cm_per_pixel=this._getAvgCmPerPixel(e.images),e}}),L.distortableCollection=function(t,e){return new L.DistortableCollection(t,e)}},477:function(){L.DistortableImageOverlay=L.ImageOverlay.extend({options:{height:200,crossOrigin:!0,edgeMinWidth:50,editable:!0,mode:"distort",selected:!1,interactive:!0,tooltipText:""},initialize:function(t,e){L.setOptions(this,e),L.Utils.initTranslation.call(this),this.edgeMinWidth=this.options.edgeMinWidth,this.editable=this.options.editable,this._selected=this.options.selected,this._url=t,this.rotation={},this.interactive=this.options.interactive,this.tooltipText=this.options.tooltipText},onAdd:function(t){var e=this;this._map=t,this.getElement()||this._initImage(),t.on("viewreset",this._reset,this),this.options.corners&&(this._corners=this.options.corners,t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",this._animateZoom,this)),L.DomEvent.on(this.getElement(),"load",(function(){if(e.getPane().appendChild(e.getElement()),e._initImageDimensions(),e.options.rotation){var i=e.options.rotation.deg>=0?"deg":"rad";e.setAngle(e.options.rotation[i],i)}else e.rotation={deg:0,rad:0},e._reset();e._corners||t.options.zoomAnimation&&L.Browser.any3d&&t.on("zoomanim",e._animateZoom,e);var o=e._eventParents;o?(e.eP=o[Object.keys(o)[0]],e.eP.editable&&e.editing.enable()):(e.editable&&e.editing.enable(),e.eP=null)})),L.DomEvent.on(this.getElement(),"click",this.select,this),L.DomEvent.on(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick},this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.on(t,"click",this.deselect,this),this.fire("add"),L.DomEvent.on(this.getElement(),"mousemove",this.activateTooltip,this),L.DomEvent.on(this.getElement(),"mouseout",this.closeTooltip,this)},onRemove:function(t){L.DomEvent.off(this.getElement(),"click",this.select,this),L.DomEvent.off(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick},this),L.DomEvent.off(t,"click",this.deselect,this),this.editing&&this.editing.disable(),this.fire("remove"),L.ImageOverlay.prototype.onRemove.call(this,t),L.DomEvent.on(this.getElement(),"mouseout",this.closeTooltip,this),L.DomEvent.off(this.getElement(),"mousemove",this.deactivateTooltip,this)},_initImageDimensions:function(){var t=this._map,e=L.DomUtil.getStyle(this.getElement(),"width"),i=L.DomUtil.getStyle(this.getElement(),"height"),o=parseInt(e)/parseInt(i),n=this.options.height,a=parseInt(o*n),r=t.project(t.getCenter()),s=L.point(a,n).divideBy(2);this.options.corners?this._corners=this.options.corners:this._corners=[t.unproject(r.subtract(s)),t.unproject(r.add(L.point(s.x,-s.y))),t.unproject(r.add(L.point(-s.x,s.y))),t.unproject(r.add(s))],this._initialDimensions={center:r,offset:s,zoom:t.getZoom()},this.setBounds(L.latLngBounds(this.getCorners()))},_singleClick:function(t){"singleclick"===t.type&&this.deselect()},_singleClickListeners:function(){var t=this._map;L.DomEvent.off(t,"click",this.deselect,this),L.DomEvent.on(t,"singleclick",this.deselect,this)},_resetClickListeners:function(){var t=this._map;L.DomEvent.on(t,"click",this.deselect,this),L.DomEvent.off(t,"singleclick",this.deselect,this)},isSelected:function(){return this._selected},deselect:function(){var t=this.editing;if(t.enabled())return t._removeToolbar(),t._hideMarkers(),this._selected=!1,this.fire("deselect"),this},select:function(t){var e=this.editing,i=this.eP;if(e.enabled()){if(t&&L.DomEvent.stopPropagation(t),this._programmaticGrouping(),this._selected=!0,e._addToolbar(),e._showMarkers(),this.fire("select"),!i||!i.anyCollected())return this;this.deselect()}},_programmaticGrouping:function(){this._map.eachLayer((function(t){t instanceof L.DistortableImageOverlay&&t.deselect()}))},setCorner:function(t,e){var i=this.editing;return this._corners[t]=e,this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),i.toolbar&&i.toolbar instanceof L.DistortableImage.PopupBar&&i._updateToolbarPos(),this.edited=!0,this},_cornerExceedsMapLats:function(t,e,i){return i.options.crs.Simple!=L.CRS.Simple&&(0===t?(o=i.project(e).y<2,n=i.project(e).y>=255):(o=i.project(e).y/t<2,n=i.project(e).y/Math.pow(2,t)>=255),o||n);var o,n},activateTooltip:function(){this._selected||this.bindTooltip(this.tooltipText,{direction:"top"}).openTooltip()},closeToolTip:function(){this.closeTooltip()},deactivateTooltip:function(){this.unbindTooltip()},getTooltipText:function(){return this.tooltipText},setCorners:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t)if(this._cornerExceedsMapLats(i,t[a],e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update");for(var r in t)this._corners[n]=t[r],n+=1;return this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},setCornersFromPoints:function(t){var e=this._map,i=e.getZoom(),o=this.editing,n=0;for(var a in t){var r=e.layerPointToLatLng(t[a]);if(this._cornerExceedsMapLats(i,r,e))return this.setBounds(L.latLngBounds(this.getCorners())),void this.fire("update")}for(var s in t)this._corners[n]=e.layerPointToLatLng(t[s]),n+=1;return this.setBounds(L.latLngBounds(this.getCorners())),this.fire("update"),o.toolbar&&o.toolbar instanceof L.DistortableImage.PopupBar&&o._updateToolbarPos(),this.edited=!0,this},scaleBy:function(t){var e,i,o=this._map,n=o.project(this.getCenter()),a={};if(0!==t){for(e=0;e<4;e++)i=o.project(this.getCorner(e)).subtract(n).multiplyBy(t).add(n),a[e]=o.unproject(i);return this.setCorners(a),this}},getAngle:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"deg",e=this.getElement().style[L.DomUtil.TRANSFORM].split("matrix3d")[1].slice(1,-1).split(","),i=e[0],o=e[1],n=e[4],a=e[5],r=i*a-o*n,s=L.TrigUtil.calcAngle(i,o,"rad");return r<0&&(s+=s<0?Math.PI:-Math.PI),s<0&&(s=2*Math.PI+s),"deg"===t?Math.round(L.TrigUtil.radiansToDegrees(s)):L.Util.formatNum(s,2)},setAngle:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"deg",i=this.getAngle(e),o=t-i;return this.rotateBy(o,e),this},rotateBy:function(t){var e,i,o,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"deg",a=this._map,r=a.project(this.getCenter()),s={};for("deg"===n&&(t=L.TrigUtil.degreesToRadians(t)),e=0;e<4;e++)i=a.project(this.getCorner(e)).subtract(r),o=L.point(Math.cos(t)*i.x-Math.sin(t)*i.y,Math.sin(t)*i.x+Math.cos(t)*i.y),s[e]=a.unproject(o.add(r));return this.setCorners(s),this},dragBy:function(t,e){var i,o,n=this._map,a={},r=n.project(t).subtract(n.project(e));for(i=0;i<4;i++)o=n.project(this.getCorner(i)).subtract(r),a[i]=n.unproject(o);this.setCorners(a)},restore:function(){for(var t=this._map,e=this._initialDimensions.center,i=this._initialDimensions.offset,o=this._initialDimensions.zoom,n=[e.subtract(i),e.add(L.point(i.x,-i.y)),e.add(L.point(-i.x,i.y)),e.add(i)],a=0;a<4;a++)t.unproject(n[a],o).equals(this.getCorner(a))||this.setCorner(a,t.unproject(n[a],o));return this.edited=!1,this.fire("restore"),this},_getTranslateString:function(t){var e=L.Browser.webkit3d,i=(e?",0":"")+")";return"translate"+(e?"3d":"")+"("+t.x+"px,"+t.y+"px"+i},_reset:function(){var t=this._map,e=this.getElement(),i=L.bind(t.latLngToLayerPoint,t),o=this._calculateProjectiveTransform(i),n=i(this.getCorner(0)),a=L.DomUtil.getMatrixString(o),r=this._getTranslateString(n);e._leaflet_pos=n,e.style[L.DomUtil.TRANSFORM]=[r,a].join(" "),e.style[L.DomUtil.TRANSFORM+"-origin"]="0 0 0",this.rotation.deg=this.getAngle(),this.rotation.rad=this.getAngle("rad")},_animateZoom:function(t){var e=this._map,i=this.getElement(),o=function(i){return e._latLngToNewLayerPoint(i,t.zoom,t.center)},n=this._calculateProjectiveTransform(o),a=o(this.getCorner(0)),r=L.DomUtil.getMatrixString(n),s=this._getTranslateString(a);i._leaflet_pos=a,i.style[L.DomUtil.TRANSFORM]=[s,r].join(" ")},getCorners:function(){return this._corners},getCorner:function(t){return this._corners[t]},getCenter:function(){var t=this._map,e=this.getCorners().reduce((function(e,i){return e.add(t.project(i))}),L.point(0,0));return t.unproject(e.divideBy(4))},_calculateProjectiveTransform:function(t){var e,i=t(this.getCorner(0)),o=this.getElement().offsetWidth||500,n=this.getElement().offsetHeight||375,a=[];for(e=0;e<4;e++)a.push(t(this.getCorner(e))._subtract(i));return L.MatrixUtil.general2DProjection(0,0,a[0].x,a[0].y,o,0,a[1].x,a[1].y,0,n,a[2].x,a[2].y,o,n,a[3].x,a[3].y)}}),L.distortableImageOverlay=function(t,e){return new L.DistortableImageOverlay(t,e)},L.Map.addInitHook((function(){L.DomUtil.hasClass(this.getContainer(),"ldi")||L.DomUtil.addClass(this.getContainer(),"ldi")}))},782:function(){var t=this;L.DomUtil=L.DomUtil||{},L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.Keymapper=L.Handler.extend({options:{position:"topright"},initialize:function(t,e){this._map=t,L.setOptions(this,e)},addHooks:function(){this._keymapper||(this._container=this._buildContainer(),this._scrollWrapper=this._wrap(),this._toggler=this._createButton(),this._setMapper(this._container,this._scrollWrapper,this._toggler),L.DomEvent.on(this._toggler,"click",this._toggleKeymapper,this),L.DomEvent.disableClickPropagation(this._container),L.DomEvent.disableScrollPropagation(this._container))},removeHooks:function(){this._keymapper&&(L.DomEvent.off(this._toggler,"click",this._toggleKeymapper,this),L.DomUtil.remove(this._toggler),L.DomUtil.remove(this._scrollWrapper),L.DomUtil.remove(this._container),this._keymapper=!1)},_buildContainer:function(){var t=L.DomUtil.create("div","ldi-keymapper-hide");t.setAttribute("id","ldi-keymapper");var e=L.DomUtil.create("br","divider");return t.appendChild(e),t},_createButton:function(){var t=L.DomUtil.create("a","");return t.innerHTML=L.IconUtil.create("keyboard_open"),t.setAttribute("id","toggle-keymapper"),t.setAttribute("href","#"),t.setAttribute("title","Show keymap"),t.setAttribute("role","button"),t.setAttribute("aria-label","Show keymap"),t},_wrap:function(){var t=L.DomUtil.create("div","");return t.setAttribute("id","keymapper-wrapper"),t.style.display="none",t},_setMapper:function(t,e,i){this._keymapper=L.control({position:this.options.position}),this._keymapper.onAdd=function(){return t.appendChild(e),e.insertAdjacentHTML("beforeend",'
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l u
Stack up / down
q a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete backspace
Export Image(s)
e
'),t.appendChild(i),t},this._keymapper.addTo(this._map)},_toggleKeymapper:function(t){t.preventDefault(),this._container.className="ldi-keymapper leaflet-control"===this._container.className?"ldi-keymapper-hide leaflet-control":"ldi-keymapper leaflet-control",this._scrollWrapper.style.display="none"===this._scrollWrapper.style.display?"block":"none",this._toggler.innerHTML="close"===this._toggler.innerHTML?L.IconUtil.create("keyboard_open"):"close",L.IconUtil.toggleTitle(this._toggler,"Show keymap","Hide keymap"),L.DomUtil.toggleClass(this._toggler,"close-icon")},_injectIconSet:function(){if(!this._map.getContainer().querySelector("#keymapper-iconset")){var t=L.DomUtil.create("div","");t.id="keymapper-iconset",t.setAttribute("hidden","hidden"),this._iconset=(new L.KeymapperIconSet).render(),t.innerHTML=this._iconset,this._map.getContainer().querySelector(".leaflet-control-container").appendChild(t)}}}),L.DistortableImage.Keymapper.addInitHook((function(){L.DistortableImage.Keymapper.prototype._n=L.DistortableImage.Keymapper.prototype._n?L.DistortableImage.Keymapper.prototype._n+1:1,1!==L.DistortableImage.Keymapper.prototype._n||L.Browser.mobile||(t.enable(),t._injectIconSet())})),L.distortableImage.keymapper=function(t,e){return new L.DistortableImage.Keymapper(t,e)}},428:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableCollection.Edit=L.Handler.extend({options:{keymap:L.distortableImage.group_action_map},initialize:function(t,e){this._group=t,this._exportOpts=t.options.exportOpts,L.setOptions(this,e),L.distortableImage.group_action_map.Escape="_decollectAll"},addHooks:function(){var t=this._group._map;this.editActions=this.options.actions,this.runExporter=L.bind(L.Utils.getNestedVal(this,"_exportOpts","exporter")||this.startExport,this),L.DomEvent.on(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.on(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._group.editable=!0,this._group.eachLayer((function(t){return t.editing.enable()}))},removeHooks:function(){var t=this._group._map;L.DomEvent.off(document,"keydown",this._onKeyDown,this),t.doubleClickZoom.enabled()||t.doubleClickLabels.enabled()||L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.off(t,{singleclickon:this._singleClickListeners,singleclickoff:this._resetClickListeners,singleclick:this._singleClick,boxcollectend:this._addCollections},this),this._decollectAll(),this._group.editable=!1,this._group.eachLayer((function(t){return t.editing.disable()}))},enable:function(){return this._enabled=!0,this.addHooks(),this},disable:function(){return this._enabled=!1,this.removeHooks(),this},_onKeyDown:function(t){var e=this.options.keymap[t.key];this[e]&&this._group.anyCollected()&&this[e].call(this)},_singleClick:function(t){"singleclick"===t.type&&this._decollectAll(t)},_singleClickListeners:function(){var t=this._group._map;L.DomEvent.off(t,"click",this._decollectAll,this),L.DomEvent.on(t,"singleclick",this._decollectAll,this)},_resetClickListeners:function(){var t=this._group._map;L.DomEvent.on(t,"click",this._decollectAll,this),L.DomEvent.off(t,"singleclick",this._decollectAll,this)},_decollectAll:function(t){var e;t&&(e=t.originalEvent),e&&(e.shiftKey||e.target instanceof HTMLImageElement)||(this._group.eachLayer((function(t){L.DomUtil.removeClass(t.getElement(),"collected"),t.deselect()})),this._removeToolbar(),t&&L.DomEvent.stopPropagation(t))},_unlockGroup:function(){var t=this;this.hasTool(L.UnlockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._unlock(),e.deselect())}))},_lockGroup:function(){var t=this;this.hasTool(L.LockAction)&&this._group.eachLayer((function(e){t._group.isCollected(e)&&(e.editing._lock(),L.DomUtil.addClass(e.getElement(),"collected"))}))},_addCollections:function(t){var e=this,i=t.boxCollectBounds,o=this._group._map;this._group.eachLayer((function(t){var n=t.editing;t.isSelected()&&t.deselect();var a=o.getZoom(),r=o.getCenter(),s=L.latLngBounds(t.getCorner(2),t.getCorner(1));s=o._latLngBoundsToNewLayerBounds(s,a,r),i.intersects(s)&&n.enabled()&&(e.toolbar||e._addToolbar(),L.DomUtil.addClass(t.getElement(),"collected"))}))},_removeGroup:function(t){var e=this;if(this.hasTool(L.DeleteAction)){var i=this._group._toRemove(),o=i.length;0!==o&&(L.DomUtil.confirmDeletes(o)&&(i.forEach((function(t){e._group.removeLayer(t)})),this._group.anyCollected()||this._removeToolbar()),t&&L.DomEvent.stopPropagation(t))}},cancelExport:function(){this.customCollection||(this._exportOpts.collection=void 0),clearInterval(this.updateInterval)},_addToolbar:function(){var t=this._group,e=t._map;t.options.suppressToolbar||this.toolbar||(this.toolbar=L.distortableImage.controlBar({actions:this.editActions,position:"topleft"}).addTo(e,t))},_removeToolbar:function(){var t=this._group._map;if(!this.toolbar)return!1;t.removeLayer(this.toolbar),this.toolbar=!1},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},addTool:function(t){return"leaflet-toolbar-icon"!==t.baseClass||this.hasTool(t)||(this._removeToolbar(),this.editActions.push(t),this._addToolbar()),this},removeTool:function(t){var e=this;return this.editActions.some((function(i,o){return e.editActions[o]===t&&(e._removeToolbar(),e.editActions.splice(o,1),e._addToolbar(),!0)})),this},startExport:function(){var t=this;if(this.hasTool(L.ExportAction))return new Promise((function(e){var i,o=t._exportOpts;o.resolve=e,t.updateInterval=null,t.customCollection=!!o.collection,t.customCollection||(o.collection=t._group.generateExportJson().images),o.frequency=o.frequency||3e3,o.scale=o.scale||100,o.updater=o.updater||function(n){(n=JSON.parse(n)).status_url&&(i!==n.status_url&&n.status_url.match(".json")&&(i=n.status_url),"complete"===n.status&&(clearInterval(t.updateInterval),t.customCollection||(t._exportOpts.collection=void 0),e(),null!==n.jpg&&alert("Export succeeded. "+o.exportUrl+n.jpg)),console.log(n))},o.handleStatusRes=o.handleStatusRes||function(e){i=o.statusUrl+e,t.updateInterval=setInterval((function(){var t=new Request("".concat(i,"?").concat(Date.now()),{method:"GET"});fetch(t).then((function(t){if(t.ok)return t.text()})).then(o.updater)}),o.frequency)},o.fetchStatusUrl=o.fetchStatusUrl||function(t){var e=new FormData;e.append("collection",JSON.stringify(t.collection)),e.append("scale",t.scale),e.append("upload",!0);var i={method:"POST",body:e},o=new Request(t.exportStartUrl,i);fetch(o).then((function(t){if(t.ok)return t.text()})).then(t.handleStatusRes)},o.fetchStatusUrl(o)}))}}),L.distortableCollection.edit=function(t,e){return new L.DistortableCollection.Edit(t,e)}},397:function(){L.DistortableImage=L.DistortableImage||{},L.DistortableImage.Edit=L.Handler.extend({options:{opacity:.5,outline:"1px solid red",keymap:L.distortableImage.action_map},initialize:function(t,e){this._overlay=t,this._toggledImage=!1,this._mode=t.options.mode,this._transparent=!1,this._outlined=!1,this._opacity=e.opacity,L.setOptions(this,e),L.distortableImage.action_map.Escape="_deselect"},addHooks:function(){var t=this._overlay;this.editActions=this.options.actions,t.bringToFront(),this._initModes(),this._initHandles(),this._appendHandlesandDragable(),t.isSelected()&&!t.options.suppressToolbar&&this._addToolbar(),this.parentGroup=!!t.eP&&t.eP,L.DomEvent.on(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.on(window,"keydown",this._onKeyDown,this)},removeHooks:function(){var t=this._overlay,e=this.parentGroup;for(var i in this._disableDragging(),this.toolbar&&this._removeToolbar(),this._handles)L.DomUtil.remove(i);L.DomUtil.hasClass(t.getElement(),"collected")&&L.DomUtil.removeClass(t.getElement(),"collected"),e&&!e.anyCollected()&&e.editing.toolbar&&e.editing._removeToolbar(),L.DomEvent.off(t.getElement(),{dblclick:this.nextMode},this),L.DomEvent.off(window,"keydown",this._onKeyDown,this)},disable:function(){return this._enabled?(this._overlay.deselect(),this._enabled=!1,this.removeHooks(),this):this},_initModes:function(){for(var t in this._modes={},L.DistortableImage.Edit.MODES){var e=L.DistortableImage.Edit.MODES[t];-1!==this.editActions.indexOf(e)&&(this._modes[t]=e)}this._modes[this._mode]||(this._mode=Object.keys(this._modes)[0])},_initHandles:function(){var t,e=this._overlay;for(this._dragHandles=L.layerGroup(),t=0;t<4;t++)this._dragHandles.addLayer(L.dragHandle(e,t));for(this._scaleHandles=L.layerGroup(),t=0;t<4;t++)this._scaleHandles.addLayer(L.scaleHandle(e,t));for(this._distortHandles=L.layerGroup(),t=0;t<4;t++)this._distortHandles.addLayer(L.distortHandle(e,t));for(this._rotateHandles=L.layerGroup(),t=0;t<4;t++)this._rotateHandles.addLayer(L.rotateHandle(e,t));for(this._freeRotateHandles=L.layerGroup(),t=0;t<4;t++)this._freeRotateHandles.addLayer(L.freeRotateHandle(e,t));for(this._lockHandles=L.layerGroup(),t=0;t<4;t++)this._lockHandles.addLayer(L.lockHandle(e,t,{draggable:!1}));this._handles={drag:this._dragHandles,scale:this._scaleHandles,distort:this._distortHandles,rotate:this._rotateHandles,freeRotate:this._freeRotateHandles,lock:this._lockHandles}},_appendHandlesandDragable:function(){var t=this._overlay;this._mode?(this._updateHandle(),!t.isSelected()&&this.currentHandle&&this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable()})),this.isMode("lock")||this._enableDragging()):this._enableDragging()},_onKeyDown:function(t){var e=this.options.keymap[t.key],i=this._overlay,o=this.parentGroup;o&&o.anyCollected()||void 0===this[e]||i.options.suppressToolbar||i.isSelected()&&this.toolbar&&this[e].call(this)},replaceTool:function(t,e){var i=this;return"leaflet-toolbar-icon"!==e.baseClass||this.hasTool(e)||this.editActions.some((function(o,n){if(o===t){for(var a in i._removeToolbar(),i.editActions[n]=e,i._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[a]===t?(delete i._modes[a],i._nextOrNone(a)):L.DistortableImage.Edit.MODES[a]===e&&(i._modes[a]=e);return!0}})),this},addTool:function(t){if("leaflet-toolbar-icon"===t.baseClass&&!this.hasTool(t)){for(var e in this._removeToolbar(),this.editActions.push(t),this._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[e]===t&&(this._modes[e]=t);this._overlay.isSelected()||this._removeToolbar()}return this},hasTool:function(t){return this.editActions.some((function(e){return e===t}))},removeTool:function(t){var e=this;return this.editActions.some((function(i,o){if(i===t){for(var n in e._removeToolbar(),e.editActions.splice(o,1),e._addToolbar(),L.DistortableImage.Edit.MODES)L.DistortableImage.Edit.MODES[n]===t&&(delete e._modes[n],e._nextOrNone(n));return!0}})),this._overlay.isSelected()||this._removeToolbar(),this},_nextOrNone:function(t){this.isMode(t)&&(Object.keys(this.getModes()).length>=1?this.nextMode():("lock"===t&&this._enableDragging(),this._mode="",this._updateHandle()))},_removeToolbar:function(){var t=this._overlay._map;this.toolbar&&(t.removeLayer(this.toolbar),this.toolbar=!1)},_enableDragging:function(){var t=this,e=this._overlay,i=e._map;this.dragging=new L.Draggable(e.getElement()),this.dragging.enable(),this.dragging.on("dragstart",(function(){e.fire("dragstart"),t._removeToolbar()})),this.dragging._updatePosition=function(){var t,o,n=e.getCorner(0),a=this._newPos.subtract(i.latLngToLayerPoint(n)),r={};for(this.fire("predrag"),o=0;o<4;o++)t=i.latLngToLayerPoint(e.getCorner(o)),r[o]=i.layerPointToLatLng(t.add(a));e.setCorners(r),e.fire("drag"),this.fire("drag")},this.dragging.on("dragend",(function(){e.fire("dragend")}))},_disableDragging:function(){this.dragging&&(this.dragging.disable(),delete this.dragging)},_dragMode:function(){this.setMode("drag")},_scaleMode:function(){this.setMode("scale")},_distortMode:function(){this.setMode("distort")},_rotateMode:function(){this.setMode("rotate")},_freeRotateMode:function(){this.setMode("freeRotate")},_toggleLockMode:function(){this.isMode("lock")?this._unlock():this._lock()},_toggleOpacity:function(){var t=this._overlay.getElement();if(this.hasTool(L.OpacityAction)){this._transparent=!this._transparent;var e=this._transparent?this.options.opacity:1;L.DomUtil.setOpacity(t,e),t.setAttribute("opacity",e),this._refresh()}},_setOpacities:function(t){var e=this._overlay.getElement();this._opacity=t,this.hasTool(L.OpacitiesAction)&&(this._opacity<1?this._transparent=!0:this._transparent=!1,L.DomUtil.setOpacity(e,this._opacity),e.setAttribute("opacity",this._opacity),this._refresh())},_toggleBorder:function(){var t=this._overlay.getElement();if(this.hasTool(L.BorderAction)){this._outlined=!this._outlined;var e=this._outlined?this.options.outline:"none";t.style.outline=e,this._refresh()}},_toggleOrder:function(){this._toggledImage?this._stackUp():this._stackDown()},_removeOverlay:function(){var t=this._overlay,e=this.parentGroup;!this.isMode("lock")&&this.hasTool(L.DeleteAction)&&L.DomUtil.confirmDelete()&&(this._removeToolbar(),e?e.removeLayer(t):t._map.removeLayer(t))},_getExport:function(){var t=this._overlay,e=t._map,i=t.getElement();if(this.hasTool(L.ExportAction)){var o=new Image;o.id=o.id||"tempId12345",document.body.appendChild(o),o.onload=function(){var i=o.height,n=o.width,a=e.latLngToLayerPoint(t.getCorner(0)),r=e.latLngToLayerPoint(t.getCorner(1)),s=e.latLngToLayerPoint(t.getCorner(2)),l=e.latLngToLayerPoint(t.getCorner(3));o.onload=function(){L.DomUtil.remove(o)},window&&window.hasOwnProperty("warpWebGl")&&warpWebGl(o.id,[0,0,n,0,n,i,0,i],[a.x,a.y,r.x,r.y,l.x,l.y,s.x,s.y],!0)},o.src=t.options.fullResolutionSrc||i.src}},_stackUp:function(){this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!1,this._overlay.bringToFront(),this._refresh())},_stackDown:function(){!this._toggledImage&&this.hasTool(L.StackAction)&&(this._toggledImage=!0,this._overlay.bringToBack(),this._refresh())},_unlock:function(){var t=this._overlay,e=t._map,i=this.parentGroup;this.isMode("lock")&&((!i||i.isCollected(t))&&i||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),"lock"!==t.options.mode&&this.hasMode(t.options.mode)?this._mode=t.options.mode:(this._mode="",this.currentHandle=""),this._updateHandle(),this._enableDragging(),this._refresh())},_lock:function(){var t=this._overlay,e=t._map,i=this.parentGroup;this.isMode("lock")||((!i||i.isCollected(t))&&i||this.hasTool(L.LockAction))&&(this.currentHandle&&e.removeLayer(this.currentHandle),this._mode="lock",this._updateHandle(),this._disableDragging(),this._refresh())},_deselect:function(){this._overlay.deselect()},_showMarkers:function(t){var e=this.parentGroup;this.currentHandle&&(!this.isMode("lock")&&e&&e.anyCollected()||this.currentHandle.eachLayer((function(t){t.setOpacity(1),t.dragging&&t.dragging.enable(),L.DomUtil.addClass(t.getElement(),"leaflet-interactive")})))},_hideMarkers:function(){var t=this._overlay,e=this.parentGroup;this._handles||this._initHandles(),this.currentHandle&&(this.isMode("lock")&&e&&e.isCollected(t)||this.currentHandle.eachLayer((function(t){t.setOpacity(0),t.dragging&&t.dragging.disable(),L.DomUtil.removeClass(t.getElement(),"leaflet-interactive")})))},_updateHandle:function(){var t=this._overlay._map,e=this.getMode();this.currentHandle&&t.removeLayer(this.currentHandle),this.currentHandle=""===e?"":this._handles[e],""!==this.currentHandle&&t.addLayer(this.currentHandle)},_addToolbar:function(){var t=this._overlay,e=this.parentGroup,i=t._map,o=t.getCorners(),n=-1/0;if(e&&e.anyCollected())e.editing._addToolbar();else if(!t.options.suppressToolbar&&!this.toolbar){for(var a=0;an&&(n=o[a].lat);var r=t.getCenter();r.lat=n,this.toolbar=L.distortableImage.popupBar(r,{actions:this.editActions}).addTo(i,t),t.fire("toolbar:created")}},_refresh:function(){this.toolbar&&this._removeToolbar(),this._addToolbar()},_updateToolbarPos:function(){var t=this._overlay,e=t.getCorners(),i=this.toolbar,o=-1/0;if(i&&i instanceof L.DistortableImage.PopupBar){for(var n=0;no&&(o=e[n].lat);var a=t.getCenter();a.lat=o,t.options.suppressToolbar||this.toolbar.setLatLng(a)}},hasMode:function(t){return!!this._modes[t]},getMode:function(){if(this.enabled())return this._mode},getModes:function(){return this._modes},isMode:function(t){return!!this.enabled()&&this._mode===t},setMode:function(t){var e=this._overlay,i=this.parentGroup;if(this.getMode()!==t&&this.hasMode(t)&&this.enabled())return this.toolbar&&this.toolbar.clickTool(t),this.isMode("lock")&&!this.dragging&&this._enableDragging(),this._mode=t,this.isMode("lock")&&this._disableDragging(),this._updateHandle(),this._refresh(),i&&i.isCollected(e)&&e.deselect(),this},nextMode:function(t){var e=this.getMode(),i=this.parentGroup,o=Object.keys(this.getModes()),n=o.indexOf(e),a=o[(n+1)%o.length];if(t){if(i&&i.anyCollected())return;L.DomEvent.stop(t)}return this.setMode(a)}}),L.distortableImage.edit=function(t,e){return new L.DistortableImage.Edit(t,e)}},426:function(){L.BorderAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing,r=a._mode;a._outlined?(o="border_outer",n=e.options.translation.removeBorder):(o="border_clear",n=e.options.translation.addBorder),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"===r?"disabled":""},L.DistortableImage.action_map.b="lock"===r?"":"_toggleBorder",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;L.IconUtil.toggleXlink(this._link,"border_clear","border_outer"),L.IconUtil.toggleTitle(this._link,"Remove Border","Add Border"),t._toggleBorder()}})},114:function(){L.DeleteAction=L.EditAction.extend({initialize:function(t,e,i){var o,n=e.editing;n instanceof L.DistortableImage.Edit?(o=e.options.translation.deleteImage,L.DistortableImage.action_map.Backspace="lock"===n._mode?"":"_removeOverlay"):(o=e.options.translation.deleteImages,L.DistortableImage.group_action_map.Backspace="lock"===n._mode?"":"_removeGroup"),(i=i||{}).toolbarIcon={svg:!0,html:"delete_forever",tooltip:o,className:"lock"===n._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._removeOverlay():t._removeGroup()}})},231:function(){L.DistortAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"distort",tooltip:e.options.translation.distortImage,className:"distort"},L.DistortableImage.action_map.d="_distortMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._distortMode()}})},541:function(){L.DragAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"drag",tooltip:e.options.translation.dragImage,className:"drag"},L.DistortableImage.action_map.D="_dragMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._dragMode()}})},280:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.EditAction=L.Toolbar2.Action.extend({options:{toolbarIcon:{svg:!1,html:"",className:"",tooltip:""}},initialize:function(t,e,i){this._overlay=e,this._map=t,L.setOptions(this,i),L.Toolbar2.Action.prototype.initialize.call(this,i),this._injectIconSet()},_createIcon:function(t,e,i){var o=this,n=this.options.toolbarIcon,a=n.className,r=this._overlay.editing,s=this.options.toolbarIcon.style;this.toolbar=t,this._icon=L.DomUtil.create("li","",e),this._link=L.DomUtil.create("a","",this._icon),n.svg?this._link.innerHTML=L.IconUtil.create(n.html):this._link.innerHTML=n.html,this._link.setAttribute("href","#"),this._link.setAttribute("title",n.tooltip),s&&this._link.setAttribute("style",s),this._link.setAttribute("role","button"),L.DomUtil.addClass(this._link,this.constructor.baseClass),a&&(L.DomUtil.addClass(this._link,a),"disabled"===a&&L.DomUtil.addClass(this._icon,a),a===r._mode?L.DomUtil.addClass(this._link,"selected-mode"):L.DomUtil.removeClass(this._link,"selected-mode")),L.DomEvent.on(this._link,"click",this.enable,this),L.DomEvent.on(this._overlay,"update",(function(){var t=o._link.innerHTML.match(/xlink:href="#restore"/);t&&1===t.length&&o._enableAction()})),this._addSubToolbar(t,this._icon,i)},_injectIconSet:function(){if(!this._map.getContainer().querySelector("#iconset")){var t=document.createElement("div");t.id="iconset",t.setAttribute("hidden","hidden"),t.innerHTML=(new L.ToolbarIconSet).render(),this._map.getContainer().querySelector(".leaflet-marker-pane").appendChild(t)}},_enableAction:function(){L.DomUtil.removeClass(this._link.parentElement,"disabled"),L.DomUtil.removeClass(this._link,"disabled")},_disableAction:function(){L.DomUtil.addClass(this._link.parentElement,"disabled"),L.DomUtil.addClass(this._link,"disabled")}}),L.editAction=function(t,e,i){return new L.EditAction(t,e,i)}},149:function(){L.ExportAction=L.EditAction.extend({initialize:function(t,e,i){var o,n=e.editing;this.isExporting=!1,this.mouseLeaveSkip=!0,this.isHooksExecuted=!1,n instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.e="_getExport",o=e.options.translation.exportImage):(L.DistortableImage.group_action_map.e="runExporter",o=e.options.translation.exportImages),(i=i||{}).toolbarIcon={svg:!0,html:"get_app",tooltip:o},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;if(t instanceof L.DistortableImage.Edit)t._getExport();else if(!this.isHooksExecuted){this.isHooksExecuted=!0;var e=this._link.parentElement;this.mouseEnterHandler=this.handleMouseEnter.bind(this),this.mouseLeaveHandler=this.handleMouseLeave.bind(this),L.DomEvent.on(e,"click",(function(){if(this.isExporting){if(this.mouseLeaveSkip)return;this.resetState(),this.detachMouseEventListeners(e),t.cancelExport()}else this.isExporting=!0,this.renderExportIcon(),setTimeout(this.attachMouseEventListeners.bind(this,e),100),t.runExporter().then(function(){this.resetState(),this.detachMouseEventListeners(e)}.bind(this))}),this)}},resetState:function(){this.renderDownloadIcon(),this.isExporting=!1,this.mouseLeaveSkip=!0},attachMouseEventListeners:function(t){t.addEventListener("mouseenter",this.mouseEnterHandler),t.addEventListener("mouseleave",this.mouseLeaveHandler)},detachMouseEventListeners:function(t){t.removeEventListener("mouseenter",this.mouseEnterHandler),t.removeEventListener("mouseleave",this.mouseLeaveHandler)},handleMouseEnter:function(){this.renderCancelIcon()},handleMouseLeave:function(){this.mouseLeaveSkip?this.mouseLeaveSkip=!1:this.renderExportIcon()},renderDownloadIcon:function(){L.IconUtil.toggleXlink(this._link,"get_app","spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")},renderExportIcon:function(){L.IconUtil.toggleXlink(this._link,"spinner"),L.IconUtil.toggleTitle(this._link,"Export Images","Loading..."),L.IconUtil.addClassToSvg(this._link,"loader")},renderCancelIcon:function(){L.IconUtil.toggleXlink(this._link,"cancel"),L.IconUtil.toggleTitle(this._link,"Cancel Export","Loading..."),L.DomUtil.removeClass(this._link.firstChild,"loader")}})},74:function(){L.FreeRotateAction=L.EditAction.extend({initialize:function(t,e,i){(i=i||{}).toolbarIcon={svg:!0,html:"crop_rotate",tooltip:e.options.translation.freeRotateImage,className:"freeRotate"},L.DistortableImage.action_map.f="_freeRotateMode",L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){this._overlay.editing._freeRotateMode()}})},691:function(){L.GeolocateAction=L.EditAction.extend({initialize:function(t,e,i){var o=e.editing;(i=i||{}).toolbarIcon={svg:!0,html:"explore",tooltip:e.options.translation.geolocateImage,className:"lock"===o._mode?"disabled":""},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.getElement();EXIF.getData(t,L.EXIF(t))}})},105:function(){L.LockAction=L.EditAction.extend({initialize:function(t,e,i){var o,n,a=e.editing;a instanceof L.DistortableImage.Edit?(L.DistortableImage.action_map.u="_unlock",L.DistortableImage.action_map.l="_lock",n=e.options.translation.lockMode,o=a.isMode("lock")?"lock":"unlock"):(L.DistortableImage.group_action_map.l="_lockGroup",n=e.options.translation.lockImages,o="lock"),(i=i||{}).toolbarIcon={svg:!0,html:o,tooltip:n,className:"lock"},L.EditAction.prototype.initialize.call(this,t,e,i)},addHooks:function(){var t=this._overlay.editing;t instanceof L.DistortableImage.Edit?t._toggleLockMode():t._lockGroup()}})},496:function(){var t=[100,80,60,40,20,0],e=new CSSStyleSheet;e.replaceSync(".leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n "),e.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"),document.adoptedStyleSheets=[e],t=t.map((function(t){return(isNaN(t)||t>100)&&(t=100),t<0&&(t=0),L.EditAction.extend({options:{toolbarIcon:{html:t,tooltip:"Opacity "+t+"%",className:"leaflet-toolbar-icon-vertical",style:"background-color:rgb("+(100-t)+"%,"+(100-t)+"%,"+(100-t)+"%);"}},addHooks:function(){this._overlay.editing._setOpacities(t/100)}})})),L.OpacitiesToolbar2=L.Toolbar2.extend({options:{className:"",filter:function(){return!0},actions:[],style:"translate(-1px, -".concat(30*(t.length+1),"px)")},appendToContainer:function(t){var e,i,o,n,a=this.constructor.baseClass+"-"+this._calculateDepth()+" "+this.options.className;for(this._container=t,this._ul=L.DomUtil.create("ul",a,t),this._ul.style.transform=this.options.style?this.options.style:"",this._disabledEvents=["click","mousemove","dblclick","mousedown","mouseup","touchstart"],i=0,n=this._disabledEvents.length;ir||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.freeRotateHandle=function(t,e,i){return new L.FreeRotateHandle(t,e,i)}},789:function(){L.LockHandle=L.EditHandle.extend({options:{TYPE:"lock",interactive:!1,icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=",iconSize:[32,32],iconAnchor:[16,16]})},onRemove:function(t){this.unbindTooltip(),L.EditHandle.prototype.onRemove.call(this,t)},_bindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.on(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.on(document,"pointerleave",this._tooltipOff,this)},_unbindListeners:function(){var t=this.getElement();L.EditHandle.prototype._bindListeners.call(this),L.DomEvent.off(t,{mousedown:this._tooltipOn,mouseup:this._tooltipOff},this),L.DomEvent.off(document,"pointerleave",this._tooltipOff,this)},_onHandleDrag:function(){},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))},_tooltipOn:function(t){var e=this._handled.parentGroup,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;this._timer=setTimeout(L.bind((function(){this._timeout&&clearTimeout(this._timeout),this.getTooltip()?o.eachLayer((function(t){this!==t&&t.closeTooltip()})):this.bindTooltip("Locked!",{permanent:!0}),this.openTooltip()}),this),500)}},_tooltipOff:function(t){var e=this._handled.parentGroup,i=e?e.editing:this._handled.editing;if(!t.shiftKey&&(this._handled.isSelected()||!e||e.isCollected(this._handled))){var o=i._lockHandles;t.currentTarget===document&&o.eachLayer((function(t){t.closeTooltip()})),this._timer&&clearTimeout(this._timer),this._timeout=setTimeout(L.bind((function(){this.closeTooltip()}),this),400)}}}),L.lockHandle=function(t,e,i){return new L.LockHandle(t,e,i)}},337:function(){L.RotateHandle=L.EditHandle.extend({options:{TYPE:"rotate",icon:L.icon({iconUrl:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t.getCorner(this._corner),i=this.getLatLng(),o=this.calculateAngleDelta(e,i);t.rotateBy(o,"rad")},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.rotateHandle=function(t,e,i){return new L.RotateHandle(t,e,i)}},350:function(){L.ScaleHandle=L.EditHandle.extend({options:{TYPE:"scale",icon:L.icon({iconUrl:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=",iconSize:[32,32],iconAnchor:[16,16]})},_onHandleDrag:function(){var t=this._handled,e=t._map,i=t.edgeMinWidth,o=t.getCorner(this._corner),n=this.getLatLng(),a=this._calculateScalingFactor(o,n);i||(i=50);var r=e.latLngToLayerPoint(t.getCorner(0)),s=e.latLngToLayerPoint(t.getCorner(1)),l=Math.abs(r.x-s.x),c=Math.abs(r.y-s.y);Math.sqrt(l*l+c*c)>i||a>1?t.scaleBy(a):t.scaleBy(1)},updateHandle:function(){this.setLatLng(this._handled.getCorner(this._corner))}}),L.scaleHandle=function(t,e,i){return new L.ScaleHandle(t,e,i)}},719:function(){L.distortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.group_action_map={},L.DistortableImage.ControlBar=L.Toolbar2.Control.extend({}),L.distortableImage.controlBar=function(t){return new L.DistortableImage.ControlBar(t)},L.DistortableCollection.addInitHook((function(){this.ACTIONS=[L.ExportAction,L.DeleteAction,L.LockAction,L.UnlockAction],L.DistortableCollection.Edit.MODES={lock:L.LockAction,unlock:L.UnlockAction};var t=this.options.actions?this.options.actions:this.ACTIONS;this.editing=L.distortableCollection.edit(this,{actions:t})}))},93:function(){L.DistortableImage=L.DistortableImage||{},L.distortableImage=L.DistortableImage,L.DistortableImage.action_map={},L.DistortableImage.PopupBar=L.Toolbar2.Popup.extend({options:{anchor:[0,-10]},initialize:function(t,e){L.setOptions(this,e),L.Toolbar2.Popup.prototype.initialize.call(this,t,e)},addHooks:function(t,e){this.map=t,this.ov=e},tools:function(){if(this._ul)return this._ul.children},clickTool:function(t){for(var e=this.tools(),i=0;i',_symbols:"",render:function(){return this.addSymbols(this._symbols),this._svg},addSymbols:function(t){this._svg+=t}})},261:function(){L.KeymapperIconSet=L.IconSet.extend({_symbols:''})},929:function(){L.ToolbarIconSet=L.IconSet.extend({_symbols:''})},998:function(){L.Map.mergeOptions({boxCollector:!0,boxZoom:!1}),L.Map.BoxCollector=L.Map.BoxZoom.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){L.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){L.DomEvent.off(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){L.DomUtil.remove(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),L.DomUtil.disableTextSelection(),L.DomUtil.disableImageDrag(),this._startPoint=this._map.mouseEventToContainerPoint(t),L.DomEvent.on(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=L.DomUtil.create("div","leaflet-zoom-box",this._container),L.DomUtil.addClass(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t),this._bounds=L.bounds(this._startPoint,this._point);var e=this._bounds.getSize();L.DomUtil.setPosition(this._box,this._bounds.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(L.DomUtil.remove(this._box),L.DomUtil.removeClass(this._container,"leaflet-crosshair")),L.DomUtil.enableTextSelection(),L.DomUtil.enableImageDrag(),L.DomEvent.off(document,{contextmenu:L.DomEvent.stop,mousemove:this._onMouseMove,mouseup:this._onMouseUp},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(L.Util.bind(this._resetState,this),0);var e=L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()),this._map.containerPointToLatLng(this._bounds.getTopRight())),i=this._map.getZoom(),o=this._map.getCenter();e=this._map._latLngBoundsToNewLayerBounds(e,i,o),this._map.fire("boxcollectend",{boxCollectBounds:e})}}}),L.Map.addInitHook("addHandler","boxCollector",L.Map.BoxCollector)},291:function(){L.Map.mergeOptions({doubleClickLabels:!0}),L.Map.DoubleClickLabels=L.Map.DoubleClickZoom.extend({enable:function(){var t=this._map;return this._enabled||(t.doubleClickZoom.enabled()&&t.doubleClickZoom.disable(),this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e.fire("dblclick")}),250))},_onDoubleClick:function(){var t=this._map,e=t._labels;setTimeout((function(){t._clicked=0,clearTimeout(t._clickTimeout)}),0),e&&(1===e.options.opacity?(e.options.opacity=0,e.setOpacity(0)):(e.options.opacity=1,e.setOpacity(1)))}}),L.Map.addInitHook("addHandler","doubleClickLabels",L.Map.DoubleClickLabels)},752:function(){L.Map.DoubleClickZoom.include({addHooks:function(){this._map.on({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},removeHooks:function(){this._map.off({click:this._fireIfSingle,dblclick:this._onDoubleClick},this)},enable:function(){return this._enabled||this._map.doubleClickLabels&&this._map.doubleClickLabels.enabled()||(this._map.fire("singleclickon"),this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._map.fire("singleclickoff"),this._enabled=!1,this.removeHooks(),this):this},_fireIfSingle:function(t){var e=this._map,i=t.originalEvent;i&&i.shiftKey||(e._clicked+=1,this._map._clickTimeout=setTimeout((function(){1===e._clicked?(e._clicked=0,e.fire("singleclick",{type:"singleclick"})):L.Browser.touch&&i&&i.sourceCapabilities.firesTouchEvents&&e._fireDOMEvent(i,"dblclick",[e])}),250))},_onDoubleClick:function(t){var e=this._map,i=t.originalEvent;if(setTimeout((function(){e._clicked=0,clearTimeout(e._clickTimeout)}),0),!i)return!1;var o=e.getZoom(),n=e.options.zoomDelta,a=i.shiftKey?o-n:o+n;"center"===e.options.doubleClickZoom?e.setZoom(a):e.setZoomAround(t.containerPoint,a)}})},131:function(){L.Map.include({_clicked:0,addGoogleMutant:function(t){return(t=this.mutantOptions=L.extend({mutantOpacity:.8,maxZoom:24,maxNativeZoom:20,minZoom:0,labels:!0,labelOpacity:1,doubleClickLabels:!0},t)).labels||(this.mutantOptions=L.extend(this.mutantOptions,{labelOpacity:t.labels?1:void 0,doubleClickLabels:!!t.labels||void 0})),this._googleMutant=L.tileLayer("http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}",{maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,opacity:t.mutantOpacity}).addTo(this),t.labels?this._addLabels(t):this.doubleClickLabels=void 0,this},_addLabels:function(t){return 0!==t.labelOpacity&&1!==t.labelOpacity&&(t.labelOpacity=1),this._labels=L.tileLayer("https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}",{attribution:'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',subdomains:"abcd",interactive:!1,opacity:t.labelOpacity,maxZoom:t.maxZoom,maxNativeZoom:t.maxNativeZoom,minZoom:t.minZoom,ext:"png"}).addTo(this),this.mutantOptions.doubleClickLabels&&this.doubleClickLabels.enable(),this}}),L.Map.addInitHook((function(){this.doubleClickLabels.disable(),this.doubleClickZoom.enable()}))},999:function(){L.DomUtil=L.extend(L.DomUtil,{initTranslation:function(t){this.translation=t},getMatrixString:function(t){var e=L.Browser.webkit3d||L.Browser.gecko3d||L.Browser.ie3d,i=[t[0],t[3],0,t[6],t[1],t[4],0,t[7],0,0,1,0,t[2],t[5],0,t[8]],o=e?"matrix3d("+i.join(",")+")":"";return e||console.log("Your browser must support 3D CSS transformsin order to use DistortableImageOverlay."),o},toggleClass:function(t,e){var i=e;return this.hasClass(t,i)?this.removeClass(t,i):this.addClass(t,i)},confirmDelete:function(){return window.confirm(this.translation.confirmImageDelete)},confirmDeletes:function(t){if(1===t)return this.confirmDelete();var e,i=this.translation.confirmImagesDeletes;return e="function"==typeof i?i(t):i,window.confirm(e)}})},85:function(){L.IconUtil={create:function(t){return/^#/.test(t)&&(t=t.replace(/^#/,"")),''},addClassToSvg:function(t,e){var i=t.querySelector("svg");i&&L.DomUtil.addClass(i,e)},toggleXlink:function(t,e,i){/^#/.test(e)||(e="#"+e),/^#/.test(i)||(i="#"+i);var o=t.querySelector("use");if(o){var n=o.getAttribute("xlink:href")===e?i:e;return o.setAttribute("xlink:href",n),n}return!1},toggleTitle:function(t,e,i){var o=t.getAttribute("title")===e?i:e;return t.setAttribute("title",o),t.hasAttribute("aria-label")&&t.setAttribute("aria-label",o),o}}},351:function(){L.ImageUtil={getCmPerPixel:function(t){var e=t._map;return 100*e.latLngToLayerPoint(t.getCorner(0)).distanceTo(e.latLngToLayerPoint(t.getCorner(1)))/t.getElement().width}}},360:function(){L.MatrixUtil={adj:function(t){return[t[4]*t[8]-t[5]*t[7],t[2]*t[7]-t[1]*t[8],t[1]*t[5]-t[2]*t[4],t[5]*t[6]-t[3]*t[8],t[0]*t[8]-t[2]*t[6],t[2]*t[3]-t[0]*t[5],t[3]*t[7]-t[4]*t[6],t[1]*t[6]-t[0]*t[7],t[0]*t[4]-t[1]*t[3]]},multmm:function(t,e){var i,o=[];for(i=0;i<3;i++)for(var n=0;n<3;n++){for(var a=0,r=0;r<3;r++)a+=t[3*i+r]*e[3*r+n];o[3*i+n]=a}return o},multmv:function(t,e){return[t[0]*e[0]+t[1]*e[1]+t[2]*e[2],t[3]*e[0]+t[4]*e[1]+t[5]*e[2],t[6]*e[0]+t[7]*e[1]+t[8]*e[2]]},multsm:function(t,e){for(var i=[],o=0,n=e.length;o2&&void 0!==arguments[2]?arguments[2]:"deg";return"deg"===i?this.radiansToDegrees(Math.atan2(e,t)):Math.atan2(e,t)},radiansToDegrees:function(t){return 180*t/Math.PI},degreesToRadians:function(t){return t*Math.PI/180}}},866:function(){L.Utils={initTranslation:function(){var t={deleteImage:"Delete Image",deleteImages:"Delete Images",distortImage:"Distort Image",dragImage:"Drag Image",exportImage:"Export Image",exportImages:"Export Images",removeBorder:"Remove Border",addBorder:"Add Border",freeRotateImage:"Free rotate Image",geolocateImage:"Geolocate Image",lockMode:"Lock Mode",lockImages:"Lock Images",makeImageOpaque:"Make Image Opaque",makeImageTransparent:"Make Image Transparent",restoreImage:"Restore Natural Image",rotateImage:"Rotate Image",scaleImage:"Scale Image",stackToFront:"Stack to Front",stackToBack:"Stack to Back",unlockImages:"Unlock Images",confirmImageDelete:"Are you sure? This image will be permanently deleted from the map.",confirmImagesDeletes:"Are you sure? These images will be permanently deleted from the map."};if(this.options.translation)for(var e in t)this.options.translation.hasOwnProperty(e)||(this.options.translation[e]=t[e]);else this.options.translation=t;L.DomUtil.initTranslation(this.options.translation)},getNestedVal:function(t,e,i){return[e,i].reduce((function(t,e){return t&&t[e]}),t)}}}};t[999](),t[85](),t[351](),t[360](),t[682](),t[866](),t[477](),t[808](),t[743](),t[988](),t[92](),t[194](),t[206](),t[789](),t[337](),t[350](),t[376](),t[261](),t[929](),t[280](),t[426](),t[114](),t[231](),t[541](),t[149](),t[74](),t[691](),t[105](),t[496](),t[944](),t[954](),t[178](),t[547](),t[886](),t[129](),t[93](),t[719](),t[397](),t[428](),t[782](),t[752](),t[998](),t[291](),t[131]()}(); +/******/ (function() { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/ansi-html-community/index.js": +/*!***************************************************!*\ + !*** ./node_modules/ansi-html-community/index.js ***! + \***************************************************/ +/***/ (function(module) { + +"use strict"; + + +module.exports = ansiHTML + +// Reference to https://github.com/sindresorhus/ansi-regex +var _regANSI = /(?:(?:\u001b\[)|\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\u001b[A-M]/ + +var _defColors = { + reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] + black: '000', + red: 'ff0000', + green: '209805', + yellow: 'e8bf03', + blue: '0000ff', + magenta: 'ff00ff', + cyan: '00ffee', + lightgrey: 'f0f0f0', + darkgrey: '888' +} +var _styles = { + 30: 'black', + 31: 'red', + 32: 'green', + 33: 'yellow', + 34: 'blue', + 35: 'magenta', + 36: 'cyan', + 37: 'lightgrey' +} +var _openTags = { + '1': 'font-weight:bold', // bold + '2': 'opacity:0.5', // dim + '3': '', // italic + '4': '', // underscore + '8': 'display:none', // hidden + '9': '' // delete +} +var _closeTags = { + '23': '', // reset italic + '24': '', // reset underscore + '29': '' // reset delete +} + +;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) { + _closeTags[n] = '' +}) + +/** + * Converts text with ANSI color codes to HTML markup. + * @param {String} text + * @returns {*} + */ +function ansiHTML (text) { + // Returns the text if the string has no ANSI escape code. + if (!_regANSI.test(text)) { + return text + } + + // Cache opened sequence. + var ansiCodes = [] + // Replace with markup. + var ret = text.replace(/\033\[(\d+)m/g, function (match, seq) { + var ot = _openTags[seq] + if (ot) { + // If current sequence has been opened, close it. + if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast + ansiCodes.pop() + return '' + } + // Open tag. + ansiCodes.push(seq) + return ot[0] === '<' ? ot : '' + } + + var ct = _closeTags[seq] + if (ct) { + // Pop sequence + ansiCodes.pop() + return ct + } + return '' + }) + + // Make sure tags are closed. + var l = ansiCodes.length + ;(l > 0) && (ret += Array(l + 1).join('')) + + return ret +} + +/** + * Customize colors. + * @param {Object} colors reference to _defColors + */ +ansiHTML.setColors = function (colors) { + if (typeof colors !== 'object') { + throw new Error('`colors` parameter must be an Object.') + } + + var _finalColors = {} + for (var key in _defColors) { + var hex = colors.hasOwnProperty(key) ? colors[key] : null + if (!hex) { + _finalColors[key] = _defColors[key] + continue + } + if ('reset' === key) { + if (typeof hex === 'string') { + hex = [hex] + } + if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) { + return typeof h !== 'string' + })) { + throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000') + } + var defHexColor = _defColors[key] + if (!hex[0]) { + hex[0] = defHexColor[0] + } + if (hex.length === 1 || !hex[1]) { + hex = [hex[0]] + hex.push(defHexColor[1]) + } + + hex = hex.slice(0, 2) + } else if (typeof hex !== 'string') { + throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000') + } + _finalColors[key] = hex + } + _setTags(_finalColors) +} + +/** + * Reset colors. + */ +ansiHTML.reset = function () { + _setTags(_defColors) +} + +/** + * Expose tags, including open and close. + * @type {Object} + */ +ansiHTML.tags = {} + +if (Object.defineProperty) { + Object.defineProperty(ansiHTML.tags, 'open', { + get: function () { return _openTags } + }) + Object.defineProperty(ansiHTML.tags, 'close', { + get: function () { return _closeTags } + }) +} else { + ansiHTML.tags.open = _openTags + ansiHTML.tags.close = _closeTags +} + +function _setTags (colors) { + // reset all + _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1] + // inverse + _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0] + // dark grey + _openTags['90'] = 'color:#' + colors.darkgrey + + for (var code in _styles) { + var color = _styles[code] + var oriColor = colors[color] || '000' + _openTags[code] = 'color:#' + oriColor + code = parseInt(code) + _openTags[(code + 10).toString()] = 'background:#' + oriColor + } +} + +ansiHTML.reset() + + +/***/ }), + +/***/ "./src/DistortableCollection.js": +/*!**************************************!*\ + !*** ./src/DistortableCollection.js ***! + \**************************************/ +/***/ (function() { + +function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator.return && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +var arr = []; +L.DistortableCollection = L.FeatureGroup.extend({ + options: { + editable: true, + exportOpts: { + exportStartUrl: '//export.mapknitter.org/export', + statusUrl: '//export.mapknitter.org', + exportUrl: 'http://export.mapknitter.org/' + } + }, + initialize: function initialize(options) { + L.setOptions(this, options); + L.FeatureGroup.prototype.initialize.call(this, options); + L.Utils.initTranslation.call(this); + this.editable = this.options.editable; + }, + onAdd: function onAdd(map) { + L.FeatureGroup.prototype.onAdd.call(this, map); + this._map = map; + if (this.editable) { + this.editing.enable(); + } + + /** + * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable, + * events that need to be added on individual images are kept here to do so through `layeradd`. + */ + this.on('layeradd', this._addEvents, this); + this.on('layerremove', this._removeEvents, this); + }, + onRemove: function onRemove() { + if (this.editing) { + this.editing.disable(); + } + this.off('layeradd', this._addEvents, this); + this.off('layerremove', this._removeEvents, this); + }, + _addEvents: function _addEvents(e) { + var layer = e.layer; + L.DomEvent.on(layer, { + dragstart: this._dragStartMultiple, + drag: this._dragMultiple + }, this); + L.DomEvent.on(layer.getElement(), { + mousedown: this._deselectOthers, + /* Enable longpress for multi select for touch devices. */ + contextmenu: this._longPressMultiSelect + }, this); + }, + _removeEvents: function _removeEvents(e) { + var layer = e.layer; + L.DomEvent.off(layer, { + dragstart: this._dragStartMultiple, + drag: this._dragMultiple + }, this); + L.DomEvent.off(layer.getElement(), { + mousedown: this._deselectOthers, + contextmenu: this._longPressMultiSelect + }, this); + }, + _longPressMultiSelect: function _longPressMultiSelect(e) { + var _this = this; + if (!this.editable) { + return; + } + e.preventDefault(); + this.eachLayer(function (layer) { + var edit = layer.editing; + if (layer.getElement() === e.target && edit.enabled()) { + L.DomUtil.toggleClass(layer.getElement(), 'collected'); + if (_this.anyCollected()) { + layer.deselect(); + _this.editing._addToolbar(); + } else { + _this.editing._removeToolbar(); + } + } + }); + }, + isCollected: function isCollected(overlay) { + return L.DomUtil.hasClass(overlay.getElement(), 'collected'); + }, + anyCollected: function anyCollected() { + var layerArr = this.getLayers(); + return layerArr.some(this.isCollected.bind(this)); + }, + _toggleCollected: function _toggleCollected(e, layer) { + if (e.shiftKey) { + /* conditional prevents disabled images from flickering multi-select mode */ + if (layer.editing.enabled()) { + L.DomUtil.toggleClass(e.target, 'collected'); + // re-order layers by _leaflet_id to match their display order in UI + // add new layer to right position and avoid repitition + var newArr = arr.every(function (each) { + return each._leaflet_id !== layer._leaflet_id; + }); + if (newArr) { + arr.push(layer); + } else { + arr.splice(arr.indexOf(layer), 1); + } + } + } + if (this.anyCollected()) { + layer.deselect(); + } else { + this.editing._removeToolbar(); + } + }, + _deselectOthers: function _deselectOthers(e) { + var _this2 = this; + if (!this.editable) { + return; + } + this.eachLayer(function (layer) { + if (layer.getElement() !== e.target) { + layer.deselect(); + } else { + _this2._toggleCollected(e, layer); + } + }); + if (e) { + L.DomEvent.stopPropagation(e); + } + }, + _dragStartMultiple: function _dragStartMultiple(e) { + var overlay = e.target; + var map = this._map; + var i; + if (!this.isCollected(overlay)) { + return; + } + this.eachLayer(function (layer) { + layer._dragStartPoints = {}; + layer.deselect(); + for (i = 0; i < 4; i++) { + var c = layer.getCorner(i); + layer._dragStartPoints[i] = map.latLngToLayerPoint(c); + } + }); + }, + _dragMultiple: function _dragMultiple(e) { + var overlay = e.target; + var map = this._map; + if (!this.isCollected(overlay)) { + return; + } + var topLeft = map.latLngToLayerPoint(overlay.getCorner(0)); + var delta = overlay._dragStartPoints[0].subtract(topLeft); + this._updateCollectionFromPoints(delta, overlay); + }, + _toRemove: function _toRemove() { + var _this3 = this; + var layerArr = this.getLayers(); + return layerArr.filter(function (layer) { + var mode = layer.editing._mode; + return _this3.isCollected(layer) && mode !== 'lock'; + }); + }, + _toMove: function _toMove(overlay) { + var _this4 = this; + var layerArr = this.getLayers(); + return layerArr.filter(function (layer) { + var mode = layer.editing._mode; + return layer !== overlay && _this4.isCollected(layer) && mode !== 'lock'; + }); + }, + _updateCollectionFromPoints: function _updateCollectionFromPoints(delta, overlay) { + var layersToMove = this._toMove(overlay); + var p = new L.Transformation(1, -delta.x, 1, -delta.y); + var i; + layersToMove.forEach(function (layer) { + var movedPoints = {}; + for (i = 0; i < 4; i++) { + movedPoints[i] = p.transform(layer._dragStartPoints[i]); + } + layer.setCornersFromPoints(movedPoints); + }); + }, + _getAvgCmPerPixel: function _getAvgCmPerPixel(imgs) { + var reduce = imgs.reduce(function (sum, img) { + return sum + img.cm_per_pixel; + }, 0); + return reduce / imgs.length; + }, + // connects to JSON file and fetches JSON data therein from remote source + fetchRemoteJson: function fetchRemoteJson(url) { + return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var index, imgCollectionProps, response; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + index = 0; + imgCollectionProps = []; + _context.prev = 2; + _context.next = 5; + return axios.get(url); + case 5: + response = _context.sent; + if (!response.data.hasOwnProperty('avg_cm_per_pixel')) { + _context.next = 14; + break; + } + if (!(response.data.collection.length > 1)) { + _context.next = 10; + break; + } + response.data.collection.forEach(function (data) { + imgCollectionProps[index] = data; + index++; + }); + return _context.abrupt("return", { + avg_cm_per_pixel: response.data.avg_cm_per_pixel, + imgCollectionProps: imgCollectionProps + }); + case 10: + imgCollectionProps[index] = response.data.collection; + return _context.abrupt("return", { + avg_cm_per_pixel: response.data.avg_cm_per_pixel, + imgCollectionProps: imgCollectionProps + }); + case 14: + if (!(response.data.length > 1)) { + _context.next = 17; + break; + } + response.data.forEach(function (data) { + imgCollectionProps[index] = data; + index++; + }); + return _context.abrupt("return", { + imgCollectionProps: imgCollectionProps + }); + case 17: + imgCollectionProps[index] = response.data; + return _context.abrupt("return", { + imgCollectionProps: imgCollectionProps + }); + case 19: + _context.next = 24; + break; + case 21: + _context.prev = 21; + _context.t0 = _context["catch"](2); + console.log('err', _context.t0); + case 24: + case "end": + return _context.stop(); + } + } + }, _callee, null, [[2, 21]]); + }))(); + }, + // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json + recreateImagesFromJsonUrl: function recreateImagesFromJsonUrl(url) { + var _this5 = this; + return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { + var imageCollectionObj; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + imageCollectionObj = {}; + if (!url) { + _context2.next = 6; + break; + } + _context2.next = 4; + return _this5.fetchRemoteJson(url); + case 4: + imageCollectionObj = _context2.sent; + return _context2.abrupt("return", imageCollectionObj); + case 6: + ; + return _context2.abrupt("return", imageCollectionObj); + case 8: + case "end": + return _context2.stop(); + } + } + }, _callee2); + }))(); + }, + generateExportJson: function generateExportJson() { + var allImages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + var json = {}; + json.images = []; + this.eachLayer(function (layer) { + if (allImages || this.isCollected(layer)) { + var sections = layer._image.src.split('/'); + var filename = sections[sections.length - 1]; + var zc = layer.getCorners(); + var corners = [{ + lat: zc[0].lat, + lon: zc[0].lng || zc[0].lon + }, { + lat: zc[1].lat, + lon: zc[1].lng || zc[1].lon + }, { + lat: zc[3].lat, + lon: zc[3].lng || zc[3].lon + }, { + lat: zc[2].lat, + lon: zc[2].lng || zc[2].lon + }]; + json.images.push({ + id: layer._leaflet_id, + src: layer._image.src, + width: layer._image.width, + height: layer._image.height, + tooltipText: layer.getTooltipText(), + image_file_name: filename, + nodes: corners, + cm_per_pixel: L.ImageUtil.getCmPerPixel(layer) + }); + } + }, this); + json.images = json.images.reverse(); + json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images); + return json; + } +}); +L.distortableCollection = function (id, options) { + return new L.DistortableCollection(id, options); +}; + +/***/ }), + +/***/ "./src/DistortableImageOverlay.js": +/*!****************************************!*\ + !*** ./src/DistortableImageOverlay.js ***! + \****************************************/ +/***/ (function() { + +L.DistortableImageOverlay = L.ImageOverlay.extend({ + options: { + height: 200, + crossOrigin: true, + // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding) + edgeMinWidth: 50, + editable: true, + mode: 'distort', + selected: false, + interactive: true, + tooltipText: '' + }, + initialize: function initialize(url, options) { + L.setOptions(this, options); + L.Utils.initTranslation.call(this); + this.edgeMinWidth = this.options.edgeMinWidth; + this.editable = this.options.editable; + this._selected = this.options.selected; + this._url = url; + this.rotation = {}; + this.interactive = this.options.interactive; + this.tooltipText = this.options.tooltipText; + }, + onAdd: function onAdd(map) { + var _this = this; + this._map = map; + if (!this.getElement()) { + this._initImage(); + } + map.on('viewreset', this._reset, this); + if (this.options.corners) { + this._corners = this.options.corners; + if (map.options.zoomAnimation && L.Browser.any3d) { + map.on('zoomanim', this._animateZoom, this); + } + } + + // Have to wait for the image to load because need to access its w/h + L.DomEvent.on(this.getElement(), 'load', function () { + _this.getPane().appendChild(_this.getElement()); + _this._initImageDimensions(); + if (_this.options.rotation) { + var units = _this.options.rotation.deg >= 0 ? 'deg' : 'rad'; + _this.setAngle(_this.options.rotation[units], units); + } else { + _this.rotation = { + deg: 0, + rad: 0 + }; + _this._reset(); + } + + /* Initialize default corners if not already set */ + if (!_this._corners) { + if (map.options.zoomAnimation && L.Browser.any3d) { + map.on('zoomanim', _this._animateZoom, _this); + } + } + + /** if there is a featureGroup, only its editable option matters */ + var eventParents = _this._eventParents; + if (eventParents) { + _this.eP = eventParents[Object.keys(eventParents)[0]]; + if (_this.eP.editable) { + _this.editing.enable(); + } + } else { + if (_this.editable) { + _this.editing.enable(); + } + _this.eP = null; + } + }); + L.DomEvent.on(this.getElement(), 'click', this.select, this); + L.DomEvent.on(map, { + singleclickon: this._singleClickListeners, + singleclickoff: this._resetClickListeners, + singleclick: this._singleClick + }, this); + + /** + * custom events fired from DoubleClickLabels.js. Used to differentiate + * single / dblclick to not deselect images on map dblclick. + */ + if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { + L.DomEvent.on(map, 'click', this.deselect, this); + } + this.fire('add'); + L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this); + L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); + }, + onRemove: function onRemove(map) { + L.DomEvent.off(this.getElement(), 'click', this.select, this); + L.DomEvent.off(map, { + singleclickon: this._singleClickListeners, + singleclickoff: this._resetClickListeners, + singleclick: this._singleClick + }, this); + L.DomEvent.off(map, 'click', this.deselect, this); + if (this.editing) { + this.editing.disable(); + } + this.fire('remove'); + L.ImageOverlay.prototype.onRemove.call(this, map); + L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this); + L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this); + }, + _initImageDimensions: function _initImageDimensions() { + var map = this._map; + var originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width'); + var originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height'); + var aspectRatio = parseInt(originalImageWidth) / parseInt(originalImageHeight); + var imageHeight = this.options.height; + var imageWidth = parseInt(aspectRatio * imageHeight); + var center = map.project(map.getCenter()); + var offset = L.point(imageWidth, imageHeight).divideBy(2); + if (this.options.corners) { + this._corners = this.options.corners; + } else { + this._corners = [map.unproject(center.subtract(offset)), map.unproject(center.add(L.point(offset.x, -offset.y))), map.unproject(center.add(L.point(-offset.x, offset.y))), map.unproject(center.add(offset))]; + } + this._initialDimensions = { + 'center': center, + 'offset': offset, + 'zoom': map.getZoom() + }; + this.setBounds(L.latLngBounds(this.getCorners())); + }, + _singleClick: function _singleClick(e) { + if (e.type === 'singleclick') { + this.deselect(); + } else { + return; + } + }, + _singleClickListeners: function _singleClickListeners() { + var map = this._map; + L.DomEvent.off(map, 'click', this.deselect, this); + L.DomEvent.on(map, 'singleclick', this.deselect, this); + }, + _resetClickListeners: function _resetClickListeners() { + var map = this._map; + L.DomEvent.on(map, 'click', this.deselect, this); + L.DomEvent.off(map, 'singleclick', this.deselect, this); + }, + isSelected: function isSelected() { + return this._selected; + }, + deselect: function deselect() { + var edit = this.editing; + if (!edit.enabled()) { + return; + } + edit._removeToolbar(); + edit._hideMarkers(); + this._selected = false; + this.fire('deselect'); + return this; + }, + select: function select(e) { + var edit = this.editing; + var eP = this.eP; + if (!edit.enabled()) { + return; + } + if (e) { + L.DomEvent.stopPropagation(e); + } + + // this ensures deselection of all other images, allowing us to keep collection group optional + this._programmaticGrouping(); + this._selected = true; + edit._addToolbar(); + edit._showMarkers(); + this.fire('select'); + + // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it + if (eP && eP.anyCollected()) { + this.deselect(); + return; + } + return this; + }, + _programmaticGrouping: function _programmaticGrouping() { + this._map.eachLayer(function (layer) { + if (layer instanceof L.DistortableImageOverlay) { + layer.deselect(); + } + }); + }, + setCorner: function setCorner(corner, latlng) { + var edit = this.editing; + this._corners[corner] = latlng; + this.setBounds(L.latLngBounds(this.getCorners())); + this.fire('update'); + if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { + edit._updateToolbarPos(); + } + this.edited = true; + return this; + }, + _cornerExceedsMapLats: function _cornerExceedsMapLats(zoom, corner, map) { + if (map.options.crs.Simple == L.CRS.Simple) { + return false; + } else { + var exceedsTop; + var exceedsBottom; + if (zoom === 0) { + exceedsTop = map.project(corner).y < 2; + exceedsBottom = map.project(corner).y >= 255; + } else { + exceedsTop = map.project(corner).y / zoom < 2; + exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255; + } + return exceedsTop || exceedsBottom; + } + }, + activateTooltip: function activateTooltip() { + if (!this._selected) { + this.bindTooltip(this.tooltipText, { + direction: 'top' + }).openTooltip(); + } + }, + closeToolTip: function closeToolTip() { + this.closeTooltip(); + }, + deactivateTooltip: function deactivateTooltip() { + this.unbindTooltip(); + }, + getTooltipText: function getTooltipText() { + return this.tooltipText; + }, + setCorners: function setCorners(latlngObj) { + var map = this._map; + var zoom = map.getZoom(); + var edit = this.editing; + var i = 0; + + // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402 + for (var k in latlngObj) { + if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) { + // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate + this.setBounds(L.latLngBounds(this.getCorners())); + this.fire('update'); + return; + } + } + for (var _k in latlngObj) { + this._corners[i] = latlngObj[_k]; + i += 1; + } + this.setBounds(L.latLngBounds(this.getCorners())); + this.fire('update'); + if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { + edit._updateToolbarPos(); + } + this.edited = true; + return this; + }, + setCornersFromPoints: function setCornersFromPoints(pointsObj) { + var map = this._map; + var zoom = map.getZoom(); + var edit = this.editing; + var i = 0; + for (var k in pointsObj) { + var corner = map.layerPointToLatLng(pointsObj[k]); + if (this._cornerExceedsMapLats(zoom, corner, map)) { + // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate + this.setBounds(L.latLngBounds(this.getCorners())); + this.fire('update'); + return; + } + } + for (var _k2 in pointsObj) { + this._corners[i] = map.layerPointToLatLng(pointsObj[_k2]); + i += 1; + } + this.setBounds(L.latLngBounds(this.getCorners())); + this.fire('update'); + if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) { + edit._updateToolbarPos(); + } + this.edited = true; + return this; + }, + scaleBy: function scaleBy(scale) { + var map = this._map; + var center = map.project(this.getCenter()); + var i; + var p; + var scaledCorners = {}; + if (scale === 0) { + return; + } + for (i = 0; i < 4; i++) { + p = map.project(this.getCorner(i)).subtract(center).multiplyBy(scale).add(center); + scaledCorners[i] = map.unproject(p); + } + this.setCorners(scaledCorners); + return this; + }, + getAngle: function getAngle() { + var unit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'deg'; + var matrix = this.getElement().style[L.DomUtil.TRANSFORM].split('matrix3d')[1].slice(1, -1).split(','); + var row0x = matrix[0]; + var row0y = matrix[1]; + var row1x = matrix[4]; + var row1y = matrix[5]; + var determinant = row0x * row1y - row0y * row1x; + var angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad'); + if (determinant < 0) { + angle += angle < 0 ? Math.PI : -Math.PI; + } + if (angle < 0) { + angle = 2 * Math.PI + angle; + } + return unit === 'deg' ? Math.round(L.TrigUtil.radiansToDegrees(angle)) : L.Util.formatNum(angle, 2); + }, + setAngle: function setAngle(angle) { + var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; + var currentAngle = this.getAngle(unit); + var angleToRotateBy = angle - currentAngle; + this.rotateBy(angleToRotateBy, unit); + return this; + }, + rotateBy: function rotateBy(angle) { + var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'deg'; + var map = this._map; + var center = map.project(this.getCenter()); + var corners = {}; + var i; + var p; + var q; + if (unit === 'deg') { + angle = L.TrigUtil.degreesToRadians(angle); + } + for (i = 0; i < 4; i++) { + p = map.project(this.getCorner(i)).subtract(center); + q = L.point(Math.cos(angle) * p.x - Math.sin(angle) * p.y, Math.sin(angle) * p.x + Math.cos(angle) * p.y); + corners[i] = map.unproject(q.add(center)); + } + this.setCorners(corners); + return this; + }, + dragBy: function dragBy(formerPoint, newPoint) { + var map = this._map; + var i; + var p; + var transCorners = {}; + var delta = map.project(formerPoint).subtract(map.project(newPoint)); + for (i = 0; i < 4; i++) { + p = map.project(this.getCorner(i)).subtract(delta); + transCorners[i] = map.unproject(p); + } + this.setCorners(transCorners); + }, + restore: function restore() { + var map = this._map; + var center = this._initialDimensions.center; + var offset = this._initialDimensions.offset; + var zoom = this._initialDimensions.zoom; + var corners = [center.subtract(offset), center.add(L.point(offset.x, -offset.y)), center.add(L.point(-offset.x, offset.y)), center.add(offset)]; + for (var i = 0; i < 4; i++) { + if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) { + this.setCorner(i, map.unproject(corners[i], zoom)); + } + } + this.edited = false; + this.fire('restore'); + return this; + }, + /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */ + /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */ + _getTranslateString: function _getTranslateString(point) { + // on WebKit browsers (Chrome/Safari/iOS Safari/Android) + // using translate3d instead of translate + // makes animation smoother as it ensures HW accel is used. + // Firefox 13 doesn't care + // (same speed either way), Opera 12 doesn't support translate3d + + var is3d = L.Browser.webkit3d; + var open = 'translate' + (is3d ? '3d' : '') + '('; + var close = (is3d ? ',0' : '') + ')'; + return open + point.x + 'px,' + point.y + 'px' + close; + }, + _reset: function _reset() { + var map = this._map; + var image = this.getElement(); + var latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map); + var transformMatrix = this._calculateProjectiveTransform(latLngToLayerPoint); + var topLeft = latLngToLayerPoint(this.getCorner(0)); + var warp = L.DomUtil.getMatrixString(transformMatrix); + var translation = this._getTranslateString(topLeft); + + /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ + image._leaflet_pos = topLeft; + image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); + + /* Set origin to the upper-left corner rather than + * the center of the image, which is the default. + */ + image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0'; + this.rotation.deg = this.getAngle(); + this.rotation.rad = this.getAngle('rad'); + }, + /* + * Calculates the transform string that will be + * correct *at the end* of zooming. + * Leaflet then generates a CSS3 animation between the current transform and + * future transform which makes the transition appear smooth. + */ + _animateZoom: function _animateZoom(event) { + var map = this._map; + var image = this.getElement(); + var latLngToNewLayerPoint = function latLngToNewLayerPoint(latlng) { + return map._latLngToNewLayerPoint(latlng, event.zoom, event.center); + }; + var transformMatrix = this._calculateProjectiveTransform(latLngToNewLayerPoint); + var topLeft = latLngToNewLayerPoint(this.getCorner(0)); + var warp = L.DomUtil.getMatrixString(transformMatrix); + var translation = this._getTranslateString(topLeft); + + /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */ + image._leaflet_pos = topLeft; + image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' '); + }, + getCorners: function getCorners() { + return this._corners; + }, + getCorner: function getCorner(i) { + return this._corners[i]; + }, + // image (vertex) centroid calculation + getCenter: function getCenter() { + var map = this._map; + var reduce = this.getCorners().reduce(function (agg, corner) { + return agg.add(map.project(corner)); + }, L.point(0, 0)); + return map.unproject(reduce.divideBy(4)); + }, + _calculateProjectiveTransform: function _calculateProjectiveTransform(latLngToCartesian) { + /* Setting reasonable but made-up image defaults + * allow us to place images on the map before + * they've finished downloading. */ + var offset = latLngToCartesian(this.getCorner(0)); + var w = this.getElement().offsetWidth || 500; + var h = this.getElement().offsetHeight || 375; + var c = []; + var j; + /* Convert corners to container points (i.e. cartesian coordinates). */ + for (j = 0; j < 4; j++) { + c.push(latLngToCartesian(this.getCorner(j))._subtract(offset)); + } + + /* + * This matrix describes the action of + * the CSS transform on each corner of the image. + * It maps from the coordinate system centered + * at the upper left corner of the image + * to the region bounded by the latlngs in this._corners. + * For example: + * 0, 0, c[0].x, c[0].y + * says that the upper-left corner of the image + * maps to the first latlng in this._corners. + */ + return L.MatrixUtil.general2DProjection(0, 0, c[0].x, c[0].y, w, 0, c[1].x, c[1].y, 0, h, c[2].x, c[2].y, w, h, c[3].x, c[3].y); + } +}); +L.distortableImageOverlay = function (id, options) { + return new L.DistortableImageOverlay(id, options); +}; +L.Map.addInitHook(function () { + if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) { + L.DomUtil.addClass(this.getContainer(), 'ldi'); + } +}); + +/***/ }), + +/***/ "./src/components/DistortableImage.Keymapper.js": +/*!******************************************************!*\ + !*** ./src/components/DistortableImage.Keymapper.js ***! + \******************************************************/ +/***/ (function() { + +var _this = this; +L.DomUtil = L.DomUtil || {}; +L.DistortableImage = L.DistortableImage || {}; +L.distortableImage = L.DistortableImage; +L.DistortableImage.Keymapper = L.Handler.extend({ + options: { + position: 'topright' + }, + initialize: function initialize(map, options) { + this._map = map; + L.setOptions(this, options); + }, + addHooks: function addHooks() { + if (!this._keymapper) { + this._container = this._buildContainer(); + this._scrollWrapper = this._wrap(); + this._toggler = this._createButton(); + this._setMapper(this._container, this._scrollWrapper, this._toggler); + L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this); + L.DomEvent.disableClickPropagation(this._container); + L.DomEvent.disableScrollPropagation(this._container); + } + }, + removeHooks: function removeHooks() { + if (this._keymapper) { + L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this); + L.DomUtil.remove(this._toggler); + L.DomUtil.remove(this._scrollWrapper); + L.DomUtil.remove(this._container); + this._keymapper = false; + } + }, + _buildContainer: function _buildContainer() { + var container = L.DomUtil.create('div', 'ldi-keymapper-hide'); + container.setAttribute('id', 'ldi-keymapper'); + var divider = L.DomUtil.create('br', 'divider'); + container.appendChild(divider); + return container; + }, + _createButton: function _createButton() { + var toggler = L.DomUtil.create('a', ''); + toggler.innerHTML = L.IconUtil.create('keyboard_open'); + toggler.setAttribute('id', 'toggle-keymapper'); + toggler.setAttribute('href', '#'); + toggler.setAttribute('title', 'Show keymap'); + // Will force screen readers like VoiceOver to read this as "Show keymap - button" + toggler.setAttribute('role', 'button'); + toggler.setAttribute('aria-label', 'Show keymap'); + return toggler; + }, + _wrap: function _wrap() { + var wrap = L.DomUtil.create('div', ''); + wrap.setAttribute('id', 'keymapper-wrapper'); + wrap.style.display = 'none'; + return wrap; + }, + _setMapper: function _setMapper(container, wrap, button) { + this._keymapper = L.control({ + position: this.options.position + }); + this._keymapper.onAdd = function () { + container.appendChild(wrap); + wrap.insertAdjacentHTML('beforeend', '' + '
' + /* eslint-disable */ + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\xa0u
Stack up / down
q\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\xa0backspace
Export Image(s)
e
'); + /* eslint-enable */ + container.appendChild(button); + return container; + }; + this._keymapper.addTo(this._map); + }, + _toggleKeymapper: function _toggleKeymapper(e) { + e.preventDefault(); + this._container.className = this._container.className === 'ldi-keymapper leaflet-control' ? 'ldi-keymapper-hide leaflet-control' : 'ldi-keymapper leaflet-control'; + this._scrollWrapper.style.display = this._scrollWrapper.style.display === 'none' ? 'block' : 'none'; + this._toggler.innerHTML = this._toggler.innerHTML === 'close' ? L.IconUtil.create('keyboard_open') : 'close'; + L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap'); + L.DomUtil.toggleClass(this._toggler, 'close-icon'); + }, + _injectIconSet: function _injectIconSet() { + if (document.querySelector('#keymapper-iconset')) { + return; + } + var el = L.DomUtil.create('div', ''); + el.id = 'keymapper-iconset'; + el.setAttribute('hidden', 'hidden'); + this._iconset = new L.KeymapperIconSet().render(); + el.innerHTML = this._iconset; + document.querySelector('.leaflet-control-container').appendChild(el); + } +}); +L.DistortableImage.Keymapper.addInitHook(function () { + L.DistortableImage.Keymapper.prototype._n = L.DistortableImage.Keymapper.prototype._n ? L.DistortableImage.Keymapper.prototype._n + 1 : 1; + // dont enable keymapper for mobile + if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) { + _this.enable(); + _this._injectIconSet(); + } +}); +L.distortableImage.keymapper = function (map, options) { + return new L.DistortableImage.Keymapper(map, options); +}; + +/***/ }), + +/***/ "./src/edit/DistortableCollection.Edit.js": +/*!************************************************!*\ + !*** ./src/edit/DistortableCollection.Edit.js ***! + \************************************************/ +/***/ (function() { + +L.DistortableImage = L.DistortableImage || {}; + +// this class holds the keybindings and toolbar API for an image collection instance +L.DistortableCollection.Edit = L.Handler.extend({ + options: { + keymap: L.distortableImage.group_action_map + }, + initialize: function initialize(group, options) { + this._group = group; + this._exportOpts = group.options.exportOpts; + L.setOptions(this, options); + L.distortableImage.group_action_map.Escape = '_decollectAll'; + }, + addHooks: function addHooks() { + var group = this._group; + var map = group._map; + this.editActions = this.options.actions; + this.runExporter = L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') || this.startExport, this); + L.DomEvent.on(document, 'keydown', this._onKeyDown, this); + if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { + L.DomEvent.on(map, 'click', this._decollectAll, this); + } + L.DomEvent.on(map, { + singleclickon: this._singleClickListeners, + singleclickoff: this._resetClickListeners, + singleclick: this._singleClick, + boxcollectend: this._addCollections + }, this); + this._group.editable = true; + this._group.eachLayer(function (layer) { + return layer.editing.enable(); + }); + }, + removeHooks: function removeHooks() { + var group = this._group; + var map = group._map; + L.DomEvent.off(document, 'keydown', this._onKeyDown, this); + if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) { + L.DomEvent.off(map, 'click', this._decollectAll, this); + } + L.DomEvent.off(map, { + singleclickon: this._singleClickListeners, + singleclickoff: this._resetClickListeners, + singleclick: this._singleClick, + boxcollectend: this._addCollections + }, this); + this._decollectAll(); + this._group.editable = false; + this._group.eachLayer(function (layer) { + return layer.editing.disable(); + }); + }, + enable: function enable() { + this._enabled = true; + this.addHooks(); + return this; + }, + disable: function disable() { + this._enabled = false; + this.removeHooks(); + return this; + }, + _onKeyDown: function _onKeyDown(e) { + var keymap = this.options.keymap; + var handlerName = keymap[e.key]; + if (!this[handlerName]) { + return; + } + if (this._group.anyCollected()) { + this[handlerName].call(this); + } + }, + _singleClick: function _singleClick(e) { + if (e.type === 'singleclick') { + this._decollectAll(e); + } else { + return; + } + }, + _singleClickListeners: function _singleClickListeners() { + var map = this._group._map; + L.DomEvent.off(map, 'click', this._decollectAll, this); + L.DomEvent.on(map, 'singleclick', this._decollectAll, this); + }, + _resetClickListeners: function _resetClickListeners() { + var map = this._group._map; + L.DomEvent.on(map, 'click', this._decollectAll, this); + L.DomEvent.off(map, 'singleclick', this._decollectAll, this); + }, + _decollectAll: function _decollectAll(e) { + var oe; + if (e) { + oe = e.originalEvent; + } + /** + * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete + * also prevents deselection following a click on a disabled img by differentiating it from the map + */ + if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) { + return; + } + this._group.eachLayer(function (layer) { + L.DomUtil.removeClass(layer.getElement(), 'collected'); + layer.deselect(); + }); + this._removeToolbar(); + if (e) { + L.DomEvent.stopPropagation(e); + } + }, + _unlockGroup: function _unlockGroup() { + var _this = this; + if (!this.hasTool(L.UnlockAction)) { + return; + } + this._group.eachLayer(function (layer) { + if (_this._group.isCollected(layer)) { + var edit = layer.editing; + edit._unlock(); + // unlock updates the layer's handles; deselect to ensure they're hidden + layer.deselect(); + } + }); + }, + _lockGroup: function _lockGroup() { + var _this2 = this; + if (!this.hasTool(L.LockAction)) { + return; + } + this._group.eachLayer(function (layer) { + if (_this2._group.isCollected(layer)) { + var edit = layer.editing; + edit._lock(); + // map.addLayer also deselects the image, so we reselect here + L.DomUtil.addClass(layer.getElement(), 'collected'); + } + }); + }, + _addCollections: function _addCollections(e) { + var _this3 = this; + var box = e.boxCollectBounds; + var map = this._group._map; + this._group.eachLayer(function (layer) { + var edit = layer.editing; + if (layer.isSelected()) { + layer.deselect(); + } + var zoom = map.getZoom(); + var center = map.getCenter(); + var imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1)); + imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center); + if (box.intersects(imgBounds) && edit.enabled()) { + if (!_this3.toolbar) { + _this3._addToolbar(); + } + L.DomUtil.addClass(layer.getElement(), 'collected'); + } + }); + }, + _removeGroup: function _removeGroup(e) { + var _this4 = this; + if (!this.hasTool(L.DeleteAction)) { + return; + } + var layersToRemove = this._group._toRemove(); + var n = layersToRemove.length; + if (n === 0) { + return; + } + var choice = L.DomUtil.confirmDeletes(n); + if (choice) { + layersToRemove.forEach(function (layer) { + _this4._group.removeLayer(layer); + }); + if (!this._group.anyCollected()) { + this._removeToolbar(); + } + } + if (e) { + L.DomEvent.stopPropagation(e); + } + }, + cancelExport: function cancelExport() { + if (!this.customCollection) { + this._exportOpts.collection = undefined; + } + clearInterval(this.updateInterval); + }, + _addToolbar: function _addToolbar() { + var group = this._group; + var map = group._map; + if (group.options.suppressToolbar || this.toolbar) { + return; + } + this.toolbar = L.distortableImage.controlBar({ + actions: this.editActions, + position: 'topleft' + }).addTo(map, group); + }, + _removeToolbar: function _removeToolbar() { + var map = this._group._map; + if (this.toolbar) { + map.removeLayer(this.toolbar); + this.toolbar = false; + } else { + return false; + } + }, + hasTool: function hasTool(value) { + return this.editActions.some(function (action) { + return action === value; + }); + }, + addTool: function addTool(value) { + if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { + this._removeToolbar(); + this.editActions.push(value); + this._addToolbar(); + } + return this; + }, + removeTool: function removeTool(value) { + var _this5 = this; + this.editActions.some(function (item, idx) { + if (_this5.editActions[idx] === value) { + _this5._removeToolbar(); + _this5.editActions.splice(idx, 1); + _this5._addToolbar(); + return true; + } else { + return false; + } + }); + return this; + }, + startExport: function startExport() { + var _this6 = this; + if (!this.hasTool(L.ExportAction)) { + return; + } + return new Promise(function (resolve) { + var opts = _this6._exportOpts; + opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion + + var statusUrl; + _this6.updateInterval = null; + + // this may be overridden to update the UI to show export progress or completion + var _defaultUpdater = function _defaultUpdater(data) { + data = JSON.parse(data); + // optimization: fetch status directly from google storage: + if (data.status_url) { + if (statusUrl !== data.status_url && data.status_url.match('.json')) { + // if (data.status_url && data.status_url.substr(0,1) === "/") { + // opts.statusUrl = opts.statusUrl + data.status_url; + // } else { + statusUrl = data.status_url; + // } + } + + if (data.status === 'complete') { + clearInterval(_this6.updateInterval); + if (!_this6.customCollection) { + _this6._exportOpts.collection = undefined; + } + resolve(); + if (data.jpg !== null) { + alert('Export succeeded. ' + opts.exportUrl + data.jpg); + } + } + + // TODO: update to clearInterval when status == "failed" if we update that in this file: + // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb + console.log(data); + } + }; + + // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json; + // this may be overridden to integrate with any UI + var _defaultHandleStatusRes = function _defaultHandleStatusRes(data) { + statusUrl = opts.statusUrl + data; + // repeatedly fetch the status.json + _this6.updateInterval = setInterval(function () { + var reqOpts = { + method: 'GET' + }; + var req = new Request("".concat(statusUrl, "?").concat(Date.now()), reqOpts); + fetch(req).then(function (res) { + if (res.ok) { + return res.text(); + } + }).then(opts.updater); + }, opts.frequency); + }; + + // initiate the export + var _defaultFetchStatusUrl = function _defaultFetchStatusUrl(mergedOpts) { + var form = new FormData(); + form.append('collection', JSON.stringify(mergedOpts.collection)); + form.append('scale', mergedOpts.scale); + form.append('upload', true); + var reqOpts = { + method: 'POST', + body: form + }; + var req = new Request(mergedOpts.exportStartUrl, reqOpts); + fetch(req).then(function (res) { + if (res.ok) { + return res.text(); + } + }).then(mergedOpts.handleStatusRes); + }; + + // If the user has passed collection property + _this6.customCollection = !!opts.collection; + if (!_this6.customCollection) { + opts.collection = _this6._group.generateExportJson().images; + } + opts.frequency = opts.frequency || 3000; + opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel ! + opts.updater = opts.updater || _defaultUpdater; + opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes; + opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl; + opts.fetchStatusUrl(opts); + }); + } +}); +L.distortableCollection.edit = function (group, options) { + return new L.DistortableCollection.Edit(group, options); +}; + +/***/ }), + +/***/ "./src/edit/DistortableImage.Edit.js": +/*!*******************************************!*\ + !*** ./src/edit/DistortableImage.Edit.js ***! + \*******************************************/ +/***/ (function() { + +L.DistortableImage = L.DistortableImage || {}; + +// holds the keybindings & toolbar API for an individual image instance +L.DistortableImage.Edit = L.Handler.extend({ + options: { + opacity: 0.5, + outline: '1px solid red', + keymap: L.distortableImage.action_map + }, + initialize: function initialize(overlay, options) { + this._overlay = overlay; + this._toggledImage = false; + this._mode = overlay.options.mode; + this._transparent = false; + this._outlined = false; + this._opacity = options.opacity; + L.setOptions(this, options); + L.distortableImage.action_map.Escape = '_deselect'; + }, + /* Run on image selection. */addHooks: function addHooks() { + var overlay = this._overlay; + this.editActions = this.options.actions; + + /* bring the selected image into view */ + overlay.bringToFront(); + this._initModes(); + this._initHandles(); + this._appendHandlesandDragable(); + if (overlay.isSelected() && !overlay.options.suppressToolbar) { + this._addToolbar(); + } + this.parentGroup = overlay.eP ? overlay.eP : false; + L.DomEvent.on(overlay.getElement(), { + dblclick: this.nextMode + }, this); + L.DomEvent.on(window, 'keydown', this._onKeyDown, this); + }, + /* Run on image deselection. */removeHooks: function removeHooks() { + var overlay = this._overlay; + var eP = this.parentGroup; + + // First, check if dragging exists - it may be off due to locking + this._disableDragging(); + if (this.toolbar) { + this._removeToolbar(); + } + for (var handle in this._handles) { + L.DomUtil.remove(handle); + } + + /** + * ensures if you disable an image while it is multi-selected + * additional deselection logic is run + */ + if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) { + L.DomUtil.removeClass(overlay.getElement(), 'collected'); + } + if (eP && !eP.anyCollected() && eP.editing.toolbar) { + eP.editing._removeToolbar(); + } + L.DomEvent.off(overlay.getElement(), { + dblclick: this.nextMode + }, this); + L.DomEvent.off(window, 'keydown', this._onKeyDown, this); + }, + disable: function disable() { + if (!this._enabled) { + return this; + } + this._overlay.deselect(); + this._enabled = false; + this.removeHooks(); + return this; + }, + _initModes: function _initModes() { + this._modes = {}; + // passed from L.DistortablImage.PopupBar. If the mode is one + // of the current toolbar actions, adds it to this._modes + for (var mode in L.DistortableImage.Edit.MODES) { + var action = L.DistortableImage.Edit.MODES[mode]; + if (this.editActions.indexOf(action) !== -1) { + this._modes[mode] = action; + } + } + + // sets the current mode to the 1st available one if the one selected + // during initialization is not available + if (!this._modes[this._mode]) { + this._mode = Object.keys(this._modes)[0]; + } + }, + _initHandles: function _initHandles() { + var overlay = this._overlay; + var i; + this._dragHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { + this._dragHandles.addLayer(L.dragHandle(overlay, i)); + } + this._scaleHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { + this._scaleHandles.addLayer(L.scaleHandle(overlay, i)); + } + this._distortHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { + this._distortHandles.addLayer(L.distortHandle(overlay, i)); + } + this._rotateHandles = L.layerGroup(); // individual rotate + for (i = 0; i < 4; i++) { + this._rotateHandles.addLayer(L.rotateHandle(overlay, i)); + } + + // handle includes rotate AND scale + this._freeRotateHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { + this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i)); + } + this._lockHandles = L.layerGroup(); + for (i = 0; i < 4; i++) { + this._lockHandles.addLayer(L.lockHandle(overlay, i, { + draggable: false + })); + } + this._handles = { + drag: this._dragHandles, + scale: this._scaleHandles, + distort: this._distortHandles, + rotate: this._rotateHandles, + freeRotate: this._freeRotateHandles, + lock: this._lockHandles + }; + }, + _appendHandlesandDragable: function _appendHandlesandDragable() { + var ov = this._overlay; + + // won't throw error if user adds 0 mode actions to toolbar + if (!this._mode) { + this._enableDragging(); + return; + } + this._updateHandle(); + if (!ov.isSelected() && this.currentHandle) { + this.currentHandle.eachLayer(function (handle) { + handle.setOpacity(0); + if (handle.dragging) { + handle.dragging.disable(); + } + }); + } + if (!this.isMode('lock')) { + this._enableDragging(); + } + }, + _onKeyDown: function _onKeyDown(e) { + var keymap = this.options.keymap; + var handlerName = keymap[e.key]; + var ov = this._overlay; + var eP = this.parentGroup; + if (eP && eP.anyCollected()) { + return; + } + if (this[handlerName] !== undefined && !ov.options.suppressToolbar) { + if (ov.isSelected() && this.toolbar) { + this[handlerName].call(this); + } + } + }, + replaceTool: function replaceTool(old, next) { + var _this = this; + if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) { + return this; + } + this.editActions.some(function (item, idx) { + if (item === old) { + _this._removeToolbar(); + _this.editActions[idx] = next; + _this._addToolbar(); + for (var mode in L.DistortableImage.Edit.MODES) { + if (L.DistortableImage.Edit.MODES[mode] === old) { + delete _this._modes[mode]; + _this._nextOrNone(mode); + } else if (L.DistortableImage.Edit.MODES[mode] === next) { + _this._modes[mode] = next; + } + } + return true; + } + }); + return this; + }, + addTool: function addTool(value) { + if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) { + this._removeToolbar(); + this.editActions.push(value); + this._addToolbar(); + for (var mode in L.DistortableImage.Edit.MODES) { + if (L.DistortableImage.Edit.MODES[mode] === value) { + this._modes[mode] = value; + } + } + if (!this._overlay.isSelected()) { + this._removeToolbar(); + } + } + return this; + }, + hasTool: function hasTool(value) { + return this.editActions.some(function (action) { + return action === value; + }); + }, + removeTool: function removeTool(value) { + var _this2 = this; + this.editActions.some(function (item, idx) { + if (item === value) { + _this2._removeToolbar(); + _this2.editActions.splice(idx, 1); + _this2._addToolbar(); + for (var mode in L.DistortableImage.Edit.MODES) { + if (L.DistortableImage.Edit.MODES[mode] === value) { + delete _this2._modes[mode]; + _this2._nextOrNone(mode); + } + } + return true; + } + }); + if (!this._overlay.isSelected()) { + this._removeToolbar(); + } + return this; + }, + // set the mode to the next mode or if that was the last one set mode to '' + _nextOrNone: function _nextOrNone(mode) { + if (this.isMode(mode)) { + if (Object.keys(this.getModes()).length >= 1) { + this.nextMode(); + } else { + if (mode === 'lock') { + this._enableDragging(); + } + this._mode = ''; + this._updateHandle(); + } + } + }, + _removeToolbar: function _removeToolbar() { + var ov = this._overlay; + var map = ov._map; + if (this.toolbar) { + map.removeLayer(this.toolbar); + this.toolbar = false; + } + }, + _enableDragging: function _enableDragging() { + var _this3 = this; + var overlay = this._overlay; + var map = overlay._map; + this.dragging = new L.Draggable(overlay.getElement()); + this.dragging.enable(); + + /* Hide toolbars and markers while dragging; click will re-show it */ + this.dragging.on('dragstart', function () { + overlay.fire('dragstart'); + _this3._removeToolbar(); + }); + + /* + * Adjust default behavior of L.Draggable, which overwrites the CSS3 + * distort transformations that we set when it calls L.DomUtil.setPosition. + */ + this.dragging._updatePosition = function () { + var topLeft = overlay.getCorner(0); + var delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft)); + var currentPoint; + var corners = {}; + var i; + this.fire('predrag'); + for (i = 0; i < 4; i++) { + currentPoint = map.latLngToLayerPoint(overlay.getCorner(i)); + corners[i] = map.layerPointToLatLng(currentPoint.add(delta)); + } + overlay.setCorners(corners); + overlay.fire('drag'); + this.fire('drag'); + }; + this.dragging.on('dragend', function () { + overlay.fire('dragend'); + }); + }, + _disableDragging: function _disableDragging() { + if (this.dragging) { + this.dragging.disable(); + delete this.dragging; + } + }, + _dragMode: function _dragMode() { + this.setMode('drag'); + }, + _scaleMode: function _scaleMode() { + this.setMode('scale'); + }, + _distortMode: function _distortMode() { + this.setMode('distort'); + }, + _rotateMode: function _rotateMode() { + this.setMode('rotate'); + }, + _freeRotateMode: function _freeRotateMode() { + this.setMode('freeRotate'); + }, + _toggleLockMode: function _toggleLockMode() { + if (this.isMode('lock')) { + this._unlock(); + } else { + this._lock(); + } + }, + _toggleOpacity: function _toggleOpacity() { + var image = this._overlay.getElement(); + if (!this.hasTool(L.OpacityAction)) { + return; + } + this._transparent = !this._transparent; + var opacity = this._transparent ? this.options.opacity : 1; + L.DomUtil.setOpacity(image, opacity); + image.setAttribute('opacity', opacity); + this._refresh(); + }, + _setOpacities: function _setOpacities(o) { + var image = this._overlay.getElement(); + this._opacity = o; + if (!this.hasTool(L.OpacitiesAction)) { + return; + } + this._opacity < 1 ? this._transparent = true : this._transparent = false; + L.DomUtil.setOpacity(image, this._opacity); + image.setAttribute('opacity', this._opacity); + this._refresh(); + }, + _toggleBorder: function _toggleBorder() { + var image = this._overlay.getElement(); + if (!this.hasTool(L.BorderAction)) { + return; + } + this._outlined = !this._outlined; + var outline = this._outlined ? this.options.outline : 'none'; + image.style.outline = outline; + this._refresh(); + }, + // compare this to using overlay zIndex + _toggleOrder: function _toggleOrder() { + if (this._toggledImage) { + this._stackUp(); + } else { + this._stackDown(); + } + }, + _removeOverlay: function _removeOverlay() { + var ov = this._overlay; + var eP = this.parentGroup; + if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { + return; + } + var choice = L.DomUtil.confirmDelete(); + if (!choice) { + return; + } + this._removeToolbar(); + if (eP) { + eP.removeLayer(ov); + } else { + ov._map.removeLayer(ov); + } + }, + // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82 + _getExport: function _getExport() { + var overlay = this._overlay; + var map = overlay._map; + var img = overlay.getElement(); + if (!this.hasTool(L.ExportAction)) { + return; + } + + // make a new image + var downloadable = new Image(); + downloadable.id = downloadable.id || 'tempId12345'; + document.body.appendChild(downloadable); + downloadable.onload = function onLoadDownloadableImage() { + var height = downloadable.height; + var width = downloadable.width; + var nw = map.latLngToLayerPoint(overlay.getCorner(0)); + var ne = map.latLngToLayerPoint(overlay.getCorner(1)); + var sw = map.latLngToLayerPoint(overlay.getCorner(2)); + var se = map.latLngToLayerPoint(overlay.getCorner(3)); + + // I think this is to move the image to the upper left corner, + // eslint-disable-next-line max-len + // jywarren: i think we may need these or the image goes off the edge of the canvas + // jywarren: but these seem to break the distortion math... + + // jywarren: i think it should be rejiggered so it + // finds the most negative values of x and y and then + // adds those to all coordinates + + // nw.x -= nw.x; + // ne.x -= nw.x; + // se.x -= nw.x; + // sw.x -= nw.x; + + // nw.y -= nw.y; + // ne.y -= nw.y; + // se.y -= nw.y; + // sw.y -= nw.y; + + // run once warping is complete + downloadable.onload = function () { + L.DomUtil.remove(downloadable); + }; + if (window && window.hasOwnProperty('warpWebGl')) { + warpWebGl(downloadable.id, [0, 0, width, 0, width, height, 0, height], [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y], true // trigger download + ); + } + }; + + downloadable.src = overlay.options.fullResolutionSrc || img.src; + }, + _stackUp: function _stackUp() { + var t = this._toggledImage; + if (!t || !this.hasTool(L.StackAction)) { + return; + } + this._toggledImage = false; + this._overlay.bringToFront(); + this._refresh(); + }, + _stackDown: function _stackDown() { + var t = this._toggledImage; + if (t || !this.hasTool(L.StackAction)) { + return; + } + this._toggledImage = true; + this._overlay.bringToBack(); + this._refresh(); + }, + _unlock: function _unlock() { + var ov = this._overlay; + var map = ov._map; + var eP = this.parentGroup; + if (!this.isMode('lock')) { + return; + } + if (eP && !eP.isCollected(ov) || !eP) { + if (!this.hasTool(L.LockAction)) { + return; + } + } + if (this.currentHandle) { + map.removeLayer(this.currentHandle); + } + if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) { + this._mode = ''; + this.currentHandle = ''; + } else { + this._mode = ov.options.mode; + } + this._updateHandle(); + this._enableDragging(); + this._refresh(); + }, + _lock: function _lock() { + var ov = this._overlay; + var map = ov._map; + var eP = this.parentGroup; + if (this.isMode('lock')) { + return; + } + if (eP && !eP.isCollected(ov) || !eP) { + if (!this.hasTool(L.LockAction)) { + return; + } + } + if (this.currentHandle) { + map.removeLayer(this.currentHandle); + } + this._mode = 'lock'; + this._updateHandle(); + this._disableDragging(); + this._refresh(); + }, + _deselect: function _deselect() { + this._overlay.deselect(); + }, + _showMarkers: function _showMarkers(e) { + var eP = this.parentGroup; + if (!this.currentHandle) { + return; + } + // only markers we want in collect interface for now is lock + if (!this.isMode('lock') && eP && eP.anyCollected()) { + return; + } + this.currentHandle.eachLayer(function (handle) { + handle.setOpacity(1); + if (handle.dragging) { + handle.dragging.enable(); + } + L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive'); + }); + }, + _hideMarkers: function _hideMarkers() { + var ov = this._overlay; + var eP = this.parentGroup; + + // workaround for race condition w/ feature group + if (!this._handles) { + this._initHandles(); + } + if (!this.currentHandle) { + return; + } + if (this.isMode('lock') && eP && eP.isCollected(ov)) { + return; + } + this.currentHandle.eachLayer(function (handle) { + handle.setOpacity(0); + if (handle.dragging) { + handle.dragging.disable(); + } + L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive'); + }); + }, + _updateHandle: function _updateHandle() { + var ov = this._overlay; + var map = ov._map; + var mode = this.getMode(); + if (this.currentHandle) { + map.removeLayer(this.currentHandle); + } + this.currentHandle = mode === '' ? '' : this._handles[mode]; + if (this.currentHandle !== '') { + map.addLayer(this.currentHandle); + } + }, + _addToolbar: function _addToolbar() { + var ov = this._overlay; + var eP = this.parentGroup; + var map = ov._map; + // Find the topmost point on the image. + var corners = ov.getCorners(); + var maxLat = -Infinity; + if (eP && eP.anyCollected()) { + eP.editing._addToolbar(); + return; + } + if (ov.options.suppressToolbar || this.toolbar) { + return; + } + for (var i = 0; i < corners.length; i++) { + if (corners[i].lat > maxLat) { + maxLat = corners[i].lat; + } + } + + // Longitude is based on the centroid of the image. + var raisedPoint = ov.getCenter(); + raisedPoint.lat = maxLat; + this.toolbar = L.distortableImage.popupBar(raisedPoint, { + actions: this.editActions + }).addTo(map, ov); + ov.fire('toolbar:created'); + }, + _refresh: function _refresh() { + if (this.toolbar) { + this._removeToolbar(); + } + this._addToolbar(); + }, + _updateToolbarPos: function _updateToolbarPos() { + var overlay = this._overlay; + // Find the topmost point on the image. + var corners = overlay.getCorners(); + var toolbar = this.toolbar; + var maxLat = -Infinity; + if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) { + for (var i = 0; i < corners.length; i++) { + if (corners[i].lat > maxLat) { + maxLat = corners[i].lat; + } + } + + // Longitude is based on the centroid of the image. + var raisedPoint = overlay.getCenter(); + raisedPoint.lat = maxLat; + if (!overlay.options.suppressToolbar) { + this.toolbar.setLatLng(raisedPoint); + } + } + }, + hasMode: function hasMode(mode) { + return !!this._modes[mode]; + }, + getMode: function getMode() { + if (!this.enabled()) { + return; + } + return this._mode; + }, + getModes: function getModes() { + return this._modes; + }, + isMode: function isMode(mode) { + if (!this.enabled()) { + return false; + } + return this._mode === mode; + }, + setMode: function setMode(newMode) { + var ov = this._overlay; + var eP = this.parentGroup; + var mode = this.getMode(); + if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) { + return; + } + if (this.toolbar) { + this.toolbar.clickTool(newMode); + } + if (this.isMode('lock') && !this.dragging) { + this._enableDragging(); + } + this._mode = newMode; + if (this.isMode('lock')) { + this._disableDragging(); + } + this._updateHandle(); + this._refresh(); + if (eP && eP.isCollected(ov)) { + ov.deselect(); + } + return this; + }, + /** + * need to attach a stop to img dblclick or it will propagate to + * the map and fire the handler that shows map location labels on map dblclick. + */ + nextMode: function nextMode(e) { + var mode = this.getMode(); + var eP = this.parentGroup; + var modesArray = Object.keys(this.getModes()); + var idx = modesArray.indexOf(mode); + var nextIdx = (idx + 1) % modesArray.length; + var newMode = modesArray[nextIdx]; + if (e) { + if (eP && eP.anyCollected()) { + return; + } + L.DomEvent.stop(e); + } + return this.setMode(newMode); + } +}); +L.distortableImage.edit = function (overlay, options) { + return new L.DistortableImage.Edit(overlay, options); +}; + +/***/ }), + +/***/ "./src/edit/actions/BorderAction.js": +/*!******************************************!*\ + !*** ./src/edit/actions/BorderAction.js ***! + \******************************************/ +/***/ (function() { + +L.BorderAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + var mode = edit._mode; + var use; + var tooltip; + if (edit._outlined) { + use = 'border_outer'; + tooltip = overlay.options.translation.removeBorder; + } else { + use = 'border_clear'; + tooltip = overlay.options.translation.addBorder; + } + options = options || {}; + options.toolbarIcon = { + svg: true, + html: use, + tooltip: tooltip, + className: mode === 'lock' ? 'disabled' : '' + }; + + // conditional for disabling keybindings for this action when the image is locked. + L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer'); + L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border'); + edit._toggleBorder(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/DeleteAction.js": +/*!******************************************!*\ + !*** ./src/edit/actions/DeleteAction.js ***! + \******************************************/ +/***/ (function() { + +L.DeleteAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + var use = 'delete_forever'; + var tooltip; + /** + * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only + * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods. + */ + if (edit instanceof L.DistortableImage.Edit) { + tooltip = overlay.options.translation.deleteImage; + // backspace windows / delete mac + L.DistortableImage.action_map.Backspace = edit._mode === 'lock' ? '' : '_removeOverlay'; + } else { + tooltip = overlay.options.translation.deleteImages; + L.DistortableImage.group_action_map.Backspace = edit._mode === 'lock' ? '' : '_removeGroup'; + } + options = options || {}; + options.toolbarIcon = { + svg: true, + html: use, + tooltip: tooltip, + className: edit._mode === 'lock' ? 'disabled' : '' + }; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + if (edit instanceof L.DistortableImage.Edit) { + edit._removeOverlay(); + } else { + edit._removeGroup(); + } + } +}); + +/***/ }), + +/***/ "./src/edit/actions/DistortAction.js": +/*!*******************************************!*\ + !*** ./src/edit/actions/DistortAction.js ***! + \*******************************************/ +/***/ (function() { + +L.DistortAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'distort', + tooltip: overlay.options.translation.distortImage, + className: 'distort' + }; + L.DistortableImage.action_map.d = '_distortMode'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + edit._distortMode(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/DragAction.js": +/*!****************************************!*\ + !*** ./src/edit/actions/DragAction.js ***! + \****************************************/ +/***/ (function() { + +L.DragAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'drag', + tooltip: overlay.options.translation.dragImage, + className: 'drag' + }; + L.DistortableImage.action_map.D = '_dragMode'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + edit._dragMode(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/EditAction.js": +/*!****************************************!*\ + !*** ./src/edit/actions/EditAction.js ***! + \****************************************/ +/***/ (function() { + +L.DistortableImage = L.DistortableImage || {}; +L.distortableImage = L.DistortableImage; +L.DistortableImage.action_map = {}; +L.EditAction = L.Toolbar2.Action.extend({ + options: { + toolbarIcon: { + svg: false, + html: '', + className: '', + tooltip: '' + } + }, + initialize: function initialize(map, overlay, options) { + this._overlay = overlay; + this._map = map; + L.setOptions(this, options); + L.Toolbar2.Action.prototype.initialize.call(this, options); + this._injectIconSet(); + }, + _createIcon: function _createIcon(toolbar, container, args) { + var _this = this; + var iconOptions = this.options.toolbarIcon; + var className = iconOptions.className; + var edit = this._overlay.editing; + var style = this.options.toolbarIcon.style; + this.toolbar = toolbar; + this._icon = L.DomUtil.create('li', '', container); + this._link = L.DomUtil.create('a', '', this._icon); + if (iconOptions.svg) { + this._link.innerHTML = L.IconUtil.create(iconOptions.html); + } else { + this._link.innerHTML = iconOptions.html; + } + this._link.setAttribute('href', '#'); + this._link.setAttribute('title', iconOptions.tooltip); + if (style) { + this._link.setAttribute('style', style); + } + ; + this._link.setAttribute('role', 'button'); + L.DomUtil.addClass(this._link, this.constructor.baseClass); + if (className) { + L.DomUtil.addClass(this._link, className); + if (className === 'disabled') { + L.DomUtil.addClass(this._icon, className); + } + if (className === edit._mode) { + L.DomUtil.addClass(this._link, 'selected-mode'); + } else { + L.DomUtil.removeClass(this._link, 'selected-mode'); + } + } + L.DomEvent.on(this._link, 'click', this.enable, this); + L.DomEvent.on(this._overlay, 'update', function () { + var match = _this._link.innerHTML.match(/xlink:href="#restore"/); + if (match && match.length === 1) { + _this._enableAction(); + } + }); + + /* Add secondary toolbar */ + this._addSubToolbar(toolbar, this._icon, args); + }, + _injectIconSet: function _injectIconSet() { + if (document.querySelector('#iconset')) { + return; + } + var el = document.createElement('div'); + el.id = 'iconset'; + el.setAttribute('hidden', 'hidden'); + el.innerHTML = new L.ToolbarIconSet().render(); + document.querySelector('.leaflet-marker-pane').appendChild(el); + }, + _enableAction: function _enableAction() { + L.DomUtil.removeClass(this._link.parentElement, 'disabled'); + L.DomUtil.removeClass(this._link, 'disabled'); + }, + _disableAction: function _disableAction() { + L.DomUtil.addClass(this._link.parentElement, 'disabled'); + L.DomUtil.addClass(this._link, 'disabled'); + } +}); +L.editAction = function (map, overlay, options) { + return new L.EditAction(map, overlay, options); +}; + +/***/ }), + +/***/ "./src/edit/actions/ExportAction.js": +/*!******************************************!*\ + !*** ./src/edit/actions/ExportAction.js ***! + \******************************************/ +/***/ (function() { + +L.ExportAction = L.EditAction.extend({ + // This function is executed every time we select an image + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + var tooltip; + this.isExporting = false; + this.mouseLeaveSkip = true; + this.isHooksExecuted = false; + if (edit instanceof L.DistortableImage.Edit) { + L.DistortableImage.action_map.e = '_getExport'; + tooltip = overlay.options.translation.exportImage; + } else { + L.DistortableImage.group_action_map.e = 'runExporter'; + tooltip = overlay.options.translation.exportImages; + } + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'get_app', + tooltip: tooltip + }; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + if (edit instanceof L.DistortableImage.Edit) { + edit._getExport(); + return; + } + + // Make sure that addHooks is executed only once, event listeners will handle the rest + if (this.isHooksExecuted) { + return; + } else { + this.isHooksExecuted = true; + } + var exportTool = this._link.parentElement; + this.mouseEnterHandler = this.handleMouseEnter.bind(this); + this.mouseLeaveHandler = this.handleMouseLeave.bind(this); + L.DomEvent.on(exportTool, 'click', function () { + if (!this.isExporting) { + this.isExporting = true; + this.renderExportIcon(); + setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100); + edit.runExporter().then(function () { + this.resetState(); + this.detachMouseEventListeners(exportTool); + }.bind(this)); + } else { + // Clicking on the export icon after export has started will be ignored + if (this.mouseLeaveSkip) { + return; + } + this.resetState(); + this.detachMouseEventListeners(exportTool); + edit.cancelExport(); + } + }, this); + }, + resetState: function resetState() { + this.renderDownloadIcon(); + this.isExporting = false; + this.mouseLeaveSkip = true; + }, + attachMouseEventListeners: function attachMouseEventListeners(element) { + element.addEventListener('mouseenter', this.mouseEnterHandler); + element.addEventListener('mouseleave', this.mouseLeaveHandler); + }, + detachMouseEventListeners: function detachMouseEventListeners(element) { + element.removeEventListener('mouseenter', this.mouseEnterHandler); + element.removeEventListener('mouseleave', this.mouseLeaveHandler); + }, + handleMouseEnter: function handleMouseEnter() { + this.renderCancelIcon(); + }, + handleMouseLeave: function handleMouseLeave() { + if (this.mouseLeaveSkip) { + this.mouseLeaveSkip = false; + } else { + this.renderExportIcon(); + } + }, + renderDownloadIcon: function renderDownloadIcon() { + L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner'); + L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); + L.DomUtil.removeClass(this._link.firstChild, 'loader'); + }, + renderExportIcon: function renderExportIcon() { + L.IconUtil.toggleXlink(this._link, 'spinner'); + L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...'); + L.IconUtil.addClassToSvg(this._link, 'loader'); + }, + renderCancelIcon: function renderCancelIcon() { + L.IconUtil.toggleXlink(this._link, 'cancel'); + L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...'); + L.DomUtil.removeClass(this._link.firstChild, 'loader'); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/FreeRotateAction.js": +/*!**********************************************!*\ + !*** ./src/edit/actions/FreeRotateAction.js ***! + \**********************************************/ +/***/ (function() { + +L.FreeRotateAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'crop_rotate', + tooltip: overlay.options.translation.freeRotateImage, + className: 'freeRotate' + }; + L.DistortableImage.action_map.f = '_freeRotateMode'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + edit._freeRotateMode(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/GeolocateAction.js": +/*!*********************************************!*\ + !*** ./src/edit/actions/GeolocateAction.js ***! + \*********************************************/ +/***/ (function() { + +L.GeolocateAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'explore', + tooltip: overlay.options.translation.geolocateImage, + className: edit._mode === 'lock' ? 'disabled' : '' + }; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var image = this._overlay.getElement(); + EXIF.getData(image, L.EXIF(image)); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/LockAction.js": +/*!****************************************!*\ + !*** ./src/edit/actions/LockAction.js ***! + \****************************************/ +/***/ (function() { + +L.LockAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + var use; + var tooltip; + if (edit instanceof L.DistortableImage.Edit) { + L.DistortableImage.action_map.u = '_unlock'; + L.DistortableImage.action_map.l = '_lock'; + tooltip = overlay.options.translation.lockMode; + use = edit.isMode('lock') ? 'lock' : 'unlock'; + } else { + L.DistortableImage.group_action_map.l = '_lockGroup'; + tooltip = overlay.options.translation.lockImages; + use = 'lock'; + } + options = options || {}; + options.toolbarIcon = { + svg: true, + html: use, + tooltip: tooltip, + className: 'lock' + }; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + if (edit instanceof L.DistortableImage.Edit) { + edit._toggleLockMode(); + } else { + edit._lockGroup(); + } + } +}); + +/***/ }), + +/***/ "./src/edit/actions/OpacitiesAction.js": +/*!*********************************************!*\ + !*** ./src/edit/actions/OpacitiesAction.js ***! + \*********************************************/ +/***/ (function() { + +var opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. + +// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers. +var subtoolbarCss = new CSSStyleSheet(); +subtoolbarCss.replaceSync(".leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n "); +subtoolbarCss.insertRule(".leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }"); +document.adoptedStyleSheets = [subtoolbarCss]; +opacities = opacities.map(function (o) { + isNaN(o) || o > 100 ? o = 100 : o; + o < 0 ? o = 0 : o; + return L.EditAction.extend({ + options: { + toolbarIcon: { + html: o, + tooltip: 'Opacity ' + o + '%', + className: 'leaflet-toolbar-icon-vertical', + style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);' + } + }, + addHooks: function addHooks() { + this._overlay.editing._setOpacities(o / 100); + } + }); +}); +L.OpacitiesToolbar2 = L.Toolbar2.extend({ + options: { + className: '', + filter: function filter() { + return true; + }, + actions: [], + style: "translate(-1px, -".concat((opacities.length + 1) * 30, "px)") + }, + appendToContainer: function appendToContainer(container) { + var baseClass = this.constructor.baseClass + '-' + this._calculateDepth(); + var className = baseClass + ' ' + this.options.className; + var Action; + var action; + var i; + var j; + var l; + var m; + this._container = container; + this._ul = L.DomUtil.create('ul', className, container); + this._ul.style.transform = this.options.style ? this.options.style : ''; + + // Ensure that clicks, drags, etc. don't bubble up to the map. + // These are the map events that the L.Draw.Polyline handler listens for. + // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but + // if only 'mouseup' is silenced, then the map gets stuck in a halfway + // state because it receives a 'mousedown' event and is waiting for the + // corresponding 'mouseup' event. + this._disabledEvents = ['click', 'mousemove', 'dblclick', 'mousedown', 'mouseup', 'touchstart']; + for (j = 0, m = this._disabledEvents.length; j < m; j++) { + L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation); + } + + /* Instantiate each toolbar action and add its corresponding toolbar icon. */ + for (i = 0, l = this.options.actions.length; i < l; i++) { + Action = this._getActionConstructor(this.options.actions[i]); + action = new Action(); + action._createIcon(this, this._ul, this._arguments); + } + } +}); +L.OpacitiesAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + var mode = edit._mode; + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'opacities', + tooltip: 'Set custom opacity', + className: mode === 'lock' ? 'disabled' : '' + }; + options.subToolbar = new L.OpacitiesToolbar2({ + actions: opacities + }); + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var _this = this; + var link = this._link; + if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) { + L.DomUtil.removeClass(link, 'subtoolbar_enabled'); + setTimeout(function () { + _this.options.subToolbar._hide(); + }, 100); + } else { + L.DomUtil.addClass(link, 'subtoolbar_enabled'); + } + ; + L.IconUtil.toggleXlink(link, 'opacities', 'cancel'); + L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel'); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/OpacityAction.js": +/*!*******************************************!*\ + !*** ./src/edit/actions/OpacityAction.js ***! + \*******************************************/ +/***/ (function() { + +L.OpacityAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + var mode = edit._mode; + var use; + var tooltip; + if (edit._transparent) { + use = 'opacity_empty'; + tooltip = overlay.options.translation.makeImageOpaque; + } else { + use = 'opacity'; + tooltip = overlay.options.translation.makeImageTransparent; + } + options = options || {}; + options.toolbarIcon = { + svg: true, + html: use, + tooltip: tooltip, + className: mode === 'lock' ? 'disabled' : '' + }; + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + var link = this._link; + L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty'); + L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque'); + edit._toggleOpacity(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/RestoreAction.js": +/*!*******************************************!*\ + !*** ./src/edit/actions/RestoreAction.js ***! + \*******************************************/ +/***/ (function() { + +L.RestoreAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var mode = L.Utils.getNestedVal(overlay, 'editing', '_mode'); + var edited = overlay.edited; + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'restore', + tooltip: overlay.options.translation.restoreImage, + className: edited && mode !== 'lock' ? '' : 'disabled' + }; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var ov = this._overlay; + L.DomEvent.on(ov, { + edit: this._enableAction, + restore: this._disableAction + }, this); + ov.restore(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/RotateAction.js": +/*!******************************************!*\ + !*** ./src/edit/actions/RotateAction.js ***! + \******************************************/ +/***/ (function() { + +L.RotateAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'rotate', + tooltip: overlay.options.translation.rotateImage, + className: 'rotate' + }; + L.DistortableImage.action_map.r = '_rotateMode'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + edit._rotateMode(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/ScaleAction.js": +/*!*****************************************!*\ + !*** ./src/edit/actions/ScaleAction.js ***! + \*****************************************/ +/***/ (function() { + +L.ScaleAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'scale', + tooltip: overlay.options.translation.scaleImage, + className: 'scale' + }; + L.DistortableImage.action_map.s = '_scaleMode'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + edit._scaleMode(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/StackAction.js": +/*!*****************************************!*\ + !*** ./src/edit/actions/StackAction.js ***! + \*****************************************/ +/***/ (function() { + +L.StackAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + var edit = overlay.editing; + var use; + var tooltip; + if (edit._toggledImage) { + use = 'flip_to_back'; + tooltip = overlay.options.translation.stackToFront; + } else { + use = 'flip_to_front'; + tooltip = overlay.options.translation.stackToBack; + } + options = options || {}; + options.toolbarIcon = { + svg: true, + html: use, + tooltip: tooltip, + className: edit._mode === 'lock' ? 'disabled' : '' + }; + L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp'; + L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back'); + L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back'); + edit._toggleOrder(); + } +}); + +/***/ }), + +/***/ "./src/edit/actions/UnlockAction.js": +/*!******************************************!*\ + !*** ./src/edit/actions/UnlockAction.js ***! + \******************************************/ +/***/ (function() { + +L.UnlockAction = L.EditAction.extend({ + initialize: function initialize(map, overlay, options) { + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'unlock', + tooltip: overlay.options.translation.unlockImages + }; + L.DistortableImage.group_action_map.u = '_unlockGroup'; + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + addHooks: function addHooks() { + var edit = this._overlay.editing; + edit._unlockGroup(); + } +}); + +/***/ }), + +/***/ "./src/edit/getEXIFdata.js": +/*!*********************************!*\ + !*** ./src/edit/getEXIFdata.js ***! + \*********************************/ +/***/ (function() { + +/* eslint-disable no-unused-vars */ +L.EXIF = function getEXIFdata(img) { + if (Object.keys(EXIF.getAllTags(img)).length !== 0) { + console.log(EXIF.getAllTags(img)); + var GPS = EXIF.getAllTags(img); + var altitude; + + /* If the lat/lng is available. */ + if (typeof GPS.GPSLatitude !== 'undefined' && typeof GPS.GPSLongitude !== 'undefined') { + // sadly, encoded in [degrees,minutes,seconds] + // primitive value = GPS.GPSLatitude[x].numerator + var lat = GPS.GPSLatitude[0] + GPS.GPSLatitude[1] / 60 + GPS.GPSLatitude[2] / 3600; + var lng = GPS.GPSLongitude[0] + GPS.GPSLongitude[1] / 60 + GPS.GPSLongitude[2] / 3600; + if (GPS.GPSLatitudeRef !== 'N') { + lat = lat * -1; + } + if (GPS.GPSLongitudeRef === 'W') { + lng = lng * -1; + } + } + + // Attempt to use GPS compass heading; will require + // some trig to calc corner points, which you can find below: + + var angle = 0; + // "T" refers to "True north", so -90. + if (GPS.GPSImgDirectionRef === 'T') { + angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); + // "M" refers to "Magnetic north" + } else if (GPS.GPSImgDirectionRef === 'M') { + angle = Math.PI / 180 * (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90); + } else { + console.log('No compass data found'); + } + console.log('Orientation:', GPS.Orientation); + + /* If there is orientation data -- i.e. landscape/portrait etc */ + if (GPS.Orientation === 6) { + // CCW + angle += Math.PI / 180 * -90; + } else if (GPS.Orientation === 8) { + // CW + angle += Math.PI / 180 * 90; + } else if (GPS.Orientation === 3) { + // 180 + angle += Math.PI / 180 * 180; + } + + /* If there is altitude data */ + if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { + // Attempt to use GPS altitude: + // (may eventually need to find EXIF field of view for correction) + if (typeof GPS.GPSAltitude !== 'undefined' && typeof GPS.GPSAltitudeRef !== 'undefined') { + altitude = GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator + GPS.GPSAltitudeRef; + } else { + altitude = 0; // none + } + } + } else { + alert('EXIF initialized. Press again to view data in console.'); + } +}; + +/***/ }), + +/***/ "./src/edit/handles/DistortHandle.js": +/*!*******************************************!*\ + !*** ./src/edit/handles/DistortHandle.js ***! + \*******************************************/ +/***/ (function() { + +L.DistortHandle = L.EditHandle.extend({ + options: { + TYPE: 'distort', + icon: L.icon({ + iconUrl: + // eslint-disable-next-line max-len + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==', + iconSize: [32, 32], + iconAnchor: [16, 16] + }) + }, + _onHandleDrag: function _onHandleDrag() { + var overlay = this._handled; + overlay.setCorner(this._corner, this.getLatLng()); + }, + updateHandle: function updateHandle() { + this.setLatLng(this._handled.getCorner(this._corner)); + } +}); +L.distortHandle = function (overlay, idx, options) { + return new L.DistortHandle(overlay, idx, options); +}; + +/***/ }), + +/***/ "./src/edit/handles/DragHandle.js": +/*!****************************************!*\ + !*** ./src/edit/handles/DragHandle.js ***! + \****************************************/ +/***/ (function() { + +L.DragHandle = L.EditHandle.extend({ + options: { + TYPE: 'drag', + icon: L.icon({ + // eslint-disable-next-line max-len + iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=', + iconSize: [32, 32], + iconAnchor: [16, 16] + }) + }, + _onHandleDrag: function _onHandleDrag() { + var overlay = this._handled; + var formerLatLng = overlay.getCorner(this._corner); + var newLatLng = this.getLatLng(); + overlay.dragBy(formerLatLng, newLatLng); + }, + updateHandle: function updateHandle() { + this.setLatLng(this._handled.getCorner(this._corner)); + } +}); +L.dragHandle = function (overlay, idx, options) { + return new L.DragHandle(overlay, idx, options); +}; + +/***/ }), + +/***/ "./src/edit/handles/EditHandle.js": +/*!****************************************!*\ + !*** ./src/edit/handles/EditHandle.js ***! + \****************************************/ +/***/ (function() { + +L.EditHandle = L.Marker.extend({ + initialize: function initialize(overlay, corner, options) { + var latlng = overlay.getCorner(corner); + L.setOptions(this, options); + this._handled = overlay; + this._corner = corner; + var markerOptions = { + draggable: true, + zIndexOffset: 10 + }; + if (options && options.hasOwnProperty('draggable')) { + markerOptions.draggable = options.draggable; + } + L.Marker.prototype.initialize.call(this, latlng, markerOptions); + }, + onAdd: function onAdd(map) { + L.Marker.prototype.onAdd.call(this, map); + this._bindListeners(); + this.updateHandle(); + }, + onRemove: function onRemove(map) { + this._unbindListeners(); + L.Marker.prototype.onRemove.call(this, map); + }, + _onHandleDragStart: function _onHandleDragStart() { + this._handled.fire('editstart'); + }, + _onHandleDragEnd: function _onHandleDragEnd() { + this._fireEdit(); + }, + _fireEdit: function _fireEdit() { + this._handled.edited = true; + this._handled.fire('edit'); + }, + _bindListeners: function _bindListeners() { + this.on({ + contextmenu: L.DomEvent.stop, + dragstart: this._onHandleDragStart, + drag: this._onHandleDrag, + dragend: this._onHandleDragEnd + }, this); + this._handled._map.on('zoomend', this.updateHandle, this); + this._handled.on('update', this.updateHandle, this); + }, + _unbindListeners: function _unbindListeners() { + this.off({ + contextmenu: L.DomEvent.stop, + dragstart: this._onHandleDragStart, + drag: this._onHandleDrag, + dragend: this._onHandleDragEnd + }, this); + this._handled._map.off('zoomend', this.updateHandle, this); + this._handled.off('update', this.updateHandle, this); + }, + /* Takes two latlngs and calculates the scaling difference. */_calculateScalingFactor: function _calculateScalingFactor(latlngA, latlngB) { + var overlay = this._handled; + var map = overlay._map; + var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); + var formerPoint = map.latLngToLayerPoint(latlngA); + var newPoint = map.latLngToLayerPoint(latlngB); + var formerRadiusSquared = this._d2(centerPoint, formerPoint); + var newRadiusSquared = this._d2(centerPoint, newPoint); + return Math.sqrt(newRadiusSquared / formerRadiusSquared); + }, + /* Distance between two points in cartesian space, squared (distance formula). */_d2: function _d2(a, b) { + var dx = a.x - b.x; + var dy = a.y - b.y; + return Math.pow(dx, 2) + Math.pow(dy, 2); + }, + /* Takes two latlngs and calculates the angle between them. */calculateAngleDelta: function calculateAngleDelta(latlngA, latlngB) { + var overlay = this._handled; + var map = overlay._map; + var centerPoint = map.latLngToLayerPoint(overlay.getCenter()); + var formerPoint = map.latLngToLayerPoint(latlngA); + var newPoint = map.latLngToLayerPoint(latlngB); + var initialAngle = Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x); + var newAngle = Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x); + return newAngle - initialAngle; + } +}); + +/***/ }), + +/***/ "./src/edit/handles/FreeRotateHandle.js": +/*!**********************************************!*\ + !*** ./src/edit/handles/FreeRotateHandle.js ***! + \**********************************************/ +/***/ (function() { + +L.FreeRotateHandle = L.EditHandle.extend({ + options: { + TYPE: 'freeRotate', + icon: L.icon({ + iconUrl: + // eslint-disable-next-line max-len + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', + iconSize: [32, 32], + iconAnchor: [16, 16] + }) + }, + _onHandleDrag: function _onHandleDrag() { + var overlay = this._handled; + var map = overlay._map; + var formerLatLng = overlay.getCorner(this._corner); + var newLatLng = this.getLatLng(); + var angle = this.calculateAngleDelta(formerLatLng, newLatLng); + var scale = this._calculateScalingFactor(formerLatLng, newLatLng); + if (angle !== 0) { + overlay.rotateBy(angle, 'rad'); + } + var edgeMinWidth = overlay.edgeMinWidth; + if (!edgeMinWidth) { + edgeMinWidth = 50; + } /* just in case */ + + var corner1 = map.latLngToContainerPoint(overlay.getCorner(0)); + var corner2 = map.latLngToContainerPoint(overlay.getCorner(1)); + var w = Math.abs(corner1.x - corner2.x); + var h = Math.abs(corner1.y - corner2.y); + var distance = Math.sqrt(w * w + h * h); + if (distance > edgeMinWidth || scale > 1) { + overlay.scaleBy(scale); + } else { + overlay.scaleBy(1); + } + }, + updateHandle: function updateHandle() { + this.setLatLng(this._handled.getCorner(this._corner)); + } +}); +L.freeRotateHandle = function (overlay, idx, options) { + return new L.FreeRotateHandle(overlay, idx, options); +}; + +/***/ }), + +/***/ "./src/edit/handles/LockHandle.js": +/*!****************************************!*\ + !*** ./src/edit/handles/LockHandle.js ***! + \****************************************/ +/***/ (function() { + +L.LockHandle = L.EditHandle.extend({ + options: { + TYPE: 'lock', + interactive: false, + icon: L.icon({ + // eslint-disable-next-line max-len + iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=', + iconSize: [32, 32], + iconAnchor: [16, 16] + }) + }, + onRemove: function onRemove(map) { + this.unbindTooltip(); + L.EditHandle.prototype.onRemove.call(this, map); + }, + _bindListeners: function _bindListeners() { + var icon = this.getElement(); + L.EditHandle.prototype._bindListeners.call(this); + L.DomEvent.on(icon, { + mousedown: this._tooltipOn, + mouseup: this._tooltipOff + }, this); + L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this); + }, + _unbindListeners: function _unbindListeners() { + var icon = this.getElement(); + L.EditHandle.prototype._bindListeners.call(this); + L.DomEvent.off(icon, { + mousedown: this._tooltipOn, + mouseup: this._tooltipOff + }, this); + L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this); + }, + /* cannot be dragged */_onHandleDrag: function _onHandleDrag() {}, + updateHandle: function updateHandle() { + this.setLatLng(this._handled.getCorner(this._corner)); + }, + _tooltipOn: function _tooltipOn(e) { + var eP = this._handled.parentGroup; + var edit = eP ? eP.editing : this._handled.editing; + if (e.shiftKey) { + return; + } + if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { + return; + } + var handlesArr = edit._lockHandles; + this._timer = setTimeout(L.bind(function () { + if (this._timeout) { + clearTimeout(this._timeout); + } + if (!this.getTooltip()) { + this.bindTooltip('Locked!', { + permanent: true + }); + } else { + handlesArr.eachLayer(function (handle) { + if (this !== handle) { + handle.closeTooltip(); + } + }); + } + this.openTooltip(); + }, this), 500); + }, + _tooltipOff: function _tooltipOff(e) { + var eP = this._handled.parentGroup; + var edit = eP ? eP.editing : this._handled.editing; + if (e.shiftKey) { + return; + } + if (!this._handled.isSelected() && eP && !eP.isCollected(this._handled)) { + return; + } + var handlesArr = edit._lockHandles; + if (e.currentTarget === document) { + handlesArr.eachLayer(function (handle) { + handle.closeTooltip(); + }); + } + if (this._timer) { + clearTimeout(this._timer); + } + this._timeout = setTimeout(L.bind(function () { + this.closeTooltip(); + }, this), 400); + } +}); +L.lockHandle = function (overlay, idx, options) { + return new L.LockHandle(overlay, idx, options); +}; + +/***/ }), + +/***/ "./src/edit/handles/RotateHandle.js": +/*!******************************************!*\ + !*** ./src/edit/handles/RotateHandle.js ***! + \******************************************/ +/***/ (function() { + +L.RotateHandle = L.EditHandle.extend({ + options: { + TYPE: 'rotate', + icon: L.icon({ + iconUrl: + // eslint-disable-next-line max-len + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==', + iconSize: [32, 32], + iconAnchor: [16, 16] + }) + }, + _onHandleDrag: function _onHandleDrag() { + var overlay = this._handled; + var formerLatLng = overlay.getCorner(this._corner); + var newLatLng = this.getLatLng(); + var angle = this.calculateAngleDelta(formerLatLng, newLatLng); + + /* + * running rotation logic even for an angle delta of 0 + * prevents a small, occasional marker flicker + */ + overlay.rotateBy(angle, 'rad'); + }, + updateHandle: function updateHandle() { + this.setLatLng(this._handled.getCorner(this._corner)); + } +}); +L.rotateHandle = function (overlay, idx, options) { + return new L.RotateHandle(overlay, idx, options); +}; + +/***/ }), + +/***/ "./src/edit/handles/ScaleHandle.js": +/*!*****************************************!*\ + !*** ./src/edit/handles/ScaleHandle.js ***! + \*****************************************/ +/***/ (function() { + +L.ScaleHandle = L.EditHandle.extend({ + options: { + TYPE: 'scale', + icon: L.icon({ + iconUrl: + // eslint-disable-next-line max-len + 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=', + iconSize: [32, 32], + iconAnchor: [16, 16] + }) + }, + _onHandleDrag: function _onHandleDrag() { + var overlay = this._handled; + var map = overlay._map; + var edgeMinWidth = overlay.edgeMinWidth; + var formerLatLng = overlay.getCorner(this._corner); + var newLatLng = this.getLatLng(); + var scale = this._calculateScalingFactor(formerLatLng, newLatLng); + + /* + * checks whether the "edgeMinWidth" property is set and tracks the minimum edge length; + * this enables preventing scaling to zero, but we might also add an overall scale limit + */ + + if (!edgeMinWidth) { + edgeMinWidth = 50; + } /* just in case */ + var corner1 = map.latLngToLayerPoint(overlay.getCorner(0)); + var corner2 = map.latLngToLayerPoint(overlay.getCorner(1)); + var w = Math.abs(corner1.x - corner2.x); + var h = Math.abs(corner1.y - corner2.y); + var distance = Math.sqrt(w * w + h * h); + if (distance > edgeMinWidth || scale > 1) { + overlay.scaleBy(scale); + /* + * running scale logic even for a scale ratio of 1 + * prevents a small, occasional marker flicker + */ + } else { + overlay.scaleBy(1); + } + }, + updateHandle: function updateHandle() { + this.setLatLng(this._handled.getCorner(this._corner)); + } +}); +L.scaleHandle = function (overlay, idx, options) { + return new L.ScaleHandle(overlay, idx, options); +}; + +/***/ }), + +/***/ "./src/edit/toolbars/DistortableImage.ControlBar.js": +/*!**********************************************************!*\ + !*** ./src/edit/toolbars/DistortableImage.ControlBar.js ***! + \**********************************************************/ +/***/ (function() { + +L.distortableImage = L.DistortableImage || {}; +L.distortableImage = L.DistortableImage; +L.DistortableImage.group_action_map = {}; +L.DistortableImage.ControlBar = L.Toolbar2.Control.extend({}); +L.distortableImage.controlBar = function (options) { + return new L.DistortableImage.ControlBar(options); +}; + +/** addInitHooks run before onAdd */ +L.DistortableCollection.addInitHook(function () { + /** Default actions */ + this.ACTIONS = [L.ExportAction, L.DeleteAction, L.LockAction, L.UnlockAction]; + + // all possible modes + L.DistortableCollection.Edit.MODES = { + lock: L.LockAction, + unlock: L.UnlockAction + }; + var a = this.options.actions ? this.options.actions : this.ACTIONS; + this.editing = L.distortableCollection.edit(this, { + actions: a + }); +}); + +/***/ }), + +/***/ "./src/edit/toolbars/DistortableImage.PopupBar.js": +/*!********************************************************!*\ + !*** ./src/edit/toolbars/DistortableImage.PopupBar.js ***! + \********************************************************/ +/***/ (function() { + +L.DistortableImage = L.DistortableImage || {}; +L.distortableImage = L.DistortableImage; +L.DistortableImage.action_map = {}; +L.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({ + options: { + anchor: [0, -10] + }, + initialize: function initialize(latlng, options) { + L.setOptions(this, options); + L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options); + }, + addHooks: function addHooks(map, ov) { + this.map = map; + this.ov = ov; + }, + tools: function tools() { + if (this._ul) { + return this._ul.children; + } + }, + clickTool: function clickTool(name) { + var tools = this.tools(); + for (var i = 0; i < tools.length; i++) { + var tool = tools.item(i).children[0]; + if (L.DomUtil.hasClass(tool, name)) { + tool.click(); + return tool; + } + } + return false; + } +}); +L.distortableImage.popupBar = function (latlng, options) { + return new L.DistortableImage.PopupBar(latlng, options); +}; +L.DistortableImageOverlay.addInitHook(function () { + /** Default actions */ + this.ACTIONS = [L.DragAction, L.ScaleAction, L.DistortAction, L.RotateAction, L.FreeRotateAction, L.LockAction, L.OpacityAction, L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction]; + + // all possible modes + L.DistortableImage.Edit.MODES = { + drag: L.DragAction, + scale: L.ScaleAction, + distort: L.DistortAction, + rotate: L.RotateAction, + freeRotate: L.FreeRotateAction, + lock: L.LockAction + }; + var a = this.options.actions ? this.options.actions : this.ACTIONS; + this.editing = L.distortableImage.edit(this, { + actions: a + }); +}); + +/***/ }), + +/***/ "./src/iconsets/IconSet.js": +/*!*********************************!*\ + !*** ./src/iconsets/IconSet.js ***! + \*********************************/ +/***/ (function() { + +/* this is the baseclass other IconSets inherit from, +* we don't use it directly */ +L.IconSet = L.Class.extend({ + _svg: '', + _symbols: '', + render: function render() { + this.addSymbols(this._symbols); + return this._svg; + }, + addSymbols: function addSymbols(symbols) { + this._svg += symbols; + } +}); + +/***/ }), + +/***/ "./src/iconsets/KeymapperIconSet.js": +/*!******************************************!*\ + !*** ./src/iconsets/KeymapperIconSet.js ***! + \******************************************/ +/***/ (function() { + +L.KeymapperIconSet = L.IconSet.extend({ + _symbols: + // eslint-disable-next-line max-len + '' +}); + +/***/ }), + +/***/ "./src/iconsets/ToolbarIconSet.js": +/*!****************************************!*\ + !*** ./src/iconsets/ToolbarIconSet.js ***! + \****************************************/ +/***/ (function() { + +/* eslint-disable max-len */ +L.ToolbarIconSet = L.IconSet.extend({ + _symbols: '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' +}); + +/***/ }), + +/***/ "./src/mapmixins/BoxCollector.js": +/*!***************************************!*\ + !*** ./src/mapmixins/BoxCollector.js ***! + \***************************************/ +/***/ (function() { + +L.Map.mergeOptions({ + boxCollector: true, + boxZoom: false +}); + +/** + * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with + * our `L.DistortableCollection` class instead of a zoom box. + * */ +L.Map.BoxCollector = L.Map.BoxZoom.extend({ + initialize: function initialize(map) { + this._map = map; + this._container = map._container; + this._pane = map._panes.overlayPane; + this._resetStateTimeout = 0; + map.on('unload', this._destroy, this); + }, + addHooks: function addHooks() { + L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this); + }, + removeHooks: function removeHooks() { + L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this); + }, + moved: function moved() { + return this._moved; + }, + _destroy: function _destroy() { + L.DomUtil.remove(this._pane); + delete this._pane; + }, + _resetState: function _resetState() { + this._resetStateTimeout = 0; + this._moved = false; + }, + _clearDeferredResetState: function _clearDeferredResetState() { + if (this._resetStateTimeout !== 0) { + clearTimeout(this._resetStateTimeout); + this._resetStateTimeout = 0; + } + }, + _onMouseDown: function _onMouseDown(e) { + if (!e.shiftKey || e.which !== 1 && e.button !== 1) { + return false; + } + + // Clear the deferred resetState if it hasn't executed yet, otherwise it + // will interrupt the interaction and orphan a box element in the container. + this._clearDeferredResetState(); + this._resetState(); + L.DomUtil.disableTextSelection(); + L.DomUtil.disableImageDrag(); + this._startPoint = this._map.mouseEventToContainerPoint(e); + L.DomEvent.on(document, { + contextmenu: L.DomEvent.stop, + mousemove: this._onMouseMove, + mouseup: this._onMouseUp + }, this); + }, + _onMouseMove: function _onMouseMove(e) { + if (!this._moved) { + this._moved = true; + this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container); + L.DomUtil.addClass(this._container, 'leaflet-crosshair'); + this._map.fire('boxzoomstart'); + } + this._point = this._map.mouseEventToContainerPoint(e); + this._bounds = L.bounds(this._startPoint, this._point); + var size = this._bounds.getSize(); + L.DomUtil.setPosition(this._box, this._bounds.min); + this._box.style.width = size.x + 'px'; + this._box.style.height = size.y + 'px'; + }, + _finish: function _finish() { + if (this._moved) { + L.DomUtil.remove(this._box); + L.DomUtil.removeClass(this._container, 'leaflet-crosshair'); + } + L.DomUtil.enableTextSelection(); + L.DomUtil.enableImageDrag(); + L.DomEvent.off(document, { + contextmenu: L.DomEvent.stop, + mousemove: this._onMouseMove, + mouseup: this._onMouseUp + }, this); + }, + _onMouseUp: function _onMouseUp(e) { + if (e.which !== 1 && e.button !== 1) { + return; + } + this._finish(); + if (!this._moved) { + return; + } + + // Postpone to next JS tick so internal click event handling + // still see it as "moved". + this._clearDeferredResetState(); + this._resetStateTimeout = setTimeout(L.Util.bind(this._resetState, this), 0); + var bounds = L.latLngBounds(this._map.containerPointToLatLng(this._bounds.getBottomLeft()), this._map.containerPointToLatLng(this._bounds.getTopRight())); + var zoom = this._map.getZoom(); + var center = this._map.getCenter(); + + // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344 + bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center); + this._map.fire('boxcollectend', { + boxCollectBounds: bounds + }); + } +}); +L.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector); + +/***/ }), + +/***/ "./src/mapmixins/DoubleClickLabels.js": +/*!********************************************!*\ + !*** ./src/mapmixins/DoubleClickLabels.js ***! + \********************************************/ +/***/ (function() { + +L.Map.mergeOptions({ + doubleClickLabels: true +}); + +/** + * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant` + * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it. + */ +L.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({ + enable: function enable() { + var map = this._map; + if (this._enabled) { + return this; + } + + // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled. + if (map.doubleClickZoom.enabled()) { + map.doubleClickZoom.disable(); + } + this._map.fire('singleclickon'); + this._enabled = true; + this.addHooks(); + return this; + }, + disable: function disable() { + if (!this._enabled) { + return this; + } + this._enabled = false; + this.removeHooks(); + return this; + }, + _fireIfSingle: function _fireIfSingle(e) { + var map = this._map; + var oe = e.originalEvent; + + // prevents deselection in case of box selector + if (oe && oe.shiftKey) { + return; + } + map._clicked += 1; + this._map._clickTimeout = setTimeout(function () { + if (map._clicked === 1) { + map._clicked = 0; + map.fire('singleclick', { + type: 'singleclick' + }); + } else { + // manually fire doubleclick event only for touch screens that don't natively fire it + if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { + map.fire('dblclick'); + } + } + }, 250); + }, + _onDoubleClick: function _onDoubleClick() { + var map = this._map; + var labels = map._labels; + setTimeout(function () { + map._clicked = 0; + clearTimeout(map._clickTimeout); + }, 0); + if (!labels) { + return; + } + if (labels.options.opacity === 1) { + labels.options.opacity = 0; + labels.setOpacity(0); + } else { + labels.options.opacity = 1; + labels.setOpacity(1); + } + } +}); +L.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels); + +/***/ }), + +/***/ "./src/mapmixins/DoubleClickZoom.js": +/*!******************************************!*\ + !*** ./src/mapmixins/DoubleClickZoom.js ***! + \******************************************/ +/***/ (function() { + +/** + * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it + * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`. + * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler + */ +L.Map.DoubleClickZoom.include({ + addHooks: function addHooks() { + this._map.on({ + click: this._fireIfSingle, + dblclick: this._onDoubleClick + }, this); + }, + removeHooks: function removeHooks() { + this._map.off({ + click: this._fireIfSingle, + dblclick: this._onDoubleClick + }, this); + }, + enable: function enable() { + if (this._enabled) { + return this; + } + + // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first + if (this._map.doubleClickLabels) { + if (this._map.doubleClickLabels.enabled()) { + return this; + } + } + + // signify to collection/instance classes to turn on 'singleclick' listeners + this._map.fire('singleclickon'); + this._enabled = true; + this.addHooks(); + return this; + }, + disable: function disable() { + if (!this._enabled) { + return this; + } + + // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners. + this._map.fire('singleclickoff'); + this._enabled = false; + this.removeHooks(); + return this; + }, + _fireIfSingle: function _fireIfSingle(e) { + var map = this._map; + var oe = e.originalEvent; + + // prevents deselection in case of box selector + if (oe && oe.shiftKey) { + return; + } + map._clicked += 1; + this._map._clickTimeout = setTimeout(function () { + if (map._clicked === 1) { + map._clicked = 0; + map.fire('singleclick', { + type: 'singleclick' + }); + } else { + // manually fire doubleclick event only for touch screens that don't natively fire it + if (L.Browser.touch && oe && oe.sourceCapabilities.firesTouchEvents) { + /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the + passed "e" (for now). To generate a 'real' DOM event that will have all of its corresponding core + properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */ + map._fireDOMEvent(oe, 'dblclick', [map]); + } + } + }, 250); + }, + _onDoubleClick: function _onDoubleClick(e) { + var map = this._map; + var oe = e.originalEvent; + setTimeout(function () { + map._clicked = 0; + clearTimeout(map._clickTimeout); + }, 0); + if (!oe) { + return false; + } + var oldZoom = map.getZoom(); + var delta = map.options.zoomDelta; + var zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta; + if (map.options.doubleClickZoom === 'center') { + map.setZoom(zoom); + } else { + map.setZoomAround(e.containerPoint, zoom); + } + } +}); + +/***/ }), + +/***/ "./src/mapmixins/MapMixins.js": +/*!************************************!*\ + !*** ./src/mapmixins/MapMixins.js ***! + \************************************/ +/***/ (function() { + +/* eslint-disable max-len */ +L.Map.include({ + _clicked: 0, + addGoogleMutant: function addGoogleMutant(opts) { + var url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}'; + opts = this.mutantOptions = L.extend({ + mutantOpacity: 0.8, + maxZoom: 24, + maxNativeZoom: 20, + minZoom: 0, + labels: true, + labelOpacity: 1, + doubleClickLabels: true + }, opts); + if (!opts.labels) { + this.mutantOptions = L.extend(this.mutantOptions, { + labelOpacity: opts.labels ? 1 : undefined, + doubleClickLabels: opts.labels ? true : undefined + }); + } + this._googleMutant = L.tileLayer(url, { + maxZoom: opts.maxZoom, + maxNativeZoom: opts.maxNativeZoom, + minZoom: opts.minZoom, + opacity: opts.mutantOpacity + }).addTo(this); + if (opts.labels) { + this._addLabels(opts); + } + // shouldn't have this handler at all if there are no labels to toggle + else { + this.doubleClickLabels = undefined; + } + return this; + }, + _addLabels: function _addLabels(opts) { + var url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}'; + if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) { + opts.labelOpacity = 1; + } + this._labels = L.tileLayer(url, { + attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors', + subdomains: 'abcd', + interactive: false, + opacity: opts.labelOpacity, + maxZoom: opts.maxZoom, + maxNativeZoom: opts.maxNativeZoom, + minZoom: opts.minZoom, + ext: 'png' + }).addTo(this); + if (this.mutantOptions.doubleClickLabels) { + this.doubleClickLabels.enable(); + } + return this; + } +}); +// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead +// during initialization +L.Map.addInitHook(function () { + this.doubleClickLabels.disable(); + this.doubleClickZoom.enable(); +}); + +/***/ }), + +/***/ "./src/util/DomUtil.js": +/*!*****************************!*\ + !*** ./src/util/DomUtil.js ***! + \*****************************/ +/***/ (function() { + +L.DomUtil = L.extend(L.DomUtil, { + initTranslation: function initTranslation(obj) { + this.translation = obj; + }, + getMatrixString: function getMatrixString(m) { + var is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d; + + /* + * Since matrix3d takes a 4*4 matrix, we add in an empty row and column, + * which act as the identity on the z-axis. + * See: + * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ + * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry + */ + var matrix = [m[0], m[3], 0, m[6], m[1], m[4], 0, m[7], 0, 0, 1, 0, m[2], m[5], 0, m[8]]; + var str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : ''; + if (!is3d) { + console.log('Your browser must support 3D CSS transforms' + 'in order to use DistortableImageOverlay.'); + } + return str; + }, + toggleClass: function toggleClass(el, className) { + var c = className; + return this.hasClass(el, c) ? this.removeClass(el, c) : this.addClass(el, c); + }, + confirmDelete: function confirmDelete() { + return window.confirm(this.translation.confirmImageDelete); + }, + confirmDeletes: function confirmDeletes(n) { + if (n === 1) { + return this.confirmDelete(); + } + var translation = this.translation.confirmImagesDeletes; + var warningMsg = ''; + if (typeof translation === 'function') { + warningMsg = translation(n); + } else { + warningMsg = translation; + } + return window.confirm(warningMsg); + } +}); + +/***/ }), + +/***/ "./src/util/IconUtil.js": +/*!******************************!*\ + !*** ./src/util/IconUtil.js ***! + \******************************/ +/***/ (function() { + +L.IconUtil = { + /* creates an svg elemenet with built in accessibility properties + * and standardized classes for styling, takes in the fragment + * identifier (id) of the symbol to reference. note for symplicity + * we allow providing the icon target with or without the '#' prefix + */ + create: function create(ref) { + if (/^#/.test(ref)) { + ref = ref.replace(/^#/, ''); + } + return '' + '' + ''; + }, + addClassToSvg: function addClassToSvg(container, loader) { + var svg = container.querySelector('svg'); + if (svg) { + L.DomUtil.addClass(svg, loader); + } + }, + // finds the use element and toggles its icon reference + toggleXlink: function toggleXlink(container, ref1, ref2) { + if (!/^#/.test(ref1)) { + ref1 = '#' + ref1; + } + if (!/^#/.test(ref2)) { + ref2 = '#' + ref2; + } + var use = container.querySelector('use'); + if (use) { + var toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1; + use.setAttribute('xlink:href', toggled); + return toggled; + } + return false; + }, + toggleTitle: function toggleTitle(container, title1, title2) { + var toggled = container.getAttribute('title') === title1 ? title2 : title1; + container.setAttribute('title', toggled); + if (container.hasAttribute('aria-label')) { + container.setAttribute('aria-label', toggled); + } + return toggled; + } +}; + +/***/ }), + +/***/ "./src/util/ImageUtil.js": +/*!*******************************!*\ + !*** ./src/util/ImageUtil.js ***! + \*******************************/ +/***/ (function() { + +L.ImageUtil = { + getCmPerPixel: function getCmPerPixel(overlay) { + var map = overlay._map; + var dist = map.latLngToLayerPoint(overlay.getCorner(0)).distanceTo(map.latLngToLayerPoint(overlay.getCorner(1))); + return dist * 100 / overlay.getElement().width; + } +}; + +/***/ }), + +/***/ "./src/util/MatrixUtil.js": +/*!********************************!*\ + !*** ./src/util/MatrixUtil.js ***! + \********************************/ +/***/ (function() { + +L.MatrixUtil = { + // Compute the adjugate of m + adj: function adj(m) { + return [m[4] * m[8] - m[5] * m[7], m[2] * m[7] - m[1] * m[8], m[1] * m[5] - m[2] * m[4], m[5] * m[6] - m[3] * m[8], m[0] * m[8] - m[2] * m[6], m[2] * m[3] - m[0] * m[5], m[3] * m[7] - m[4] * m[6], m[1] * m[6] - m[0] * m[7], m[0] * m[4] - m[1] * m[3]]; + }, + // multiply two 3*3 matrices + multmm: function multmm(a, b) { + var c = []; + var i; + for (i = 0; i < 3; i++) { + for (var j = 0; j < 3; j++) { + var cij = 0; + for (var k = 0; k < 3; k++) { + cij += a[3 * i + k] * b[3 * k + j]; + } + c[3 * i + j] = cij; + } + } + return c; + }, + // multiply a 3*3 matrix and a 3-vector + multmv: function multmv(m, v) { + return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; + }, + // multiply a scalar and a 3*3 matrix + multsm: function multsm(s, m) { + var matrix = []; + for (var i = 0, l = m.length; i < l; i++) { + matrix.push(s * m[i]); + } + return matrix; + }, + basisToPoints: function basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) { + var m = [x1, x2, x3, y1, y2, y3, 1, 1, 1]; + var v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]); + return L.MatrixUtil.multmm(m, [v[0], 0, 0, 0, v[1], 0, 0, 0, v[2]]); + }, + project: function project(m, x, y) { + var v = L.MatrixUtil.multmv(m, [x, y, 1]); + return [v[0] / v[2], v[1] / v[2]]; + }, + general2DProjection: function general2DProjection(x1s, y1s, x1d, y1d, x2s, y2s, x2d, y2d, x3s, y3s, x3d, y3d, x4s, y4s, x4d, y4d) { + var s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s); + var d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d); + var m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s)); + + // Normalize to the unique matrix with m[8] == 1. + // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/ + + return L.MatrixUtil.multsm(1 / m[8], m); + } +}; + +/***/ }), + +/***/ "./src/util/TrigUtil.js": +/*!******************************!*\ + !*** ./src/util/TrigUtil.js ***! + \******************************/ +/***/ (function() { + +L.TrigUtil = { + calcAngle: function calcAngle(x, y) { + var unit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'deg'; + return unit === 'deg' ? this.radiansToDegrees(Math.atan2(y, x)) : Math.atan2(y, x); + }, + radiansToDegrees: function radiansToDegrees(angle) { + return angle * 180 / Math.PI; + }, + degreesToRadians: function degreesToRadians(angle) { + return angle * Math.PI / 180; + } +}; + +/***/ }), + +/***/ "./src/util/Utils.js": +/*!***************************!*\ + !*** ./src/util/Utils.js ***! + \***************************/ +/***/ (function() { + +L.Utils = { + initTranslation: function initTranslation() { + var translation = { + deleteImage: 'Delete Image', + deleteImages: 'Delete Images', + distortImage: 'Distort Image', + dragImage: 'Drag Image', + exportImage: 'Export Image', + exportImages: 'Export Images', + removeBorder: 'Remove Border', + addBorder: 'Add Border', + freeRotateImage: 'Free rotate Image', + geolocateImage: 'Geolocate Image', + lockMode: 'Lock Mode', + lockImages: 'Lock Images', + makeImageOpaque: 'Make Image Opaque', + makeImageTransparent: 'Make Image Transparent', + restoreImage: 'Restore Natural Image', + rotateImage: 'Rotate Image', + scaleImage: 'Scale Image', + stackToFront: 'Stack to Front', + stackToBack: 'Stack to Back', + unlockImages: 'Unlock Images', + confirmImageDelete: 'Are you sure? This image will be permanently deleted from the map.', + confirmImagesDeletes: 'Are you sure? These images will be permanently deleted from the map.' + }; + if (!this.options.translation) { + this.options.translation = translation; + } else { + // If the translation for a word is not specified, fallback to English. + for (var key in translation) { + if (!this.options.translation.hasOwnProperty(key)) { + this.options.translation[key] = translation[key]; + } + } + } + L.DomUtil.initTranslation(this.options.translation); + }, + getNestedVal: function getNestedVal(obj, key, nestedKey) { + var dig = [key, nestedKey]; + return dig.reduce(function (obj, k) { + return obj && obj[k]; + }, obj); + } +}; + +/***/ }), + +/***/ "./node_modules/events/events.js": +/*!***************************************!*\ + !*** ./node_modules/events/events.js ***! + \***************************************/ +/***/ (function(module) { + +"use strict"; +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var R = typeof Reflect === 'object' ? Reflect : null +var ReflectApply = R && typeof R.apply === 'function' + ? R.apply + : function ReflectApply(target, receiver, args) { + return Function.prototype.apply.call(target, receiver, args); + } + +var ReflectOwnKeys +if (R && typeof R.ownKeys === 'function') { + ReflectOwnKeys = R.ownKeys +} else if (Object.getOwnPropertySymbols) { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target) + .concat(Object.getOwnPropertySymbols(target)); + }; +} else { + ReflectOwnKeys = function ReflectOwnKeys(target) { + return Object.getOwnPropertyNames(target); + }; +} + +function ProcessEmitWarning(warning) { + if (console && console.warn) console.warn(warning); +} + +var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) { + return value !== value; +} + +function EventEmitter() { + EventEmitter.init.call(this); +} +module.exports = EventEmitter; +module.exports.once = once; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._eventsCount = 0; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +var defaultMaxListeners = 10; + +function checkListener(listener) { + if (typeof listener !== 'function') { + throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); + } +} + +Object.defineProperty(EventEmitter, 'defaultMaxListeners', { + enumerable: true, + get: function() { + return defaultMaxListeners; + }, + set: function(arg) { + if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) { + throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.'); + } + defaultMaxListeners = arg; + } +}); + +EventEmitter.init = function() { + + if (this._events === undefined || + this._events === Object.getPrototypeOf(this)._events) { + this._events = Object.create(null); + this._eventsCount = 0; + } + + this._maxListeners = this._maxListeners || undefined; +}; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { + if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) { + throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.'); + } + this._maxListeners = n; + return this; +}; + +function _getMaxListeners(that) { + if (that._maxListeners === undefined) + return EventEmitter.defaultMaxListeners; + return that._maxListeners; +} + +EventEmitter.prototype.getMaxListeners = function getMaxListeners() { + return _getMaxListeners(this); +}; + +EventEmitter.prototype.emit = function emit(type) { + var args = []; + for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); + var doError = (type === 'error'); + + var events = this._events; + if (events !== undefined) + doError = (doError && events.error === undefined); + else if (!doError) + return false; + + // If there is no 'error' event listener then throw. + if (doError) { + var er; + if (args.length > 0) + er = args[0]; + if (er instanceof Error) { + // Note: The comments on the `throw` lines are intentional, they show + // up in Node's output if this results in an unhandled exception. + throw er; // Unhandled 'error' event + } + // At least give some kind of context to the user + var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : '')); + err.context = er; + throw err; // Unhandled 'error' event + } + + var handler = events[type]; + + if (handler === undefined) + return false; + + if (typeof handler === 'function') { + ReflectApply(handler, this, args); + } else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + ReflectApply(listeners[i], this, args); + } + + return true; +}; + +function _addListener(target, type, listener, prepend) { + var m; + var events; + var existing; + + checkListener(listener); + + events = target._events; + if (events === undefined) { + events = target._events = Object.create(null); + target._eventsCount = 0; + } else { + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (events.newListener !== undefined) { + target.emit('newListener', type, + listener.listener ? listener.listener : listener); + + // Re-assign `events` because a newListener handler could have caused the + // this._events to be assigned to a new object + events = target._events; + } + existing = events[type]; + } + + if (existing === undefined) { + // Optimize the case of one listener. Don't need the extra array object. + existing = events[type] = listener; + ++target._eventsCount; + } else { + if (typeof existing === 'function') { + // Adding the second element, need to change to array. + existing = events[type] = + prepend ? [listener, existing] : [existing, listener]; + // If we've already got an array, just append. + } else if (prepend) { + existing.unshift(listener); + } else { + existing.push(listener); + } + + // Check for listener leak + m = _getMaxListeners(target); + if (m > 0 && existing.length > m && !existing.warned) { + existing.warned = true; + // No error code for this since it is a Warning + // eslint-disable-next-line no-restricted-syntax + var w = new Error('Possible EventEmitter memory leak detected. ' + + existing.length + ' ' + String(type) + ' listeners ' + + 'added. Use emitter.setMaxListeners() to ' + + 'increase limit'); + w.name = 'MaxListenersExceededWarning'; + w.emitter = target; + w.type = type; + w.count = existing.length; + ProcessEmitWarning(w); + } + } + + return target; +} + +EventEmitter.prototype.addListener = function addListener(type, listener) { + return _addListener(this, type, listener, false); +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.prependListener = + function prependListener(type, listener) { + return _addListener(this, type, listener, true); + }; + +function onceWrapper() { + if (!this.fired) { + this.target.removeListener(this.type, this.wrapFn); + this.fired = true; + if (arguments.length === 0) + return this.listener.call(this.target); + return this.listener.apply(this.target, arguments); + } +} + +function _onceWrap(target, type, listener) { + var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; + var wrapped = onceWrapper.bind(state); + wrapped.listener = listener; + state.wrapFn = wrapped; + return wrapped; +} + +EventEmitter.prototype.once = function once(type, listener) { + checkListener(listener); + this.on(type, _onceWrap(this, type, listener)); + return this; +}; + +EventEmitter.prototype.prependOnceListener = + function prependOnceListener(type, listener) { + checkListener(listener); + this.prependListener(type, _onceWrap(this, type, listener)); + return this; + }; + +// Emits a 'removeListener' event if and only if the listener was removed. +EventEmitter.prototype.removeListener = + function removeListener(type, listener) { + var list, events, position, i, originalListener; + + checkListener(listener); + + events = this._events; + if (events === undefined) + return this; + + list = events[type]; + if (list === undefined) + return this; + + if (list === listener || list.listener === listener) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else { + delete events[type]; + if (events.removeListener) + this.emit('removeListener', type, list.listener || listener); + } + } else if (typeof list !== 'function') { + position = -1; + + for (i = list.length - 1; i >= 0; i--) { + if (list[i] === listener || list[i].listener === listener) { + originalListener = list[i].listener; + position = i; + break; + } + } + + if (position < 0) + return this; + + if (position === 0) + list.shift(); + else { + spliceOne(list, position); + } + + if (list.length === 1) + events[type] = list[0]; + + if (events.removeListener !== undefined) + this.emit('removeListener', type, originalListener || listener); + } + + return this; + }; + +EventEmitter.prototype.off = EventEmitter.prototype.removeListener; + +EventEmitter.prototype.removeAllListeners = + function removeAllListeners(type) { + var listeners, events, i; + + events = this._events; + if (events === undefined) + return this; + + // not listening for removeListener, no need to emit + if (events.removeListener === undefined) { + if (arguments.length === 0) { + this._events = Object.create(null); + this._eventsCount = 0; + } else if (events[type] !== undefined) { + if (--this._eventsCount === 0) + this._events = Object.create(null); + else + delete events[type]; + } + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + var keys = Object.keys(events); + var key; + for (i = 0; i < keys.length; ++i) { + key = keys[i]; + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = Object.create(null); + this._eventsCount = 0; + return this; + } + + listeners = events[type]; + + if (typeof listeners === 'function') { + this.removeListener(type, listeners); + } else if (listeners !== undefined) { + // LIFO order + for (i = listeners.length - 1; i >= 0; i--) { + this.removeListener(type, listeners[i]); + } + } + + return this; + }; + +function _listeners(target, type, unwrap) { + var events = target._events; + + if (events === undefined) + return []; + + var evlistener = events[type]; + if (evlistener === undefined) + return []; + + if (typeof evlistener === 'function') + return unwrap ? [evlistener.listener || evlistener] : [evlistener]; + + return unwrap ? + unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); +} + +EventEmitter.prototype.listeners = function listeners(type) { + return _listeners(this, type, true); +}; + +EventEmitter.prototype.rawListeners = function rawListeners(type) { + return _listeners(this, type, false); +}; + +EventEmitter.listenerCount = function(emitter, type) { + if (typeof emitter.listenerCount === 'function') { + return emitter.listenerCount(type); + } else { + return listenerCount.call(emitter, type); + } +}; + +EventEmitter.prototype.listenerCount = listenerCount; +function listenerCount(type) { + var events = this._events; + + if (events !== undefined) { + var evlistener = events[type]; + + if (typeof evlistener === 'function') { + return 1; + } else if (evlistener !== undefined) { + return evlistener.length; + } + } + + return 0; +} + +EventEmitter.prototype.eventNames = function eventNames() { + return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; +}; + +function arrayClone(arr, n) { + var copy = new Array(n); + for (var i = 0; i < n; ++i) + copy[i] = arr[i]; + return copy; +} + +function spliceOne(list, index) { + for (; index + 1 < list.length; index++) + list[index] = list[index + 1]; + list.pop(); +} + +function unwrapListeners(arr) { + var ret = new Array(arr.length); + for (var i = 0; i < ret.length; ++i) { + ret[i] = arr[i].listener || arr[i]; + } + return ret; +} + +function once(emitter, name) { + return new Promise(function (resolve, reject) { + function errorListener(err) { + emitter.removeListener(name, resolver); + reject(err); + } + + function resolver() { + if (typeof emitter.removeListener === 'function') { + emitter.removeListener('error', errorListener); + } + resolve([].slice.call(arguments)); + }; + + eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); + if (name !== 'error') { + addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + } + }); +} + +function addErrorHandlerIfEventEmitter(emitter, handler, flags) { + if (typeof emitter.on === 'function') { + eventTargetAgnosticAddListener(emitter, 'error', handler, flags); + } +} + +function eventTargetAgnosticAddListener(emitter, name, listener, flags) { + if (typeof emitter.on === 'function') { + if (flags.once) { + emitter.once(name, listener); + } else { + emitter.on(name, listener); + } + } else if (typeof emitter.addEventListener === 'function') { + // EventTarget does not have `error` event semantics like Node + // EventEmitters, we do not listen for `error` events here. + emitter.addEventListener(name, function wrapListener(arg) { + // IE does not have builtin `{ once: true }` support so we + // have to do it manually. + if (flags.once) { + emitter.removeEventListener(name, wrapListener); + } + listener(arg); + }); + } else { + throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); + } +} + + +/***/ }), + +/***/ "./node_modules/html-entities/lib/index.js": +/*!*************************************************!*\ + !*** ./node_modules/html-entities/lib/index.js ***! + \*************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +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 })); +var named_references_1 = __webpack_require__(/*! ./named-references */ "./node_modules/html-entities/lib/named-references.js"); +var numeric_unicode_map_1 = __webpack_require__(/*! ./numeric-unicode-map */ "./node_modules/html-entities/lib/numeric-unicode-map.js"); +var surrogate_pairs_1 = __webpack_require__(/*! ./surrogate-pairs */ "./node_modules/html-entities/lib/surrogate-pairs.js"); +var allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 }); +var encodeRegExps = { + specialChars: /[<>'"&]/g, + nonAscii: /(?:[<>'"&\u0080-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, + nonAsciiPrintable: /(?:[<>'"&\x01-\x08\x11-\x15\x17-\x1F\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g, + extensive: /(?:[\x01-\x0c\x0e-\x1f\x21-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7d\x7f-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g +}; +var defaultEncodeOptions = { + mode: 'specialChars', + level: 'all', + numeric: 'decimal' +}; +/** Encodes all the necessary (specified by `level`) characters in the text */ +function encode(text, _a) { + var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e; + if (!text) { + return ''; + } + var encodeRegExp = encodeRegExps[mode]; + var references = allNamedReferences[level].characters; + var isHex = numeric === 'hexadecimal'; + encodeRegExp.lastIndex = 0; + var _b = encodeRegExp.exec(text); + var _c; + if (_b) { + _c = ''; + var _d = 0; + do { + if (_d !== _b.index) { + _c += text.substring(_d, _b.index); + } + var _e = _b[0]; + var result_1 = references[_e]; + if (!result_1) { + var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0); + result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';'; + } + _c += result_1; + _d = _b.index + _e.length; + } while ((_b = encodeRegExp.exec(text))); + if (_d !== text.length) { + _c += text.substring(_d); + } + } + else { + _c = + text; + } + return _c; +} +exports.encode = encode; +var defaultDecodeOptions = { + scope: 'body', + level: 'all' +}; +var strict = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g; +var attribute = /&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g; +var baseDecodeRegExps = { + xml: { + strict: strict, + attribute: attribute, + body: named_references_1.bodyRegExps.xml + }, + html4: { + strict: strict, + attribute: attribute, + body: named_references_1.bodyRegExps.html4 + }, + html5: { + strict: strict, + attribute: attribute, + body: named_references_1.bodyRegExps.html5 + } +}; +var decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 }); +var fromCharCode = String.fromCharCode; +var outOfBoundsChar = fromCharCode(65533); +var defaultDecodeEntityOptions = { + level: 'all' +}; +/** Decodes a single entity */ +function decodeEntity(entity, _a) { + var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b; + if (!entity) { + return ''; + } + var _b = entity; + var decodeEntityLastChar_1 = entity[entity.length - 1]; + if (false) {} + else if (false) {} + else { + var decodeResultByReference_1 = allNamedReferences[level].entities[entity]; + if (decodeResultByReference_1) { + _b = decodeResultByReference_1; + } + else if (entity[0] === '&' && entity[1] === '#') { + var decodeSecondChar_1 = entity[2]; + var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X' + ? parseInt(entity.substr(3), 16) + : parseInt(entity.substr(2)); + _b = + decodeCode_1 >= 0x10ffff + ? outOfBoundsChar + : decodeCode_1 > 65535 + ? surrogate_pairs_1.fromCodePoint(decodeCode_1) + : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1); + } + } + return _b; +} +exports.decodeEntity = decodeEntity; +/** Decodes all entities in the text */ +function decode(text, _a) { + var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b; + if (!text) { + return ''; + } + var decodeRegExp = decodeRegExps[level][scope]; + var references = allNamedReferences[level].entities; + var isAttribute = scope === 'attribute'; + var isStrict = scope === 'strict'; + decodeRegExp.lastIndex = 0; + var replaceMatch_1 = decodeRegExp.exec(text); + var replaceResult_1; + if (replaceMatch_1) { + replaceResult_1 = ''; + var replaceLastIndex_1 = 0; + do { + if (replaceLastIndex_1 !== replaceMatch_1.index) { + replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index); + } + var replaceInput_1 = replaceMatch_1[0]; + var decodeResult_1 = replaceInput_1; + var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1]; + if (isAttribute + && decodeEntityLastChar_2 === '=') { + decodeResult_1 = replaceInput_1; + } + else if (isStrict + && decodeEntityLastChar_2 !== ';') { + decodeResult_1 = replaceInput_1; + } + else { + var decodeResultByReference_2 = references[replaceInput_1]; + if (decodeResultByReference_2) { + decodeResult_1 = decodeResultByReference_2; + } + else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') { + var decodeSecondChar_2 = replaceInput_1[2]; + var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X' + ? parseInt(replaceInput_1.substr(3), 16) + : parseInt(replaceInput_1.substr(2)); + decodeResult_1 = + decodeCode_2 >= 0x10ffff + ? outOfBoundsChar + : decodeCode_2 > 65535 + ? surrogate_pairs_1.fromCodePoint(decodeCode_2) + : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2); + } + } + replaceResult_1 += decodeResult_1; + replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length; + } while ((replaceMatch_1 = decodeRegExp.exec(text))); + if (replaceLastIndex_1 !== text.length) { + replaceResult_1 += text.substring(replaceLastIndex_1); + } + } + else { + replaceResult_1 = + text; + } + return replaceResult_1; +} +exports.decode = decode; + + +/***/ }), + +/***/ "./node_modules/html-entities/lib/named-references.js": +/*!************************************************************!*\ + !*** ./node_modules/html-entities/lib/named-references.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; +Object.defineProperty(exports, "__esModule", ({value:true}));exports.bodyRegExps={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{"<":"<",">":">",""":'"',"'":"'","&":"&"},characters:{"<":"<",">":">",'"':""","'":"'","&":"&"}},html4:{entities:{"'":"'"," ":" "," ":" ","¡":"¡","¡":"¡","¢":"¢","¢":"¢","£":"£","£":"£","¤":"¤","¤":"¤","¥":"¥","¥":"¥","¦":"¦","¦":"¦","§":"§","§":"§","¨":"¨","¨":"¨","©":"©","©":"©","ª":"ª","ª":"ª","«":"«","«":"«","¬":"¬","¬":"¬","­":"­","­":"­","®":"®","®":"®","¯":"¯","¯":"¯","°":"°","°":"°","±":"±","±":"±","²":"²","²":"²","³":"³","³":"³","´":"´","´":"´","µ":"µ","µ":"µ","¶":"¶","¶":"¶","·":"·","·":"·","¸":"¸","¸":"¸","¹":"¹","¹":"¹","º":"º","º":"º","»":"»","»":"»","¼":"¼","¼":"¼","½":"½","½":"½","¾":"¾","¾":"¾","¿":"¿","¿":"¿","À":"À","À":"À","Á":"Á","Á":"Á","Â":"Â","Â":"Â","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","Å":"Å","Å":"Å","Æ":"Æ","Æ":"Æ","Ç":"Ç","Ç":"Ç","È":"È","È":"È","É":"É","É":"É","Ê":"Ê","Ê":"Ê","Ë":"Ë","Ë":"Ë","Ì":"Ì","Ì":"Ì","Í":"Í","Í":"Í","Î":"Î","Î":"Î","Ï":"Ï","Ï":"Ï","Ð":"Ð","Ð":"Ð","Ñ":"Ñ","Ñ":"Ñ","Ò":"Ò","Ò":"Ò","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","Õ":"Õ","Õ":"Õ","Ö":"Ö","Ö":"Ö","×":"×","×":"×","Ø":"Ø","Ø":"Ø","Ù":"Ù","Ù":"Ù","Ú":"Ú","Ú":"Ú","Û":"Û","Û":"Û","Ü":"Ü","Ü":"Ü","Ý":"Ý","Ý":"Ý","Þ":"Þ","Þ":"Þ","ß":"ß","ß":"ß","à":"à","à":"à","á":"á","á":"á","â":"â","â":"â","ã":"ã","ã":"ã","ä":"ä","ä":"ä","å":"å","å":"å","æ":"æ","æ":"æ","ç":"ç","ç":"ç","è":"è","è":"è","é":"é","é":"é","ê":"ê","ê":"ê","ë":"ë","ë":"ë","ì":"ì","ì":"ì","í":"í","í":"í","î":"î","î":"î","ï":"ï","ï":"ï","ð":"ð","ð":"ð","ñ":"ñ","ñ":"ñ","ò":"ò","ò":"ò","ó":"ó","ó":"ó","ô":"ô","ô":"ô","õ":"õ","õ":"õ","ö":"ö","ö":"ö","÷":"÷","÷":"÷","ø":"ø","ø":"ø","ù":"ù","ù":"ù","ú":"ú","ú":"ú","û":"û","û":"û","ü":"ü","ü":"ü","ý":"ý","ý":"ý","þ":"þ","þ":"þ","ÿ":"ÿ","ÿ":"ÿ",""":'"',""":'"',"&":"&","&":"&","<":"<","<":"<",">":">",">":">","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ˆ":"ˆ","˜":"˜"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"⁄","℘":"℘","ℑ":"ℑ","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"},characters:{"'":"'"," ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Á":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Å":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","Ì":"Ì","Í":"Í","Î":"Î","Ï":"Ï","Ð":"Ð","Ñ":"Ñ","Ò":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ý":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","å":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ",'"':""","&":"&","<":"<",">":">","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ˆ":"ˆ","˜":"˜"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","‰":"‰","‹":"‹","›":"›","€":"€","ƒ":"ƒ","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ","•":"•","…":"…","′":"′","″":"″","‾":"‾","⁄":"⁄","℘":"℘","ℑ":"ℑ","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","〈":"⟨","〉":"⟩","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"}},html5:{entities:{"Æ":"Æ","Æ":"Æ","&":"&","&":"&","Á":"Á","Á":"Á","Ă":"Ă","Â":"Â","Â":"Â","А":"А","𝔄":"𝔄","À":"À","À":"À","Α":"Α","Ā":"Ā","⩓":"⩓","Ą":"Ą","𝔸":"𝔸","⁡":"⁡","Å":"Å","Å":"Å","𝒜":"𝒜","≔":"≔","Ã":"Ã","Ã":"Ã","Ä":"Ä","Ä":"Ä","∖":"∖","⫧":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Β","𝔅":"𝔅","𝔹":"𝔹","˘":"˘","ℬ":"ℬ","≎":"≎","Ч":"Ч","©":"©","©":"©","Ć":"Ć","⋒":"⋒","ⅅ":"ⅅ","ℭ":"ℭ","Č":"Č","Ç":"Ç","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"Ċ","¸":"¸","·":"·","ℭ":"ℭ","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"”","’":"’","∷":"∷","⩴":"⩴","≡":"≡","∯":"∯","∮":"∮","ℂ":"ℂ","∐":"∐","∳":"∳","⨯":"⨯","𝒞":"𝒞","⋓":"⋓","≍":"≍","ⅅ":"ⅅ","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ѕ","Џ":"Џ","‡":"‡","↡":"↡","⫤":"⫤","Ď":"Ď","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"𝔇","´":"´","˙":"˙","˝":"˝","`":"`","˜":"˜","⋄":"⋄","ⅆ":"ⅆ","𝔻":"𝔻","¨":"¨","⃜":"⃜","≐":"≐","∯":"∯","¨":"¨","⇓":"⇓","⇐":"⇐","⇔":"⇔","⫤":"⫤","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"̑","⥐":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","⇓":"⇓","𝒟":"𝒟","Đ":"Đ","Ŋ":"Ŋ","Ð":"Ð","Ð":"Ð","É":"É","É":"É","Ě":"Ě","Ê":"Ê","Ê":"Ê","Э":"Э","Ė":"Ė","𝔈":"𝔈","È":"È","È":"È","∈":"∈","Ē":"Ē","◻":"◻","▫":"▫","Ę":"Ę","𝔼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","Ë":"Ë","∃":"∃","ⅇ":"ⅇ","Ф":"Ф","𝔉":"𝔉","◼":"◼","▪":"▪","𝔽":"𝔽","∀":"∀","ℱ":"ℱ","ℱ":"ℱ","Ѓ":"Ѓ",">":">",">":">","Γ":"Γ","Ϝ":"Ϝ","Ğ":"Ğ","Ģ":"Ģ","Ĝ":"Ĝ","Г":"Г","Ġ":"Ġ","𝔊":"𝔊","⋙":"⋙","𝔾":"𝔾","≥":"≥","⋛":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"ℋ","ℍ":"ℍ","─":"─","ℋ":"ℋ","Ħ":"Ħ","≎":"≎","≏":"≏","Е":"Е","IJ":"IJ","Ё":"Ё","Í":"Í","Í":"Í","Î":"Î","Î":"Î","И":"И","İ":"İ","ℑ":"ℑ","Ì":"Ì","Ì":"Ì","ℑ":"ℑ","Ī":"Ī","ⅈ":"ⅈ","⇒":"⇒","∬":"∬","∫":"∫","⋂":"⋂","⁣":"⁣","⁢":"⁢","Į":"Į","𝕀":"𝕀","Ι":"Ι","ℐ":"ℐ","Ĩ":"Ĩ","І":"І","Ï":"Ï","Ï":"Ï","Ĵ":"Ĵ","Й":"Й","𝔍":"𝔍","𝕁":"𝕁","𝒥":"𝒥","Ј":"Ј","Є":"Є","Х":"Х","Ќ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"𝔎","𝕂":"𝕂","𝒦":"𝒦","Љ":"Љ","<":"<","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"ℒ","↞":"↞","Ľ":"Ľ","Ļ":"Ļ","Л":"Л","⟨":"⟨","←":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⇐":"⇐","⇔":"⇔","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"𝔏","⋘":"⋘","⇚":"⇚","Ŀ":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","⟸":"⟸","⟺":"⟺","⟹":"⟹","𝕃":"𝕃","↙":"↙","↘":"↘","ℒ":"ℒ","↰":"↰","Ł":"Ł","≪":"≪","⤅":"⤅","М":"М"," ":" ","ℳ":"ℳ","𝔐":"𝔐","∓":"∓","𝕄":"𝕄","ℳ":"ℳ","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Ņ","Н":"Н","​":"​","​":"​","​":"​","​":"​","≫":"≫","≪":"≪"," ":"\n","𝔑":"𝔑","⁠":"⁠"," ":" ","ℕ":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"≏̸","⋪":"⋪","⧏̸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"⋠","∌":"∌","⋫":"⋫","⧐̸":"⧐̸","⋭":"⋭","⊏̸":"⊏̸","⋢":"⋢","⊐̸":"⊐̸","⋣":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"⊁","⪰̸":"⪰̸","⋡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"𝒩","Ñ":"Ñ","Ñ":"Ñ","Ν":"Ν","Œ":"Œ","Ó":"Ó","Ó":"Ó","Ô":"Ô","Ô":"Ô","О":"О","Ő":"Ő","𝔒":"𝔒","Ò":"Ò","Ò":"Ò","Ō":"Ō","Ω":"Ω","Ο":"Ο","𝕆":"𝕆","“":"“","‘":"‘","⩔":"⩔","𝒪":"𝒪","Ø":"Ø","Ø":"Ø","Õ":"Õ","Õ":"Õ","⨷":"⨷","Ö":"Ö","Ö":"Ö","‾":"‾","⏞":"⏞","⎴":"⎴","⏜":"⏜","∂":"∂","П":"П","𝔓":"𝔓","Φ":"Φ","Π":"Π","±":"±","ℌ":"ℌ","ℙ":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"∏","∷":"∷","∝":"∝","𝒫":"𝒫","Ψ":"Ψ",""":'"',""":'"',"𝔔":"𝔔","ℚ":"ℚ","𝒬":"𝒬","⤐":"⤐","®":"®","®":"®","Ŕ":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","ℜ":"ℜ","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"⧐","⊵":"⊵","⥏":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","⇒":"⇒","ℝ":"ℝ","⥰":"⥰","⇛":"⇛","ℛ":"ℛ","↱":"↱","⧴":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Ś","⪼":"⪼","Š":"Š","Ş":"Ş","Ŝ":"Ŝ","С":"С","𝔖":"𝔖","↓":"↓","←":"←","→":"→","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"𝕊","√":"√","□":"□","⊓":"⊓","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊔":"⊔","𝒮":"𝒮","⋆":"⋆","⋐":"⋐","⋐":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∋":"∋","∑":"∑","⋑":"⋑","⊃":"⊃","⊇":"⊇","⋑":"⋑","Þ":"Þ","Þ":"Þ","™":"™","Ћ":"Ћ","Ц":"Ц"," ":"\t","Τ":"Τ","Ť":"Ť","Ţ":"Ţ","Т":"Т","𝔗":"𝔗","∴":"∴","Θ":"Θ","  ":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"𝕋","⃛":"⃛","𝒯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"Ў","Ŭ":"Ŭ","Û":"Û","Û":"Û","У":"У","Ű":"Ű","𝔘":"𝔘","Ù":"Ù","Ù":"Ù","Ū":"Ū","_":"_","⏟":"⏟","⎵":"⎵","⏝":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"𝕌","↑":"↑","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","⇑":"⇑","⇕":"⇕","↖":"↖","↗":"↗","ϒ":"ϒ","Υ":"Υ","Ů":"Ů","𝒰":"𝒰","Ũ":"Ũ","Ü":"Ü","Ü":"Ü","⊫":"⊫","⫫":"⫫","В":"В","⊩":"⊩","⫦":"⫦","⋁":"⋁","‖":"‖","‖":"‖","∣":"∣","|":"|","❘":"❘","≀":"≀"," ":" ","𝔙":"𝔙","𝕍":"𝕍","𝒱":"𝒱","⊪":"⊪","Ŵ":"Ŵ","⋀":"⋀","𝔚":"𝔚","𝕎":"𝕎","𝒲":"𝒲","𝔛":"𝔛","Ξ":"Ξ","𝕏":"𝕏","𝒳":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ý","Ý":"Ý","Ŷ":"Ŷ","Ы":"Ы","𝔜":"𝔜","𝕐":"𝕐","𝒴":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Ż","​":"​","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"𝒵","á":"á","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","â":"â","´":"´","´":"´","а":"а","æ":"æ","æ":"æ","⁡":"⁡","𝔞":"𝔞","à":"à","à":"à","ℵ":"ℵ","ℵ":"ℵ","α":"α","ā":"ā","⨿":"⨿","&":"&","&":"&","∧":"∧","⩕":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∠":"∠","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"⦝","∢":"∢","Å":"Å","⍼":"⍼","ą":"ą","𝕒":"𝕒","≈":"≈","⩰":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","≈":"≈","≊":"≊","å":"å","å":"å","𝒶":"𝒶","*":"*","≈":"≈","≍":"≍","ã":"ã","ã":"ã","ä":"ä","ä":"ä","∳":"∳","⨑":"⨑","⫭":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"⋍","⊽":"⊽","⌅":"⌅","⌅":"⌅","⎵":"⎵","⎶":"⎶","≌":"≌","б":"б","„":"„","∵":"∵","∵":"∵","⦰":"⦰","϶":"϶","ℬ":"ℬ","β":"β","ℶ":"ℶ","≬":"≬","𝔟":"𝔟","⋂":"⋂","◯":"◯","⋃":"⋃","⨀":"⨀","⨁":"⨁","⨂":"⨂","⨆":"⨆","★":"★","▽":"▽","△":"△","⨄":"⨄","⋁":"⋁","⋀":"⋀","⤍":"⤍","⧫":"⧫","▪":"▪","▴":"▴","▾":"▾","◂":"◂","▸":"▸","␣":"␣","▒":"▒","░":"░","▓":"▓","█":"█","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"⌐","𝕓":"𝕓","⊥":"⊥","⊥":"⊥","⋈":"⋈","╗":"╗","╔":"╔","╖":"╖","╓":"╓","═":"═","╦":"╦","╩":"╩","╤":"╤","╧":"╧","╝":"╝","╚":"╚","╜":"╜","╙":"╙","║":"║","╬":"╬","╣":"╣","╠":"╠","╫":"╫","╢":"╢","╟":"╟","⧉":"⧉","╕":"╕","╒":"╒","┐":"┐","┌":"┌","─":"─","╥":"╥","╨":"╨","┬":"┬","┴":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"╛","╘":"╘","┘":"┘","└":"└","│":"│","╪":"╪","╡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","‵":"‵","˘":"˘","¦":"¦","¦":"¦","𝒷":"𝒷","⁏":"⁏","∽":"∽","⋍":"⋍","\":"\\","⧅":"⧅","⟈":"⟈","•":"•","•":"•","≎":"≎","⪮":"⪮","≏":"≏","≏":"≏","ć":"ć","∩":"∩","⩄":"⩄","⩉":"⩉","⩋":"⩋","⩇":"⩇","⩀":"⩀","∩︀":"∩︀","⁁":"⁁","ˇ":"ˇ","⩍":"⩍","č":"č","ç":"ç","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"⩐","ċ":"ċ","¸":"¸","¸":"¸","⦲":"⦲","¢":"¢","¢":"¢","·":"·","𝔠":"𝔠","ч":"ч","✓":"✓","✓":"✓","χ":"χ","○":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","®":"®","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"⊝","≗":"≗","⨐":"⨐","⫯":"⫯","⧂":"⧂","♣":"♣","♣":"♣",":":":","≔":"≔","≔":"≔",",":",","@":"@","∁":"∁","∘":"∘","∁":"∁","ℂ":"ℂ","≅":"≅","⩭":"⩭","∮":"∮","𝕔":"𝕔","∐":"∐","©":"©","©":"©","℗":"℗","↵":"↵","✗":"✗","𝒸":"𝒸","⫏":"⫏","⫑":"⫑","⫐":"⫐","⫒":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"⊍","⩅":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋞":"⋞","⋟":"⋟","⋎":"⋎","⋏":"⋏","¤":"¤","¤":"¤","↶":"↶","↷":"↷","⋎":"⋎","⋏":"⋏","∲":"∲","∱":"∱","⌭":"⌭","⇓":"⇓","⥥":"⥥","†":"†","ℸ":"ℸ","↓":"↓","‐":"‐","⊣":"⊣","⤏":"⤏","˝":"˝","ď":"ď","д":"д","ⅆ":"ⅆ","‡":"‡","⇊":"⇊","⩷":"⩷","°":"°","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"𝔡","⇃":"⇃","⇂":"⇂","⋄":"⋄","⋄":"⋄","♦":"♦","♦":"♦","¨":"¨","ϝ":"ϝ","⋲":"⋲","÷":"÷","÷":"÷","÷":"÷","⋇":"⋇","⋇":"⋇","ђ":"ђ","⌞":"⌞","⌍":"⌍","$":"$","𝕕":"𝕕","˙":"˙","≐":"≐","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌆":"⌆","↓":"↓","⇊":"⇊","⇃":"⇃","⇂":"⇂","⤐":"⤐","⌟":"⌟","⌌":"⌌","𝒹":"𝒹","ѕ":"ѕ","⧶":"⧶","đ":"đ","⋱":"⋱","▿":"▿","▾":"▾","⇵":"⇵","⥯":"⥯","⦦":"⦦","џ":"џ","⟿":"⟿","⩷":"⩷","≑":"≑","é":"é","é":"é","⩮":"⩮","ě":"ě","≖":"≖","ê":"ê","ê":"ê","≕":"≕","э":"э","ė":"ė","ⅇ":"ⅇ","≒":"≒","𝔢":"𝔢","⪚":"⪚","è":"è","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"⏧","ℓ":"ℓ","⪕":"⪕","⪗":"⪗","ē":"ē","∅":"∅","∅":"∅","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"ŋ"," ":" ","ę":"ę","𝕖":"𝕖","⋕":"⋕","⧣":"⧣","⩱":"⩱","ε":"ε","ε":"ε","ϵ":"ϵ","≖":"≖","≕":"≕","≂":"≂","⪖":"⪖","⪕":"⪕","=":"=","≟":"≟","≡":"≡","⩸":"⩸","⧥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","≐":"≐","≂":"≂","η":"η","ð":"ð","ð":"ð","ë":"ë","ë":"ë","€":"€","!":"!","∃":"∃","ℰ":"ℰ","ⅇ":"ⅇ","≒":"≒","ф":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"𝔣","fi":"fi","fj":"fj","♭":"♭","fl":"fl","▱":"▱","ƒ":"ƒ","𝕗":"𝕗","∀":"∀","⋔":"⋔","⫙":"⫙","⨍":"⨍","½":"½","½":"½","⅓":"⅓","¼":"¼","¼":"¼","⅕":"⅕","⅙":"⅙","⅛":"⅛","⅔":"⅔","⅖":"⅖","¾":"¾","¾":"¾","⅗":"⅗","⅜":"⅜","⅘":"⅘","⅚":"⅚","⅝":"⅝","⅞":"⅞","⁄":"⁄","⌢":"⌢","𝒻":"𝒻","≧":"≧","⪌":"⪌","ǵ":"ǵ","γ":"γ","ϝ":"ϝ","⪆":"⪆","ğ":"ğ","ĝ":"ĝ","г":"г","ġ":"ġ","≥":"≥","⋛":"⋛","≥":"≥","≧":"≧","⩾":"⩾","⩾":"⩾","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"𝔤","≫":"≫","⋙":"⋙","ℷ":"ℷ","ѓ":"ѓ","≷":"≷","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪊":"⪊","⪈":"⪈","⪈":"⪈","≩":"≩","⋧":"⋧","𝕘":"𝕘","`":"`","ℊ":"ℊ","≳":"≳","⪎":"⪎","⪐":"⪐",">":">",">":">","⪧":"⪧","⩺":"⩺","⋗":"⋗","⦕":"⦕","⩼":"⩼","⪆":"⪆","⥸":"⥸","⋗":"⋗","⋛":"⋛","⪌":"⪌","≷":"≷","≳":"≳","≩︀":"≩︀","≩︀":"≩︀","⇔":"⇔"," ":" ","½":"½","ℋ":"ℋ","ъ":"ъ","↔":"↔","⥈":"⥈","↭":"↭","ℏ":"ℏ","ĥ":"ĥ","♥":"♥","♥":"♥","…":"…","⊹":"⊹","𝔥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"𝕙","―":"―","𝒽":"𝒽","ℏ":"ℏ","ħ":"ħ","⁃":"⁃","‐":"‐","í":"í","í":"í","⁣":"⁣","î":"î","î":"î","и":"и","е":"е","¡":"¡","¡":"¡","⇔":"⇔","𝔦":"𝔦","ì":"ì","ì":"ì","ⅈ":"ⅈ","⨌":"⨌","∭":"∭","⧜":"⧜","℩":"℩","ij":"ij","ī":"ī","ℑ":"ℑ","ℐ":"ℐ","ℑ":"ℑ","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","∈":"∈","℅":"℅","∞":"∞","⧝":"⧝","ı":"ı","∫":"∫","⊺":"⊺","ℤ":"ℤ","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"ё","į":"į","𝕚":"𝕚","ι":"ι","⨼":"⨼","¿":"¿","¿":"¿","𝒾":"𝒾","∈":"∈","⋹":"⋹","⋵":"⋵","⋴":"⋴","⋳":"⋳","∈":"∈","⁢":"⁢","ĩ":"ĩ","і":"і","ï":"ï","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"𝔧","ȷ":"ȷ","𝕛":"𝕛","𝒿":"𝒿","ј":"ј","є":"є","κ":"κ","ϰ":"ϰ","ķ":"ķ","к":"к","𝔨":"𝔨","ĸ":"ĸ","х":"х","ќ":"ќ","𝕜":"𝕜","𝓀":"𝓀","⇚":"⇚","⇐":"⇐","⤛":"⤛","⤎":"⤎","≦":"≦","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","ℒ":"ℒ","λ":"λ","⟨":"⟨","⦑":"⦑","⟨":"⟨","⪅":"⪅","«":"«","«":"«","←":"←","⇤":"⇤","⤟":"⤟","⤝":"⤝","↩":"↩","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"❲","{":"{","[":"[","⦋":"⦋","⦏":"⦏","⦍":"⦍","ľ":"ľ","ļ":"ļ","⌈":"⌈","{":"{","л":"л","⤶":"⤶","“":"“","„":"„","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","←":"←","↢":"↢","↽":"↽","↼":"↼","⇇":"⇇","↔":"↔","⇆":"⇆","⇋":"⇋","↭":"↭","⋋":"⋋","⋚":"⋚","≤":"≤","≦":"≦","⩽":"⩽","⩽":"⩽","⪨":"⪨","⩿":"⩿","⪁":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⪅":"⪅","⋖":"⋖","⋚":"⋚","⪋":"⪋","≶":"≶","≲":"≲","⥼":"⥼","⌊":"⌊","𝔩":"𝔩","≶":"≶","⪑":"⪑","↽":"↽","↼":"↼","⥪":"⥪","▄":"▄","љ":"љ","≪":"≪","⇇":"⇇","⌞":"⌞","⥫":"⥫","◺":"◺","ŀ":"ŀ","⎰":"⎰","⎰":"⎰","≨":"≨","⪉":"⪉","⪉":"⪉","⪇":"⪇","⪇":"⪇","≨":"≨","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟦":"⟦","⟵":"⟵","⟷":"⟷","⟼":"⟼","⟶":"⟶","↫":"↫","↬":"↬","⦅":"⦅","𝕝":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","_":"_","◊":"◊","◊":"◊","⧫":"⧫","(":"(","⦓":"⦓","⇆":"⇆","⌟":"⌟","⇋":"⇋","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"𝓁","↰":"↰","≲":"≲","⪍":"⪍","⪏":"⪏","[":"[","‘":"‘","‚":"‚","ł":"ł","<":"<","<":"<","⪦":"⪦","⩹":"⩹","⋖":"⋖","⋋":"⋋","⋉":"⋉","⥶":"⥶","⩻":"⩻","⦖":"⦖","◃":"◃","⊴":"⊴","◂":"◂","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","≨︀":"≨︀","∺":"∺","¯":"¯","¯":"¯","♂":"♂","✠":"✠","✠":"✠","↦":"↦","↦":"↦","↧":"↧","↤":"↤","↥":"↥","▮":"▮","⨩":"⨩","м":"м","—":"—","∡":"∡","𝔪":"𝔪","℧":"℧","µ":"µ","µ":"µ","∣":"∣","*":"*","⫰":"⫰","·":"·","·":"·","−":"−","⊟":"⊟","∸":"∸","⨪":"⨪","⫛":"⫛","…":"…","∓":"∓","⊧":"⊧","𝕞":"𝕞","∓":"∓","𝓂":"𝓂","∾":"∾","μ":"μ","⊸":"⊸","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","≫̸":"≫̸","⇍":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","≪̸":"≪̸","⇏":"⇏","⊯":"⊯","⊮":"⊮","∇":"∇","ń":"ń","∠⃒":"∠⃒","≉":"≉","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","≉":"≉","♮":"♮","♮":"♮","ℕ":"ℕ"," ":" "," ":" ","≎̸":"≎̸","≏̸":"≏̸","⩃":"⩃","ň":"ň","ņ":"ņ","≇":"≇","⩭̸":"⩭̸","⩂":"⩂","н":"н","–":"–","≠":"≠","⇗":"⇗","⤤":"⤤","↗":"↗","↗":"↗","≐̸":"≐̸","≢":"≢","⤨":"⤨","≂̸":"≂̸","∄":"∄","∄":"∄","𝔫":"𝔫","≧̸":"≧̸","≱":"≱","≱":"≱","≧̸":"≧̸","⩾̸":"⩾̸","⩾̸":"⩾̸","≵":"≵","≯":"≯","≯":"≯","⇎":"⇎","↮":"↮","⫲":"⫲","∋":"∋","⋼":"⋼","⋺":"⋺","∋":"∋","њ":"њ","⇍":"⇍","≦̸":"≦̸","↚":"↚","‥":"‥","≰":"≰","↚":"↚","↮":"↮","≰":"≰","≦̸":"≦̸","⩽̸":"⩽̸","⩽̸":"⩽̸","≮":"≮","≴":"≴","≮":"≮","⋪":"⋪","⋬":"⋬","∤":"∤","𝕟":"𝕟","¬":"¬","¬":"¬","∉":"∉","⋹̸":"⋹̸","⋵̸":"⋵̸","∉":"∉","⋷":"⋷","⋶":"⋶","∌":"∌","∌":"∌","⋾":"⋾","⋽":"⋽","∦":"∦","∦":"∦","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","⊀":"⊀","⋠":"⋠","⪯̸":"⪯̸","⊀":"⊀","⪯̸":"⪯̸","⇏":"⇏","↛":"↛","⤳̸":"⤳̸","↝̸":"↝̸","↛":"↛","⋫":"⋫","⋭":"⋭","⊁":"⊁","⋡":"⋡","⪰̸":"⪰̸","𝓃":"𝓃","∤":"∤","∦":"∦","≁":"≁","≄":"≄","≄":"≄","∤":"∤","∦":"∦","⋢":"⋢","⋣":"⋣","⊄":"⊄","⫅̸":"⫅̸","⊈":"⊈","⊂⃒":"⊂⃒","⊈":"⊈","⫅̸":"⫅̸","⊁":"⊁","⪰̸":"⪰̸","⊅":"⊅","⫆̸":"⫆̸","⊉":"⊉","⊃⃒":"⊃⃒","⊉":"⊉","⫆̸":"⫆̸","≹":"≹","ñ":"ñ","ñ":"ñ","≸":"≸","⋪":"⋪","⋬":"⋬","⋫":"⋫","⋭":"⋭","ν":"ν","#":"#","№":"№"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","↖":"↖","↖":"↖","⤧":"⤧","Ⓢ":"Ⓢ","ó":"ó","ó":"ó","⊛":"⊛","⊚":"⊚","ô":"ô","ô":"ô","о":"о","⊝":"⊝","ő":"ő","⨸":"⨸","⊙":"⊙","⦼":"⦼","œ":"œ","⦿":"⦿","𝔬":"𝔬","˛":"˛","ò":"ò","ò":"ò","⧁":"⧁","⦵":"⦵","Ω":"Ω","∮":"∮","↺":"↺","⦾":"⦾","⦻":"⦻","‾":"‾","⧀":"⧀","ō":"ō","ω":"ω","ο":"ο","⦶":"⦶","⊖":"⊖","𝕠":"𝕠","⦷":"⦷","⦹":"⦹","⊕":"⊕","∨":"∨","↻":"↻","⩝":"⩝","ℴ":"ℴ","ℴ":"ℴ","ª":"ª","ª":"ª","º":"º","º":"º","⊶":"⊶","⩖":"⩖","⩗":"⩗","⩛":"⩛","ℴ":"ℴ","ø":"ø","ø":"ø","⊘":"⊘","õ":"õ","õ":"õ","⊗":"⊗","⨶":"⨶","ö":"ö","ö":"ö","⌽":"⌽","∥":"∥","¶":"¶","¶":"¶","∥":"∥","⫳":"⫳","⫽":"⫽","∂":"∂","п":"п","%":"%",".":".","‰":"‰","⊥":"⊥","‱":"‱","𝔭":"𝔭","φ":"φ","ϕ":"ϕ","ℳ":"ℳ","☎":"☎","π":"π","⋔":"⋔","ϖ":"ϖ","ℏ":"ℏ","ℎ":"ℎ","ℏ":"ℏ","+":"+","⨣":"⨣","⊞":"⊞","⨢":"⨢","∔":"∔","⨥":"⨥","⩲":"⩲","±":"±","±":"±","⨦":"⨦","⨧":"⨧","±":"±","⨕":"⨕","𝕡":"𝕡","£":"£","£":"£","≺":"≺","⪳":"⪳","⪷":"⪷","≼":"≼","⪯":"⪯","≺":"≺","⪷":"⪷","≼":"≼","⪯":"⪯","⪹":"⪹","⪵":"⪵","⋨":"⋨","≾":"≾","′":"′","ℙ":"ℙ","⪵":"⪵","⪹":"⪹","⋨":"⋨","∏":"∏","⌮":"⌮","⌒":"⌒","⌓":"⌓","∝":"∝","∝":"∝","≾":"≾","⊰":"⊰","𝓅":"𝓅","ψ":"ψ"," ":" ","𝔮":"𝔮","⨌":"⨌","𝕢":"𝕢","⁗":"⁗","𝓆":"𝓆","ℍ":"ℍ","⨖":"⨖","?":"?","≟":"≟",""":'"',""":'"',"⇛":"⇛","⇒":"⇒","⤜":"⤜","⤏":"⤏","⥤":"⥤","∽̱":"∽̱","ŕ":"ŕ","√":"√","⦳":"⦳","⟩":"⟩","⦒":"⦒","⦥":"⦥","⟩":"⟩","»":"»","»":"»","→":"→","⥵":"⥵","⇥":"⇥","⤠":"⤠","⤳":"⤳","⤞":"⤞","↪":"↪","↬":"↬","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"↝","⤚":"⤚","∶":"∶","ℚ":"ℚ","⤍":"⤍","❳":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"⦐","ř":"ř","ŗ":"ŗ","⌉":"⌉","}":"}","р":"р","⤷":"⤷","⥩":"⥩","”":"”","”":"”","↳":"↳","ℜ":"ℜ","ℛ":"ℛ","ℜ":"ℜ","ℝ":"ℝ","▭":"▭","®":"®","®":"®","⥽":"⥽","⌋":"⌋","𝔯":"𝔯","⇁":"⇁","⇀":"⇀","⥬":"⥬","ρ":"ρ","ϱ":"ϱ","→":"→","↣":"↣","⇁":"⇁","⇀":"⇀","⇄":"⇄","⇌":"⇌","⇉":"⇉","↝":"↝","⋌":"⋌","˚":"˚","≓":"≓","⇄":"⇄","⇌":"⇌","‏":"‏","⎱":"⎱","⎱":"⎱","⫮":"⫮","⟭":"⟭","⇾":"⇾","⟧":"⟧","⦆":"⦆","𝕣":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","⇉":"⇉","›":"›","𝓇":"𝓇","↱":"↱","]":"]","’":"’","’":"’","⋌":"⋌","⋊":"⋊","▹":"▹","⊵":"⊵","▸":"▸","⧎":"⧎","⥨":"⥨","℞":"℞","ś":"ś","‚":"‚","≻":"≻","⪴":"⪴","⪸":"⪸","š":"š","≽":"≽","⪰":"⪰","ş":"ş","ŝ":"ŝ","⪶":"⪶","⪺":"⪺","⋩":"⋩","⨓":"⨓","≿":"≿","с":"с","⋅":"⋅","⊡":"⊡","⩦":"⩦","⇘":"⇘","⤥":"⤥","↘":"↘","↘":"↘","§":"§","§":"§",";":";","⤩":"⤩","∖":"∖","∖":"∖","✶":"✶","𝔰":"𝔰","⌢":"⌢","♯":"♯","щ":"щ","ш":"ш","∣":"∣","∥":"∥","­":"­","­":"­","σ":"σ","ς":"ς","ς":"ς","∼":"∼","⩪":"⩪","≃":"≃","≃":"≃","⪞":"⪞","⪠":"⪠","⪝":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","←":"←","∖":"∖","⨳":"⨳","⧤":"⧤","∣":"∣","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ь","/":"/","⧄":"⧄","⌿":"⌿","𝕤":"𝕤","♠":"♠","♠":"♠","∥":"∥","⊓":"⊓","⊓︀":"⊓︀","⊔":"⊔","⊔︀":"⊔︀","⊏":"⊏","⊑":"⊑","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊐":"⊐","⊒":"⊒","□":"□","□":"□","▪":"▪","▪":"▪","→":"→","𝓈":"𝓈","∖":"∖","⌣":"⌣","⋆":"⋆","☆":"☆","★":"★","ϵ":"ϵ","ϕ":"ϕ","¯":"¯","⊂":"⊂","⫅":"⫅","⪽":"⪽","⊆":"⊆","⫃":"⫃","⫁":"⫁","⫋":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⊂":"⊂","⊆":"⊆","⫅":"⫅","⊊":"⊊","⫋":"⫋","⫇":"⫇","⫕":"⫕","⫓":"⫓","≻":"≻","⪸":"⪸","≽":"≽","⪰":"⪰","⪺":"⪺","⪶":"⪶","⋩":"⋩","≿":"≿","∑":"∑","♪":"♪","¹":"¹","¹":"¹","²":"²","²":"²","³":"³","³":"³","⊃":"⊃","⫆":"⫆","⪾":"⪾","⫘":"⫘","⊇":"⊇","⫄":"⫄","⟉":"⟉","⫗":"⫗","⥻":"⥻","⫂":"⫂","⫌":"⫌","⊋":"⊋","⫀":"⫀","⊃":"⊃","⊇":"⊇","⫆":"⫆","⊋":"⊋","⫌":"⫌","⫈":"⫈","⫔":"⫔","⫖":"⫖","⇙":"⇙","⤦":"⤦","↙":"↙","↙":"↙","⤪":"⤪","ß":"ß","ß":"ß","⌖":"⌖","τ":"τ","⎴":"⎴","ť":"ť","ţ":"ţ","т":"т","⃛":"⃛","⌕":"⌕","𝔱":"𝔱","∴":"∴","∴":"∴","θ":"θ","ϑ":"ϑ","ϑ":"ϑ","≈":"≈","∼":"∼"," ":" ","≈":"≈","∼":"∼","þ":"þ","þ":"þ","˜":"˜","×":"×","×":"×","⊠":"⊠","⨱":"⨱","⨰":"⨰","∭":"∭","⤨":"⤨","⊤":"⊤","⌶":"⌶","⫱":"⫱","𝕥":"𝕥","⫚":"⫚","⤩":"⤩","‴":"‴","™":"™","▵":"▵","▿":"▿","◃":"◃","⊴":"⊴","≜":"≜","▹":"▹","⊵":"⊵","◬":"◬","≜":"≜","⨺":"⨺","⨹":"⨹","⧍":"⧍","⨻":"⨻","⏢":"⏢","𝓉":"𝓉","ц":"ц","ћ":"ћ","ŧ":"ŧ","≬":"≬","↞":"↞","↠":"↠","⇑":"⇑","⥣":"⥣","ú":"ú","ú":"ú","↑":"↑","ў":"ў","ŭ":"ŭ","û":"û","û":"û","у":"у","⇅":"⇅","ű":"ű","⥮":"⥮","⥾":"⥾","𝔲":"𝔲","ù":"ù","ù":"ù","↿":"↿","↾":"↾","▀":"▀","⌜":"⌜","⌜":"⌜","⌏":"⌏","◸":"◸","ū":"ū","¨":"¨","¨":"¨","ų":"ų","𝕦":"𝕦","↑":"↑","↕":"↕","↿":"↿","↾":"↾","⊎":"⊎","υ":"υ","ϒ":"ϒ","υ":"υ","⇈":"⇈","⌝":"⌝","⌝":"⌝","⌎":"⌎","ů":"ů","◹":"◹","𝓊":"𝓊","⋰":"⋰","ũ":"ũ","▵":"▵","▴":"▴","⇈":"⇈","ü":"ü","ü":"ü","⦧":"⦧","⇕":"⇕","⫨":"⫨","⫩":"⫩","⊨":"⊨","⦜":"⦜","ϵ":"ϵ","ϰ":"ϰ","∅":"∅","ϕ":"ϕ","ϖ":"ϖ","∝":"∝","↕":"↕","ϱ":"ϱ","ς":"ς","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","ϑ":"ϑ","⊲":"⊲","⊳":"⊳","в":"в","⊢":"⊢","∨":"∨","⊻":"⊻","≚":"≚","⋮":"⋮","|":"|","|":"|","𝔳":"𝔳","⊲":"⊲","⊂⃒":"⊂⃒","⊃⃒":"⊃⃒","𝕧":"𝕧","∝":"∝","⊳":"⊳","𝓋":"𝓋","⫋︀":"⫋︀","⊊︀":"⊊︀","⫌︀":"⫌︀","⊋︀":"⊋︀","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","∧":"∧","≙":"≙","℘":"℘","𝔴":"𝔴","𝕨":"𝕨","℘":"℘","≀":"≀","≀":"≀","𝓌":"𝓌","⋂":"⋂","◯":"◯","⋃":"⋃","▽":"▽","𝔵":"𝔵","⟺":"⟺","⟷":"⟷","ξ":"ξ","⟸":"⟸","⟵":"⟵","⟼":"⟼","⋻":"⋻","⨀":"⨀","𝕩":"𝕩","⨁":"⨁","⨂":"⨂","⟹":"⟹","⟶":"⟶","𝓍":"𝓍","⨆":"⨆","⨄":"⨄","△":"△","⋁":"⋁","⋀":"⋀","ý":"ý","ý":"ý","я":"я","ŷ":"ŷ","ы":"ы","¥":"¥","¥":"¥","𝔶":"𝔶","ї":"ї","𝕪":"𝕪","𝓎":"𝓎","ю":"ю","ÿ":"ÿ","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ℨ":"ℨ","ζ":"ζ","𝔷":"𝔷","ж":"ж","⇝":"⇝","𝕫":"𝕫","𝓏":"𝓏","‍":"‍","‌":"‌"},characters:{"Æ":"Æ","&":"&","Á":"Á","Ă":"Ă","Â":"Â","А":"А","𝔄":"𝔄","À":"À","Α":"Α","Ā":"Ā","⩓":"⩓","Ą":"Ą","𝔸":"𝔸","⁡":"⁡","Å":"Å","𝒜":"𝒜","≔":"≔","Ã":"Ã","Ä":"Ä","∖":"∖","⫧":"⫧","⌆":"⌆","Б":"Б","∵":"∵","ℬ":"ℬ","Β":"Β","𝔅":"𝔅","𝔹":"𝔹","˘":"˘","≎":"≎","Ч":"Ч","©":"©","Ć":"Ć","⋒":"⋒","ⅅ":"ⅅ","ℭ":"ℭ","Č":"Č","Ç":"Ç","Ĉ":"Ĉ","∰":"∰","Ċ":"Ċ","¸":"¸","·":"·","Χ":"Χ","⊙":"⊙","⊖":"⊖","⊕":"⊕","⊗":"⊗","∲":"∲","”":"”","’":"’","∷":"∷","⩴":"⩴","≡":"≡","∯":"∯","∮":"∮","ℂ":"ℂ","∐":"∐","∳":"∳","⨯":"⨯","𝒞":"𝒞","⋓":"⋓","≍":"≍","⤑":"⤑","Ђ":"Ђ","Ѕ":"Ѕ","Џ":"Џ","‡":"‡","↡":"↡","⫤":"⫤","Ď":"Ď","Д":"Д","∇":"∇","Δ":"Δ","𝔇":"𝔇","´":"´","˙":"˙","˝":"˝","`":"`","˜":"˜","⋄":"⋄","ⅆ":"ⅆ","𝔻":"𝔻","¨":"¨","⃜":"⃜","≐":"≐","⇓":"⇓","⇐":"⇐","⇔":"⇔","⟸":"⟸","⟺":"⟺","⟹":"⟹","⇒":"⇒","⊨":"⊨","⇑":"⇑","⇕":"⇕","∥":"∥","↓":"↓","⤓":"⤓","⇵":"⇵","̑":"̑","⥐":"⥐","⥞":"⥞","↽":"↽","⥖":"⥖","⥟":"⥟","⇁":"⇁","⥗":"⥗","⊤":"⊤","↧":"↧","𝒟":"𝒟","Đ":"Đ","Ŋ":"Ŋ","Ð":"Ð","É":"É","Ě":"Ě","Ê":"Ê","Э":"Э","Ė":"Ė","𝔈":"𝔈","È":"È","∈":"∈","Ē":"Ē","◻":"◻","▫":"▫","Ę":"Ę","𝔼":"𝔼","Ε":"Ε","⩵":"⩵","≂":"≂","⇌":"⇌","ℰ":"ℰ","⩳":"⩳","Η":"Η","Ë":"Ë","∃":"∃","ⅇ":"ⅇ","Ф":"Ф","𝔉":"𝔉","◼":"◼","▪":"▪","𝔽":"𝔽","∀":"∀","ℱ":"ℱ","Ѓ":"Ѓ",">":">","Γ":"Γ","Ϝ":"Ϝ","Ğ":"Ğ","Ģ":"Ģ","Ĝ":"Ĝ","Г":"Г","Ġ":"Ġ","𝔊":"𝔊","⋙":"⋙","𝔾":"𝔾","≥":"≥","⋛":"⋛","≧":"≧","⪢":"⪢","≷":"≷","⩾":"⩾","≳":"≳","𝒢":"𝒢","≫":"≫","Ъ":"Ъ","ˇ":"ˇ","^":"^","Ĥ":"Ĥ","ℌ":"ℌ","ℋ":"ℋ","ℍ":"ℍ","─":"─","Ħ":"Ħ","≏":"≏","Е":"Е","IJ":"IJ","Ё":"Ё","Í":"Í","Î":"Î","И":"И","İ":"İ","ℑ":"ℑ","Ì":"Ì","Ī":"Ī","ⅈ":"ⅈ","∬":"∬","∫":"∫","⋂":"⋂","⁣":"⁣","⁢":"⁢","Į":"Į","𝕀":"𝕀","Ι":"Ι","ℐ":"ℐ","Ĩ":"Ĩ","І":"І","Ï":"Ï","Ĵ":"Ĵ","Й":"Й","𝔍":"𝔍","𝕁":"𝕁","𝒥":"𝒥","Ј":"Ј","Є":"Є","Х":"Х","Ќ":"Ќ","Κ":"Κ","Ķ":"Ķ","К":"К","𝔎":"𝔎","𝕂":"𝕂","𝒦":"𝒦","Љ":"Љ","<":"<","Ĺ":"Ĺ","Λ":"Λ","⟪":"⟪","ℒ":"ℒ","↞":"↞","Ľ":"Ľ","Ļ":"Ļ","Л":"Л","⟨":"⟨","←":"←","⇤":"⇤","⇆":"⇆","⌈":"⌈","⟦":"⟦","⥡":"⥡","⇃":"⇃","⥙":"⥙","⌊":"⌊","↔":"↔","⥎":"⥎","⊣":"⊣","↤":"↤","⥚":"⥚","⊲":"⊲","⧏":"⧏","⊴":"⊴","⥑":"⥑","⥠":"⥠","↿":"↿","⥘":"⥘","↼":"↼","⥒":"⥒","⋚":"⋚","≦":"≦","≶":"≶","⪡":"⪡","⩽":"⩽","≲":"≲","𝔏":"𝔏","⋘":"⋘","⇚":"⇚","Ŀ":"Ŀ","⟵":"⟵","⟷":"⟷","⟶":"⟶","𝕃":"𝕃","↙":"↙","↘":"↘","↰":"↰","Ł":"Ł","≪":"≪","⤅":"⤅","М":"М"," ":" ","ℳ":"ℳ","𝔐":"𝔐","∓":"∓","𝕄":"𝕄","Μ":"Μ","Њ":"Њ","Ń":"Ń","Ň":"Ň","Ņ":"Ņ","Н":"Н","​":"​","\n":" ","𝔑":"𝔑","⁠":"⁠"," ":" ","ℕ":"ℕ","⫬":"⫬","≢":"≢","≭":"≭","∦":"∦","∉":"∉","≠":"≠","≂̸":"≂̸","∄":"∄","≯":"≯","≱":"≱","≧̸":"≧̸","≫̸":"≫̸","≹":"≹","⩾̸":"⩾̸","≵":"≵","≎̸":"≎̸","≏̸":"≏̸","⋪":"⋪","⧏̸":"⧏̸","⋬":"⋬","≮":"≮","≰":"≰","≸":"≸","≪̸":"≪̸","⩽̸":"⩽̸","≴":"≴","⪢̸":"⪢̸","⪡̸":"⪡̸","⊀":"⊀","⪯̸":"⪯̸","⋠":"⋠","∌":"∌","⋫":"⋫","⧐̸":"⧐̸","⋭":"⋭","⊏̸":"⊏̸","⋢":"⋢","⊐̸":"⊐̸","⋣":"⋣","⊂⃒":"⊂⃒","⊈":"⊈","⊁":"⊁","⪰̸":"⪰̸","⋡":"⋡","≿̸":"≿̸","⊃⃒":"⊃⃒","⊉":"⊉","≁":"≁","≄":"≄","≇":"≇","≉":"≉","∤":"∤","𝒩":"𝒩","Ñ":"Ñ","Ν":"Ν","Œ":"Œ","Ó":"Ó","Ô":"Ô","О":"О","Ő":"Ő","𝔒":"𝔒","Ò":"Ò","Ō":"Ō","Ω":"Ω","Ο":"Ο","𝕆":"𝕆","“":"“","‘":"‘","⩔":"⩔","𝒪":"𝒪","Ø":"Ø","Õ":"Õ","⨷":"⨷","Ö":"Ö","‾":"‾","⏞":"⏞","⎴":"⎴","⏜":"⏜","∂":"∂","П":"П","𝔓":"𝔓","Φ":"Φ","Π":"Π","±":"±","ℙ":"ℙ","⪻":"⪻","≺":"≺","⪯":"⪯","≼":"≼","≾":"≾","″":"″","∏":"∏","∝":"∝","𝒫":"𝒫","Ψ":"Ψ",'"':""","𝔔":"𝔔","ℚ":"ℚ","𝒬":"𝒬","⤐":"⤐","®":"®","Ŕ":"Ŕ","⟫":"⟫","↠":"↠","⤖":"⤖","Ř":"Ř","Ŗ":"Ŗ","Р":"Р","ℜ":"ℜ","∋":"∋","⇋":"⇋","⥯":"⥯","Ρ":"Ρ","⟩":"⟩","→":"→","⇥":"⇥","⇄":"⇄","⌉":"⌉","⟧":"⟧","⥝":"⥝","⇂":"⇂","⥕":"⥕","⌋":"⌋","⊢":"⊢","↦":"↦","⥛":"⥛","⊳":"⊳","⧐":"⧐","⊵":"⊵","⥏":"⥏","⥜":"⥜","↾":"↾","⥔":"⥔","⇀":"⇀","⥓":"⥓","ℝ":"ℝ","⥰":"⥰","⇛":"⇛","ℛ":"ℛ","↱":"↱","⧴":"⧴","Щ":"Щ","Ш":"Ш","Ь":"Ь","Ś":"Ś","⪼":"⪼","Š":"Š","Ş":"Ş","Ŝ":"Ŝ","С":"С","𝔖":"𝔖","↑":"↑","Σ":"Σ","∘":"∘","𝕊":"𝕊","√":"√","□":"□","⊓":"⊓","⊏":"⊏","⊑":"⊑","⊐":"⊐","⊒":"⊒","⊔":"⊔","𝒮":"𝒮","⋆":"⋆","⋐":"⋐","⊆":"⊆","≻":"≻","⪰":"⪰","≽":"≽","≿":"≿","∑":"∑","⋑":"⋑","⊃":"⊃","⊇":"⊇","Þ":"Þ","™":"™","Ћ":"Ћ","Ц":"Ц","\t":" ","Τ":"Τ","Ť":"Ť","Ţ":"Ţ","Т":"Т","𝔗":"𝔗","∴":"∴","Θ":"Θ","  ":"  "," ":" ","∼":"∼","≃":"≃","≅":"≅","≈":"≈","𝕋":"𝕋","⃛":"⃛","𝒯":"𝒯","Ŧ":"Ŧ","Ú":"Ú","↟":"↟","⥉":"⥉","Ў":"Ў","Ŭ":"Ŭ","Û":"Û","У":"У","Ű":"Ű","𝔘":"𝔘","Ù":"Ù","Ū":"Ū",_:"_","⏟":"⏟","⎵":"⎵","⏝":"⏝","⋃":"⋃","⊎":"⊎","Ų":"Ų","𝕌":"𝕌","⤒":"⤒","⇅":"⇅","↕":"↕","⥮":"⥮","⊥":"⊥","↥":"↥","↖":"↖","↗":"↗","ϒ":"ϒ","Υ":"Υ","Ů":"Ů","𝒰":"𝒰","Ũ":"Ũ","Ü":"Ü","⊫":"⊫","⫫":"⫫","В":"В","⊩":"⊩","⫦":"⫦","⋁":"⋁","‖":"‖","∣":"∣","|":"|","❘":"❘","≀":"≀"," ":" ","𝔙":"𝔙","𝕍":"𝕍","𝒱":"𝒱","⊪":"⊪","Ŵ":"Ŵ","⋀":"⋀","𝔚":"𝔚","𝕎":"𝕎","𝒲":"𝒲","𝔛":"𝔛","Ξ":"Ξ","𝕏":"𝕏","𝒳":"𝒳","Я":"Я","Ї":"Ї","Ю":"Ю","Ý":"Ý","Ŷ":"Ŷ","Ы":"Ы","𝔜":"𝔜","𝕐":"𝕐","𝒴":"𝒴","Ÿ":"Ÿ","Ж":"Ж","Ź":"Ź","Ž":"Ž","З":"З","Ż":"Ż","Ζ":"Ζ","ℨ":"ℨ","ℤ":"ℤ","𝒵":"𝒵","á":"á","ă":"ă","∾":"∾","∾̳":"∾̳","∿":"∿","â":"â","а":"а","æ":"æ","𝔞":"𝔞","à":"à","ℵ":"ℵ","α":"α","ā":"ā","⨿":"⨿","∧":"∧","⩕":"⩕","⩜":"⩜","⩘":"⩘","⩚":"⩚","∠":"∠","⦤":"⦤","∡":"∡","⦨":"⦨","⦩":"⦩","⦪":"⦪","⦫":"⦫","⦬":"⦬","⦭":"⦭","⦮":"⦮","⦯":"⦯","∟":"∟","⊾":"⊾","⦝":"⦝","∢":"∢","⍼":"⍼","ą":"ą","𝕒":"𝕒","⩰":"⩰","⩯":"⩯","≊":"≊","≋":"≋","'":"'","å":"å","𝒶":"𝒶","*":"*","ã":"ã","ä":"ä","⨑":"⨑","⫭":"⫭","≌":"≌","϶":"϶","‵":"‵","∽":"∽","⋍":"⋍","⊽":"⊽","⌅":"⌅","⎶":"⎶","б":"б","„":"„","⦰":"⦰","β":"β","ℶ":"ℶ","≬":"≬","𝔟":"𝔟","◯":"◯","⨀":"⨀","⨁":"⨁","⨂":"⨂","⨆":"⨆","★":"★","▽":"▽","△":"△","⨄":"⨄","⤍":"⤍","⧫":"⧫","▴":"▴","▾":"▾","◂":"◂","▸":"▸","␣":"␣","▒":"▒","░":"░","▓":"▓","█":"█","=⃥":"=⃥","≡⃥":"≡⃥","⌐":"⌐","𝕓":"𝕓","⋈":"⋈","╗":"╗","╔":"╔","╖":"╖","╓":"╓","═":"═","╦":"╦","╩":"╩","╤":"╤","╧":"╧","╝":"╝","╚":"╚","╜":"╜","╙":"╙","║":"║","╬":"╬","╣":"╣","╠":"╠","╫":"╫","╢":"╢","╟":"╟","⧉":"⧉","╕":"╕","╒":"╒","┐":"┐","┌":"┌","╥":"╥","╨":"╨","┬":"┬","┴":"┴","⊟":"⊟","⊞":"⊞","⊠":"⊠","╛":"╛","╘":"╘","┘":"┘","└":"└","│":"│","╪":"╪","╡":"╡","╞":"╞","┼":"┼","┤":"┤","├":"├","¦":"¦","𝒷":"𝒷","⁏":"⁏","\\":"\","⧅":"⧅","⟈":"⟈","•":"•","⪮":"⪮","ć":"ć","∩":"∩","⩄":"⩄","⩉":"⩉","⩋":"⩋","⩇":"⩇","⩀":"⩀","∩︀":"∩︀","⁁":"⁁","⩍":"⩍","č":"č","ç":"ç","ĉ":"ĉ","⩌":"⩌","⩐":"⩐","ċ":"ċ","⦲":"⦲","¢":"¢","𝔠":"𝔠","ч":"ч","✓":"✓","χ":"χ","○":"○","⧃":"⧃","ˆ":"ˆ","≗":"≗","↺":"↺","↻":"↻","Ⓢ":"Ⓢ","⊛":"⊛","⊚":"⊚","⊝":"⊝","⨐":"⨐","⫯":"⫯","⧂":"⧂","♣":"♣",":":":",",":",","@":"@","∁":"∁","⩭":"⩭","𝕔":"𝕔","℗":"℗","↵":"↵","✗":"✗","𝒸":"𝒸","⫏":"⫏","⫑":"⫑","⫐":"⫐","⫒":"⫒","⋯":"⋯","⤸":"⤸","⤵":"⤵","⋞":"⋞","⋟":"⋟","↶":"↶","⤽":"⤽","∪":"∪","⩈":"⩈","⩆":"⩆","⩊":"⩊","⊍":"⊍","⩅":"⩅","∪︀":"∪︀","↷":"↷","⤼":"⤼","⋎":"⋎","⋏":"⋏","¤":"¤","∱":"∱","⌭":"⌭","⥥":"⥥","†":"†","ℸ":"ℸ","‐":"‐","⤏":"⤏","ď":"ď","д":"д","⇊":"⇊","⩷":"⩷","°":"°","δ":"δ","⦱":"⦱","⥿":"⥿","𝔡":"𝔡","♦":"♦","ϝ":"ϝ","⋲":"⋲","÷":"÷","⋇":"⋇","ђ":"ђ","⌞":"⌞","⌍":"⌍",$:"$","𝕕":"𝕕","≑":"≑","∸":"∸","∔":"∔","⊡":"⊡","⌟":"⌟","⌌":"⌌","𝒹":"𝒹","ѕ":"ѕ","⧶":"⧶","đ":"đ","⋱":"⋱","▿":"▿","⦦":"⦦","џ":"џ","⟿":"⟿","é":"é","⩮":"⩮","ě":"ě","≖":"≖","ê":"ê","≕":"≕","э":"э","ė":"ė","≒":"≒","𝔢":"𝔢","⪚":"⪚","è":"è","⪖":"⪖","⪘":"⪘","⪙":"⪙","⏧":"⏧","ℓ":"ℓ","⪕":"⪕","⪗":"⪗","ē":"ē","∅":"∅"," ":" "," ":" "," ":" ","ŋ":"ŋ"," ":" ","ę":"ę","𝕖":"𝕖","⋕":"⋕","⧣":"⧣","⩱":"⩱","ε":"ε","ϵ":"ϵ","=":"=","≟":"≟","⩸":"⩸","⧥":"⧥","≓":"≓","⥱":"⥱","ℯ":"ℯ","η":"η","ð":"ð","ë":"ë","€":"€","!":"!","ф":"ф","♀":"♀","ffi":"ffi","ff":"ff","ffl":"ffl","𝔣":"𝔣","fi":"fi",fj:"fj","♭":"♭","fl":"fl","▱":"▱","ƒ":"ƒ","𝕗":"𝕗","⋔":"⋔","⫙":"⫙","⨍":"⨍","½":"½","⅓":"⅓","¼":"¼","⅕":"⅕","⅙":"⅙","⅛":"⅛","⅔":"⅔","⅖":"⅖","¾":"¾","⅗":"⅗","⅜":"⅜","⅘":"⅘","⅚":"⅚","⅝":"⅝","⅞":"⅞","⁄":"⁄","⌢":"⌢","𝒻":"𝒻","⪌":"⪌","ǵ":"ǵ","γ":"γ","⪆":"⪆","ğ":"ğ","ĝ":"ĝ","г":"г","ġ":"ġ","⪩":"⪩","⪀":"⪀","⪂":"⪂","⪄":"⪄","⋛︀":"⋛︀","⪔":"⪔","𝔤":"𝔤","ℷ":"ℷ","ѓ":"ѓ","⪒":"⪒","⪥":"⪥","⪤":"⪤","≩":"≩","⪊":"⪊","⪈":"⪈","⋧":"⋧","𝕘":"𝕘","ℊ":"ℊ","⪎":"⪎","⪐":"⪐","⪧":"⪧","⩺":"⩺","⋗":"⋗","⦕":"⦕","⩼":"⩼","⥸":"⥸","≩︀":"≩︀","ъ":"ъ","⥈":"⥈","↭":"↭","ℏ":"ℏ","ĥ":"ĥ","♥":"♥","…":"…","⊹":"⊹","𝔥":"𝔥","⤥":"⤥","⤦":"⤦","⇿":"⇿","∻":"∻","↩":"↩","↪":"↪","𝕙":"𝕙","―":"―","𝒽":"𝒽","ħ":"ħ","⁃":"⁃","í":"í","î":"î","и":"и","е":"е","¡":"¡","𝔦":"𝔦","ì":"ì","⨌":"⨌","∭":"∭","⧜":"⧜","℩":"℩","ij":"ij","ī":"ī","ı":"ı","⊷":"⊷","Ƶ":"Ƶ","℅":"℅","∞":"∞","⧝":"⧝","⊺":"⊺","⨗":"⨗","⨼":"⨼","ё":"ё","į":"į","𝕚":"𝕚","ι":"ι","¿":"¿","𝒾":"𝒾","⋹":"⋹","⋵":"⋵","⋴":"⋴","⋳":"⋳","ĩ":"ĩ","і":"і","ï":"ï","ĵ":"ĵ","й":"й","𝔧":"𝔧","ȷ":"ȷ","𝕛":"𝕛","𝒿":"𝒿","ј":"ј","є":"є","κ":"κ","ϰ":"ϰ","ķ":"ķ","к":"к","𝔨":"𝔨","ĸ":"ĸ","х":"х","ќ":"ќ","𝕜":"𝕜","𝓀":"𝓀","⤛":"⤛","⤎":"⤎","⪋":"⪋","⥢":"⥢","ĺ":"ĺ","⦴":"⦴","λ":"λ","⦑":"⦑","⪅":"⪅","«":"«","⤟":"⤟","⤝":"⤝","↫":"↫","⤹":"⤹","⥳":"⥳","↢":"↢","⪫":"⪫","⤙":"⤙","⪭":"⪭","⪭︀":"⪭︀","⤌":"⤌","❲":"❲","{":"{","[":"[","⦋":"⦋","⦏":"⦏","⦍":"⦍","ľ":"ľ","ļ":"ļ","л":"л","⤶":"⤶","⥧":"⥧","⥋":"⥋","↲":"↲","≤":"≤","⇇":"⇇","⋋":"⋋","⪨":"⪨","⩿":"⩿","⪁":"⪁","⪃":"⪃","⋚︀":"⋚︀","⪓":"⪓","⋖":"⋖","⥼":"⥼","𝔩":"𝔩","⪑":"⪑","⥪":"⥪","▄":"▄","љ":"љ","⥫":"⥫","◺":"◺","ŀ":"ŀ","⎰":"⎰","≨":"≨","⪉":"⪉","⪇":"⪇","⋦":"⋦","⟬":"⟬","⇽":"⇽","⟼":"⟼","↬":"↬","⦅":"⦅","𝕝":"𝕝","⨭":"⨭","⨴":"⨴","∗":"∗","◊":"◊","(":"(","⦓":"⦓","⥭":"⥭","‎":"‎","⊿":"⊿","‹":"‹","𝓁":"𝓁","⪍":"⪍","⪏":"⪏","‚":"‚","ł":"ł","⪦":"⪦","⩹":"⩹","⋉":"⋉","⥶":"⥶","⩻":"⩻","⦖":"⦖","◃":"◃","⥊":"⥊","⥦":"⥦","≨︀":"≨︀","∺":"∺","¯":"¯","♂":"♂","✠":"✠","▮":"▮","⨩":"⨩","м":"м","—":"—","𝔪":"𝔪","℧":"℧","µ":"µ","⫰":"⫰","−":"−","⨪":"⨪","⫛":"⫛","⊧":"⊧","𝕞":"𝕞","𝓂":"𝓂","μ":"μ","⊸":"⊸","⋙̸":"⋙̸","≫⃒":"≫⃒","⇍":"⇍","⇎":"⇎","⋘̸":"⋘̸","≪⃒":"≪⃒","⇏":"⇏","⊯":"⊯","⊮":"⊮","ń":"ń","∠⃒":"∠⃒","⩰̸":"⩰̸","≋̸":"≋̸","ʼn":"ʼn","♮":"♮","⩃":"⩃","ň":"ň","ņ":"ņ","⩭̸":"⩭̸","⩂":"⩂","н":"н","–":"–","⇗":"⇗","⤤":"⤤","≐̸":"≐̸","⤨":"⤨","𝔫":"𝔫","↮":"↮","⫲":"⫲","⋼":"⋼","⋺":"⋺","њ":"њ","≦̸":"≦̸","↚":"↚","‥":"‥","𝕟":"𝕟","¬":"¬","⋹̸":"⋹̸","⋵̸":"⋵̸","⋷":"⋷","⋶":"⋶","⋾":"⋾","⋽":"⋽","⫽⃥":"⫽⃥","∂̸":"∂̸","⨔":"⨔","↛":"↛","⤳̸":"⤳̸","↝̸":"↝̸","𝓃":"𝓃","⊄":"⊄","⫅̸":"⫅̸","⊅":"⊅","⫆̸":"⫆̸","ñ":"ñ","ν":"ν","#":"#","№":"№"," ":" ","⊭":"⊭","⤄":"⤄","≍⃒":"≍⃒","⊬":"⊬","≥⃒":"≥⃒",">⃒":">⃒","⧞":"⧞","⤂":"⤂","≤⃒":"≤⃒","<⃒":"<⃒","⊴⃒":"⊴⃒","⤃":"⤃","⊵⃒":"⊵⃒","∼⃒":"∼⃒","⇖":"⇖","⤣":"⤣","⤧":"⤧","ó":"ó","ô":"ô","о":"о","ő":"ő","⨸":"⨸","⦼":"⦼","œ":"œ","⦿":"⦿","𝔬":"𝔬","˛":"˛","ò":"ò","⧁":"⧁","⦵":"⦵","⦾":"⦾","⦻":"⦻","⧀":"⧀","ō":"ō","ω":"ω","ο":"ο","⦶":"⦶","𝕠":"𝕠","⦷":"⦷","⦹":"⦹","∨":"∨","⩝":"⩝","ℴ":"ℴ","ª":"ª","º":"º","⊶":"⊶","⩖":"⩖","⩗":"⩗","⩛":"⩛","ø":"ø","⊘":"⊘","õ":"õ","⨶":"⨶","ö":"ö","⌽":"⌽","¶":"¶","⫳":"⫳","⫽":"⫽","п":"п","%":"%",".":".","‰":"‰","‱":"‱","𝔭":"𝔭","φ":"φ","ϕ":"ϕ","☎":"☎","π":"π","ϖ":"ϖ","ℎ":"ℎ","+":"+","⨣":"⨣","⨢":"⨢","⨥":"⨥","⩲":"⩲","⨦":"⨦","⨧":"⨧","⨕":"⨕","𝕡":"𝕡","£":"£","⪳":"⪳","⪷":"⪷","⪹":"⪹","⪵":"⪵","⋨":"⋨","′":"′","⌮":"⌮","⌒":"⌒","⌓":"⌓","⊰":"⊰","𝓅":"𝓅","ψ":"ψ"," ":" ","𝔮":"𝔮","𝕢":"𝕢","⁗":"⁗","𝓆":"𝓆","⨖":"⨖","?":"?","⤜":"⤜","⥤":"⥤","∽̱":"∽̱","ŕ":"ŕ","⦳":"⦳","⦒":"⦒","⦥":"⦥","»":"»","⥵":"⥵","⤠":"⤠","⤳":"⤳","⤞":"⤞","⥅":"⥅","⥴":"⥴","↣":"↣","↝":"↝","⤚":"⤚","∶":"∶","❳":"❳","}":"}","]":"]","⦌":"⦌","⦎":"⦎","⦐":"⦐","ř":"ř","ŗ":"ŗ","р":"р","⤷":"⤷","⥩":"⥩","↳":"↳","▭":"▭","⥽":"⥽","𝔯":"𝔯","⥬":"⥬","ρ":"ρ","ϱ":"ϱ","⇉":"⇉","⋌":"⋌","˚":"˚","‏":"‏","⎱":"⎱","⫮":"⫮","⟭":"⟭","⇾":"⇾","⦆":"⦆","𝕣":"𝕣","⨮":"⨮","⨵":"⨵",")":")","⦔":"⦔","⨒":"⨒","›":"›","𝓇":"𝓇","⋊":"⋊","▹":"▹","⧎":"⧎","⥨":"⥨","℞":"℞","ś":"ś","⪴":"⪴","⪸":"⪸","š":"š","ş":"ş","ŝ":"ŝ","⪶":"⪶","⪺":"⪺","⋩":"⋩","⨓":"⨓","с":"с","⋅":"⋅","⩦":"⩦","⇘":"⇘","§":"§",";":";","⤩":"⤩","✶":"✶","𝔰":"𝔰","♯":"♯","щ":"щ","ш":"ш","­":"­","σ":"σ","ς":"ς","⩪":"⩪","⪞":"⪞","⪠":"⪠","⪝":"⪝","⪟":"⪟","≆":"≆","⨤":"⨤","⥲":"⥲","⨳":"⨳","⧤":"⧤","⌣":"⌣","⪪":"⪪","⪬":"⪬","⪬︀":"⪬︀","ь":"ь","/":"/","⧄":"⧄","⌿":"⌿","𝕤":"𝕤","♠":"♠","⊓︀":"⊓︀","⊔︀":"⊔︀","𝓈":"𝓈","☆":"☆","⊂":"⊂","⫅":"⫅","⪽":"⪽","⫃":"⫃","⫁":"⫁","⫋":"⫋","⊊":"⊊","⪿":"⪿","⥹":"⥹","⫇":"⫇","⫕":"⫕","⫓":"⫓","♪":"♪","¹":"¹","²":"²","³":"³","⫆":"⫆","⪾":"⪾","⫘":"⫘","⫄":"⫄","⟉":"⟉","⫗":"⫗","⥻":"⥻","⫂":"⫂","⫌":"⫌","⊋":"⊋","⫀":"⫀","⫈":"⫈","⫔":"⫔","⫖":"⫖","⇙":"⇙","⤪":"⤪","ß":"ß","⌖":"⌖","τ":"τ","ť":"ť","ţ":"ţ","т":"т","⌕":"⌕","𝔱":"𝔱","θ":"θ","ϑ":"ϑ","þ":"þ","×":"×","⨱":"⨱","⨰":"⨰","⌶":"⌶","⫱":"⫱","𝕥":"𝕥","⫚":"⫚","‴":"‴","▵":"▵","≜":"≜","◬":"◬","⨺":"⨺","⨹":"⨹","⧍":"⧍","⨻":"⨻","⏢":"⏢","𝓉":"𝓉","ц":"ц","ћ":"ћ","ŧ":"ŧ","⥣":"⥣","ú":"ú","ў":"ў","ŭ":"ŭ","û":"û","у":"у","ű":"ű","⥾":"⥾","𝔲":"𝔲","ù":"ù","▀":"▀","⌜":"⌜","⌏":"⌏","◸":"◸","ū":"ū","ų":"ų","𝕦":"𝕦","υ":"υ","⇈":"⇈","⌝":"⌝","⌎":"⌎","ů":"ů","◹":"◹","𝓊":"𝓊","⋰":"⋰","ũ":"ũ","ü":"ü","⦧":"⦧","⫨":"⫨","⫩":"⫩","⦜":"⦜","⊊︀":"⊊︀","⫋︀":"⫋︀","⊋︀":"⊋︀","⫌︀":"⫌︀","в":"в","⊻":"⊻","≚":"≚","⋮":"⋮","𝔳":"𝔳","𝕧":"𝕧","𝓋":"𝓋","⦚":"⦚","ŵ":"ŵ","⩟":"⩟","≙":"≙","℘":"℘","𝔴":"𝔴","𝕨":"𝕨","𝓌":"𝓌","𝔵":"𝔵","ξ":"ξ","⋻":"⋻","𝕩":"𝕩","𝓍":"𝓍","ý":"ý","я":"я","ŷ":"ŷ","ы":"ы","¥":"¥","𝔶":"𝔶","ї":"ї","𝕪":"𝕪","𝓎":"𝓎","ю":"ю","ÿ":"ÿ","ź":"ź","ž":"ž","з":"з","ż":"ż","ζ":"ζ","𝔷":"𝔷","ж":"ж","⇝":"⇝","𝕫":"𝕫","𝓏":"𝓏","‍":"‍","‌":"‌"}}}; + +/***/ }), + +/***/ "./node_modules/html-entities/lib/numeric-unicode-map.js": +/*!***************************************************************!*\ + !*** ./node_modules/html-entities/lib/numeric-unicode-map.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; +Object.defineProperty(exports, "__esModule", ({value:true}));exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}; + +/***/ }), + +/***/ "./node_modules/html-entities/lib/surrogate-pairs.js": +/*!***********************************************************!*\ + !*** ./node_modules/html-entities/lib/surrogate-pairs.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; +Object.defineProperty(exports, "__esModule", ({value:true}));exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319; + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js": +/*!***************************************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js ***! + \***************************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": function() { return /* binding */ WebSocketClient; } +/* harmony export */ }); +/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } + + + +var WebSocketClient = /*#__PURE__*/function () { + /** + * @param {string} url + */ + function WebSocketClient(url) { + _classCallCheck(this, WebSocketClient); + + this.client = new WebSocket(url); + + this.client.onerror = function (error) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_0__.log.error(error); + }; + } + /** + * @param {(...args: any[]) => void} f + */ + + + _createClass(WebSocketClient, [{ + key: "onOpen", + value: function onOpen(f) { + this.client.onopen = f; + } + /** + * @param {(...args: any[]) => void} f + */ + + }, { + key: "onClose", + value: function onClose(f) { + this.client.onclose = f; + } // call f with the message string as the first argument + + /** + * @param {(...args: any[]) => void} f + */ + + }, { + key: "onMessage", + value: function onMessage(f) { + this.client.onmessage = function (e) { + f(e.data); + }; + } + }]); + + return WebSocketClient; +}(); + + + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10": +/*!**********************************************************************************************************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/index.js?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10 ***! + \**********************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +var __resourceQuery = "?protocol=ws%3A&hostname=localhost&port=8081&pathname=%2Fws&logging=none&reconnect=10"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/hot/log.js */ "./node_modules/webpack/hot/log.js"); +/* harmony import */ var webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/stripAnsi.js */ "./node_modules/webpack-dev-server/client/utils/stripAnsi.js"); +/* harmony import */ var _utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/parseURL.js */ "./node_modules/webpack-dev-server/client/utils/parseURL.js"); +/* harmony import */ var _socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./socket.js */ "./node_modules/webpack-dev-server/client/socket.js"); +/* harmony import */ var _overlay_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./overlay.js */ "./node_modules/webpack-dev-server/client/overlay.js"); +/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); +/* harmony import */ var _utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/sendMessage.js */ "./node_modules/webpack-dev-server/client/utils/sendMessage.js"); +/* harmony import */ var _utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/reloadApp.js */ "./node_modules/webpack-dev-server/client/utils/reloadApp.js"); +/* harmony import */ var _utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/createSocketURL.js */ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js"); +/* global __resourceQuery, __webpack_hash__ */ +/// + + + + + + + + + +/** + * @typedef {Object} Options + * @property {boolean} hot + * @property {boolean} liveReload + * @property {boolean} progress + * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay + * @property {string} [logging] + * @property {number} [reconnect] + */ + +/** + * @typedef {Object} Status + * @property {boolean} isUnloading + * @property {string} currentHash + * @property {string} [previousHash] + */ + +/** + * @type {Status} + */ + +var status = { + isUnloading: false, + // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement + // eslint-disable-next-line camelcase + currentHash: true ? __webpack_require__.h() : 0 +}; +/** @type {Options} */ + +var options = { + hot: false, + liveReload: false, + progress: false, + overlay: false +}; +var parsedResourceQuery = (0,_utils_parseURL_js__WEBPACK_IMPORTED_MODULE_2__["default"])(__resourceQuery); + +if (parsedResourceQuery.hot === "true") { + options.hot = true; + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); +} + +if (parsedResourceQuery["live-reload"] === "true") { + options.liveReload = true; + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); +} + +if (parsedResourceQuery.logging) { + options.logging = parsedResourceQuery.logging; +} + +if (typeof parsedResourceQuery.reconnect !== "undefined") { + options.reconnect = Number(parsedResourceQuery.reconnect); +} +/** + * @param {string} level + */ + + +function setAllLogLevel(level) { + // This is needed because the HMR logger operate separately from dev server logger + webpack_hot_log_js__WEBPACK_IMPORTED_MODULE_0___default().setLogLevel(level === "verbose" || level === "log" ? "info" : level); + (0,_utils_log_js__WEBPACK_IMPORTED_MODULE_5__.setLogLevel)(level); +} + +if (options.logging) { + setAllLogLevel(options.logging); +} + +self.addEventListener("beforeunload", function () { + status.isUnloading = true; +}); +var onSocketMessage = { + hot: function hot() { + if (parsedResourceQuery.hot === "false") { + return; + } + + options.hot = true; + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Hot Module Replacement enabled."); + }, + liveReload: function liveReload() { + if (parsedResourceQuery["live-reload"] === "false") { + return; + } + + options.liveReload = true; + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Live Reloading enabled."); + }, + invalid: function invalid() { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("App updated. Recompiling..."); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain. + + if (options.overlay) { + (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); + } + + (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Invalid"); + }, + + /** + * @param {string} hash + */ + hash: function hash(_hash) { + status.previousHash = status.currentHash; + status.currentHash = _hash; + }, + logging: setAllLogLevel, + + /** + * @param {boolean} value + */ + overlay: function overlay(value) { + if (typeof document === "undefined") { + return; + } + + options.overlay = value; + }, + + /** + * @param {number} value + */ + reconnect: function reconnect(value) { + if (parsedResourceQuery.reconnect === "false") { + return; + } + + options.reconnect = value; + }, + + /** + * @param {boolean} value + */ + progress: function progress(value) { + options.progress = value; + }, + + /** + * @param {{ pluginName?: string, percent: number, msg: string }} data + */ + "progress-update": function progressUpdate(data) { + if (options.progress) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(data.pluginName ? "[".concat(data.pluginName, "] ") : "").concat(data.percent, "% - ").concat(data.msg, ".")); + } + + (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Progress", data); + }, + "still-ok": function stillOk() { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Nothing changed."); + + if (options.overlay) { + (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); + } + + (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("StillOk"); + }, + ok: function ok() { + (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Ok"); + + if (options.overlay) { + (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); + } + + (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); + }, + // TODO: remove in v5 in favor of 'static-changed' + + /** + * @param {string} file + */ + "content-changed": function contentChanged(file) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); + self.location.reload(); + }, + + /** + * @param {string} file + */ + "static-changed": function staticChanged(file) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("".concat(file ? "\"".concat(file, "\"") : "Content", " from static directory was changed. Reloading...")); + self.location.reload(); + }, + + /** + * @param {Error[]} warnings + * @param {any} params + */ + warnings: function warnings(_warnings, params) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn("Warnings while compiling."); + + var printableWarnings = _warnings.map(function (error) { + var _formatProblem = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("warning", error), + header = _formatProblem.header, + body = _formatProblem.body; + + return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); + }); + + (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Warnings", printableWarnings); + + for (var i = 0; i < printableWarnings.length; i++) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.warn(printableWarnings[i]); + } + + var needShowOverlayForWarnings = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.warnings; + + if (needShowOverlayForWarnings) { + var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; + (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("warning", _warnings, trustedTypesPolicyName || null); + } + + if (params && params.preventReloading) { + return; + } + + (0,_utils_reloadApp_js__WEBPACK_IMPORTED_MODULE_7__["default"])(options, status); + }, + + /** + * @param {Error[]} errors + */ + errors: function errors(_errors) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error("Errors while compiling. Reload prevented."); + + var printableErrors = _errors.map(function (error) { + var _formatProblem2 = (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.formatProblem)("error", error), + header = _formatProblem2.header, + body = _formatProblem2.body; + + return "".concat(header, "\n").concat((0,_utils_stripAnsi_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body)); + }); + + (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Errors", printableErrors); + + for (var i = 0; i < printableErrors.length; i++) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(printableErrors[i]); + } + + var needShowOverlayForErrors = typeof options.overlay === "boolean" ? options.overlay : options.overlay && options.overlay.errors; + + if (needShowOverlayForErrors) { + var trustedTypesPolicyName = typeof options.overlay === "object" && options.overlay.trustedTypesPolicyName; + (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.show)("error", _errors, trustedTypesPolicyName || null); + } + }, + + /** + * @param {Error} error + */ + error: function error(_error) { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.error(_error); + }, + close: function close() { + _utils_log_js__WEBPACK_IMPORTED_MODULE_5__.log.info("Disconnected!"); + + if (options.overlay) { + (0,_overlay_js__WEBPACK_IMPORTED_MODULE_4__.hide)(); + } + + (0,_utils_sendMessage_js__WEBPACK_IMPORTED_MODULE_6__["default"])("Close"); + } +}; +var socketURL = (0,_utils_createSocketURL_js__WEBPACK_IMPORTED_MODULE_8__["default"])(parsedResourceQuery); +(0,_socket_js__WEBPACK_IMPORTED_MODULE_3__["default"])(socketURL, onSocketMessage, options.reconnect); + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/modules/logger/index.js": +/*!************************************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/modules/logger/index.js ***! + \************************************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +/******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./client-src/modules/logger/SyncBailHookFake.js": +/*!*******************************************************!*\ + !*** ./client-src/modules/logger/SyncBailHookFake.js ***! + \*******************************************************/ +/***/ (function(module) { + + +/** + * Client stub for tapable SyncBailHook + */ + +module.exports = function clientTapableSyncBailHook() { + return { + call: function call() {} + }; +}; + +/***/ }), + +/***/ "./node_modules/webpack/lib/logging/Logger.js": +/*!****************************************************!*\ + !*** ./node_modules/webpack/lib/logging/Logger.js ***! + \****************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _iterableToArray(iter) { + if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; +} + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; +} + +var LogType = Object.freeze({ + error: + /** @type {"error"} */ + "error", + // message, c style arguments + warn: + /** @type {"warn"} */ + "warn", + // message, c style arguments + info: + /** @type {"info"} */ + "info", + // message, c style arguments + log: + /** @type {"log"} */ + "log", + // message, c style arguments + debug: + /** @type {"debug"} */ + "debug", + // message, c style arguments + trace: + /** @type {"trace"} */ + "trace", + // no arguments + group: + /** @type {"group"} */ + "group", + // [label] + groupCollapsed: + /** @type {"groupCollapsed"} */ + "groupCollapsed", + // [label] + groupEnd: + /** @type {"groupEnd"} */ + "groupEnd", + // [label] + profile: + /** @type {"profile"} */ + "profile", + // [profileName] + profileEnd: + /** @type {"profileEnd"} */ + "profileEnd", + // [profileName] + time: + /** @type {"time"} */ + "time", + // name, time as [seconds, nanoseconds] + clear: + /** @type {"clear"} */ + "clear", + // no arguments + status: + /** @type {"status"} */ + "status" // message, arguments + +}); +exports.LogType = LogType; +/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */ + +var LOG_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger raw log method"); +var TIMERS_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger times"); +var TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; })("webpack logger aggregated times"); + +var WebpackLogger = /*#__PURE__*/function () { + /** + * @param {function(LogTypeEnum, any[]=): void} log log function + * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger + */ + function WebpackLogger(log, getChildLogger) { + _classCallCheck(this, WebpackLogger); + + this[LOG_SYMBOL] = log; + this.getChildLogger = getChildLogger; + } + + _createClass(WebpackLogger, [{ + key: "error", + value: function error() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + this[LOG_SYMBOL](LogType.error, args); + } + }, { + key: "warn", + value: function warn() { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + this[LOG_SYMBOL](LogType.warn, args); + } + }, { + key: "info", + value: function info() { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + this[LOG_SYMBOL](LogType.info, args); + } + }, { + key: "log", + value: function log() { + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + this[LOG_SYMBOL](LogType.log, args); + } + }, { + key: "debug", + value: function debug() { + for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + this[LOG_SYMBOL](LogType.debug, args); + } + }, { + key: "assert", + value: function assert(assertion) { + if (!assertion) { + for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) { + args[_key6 - 1] = arguments[_key6]; + } + + this[LOG_SYMBOL](LogType.error, args); + } + } + }, { + key: "trace", + value: function trace() { + this[LOG_SYMBOL](LogType.trace, ["Trace"]); + } + }, { + key: "clear", + value: function clear() { + this[LOG_SYMBOL](LogType.clear); + } + }, { + key: "status", + value: function status() { + for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + args[_key7] = arguments[_key7]; + } + + this[LOG_SYMBOL](LogType.status, args); + } + }, { + key: "group", + value: function group() { + for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { + args[_key8] = arguments[_key8]; + } + + this[LOG_SYMBOL](LogType.group, args); + } + }, { + key: "groupCollapsed", + value: function groupCollapsed() { + for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) { + args[_key9] = arguments[_key9]; + } + + this[LOG_SYMBOL](LogType.groupCollapsed, args); + } + }, { + key: "groupEnd", + value: function groupEnd() { + for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) { + args[_key10] = arguments[_key10]; + } + + this[LOG_SYMBOL](LogType.groupEnd, args); + } + }, { + key: "profile", + value: function profile(label) { + this[LOG_SYMBOL](LogType.profile, [label]); + } + }, { + key: "profileEnd", + value: function profileEnd(label) { + this[LOG_SYMBOL](LogType.profileEnd, [label]); + } + }, { + key: "time", + value: function time(label) { + this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map(); + this[TIMERS_SYMBOL].set(label, process.hrtime()); + } + }, { + key: "timeLog", + value: function timeLog(label) { + var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); + + if (!prev) { + throw new Error("No such label '".concat(label, "' for WebpackLogger.timeLog()")); + } + + var time = process.hrtime(prev); + this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); + } + }, { + key: "timeEnd", + value: function timeEnd(label) { + var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); + + if (!prev) { + throw new Error("No such label '".concat(label, "' for WebpackLogger.timeEnd()")); + } + + var time = process.hrtime(prev); + this[TIMERS_SYMBOL].delete(label); + this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); + } + }, { + key: "timeAggregate", + value: function timeAggregate(label) { + var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label); + + if (!prev) { + throw new Error("No such label '".concat(label, "' for WebpackLogger.timeAggregate()")); + } + + var time = process.hrtime(prev); + this[TIMERS_SYMBOL].delete(label); + this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map(); + var current = this[TIMERS_AGGREGATES_SYMBOL].get(label); + + if (current !== undefined) { + if (time[1] + current[1] > 1e9) { + time[0] += current[0] + 1; + time[1] = time[1] - 1e9 + current[1]; + } else { + time[0] += current[0]; + time[1] += current[1]; + } + } + + this[TIMERS_AGGREGATES_SYMBOL].set(label, time); + } + }, { + key: "timeAggregateEnd", + value: function timeAggregateEnd(label) { + if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return; + var time = this[TIMERS_AGGREGATES_SYMBOL].get(label); + if (time === undefined) return; + this[TIMERS_AGGREGATES_SYMBOL].delete(label); + this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time))); + } + }]); + + return WebpackLogger; +}(); + +exports.Logger = WebpackLogger; + +/***/ }), + +/***/ "./node_modules/webpack/lib/logging/createConsoleLogger.js": +/*!*****************************************************************!*\ + !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***! + \*****************************************************************/ +/***/ (function(module, __unused_webpack_exports, __nested_webpack_require_10785__) { + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + + +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _iterableToArray(iter) { + if (typeof (typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }) !== "undefined" && iter[(typeof Symbol !== "undefined" ? Symbol : function (i) { return i; }).iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; +} + +var _require = __nested_webpack_require_10785__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), + LogType = _require.LogType; +/** @typedef {import("../../declarations/WebpackOptions").FilterItemTypes} FilterItemTypes */ + +/** @typedef {import("../../declarations/WebpackOptions").FilterTypes} FilterTypes */ + +/** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */ + +/** @typedef {function(string): boolean} FilterFunction */ + +/** + * @typedef {Object} LoggerConsole + * @property {function(): void} clear + * @property {function(): void} trace + * @property {(...args: any[]) => void} info + * @property {(...args: any[]) => void} log + * @property {(...args: any[]) => void} warn + * @property {(...args: any[]) => void} error + * @property {(...args: any[]) => void=} debug + * @property {(...args: any[]) => void=} group + * @property {(...args: any[]) => void=} groupCollapsed + * @property {(...args: any[]) => void=} groupEnd + * @property {(...args: any[]) => void=} status + * @property {(...args: any[]) => void=} profile + * @property {(...args: any[]) => void=} profileEnd + * @property {(...args: any[]) => void=} logTime + */ + +/** + * @typedef {Object} LoggerOptions + * @property {false|true|"none"|"error"|"warn"|"info"|"log"|"verbose"} level loglevel + * @property {FilterTypes|boolean} debug filter for debug logging + * @property {LoggerConsole} console the console to log to + */ + +/** + * @param {FilterItemTypes} item an input item + * @returns {FilterFunction} filter function + */ + + +var filterToFunction = function filterToFunction(item) { + if (typeof item === "string") { + var regExp = new RegExp("[\\\\/]".concat(item.replace( // eslint-disable-next-line no-useless-escape + /[-[\]{}()*+?.\\^$|]/g, "\\$&"), "([\\\\/]|$|!|\\?)")); + return function (ident) { + return regExp.test(ident); + }; + } + + if (item && typeof item === "object" && typeof item.test === "function") { + return function (ident) { + return item.test(ident); + }; + } + + if (typeof item === "function") { + return item; + } + + if (typeof item === "boolean") { + return function () { + return item; + }; + } +}; +/** + * @enum {number} + */ + + +var LogLevel = { + none: 6, + false: 6, + error: 5, + warn: 4, + info: 3, + log: 2, + true: 2, + verbose: 1 +}; +/** + * @param {LoggerOptions} options options object + * @returns {function(string, LogTypeEnum, any[]): void} logging function + */ + +module.exports = function (_ref) { + var _ref$level = _ref.level, + level = _ref$level === void 0 ? "info" : _ref$level, + _ref$debug = _ref.debug, + debug = _ref$debug === void 0 ? false : _ref$debug, + console = _ref.console; + var debugFilters = typeof debug === "boolean" ? [function () { + return debug; + }] : + /** @type {FilterItemTypes[]} */ + [].concat(debug).map(filterToFunction); + /** @type {number} */ + + var loglevel = LogLevel["".concat(level)] || 0; + /** + * @param {string} name name of the logger + * @param {LogTypeEnum} type type of the log entry + * @param {any[]} args arguments of the log entry + * @returns {void} + */ + + var logger = function logger(name, type, args) { + var labeledArgs = function labeledArgs() { + if (Array.isArray(args)) { + if (args.length > 0 && typeof args[0] === "string") { + return ["[".concat(name, "] ").concat(args[0])].concat(_toConsumableArray(args.slice(1))); + } else { + return ["[".concat(name, "]")].concat(_toConsumableArray(args)); + } + } else { + return []; + } + }; + + var debug = debugFilters.some(function (f) { + return f(name); + }); + + switch (type) { + case LogType.debug: + if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins + + if (typeof console.debug === "function") { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + console.debug.apply(console, _toConsumableArray(labeledArgs())); + } else { + console.log.apply(console, _toConsumableArray(labeledArgs())); + } + + break; + + case LogType.log: + if (!debug && loglevel > LogLevel.log) return; + console.log.apply(console, _toConsumableArray(labeledArgs())); + break; + + case LogType.info: + if (!debug && loglevel > LogLevel.info) return; + console.info.apply(console, _toConsumableArray(labeledArgs())); + break; + + case LogType.warn: + if (!debug && loglevel > LogLevel.warn) return; + console.warn.apply(console, _toConsumableArray(labeledArgs())); + break; + + case LogType.error: + if (!debug && loglevel > LogLevel.error) return; + console.error.apply(console, _toConsumableArray(labeledArgs())); + break; + + case LogType.trace: + if (!debug) return; + console.trace(); + break; + + case LogType.groupCollapsed: + if (!debug && loglevel > LogLevel.log) return; + + if (!debug && loglevel > LogLevel.verbose) { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + if (typeof console.groupCollapsed === "function") { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs())); + } else { + console.log.apply(console, _toConsumableArray(labeledArgs())); + } + + break; + } + + // falls through + + case LogType.group: + if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins + + if (typeof console.group === "function") { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + console.group.apply(console, _toConsumableArray(labeledArgs())); + } else { + console.log.apply(console, _toConsumableArray(labeledArgs())); + } + + break; + + case LogType.groupEnd: + if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins + + if (typeof console.groupEnd === "function") { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + console.groupEnd(); + } + + break; + + case LogType.time: + { + if (!debug && loglevel > LogLevel.log) return; + var ms = args[1] * 1000 + args[2] / 1000000; + var msg = "[".concat(name, "] ").concat(args[0], ": ").concat(ms, " ms"); + + if (typeof console.logTime === "function") { + console.logTime(msg); + } else { + console.log(msg); + } + + break; + } + + case LogType.profile: + // eslint-disable-next-line node/no-unsupported-features/node-builtins + if (typeof console.profile === "function") { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + console.profile.apply(console, _toConsumableArray(labeledArgs())); + } + + break; + + case LogType.profileEnd: + // eslint-disable-next-line node/no-unsupported-features/node-builtins + if (typeof console.profileEnd === "function") { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + console.profileEnd.apply(console, _toConsumableArray(labeledArgs())); + } + + break; + + case LogType.clear: + if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins + + if (typeof console.clear === "function") { + // eslint-disable-next-line node/no-unsupported-features/node-builtins + console.clear(); + } + + break; + + case LogType.status: + if (!debug && loglevel > LogLevel.info) return; + + if (typeof console.status === "function") { + if (args.length === 0) { + console.status(); + } else { + console.status.apply(console, _toConsumableArray(labeledArgs())); + } + } else { + if (args.length !== 0) { + console.info.apply(console, _toConsumableArray(labeledArgs())); + } + } + + break; + + default: + throw new Error("Unexpected LogType ".concat(type)); + } + }; + + return logger; +}; + +/***/ }), + +/***/ "./node_modules/webpack/lib/logging/runtime.js": +/*!*****************************************************!*\ + !*** ./node_modules/webpack/lib/logging/runtime.js ***! + \*****************************************************/ +/***/ (function(__unused_webpack_module, exports, __nested_webpack_require_20872__) { + +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + + +function _extends() { + _extends = Object.assign ? Object.assign.bind() : function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + return _extends.apply(this, arguments); +} + +var SyncBailHook = __nested_webpack_require_20872__(/*! tapable/lib/SyncBailHook */ "./client-src/modules/logger/SyncBailHookFake.js"); + +var _require = __nested_webpack_require_20872__(/*! ./Logger */ "./node_modules/webpack/lib/logging/Logger.js"), + Logger = _require.Logger; + +var createConsoleLogger = __nested_webpack_require_20872__(/*! ./createConsoleLogger */ "./node_modules/webpack/lib/logging/createConsoleLogger.js"); +/** @type {createConsoleLogger.LoggerOptions} */ + + +var currentDefaultLoggerOptions = { + level: "info", + debug: false, + console: console +}; +var currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); +/** + * @param {string} name name of the logger + * @returns {Logger} a logger + */ + +exports.getLogger = function (name) { + return new Logger(function (type, args) { + if (exports.hooks.log.call(name, type, args) === undefined) { + currentDefaultLogger(name, type, args); + } + }, function (childName) { + return exports.getLogger("".concat(name, "/").concat(childName)); + }); +}; +/** + * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options + * @returns {void} + */ + + +exports.configureDefaultLogger = function (options) { + _extends(currentDefaultLoggerOptions, options); + + currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions); +}; + +exports.hooks = { + log: new SyncBailHook(["origin", "type", "args"]) +}; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nested_webpack_require_23009__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_23009__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __nested_webpack_require_23009__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__nested_webpack_require_23009__.o(definition, key) && !__nested_webpack_require_23009__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __nested_webpack_require_23009__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ !function() { +/******/ // define __esModule on exports +/******/ __nested_webpack_require_23009__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +!function() { +/*!********************************************!*\ + !*** ./client-src/modules/logger/index.js ***! + \********************************************/ +__nested_webpack_require_23009__.r(__webpack_exports__); +/* harmony export */ __nested_webpack_require_23009__.d(__webpack_exports__, { +/* harmony export */ "default": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; } +/* harmony export */ }); +/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_23009__(/*! webpack/lib/logging/runtime.js */ "./node_modules/webpack/lib/logging/runtime.js"); + +}(); +var __webpack_export_target__ = exports; +for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; +if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); +/******/ })() +; + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/overlay.js": +/*!***********************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/overlay.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "formatProblem": function() { return /* binding */ formatProblem; }, +/* harmony export */ "hide": function() { return /* binding */ hide; }, +/* harmony export */ "show": function() { return /* binding */ show; } +/* harmony export */ }); +/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ansi-html-community */ "./node_modules/ansi-html-community/index.js"); +/* harmony import */ var ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ansi_html_community__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! html-entities */ "./node_modules/html-entities/lib/index.js"); +/* harmony import */ var html_entities__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(html_entities__WEBPACK_IMPORTED_MODULE_1__); +// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app) +// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware). + + +var colors = { + reset: ["transparent", "transparent"], + black: "181818", + red: "E36049", + green: "B3CB74", + yellow: "FFD080", + blue: "7CAFC2", + magenta: "7FACCA", + cyan: "C3C2EF", + lightgrey: "EBE7E3", + darkgrey: "6D7891" +}; +/** @type {HTMLIFrameElement | null | undefined} */ + +var iframeContainerElement; +/** @type {HTMLDivElement | null | undefined} */ + +var containerElement; +/** @type {Array<(element: HTMLDivElement) => void>} */ + +var onLoadQueue = []; +/** @type {TrustedTypePolicy | undefined} */ + +var overlayTrustedTypesPolicy; +ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default().setColors(colors); +/** + * @param {string | null} trustedTypesPolicyName + */ + +function createContainer(trustedTypesPolicyName) { + // Enable Trusted Types if they are available in the current browser. + if (window.trustedTypes) { + overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || "webpack-dev-server#overlay", { + createHTML: function createHTML(value) { + return value; + } + }); + } + + iframeContainerElement = document.createElement("iframe"); + iframeContainerElement.id = "webpack-dev-server-client-overlay"; + iframeContainerElement.src = "about:blank"; + iframeContainerElement.style.position = "fixed"; + iframeContainerElement.style.left = 0; + iframeContainerElement.style.top = 0; + iframeContainerElement.style.right = 0; + iframeContainerElement.style.bottom = 0; + iframeContainerElement.style.width = "100vw"; + iframeContainerElement.style.height = "100vh"; + iframeContainerElement.style.border = "none"; + iframeContainerElement.style.zIndex = 9999999999; + + iframeContainerElement.onload = function () { + containerElement = + /** @type {Document} */ + + /** @type {HTMLIFrameElement} */ + iframeContainerElement.contentDocument.createElement("div"); + containerElement.id = "webpack-dev-server-client-overlay-div"; + containerElement.style.position = "fixed"; + containerElement.style.boxSizing = "border-box"; + containerElement.style.left = 0; + containerElement.style.top = 0; + containerElement.style.right = 0; + containerElement.style.bottom = 0; + containerElement.style.width = "100vw"; + containerElement.style.height = "100vh"; + containerElement.style.backgroundColor = "rgba(0, 0, 0, 0.85)"; + containerElement.style.color = "#E8E8E8"; + containerElement.style.fontFamily = "Menlo, Consolas, monospace"; + containerElement.style.fontSize = "large"; + containerElement.style.padding = "2rem"; + containerElement.style.lineHeight = "1.2"; + containerElement.style.whiteSpace = "pre-wrap"; + containerElement.style.overflow = "auto"; + var headerElement = document.createElement("span"); + headerElement.innerText = "Compiled with problems:"; + var closeButtonElement = document.createElement("button"); + closeButtonElement.innerText = "X"; + closeButtonElement.style.background = "transparent"; + closeButtonElement.style.border = "none"; + closeButtonElement.style.fontSize = "20px"; + closeButtonElement.style.fontWeight = "bold"; + closeButtonElement.style.color = "white"; + closeButtonElement.style.cursor = "pointer"; + closeButtonElement.style.cssFloat = "right"; // @ts-ignore + + closeButtonElement.style.styleFloat = "right"; + closeButtonElement.addEventListener("click", function () { + hide(); + }); + containerElement.appendChild(headerElement); + containerElement.appendChild(closeButtonElement); + containerElement.appendChild(document.createElement("br")); + containerElement.appendChild(document.createElement("br")); + /** @type {Document} */ + + /** @type {HTMLIFrameElement} */ + iframeContainerElement.contentDocument.body.appendChild(containerElement); + onLoadQueue.forEach(function (onLoad) { + onLoad( + /** @type {HTMLDivElement} */ + containerElement); + }); + onLoadQueue = []; + /** @type {HTMLIFrameElement} */ + + iframeContainerElement.onload = null; + }; + + document.body.appendChild(iframeContainerElement); +} +/** + * @param {(element: HTMLDivElement) => void} callback + * @param {string | null} trustedTypesPolicyName + */ + + +function ensureOverlayExists(callback, trustedTypesPolicyName) { + if (containerElement) { + // Everything is ready, call the callback right away. + callback(containerElement); + return; + } + + onLoadQueue.push(callback); + + if (iframeContainerElement) { + return; + } + + createContainer(trustedTypesPolicyName); +} // Successful compilation. + + +function hide() { + if (!iframeContainerElement) { + return; + } // Clean up and reset internal state. + + + document.body.removeChild(iframeContainerElement); + iframeContainerElement = null; + containerElement = null; +} +/** + * @param {string} type + * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item + * @returns {{ header: string, body: string }} + */ + + +function formatProblem(type, item) { + var header = type === "warning" ? "WARNING" : "ERROR"; + var body = ""; + + if (typeof item === "string") { + body += item; + } else { + var file = item.file || ""; // eslint-disable-next-line no-nested-ternary + + var moduleName = item.moduleName ? item.moduleName.indexOf("!") !== -1 ? "".concat(item.moduleName.replace(/^(\s|\S)*!/, ""), " (").concat(item.moduleName, ")") : "".concat(item.moduleName) : ""; + var loc = item.loc; + header += "".concat(moduleName || file ? " in ".concat(moduleName ? "".concat(moduleName).concat(file ? " (".concat(file, ")") : "") : file).concat(loc ? " ".concat(loc) : "") : ""); + body += item.message || ""; + } + + return { + header: header, + body: body + }; +} // Compilation with errors (e.g. syntax error or missing modules). + +/** + * @param {string} type + * @param {Array} messages + * @param {string | null} trustedTypesPolicyName + */ + + +function show(type, messages, trustedTypesPolicyName) { + ensureOverlayExists(function () { + messages.forEach(function (message) { + var entryElement = document.createElement("div"); + var typeElement = document.createElement("span"); + + var _formatProblem = formatProblem(type, message), + header = _formatProblem.header, + body = _formatProblem.body; + + typeElement.innerText = header; + typeElement.style.color = "#".concat(colors.red); // Make it look similar to our terminal. + + var text = ansi_html_community__WEBPACK_IMPORTED_MODULE_0___default()((0,html_entities__WEBPACK_IMPORTED_MODULE_1__.encode)(body)); + var messageTextNode = document.createElement("div"); + messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text; + entryElement.appendChild(typeElement); + entryElement.appendChild(document.createElement("br")); + entryElement.appendChild(document.createElement("br")); + entryElement.appendChild(messageTextNode); + entryElement.appendChild(document.createElement("br")); + entryElement.appendChild(document.createElement("br")); + /** @type {HTMLDivElement} */ + + containerElement.appendChild(entryElement); + }); + }, trustedTypesPolicyName); +} + + + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/socket.js": +/*!**********************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/socket.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "client": function() { return /* binding */ client; } +/* harmony export */ }); +/* harmony import */ var _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); +/* harmony import */ var _utils_log_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/log.js */ "./node_modules/webpack-dev-server/client/utils/log.js"); +/* provided dependency */ var __webpack_dev_server_client__ = __webpack_require__(/*! ./node_modules/webpack-dev-server/client/clients/WebSocketClient.js */ "./node_modules/webpack-dev-server/client/clients/WebSocketClient.js"); +/* global __webpack_dev_server_client__ */ + + // this WebsocketClient is here as a default fallback, in case the client is not injected + +/* eslint-disable camelcase */ + +var Client = // eslint-disable-next-line no-nested-ternary +typeof __webpack_dev_server_client__ !== "undefined" ? typeof __webpack_dev_server_client__.default !== "undefined" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : _clients_WebSocketClient_js__WEBPACK_IMPORTED_MODULE_0__["default"]; +/* eslint-enable camelcase */ + +var retries = 0; +var maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance +// It is mutable to enforce singleton +// eslint-disable-next-line import/no-mutable-exports + +var client = null; +/** + * @param {string} url + * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers + * @param {number} [reconnect] + */ + +var socket = function initSocket(url, handlers, reconnect) { + client = new Client(url); + client.onOpen(function () { + retries = 0; + + if (typeof reconnect !== "undefined") { + maxRetries = reconnect; + } + }); + client.onClose(function () { + if (retries === 0) { + handlers.close(); + } // Try to reconnect. + + + client = null; // After 10 retries stop trying, to prevent logspam. + + if (retries < maxRetries) { + // Exponentially increase timeout to reconnect. + // Respectfully copied from the package `got`. + // eslint-disable-next-line no-restricted-properties + var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100; + retries += 1; + _utils_log_js__WEBPACK_IMPORTED_MODULE_1__.log.info("Trying to reconnect..."); + setTimeout(function () { + socket(url, handlers, reconnect); + }, retryInMs); + } + }); + client.onMessage( + /** + * @param {any} data + */ + function (data) { + var message = JSON.parse(data); + + if (handlers[message.type]) { + handlers[message.type](message.data, message.params); + } + }); +}; + +/* harmony default export */ __webpack_exports__["default"] = (socket); + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/utils/createSocketURL.js": +/*!*************************************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/utils/createSocketURL.js ***! + \*************************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL + * @returns {string} + */ +function format(objURL) { + var protocol = objURL.protocol || ""; + + if (protocol && protocol.substr(-1) !== ":") { + protocol += ":"; + } + + var auth = objURL.auth || ""; + + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ":"); + auth += "@"; + } + + var host = ""; + + if (objURL.hostname) { + host = auth + (objURL.hostname.indexOf(":") === -1 ? objURL.hostname : "[".concat(objURL.hostname, "]")); + + if (objURL.port) { + host += ":".concat(objURL.port); + } + } + + var pathname = objURL.pathname || ""; + + if (objURL.slashes) { + host = "//".concat(host || ""); + + if (pathname && pathname.charAt(0) !== "/") { + pathname = "/".concat(pathname); + } + } else if (!host) { + host = ""; + } + + var search = objURL.search || ""; + + if (search && search.charAt(0) !== "?") { + search = "?".concat(search); + } + + var hash = objURL.hash || ""; + + if (hash && hash.charAt(0) !== "#") { + hash = "#".concat(hash); + } + + pathname = pathname.replace(/[?#]/g, + /** + * @param {string} match + * @returns {string} + */ + function (match) { + return encodeURIComponent(match); + }); + search = search.replace("#", "%23"); + return "".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash); +} +/** + * @param {URL & { fromCurrentScript?: boolean }} parsedURL + * @returns {string} + */ + + +function createSocketURL(parsedURL) { + var hostname = parsedURL.hostname; // Node.js module parses it as `::` + // `new URL(urlString, [baseURLString])` parses it as '[::]' + + var isInAddrAny = hostname === "0.0.0.0" || hostname === "::" || hostname === "[::]"; // why do we need this check? + // hostname n/a for file protocol (example, when using electron, ionic) + // see: https://github.com/webpack/webpack-dev-server/pull/384 + + if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf("http") === 0) { + hostname = self.location.hostname; + } + + var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets. + + if (socketURLProtocol === "auto:" || hostname && isInAddrAny && self.location.protocol === "https:") { + socketURLProtocol = self.location.protocol; + } + + socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, "ws"); + var socketURLAuth = ""; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property + // Parse authentication credentials in case we need them + + if (parsedURL.username) { + socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username, + // we only include password if the username is not empty. + + if (parsedURL.password) { + // Result: : + socketURLAuth = socketURLAuth.concat(":", parsedURL.password); + } + } // In case the host is a raw IPv6 address, it can be enclosed in + // the brackets as the brackets are needed in the final URL string. + // Need to remove those as url.format blindly adds its own set of brackets + // if the host string contains colons. That would lead to non-working + // double brackets (e.g. [[::]]) host + // + // All of these web socket url params are optionally passed in through resourceQuery, + // so we need to fall back to the default if they are not provided + + + var socketURLHostname = (hostname || self.location.hostname || "localhost").replace(/^\[(.*)\]$/, "$1"); + var socketURLPort = parsedURL.port; + + if (!socketURLPort || socketURLPort === "0") { + socketURLPort = self.location.port; + } // If path is provided it'll be passed in via the resourceQuery as a + // query param so it has to be parsed out of the querystring in order for the + // client to open the socket to the correct location. + + + var socketURLPathname = "/ws"; + + if (parsedURL.pathname && !parsedURL.fromCurrentScript) { + socketURLPathname = parsedURL.pathname; + } + + return format({ + protocol: socketURLProtocol, + auth: socketURLAuth, + hostname: socketURLHostname, + port: socketURLPort, + pathname: socketURLPathname, + slashes: true + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (createSocketURL); + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js": +/*!********************************************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js ***! + \********************************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * @returns {string} + */ +function getCurrentScriptSource() { + // `document.currentScript` is the most accurate way to find the current script, + // but is not supported in all browsers. + if (document.currentScript) { + return document.currentScript.getAttribute("src"); + } // Fallback to getting all scripts running in the document. + + + var scriptElements = document.scripts || []; + var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) { + return element.getAttribute("src"); + }); + + if (scriptElementsWithSrc.length > 0) { + var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1]; + return currentScript.getAttribute("src"); + } // Fail as there was no script to use. + + + throw new Error("[webpack-dev-server] Failed to get current script source."); +} + +/* harmony default export */ __webpack_exports__["default"] = (getCurrentScriptSource); + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/utils/log.js": +/*!*************************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/utils/log.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "log": function() { return /* binding */ log; }, +/* harmony export */ "setLogLevel": function() { return /* binding */ setLogLevel; } +/* harmony export */ }); +/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../modules/logger/index.js */ "./node_modules/webpack-dev-server/client/modules/logger/index.js"); +/* harmony import */ var _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0__); + +var name = "webpack-dev-server"; // default level is set on the client side, so it does not need +// to be set by the CLI or API + +var defaultLevel = "info"; // options new options, merge with old options + +/** + * @param {false | true | "none" | "error" | "warn" | "info" | "log" | "verbose"} level + * @returns {void} + */ + +function setLogLevel(level) { + _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().configureDefaultLogger({ + level: level + }); +} + +setLogLevel(defaultLevel); +var log = _modules_logger_index_js__WEBPACK_IMPORTED_MODULE_0___default().getLogger(name); + + +/***/ }), + +/***/ "./node_modules/webpack-dev-server/client/utils/parseURL.js": +/*!******************************************************************!*\ + !*** ./node_modules/webpack-dev-server/client/utils/parseURL.js ***! + \******************************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getCurrentScriptSource_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getCurrentScriptSource.js */ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js"); + +/** + * @param {string} resourceQuery + * @returns {{ [key: string]: string | boolean }} + */ + +function parseURL(resourceQuery) { + /** @type {{ [key: string]: string }} */ + var options = {}; + + if (typeof resourceQuery === "string" && resourceQuery !== "") { + var searchParams = resourceQuery.slice(1).split("&"); + + for (var i = 0; i < searchParams.length; i++) { + var pair = searchParams[i].split("="); + options[pair[0]] = decodeURIComponent(pair[1]); + } + } else { + // Else, get the url from the ' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (this._map.getContainer().querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n this._map.getContainer().querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (this._map.getContainer().querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n this._map.getContainer().querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// startup\n// Load entry module and return exports\n__webpack_modules__[999]();\n__webpack_modules__[85]();\n__webpack_modules__[351]();\n__webpack_modules__[360]();\n__webpack_modules__[682]();\n__webpack_modules__[866]();\n__webpack_modules__[477]();\n__webpack_modules__[808]();\n__webpack_modules__[743]();\n__webpack_modules__[988]();\n__webpack_modules__[92]();\n__webpack_modules__[194]();\n__webpack_modules__[206]();\n__webpack_modules__[789]();\n__webpack_modules__[337]();\n__webpack_modules__[350]();\n__webpack_modules__[376]();\n__webpack_modules__[261]();\n__webpack_modules__[929]();\n__webpack_modules__[280]();\n__webpack_modules__[426]();\n__webpack_modules__[114]();\n__webpack_modules__[231]();\n__webpack_modules__[541]();\n__webpack_modules__[149]();\n__webpack_modules__[74]();\n__webpack_modules__[691]();\n__webpack_modules__[105]();\n__webpack_modules__[496]();\n__webpack_modules__[944]();\n__webpack_modules__[954]();\n__webpack_modules__[178]();\n__webpack_modules__[547]();\n__webpack_modules__[886]();\n__webpack_modules__[129]();\n__webpack_modules__[93]();\n__webpack_modules__[719]();\n__webpack_modules__[397]();\n__webpack_modules__[428]();\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["arr","L","DistortableCollection","FeatureGroup","extend","options","editable","exportOpts","exportStartUrl","statusUrl","exportUrl","initialize","setOptions","this","prototype","call","Utils","initTranslation","onAdd","map","_map","editing","enable","on","_addEvents","_removeEvents","onRemove","disable","off","e","layer","DomEvent","dragstart","_dragStartMultiple","drag","_dragMultiple","getElement","mousedown","_deselectOthers","contextmenu","_longPressMultiSelect","preventDefault","eachLayer","edit","target","enabled","DomUtil","toggleClass","anyCollected","deselect","_addToolbar","_removeToolbar","isCollected","overlay","hasClass","getLayers","some","bind","_toggleCollected","shiftKey","every","each","_leaflet_id","push","splice","indexOf","stopPropagation","i","_dragStartPoints","c","getCorner","latLngToLayerPoint","topLeft","delta","subtract","_updateCollectionFromPoints","_toRemove","filter","mode","_mode","_toMove","layersToMove","p","Transformation","x","y","forEach","movedPoints","transform","setCornersFromPoints","_getAvgCmPerPixel","imgs","reduce","sum","img","cm_per_pixel","length","fetchRemoteJson","url","index","imgCollectionProps","axios","get","response","data","hasOwnProperty","collection","avg_cm_per_pixel","console","log","recreateImagesFromJsonUrl","imageCollectionObj","generateExportJson","allImages","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","id","width","height","tooltipText","getTooltipText","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","interactive","_selected","_url","rotation","_initImage","_reset","_corners","zoomAnimation","Browser","any3d","_animateZoom","getPane","appendChild","_initImageDimensions","units","deg","setAngle","rad","eventParents","_eventParents","eP","Object","keys","select","singleclickon","_singleClickListeners","singleclickoff","_resetClickListeners","singleclick","_singleClick","doubleClickZoom","doubleClickLabels","fire","activateTooltip","closeTooltip","deactivateTooltip","originalImageWidth","getStyle","originalImageHeight","aspectRatio","parseInt","imageHeight","imageWidth","center","project","getCenter","offset","point","divideBy","unproject","add","_initialDimensions","getZoom","setBounds","latLngBounds","type","isSelected","_hideMarkers","_programmaticGrouping","_showMarkers","setCorner","corner","latlng","toolbar","DistortableImage","PopupBar","_updateToolbarPos","edited","_cornerExceedsMapLats","zoom","crs","Simple","CRS","exceedsTop","exceedsBottom","Math","pow","bindTooltip","direction","openTooltip","closeToolTip","unbindTooltip","setCorners","latlngObj","k","pointsObj","layerPointToLatLng","scaleBy","scale","scaledCorners","multiplyBy","getAngle","unit","matrix","style","TRANSFORM","slice","row0x","row0y","row1x","row1y","determinant","angle","TrigUtil","calcAngle","PI","round","radiansToDegrees","Util","formatNum","currentAngle","angleToRotateBy","rotateBy","q","degreesToRadians","cos","sin","dragBy","formerPoint","newPoint","transCorners","restore","equals","_getTranslateString","is3d","webkit3d","close","image","transformMatrix","_calculateProjectiveTransform","warp","getMatrixString","translation","_leaflet_pos","join","event","latLngToNewLayerPoint","_latLngToNewLayerPoint","agg","latLngToCartesian","j","w","offsetWidth","h","offsetHeight","_subtract","MatrixUtil","general2DProjection","distortableImageOverlay","Map","addInitHook","getContainer","addClass","distortableImage","Keymapper","Handler","position","addHooks","_keymapper","_container","_buildContainer","_scrollWrapper","_wrap","_toggler","_createButton","_setMapper","_toggleKeymapper","disableClickPropagation","disableScrollPropagation","removeHooks","remove","container","create","setAttribute","divider","toggler","innerHTML","IconUtil","wrap","display","button","control","insertAdjacentHTML","addTo","className","toggleTitle","_injectIconSet","querySelector","el","_iconset","KeymapperIconSet","render","_n","mobile","keymapper","Edit","keymap","group_action_map","group","_group","_exportOpts","Escape","editActions","actions","runExporter","getNestedVal","startExport","document","_onKeyDown","_decollectAll","boxcollectend","_addCollections","_enabled","handlerName","key","oe","originalEvent","HTMLImageElement","removeClass","_unlockGroup","hasTool","UnlockAction","_unlock","_lockGroup","LockAction","_lock","box","boxCollectBounds","imgBounds","_latLngBoundsToNewLayerBounds","intersects","_removeGroup","DeleteAction","layersToRemove","n","confirmDeletes","removeLayer","cancelExport","customCollection","undefined","clearInterval","updateInterval","suppressToolbar","controlBar","value","action","addTool","baseClass","removeTool","item","idx","ExportAction","Promise","resolve","opts","frequency","updater","JSON","parse","status_url","match","status","jpg","alert","handleStatusRes","setInterval","req","Request","Date","now","method","fetch","then","res","ok","text","fetchStatusUrl","mergedOpts","form","FormData","append","stringify","reqOpts","body","opacity","outline","action_map","_overlay","_toggledImage","_transparent","_outlined","_opacity","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","_dragHandles","layerGroup","addLayer","dragHandle","_scaleHandles","scaleHandle","_distortHandles","distortHandle","_rotateHandles","rotateHandle","_freeRotateHandles","freeRotateHandle","_lockHandles","lockHandle","draggable","distort","rotate","freeRotate","lock","ov","_updateHandle","currentHandle","setOpacity","dragging","isMode","_enableDragging","replaceTool","old","next","_nextOrNone","getModes","Draggable","_updatePosition","currentPoint","_newPos","_dragMode","setMode","_scaleMode","_distortMode","_rotateMode","_freeRotateMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_setOpacities","o","OpacitiesAction","_toggleBorder","BorderAction","_toggleOrder","_stackUp","_stackDown","_removeOverlay","confirmDelete","_getExport","downloadable","Image","onload","nw","ne","sw","se","warpWebGl","fullResolutionSrc","StackAction","bringToBack","hasMode","_deselect","getMode","maxLat","raisedPoint","popupBar","setLatLng","newMode","clickTool","modesArray","stop","EditAction","use","tooltip","removeBorder","addBorder","toolbarIcon","svg","html","b","toggleXlink","_link","deleteImage","Backspace","deleteImages","DistortAction","distortImage","d","DragAction","dragImage","D","Toolbar2","Action","_createIcon","args","iconOptions","_icon","constructor","_enableAction","_addSubToolbar","createElement","ToolbarIconSet","parentElement","_disableAction","editAction","isExporting","mouseLeaveSkip","isHooksExecuted","exportImage","exportImages","exportTool","mouseEnterHandler","handleMouseEnter","mouseLeaveHandler","handleMouseLeave","resetState","detachMouseEventListeners","renderExportIcon","setTimeout","attachMouseEventListeners","renderDownloadIcon","element","addEventListener","removeEventListener","renderCancelIcon","firstChild","addClassToSvg","FreeRotateAction","freeRotateImage","f","GeolocateAction","geolocateImage","EXIF","getData","u","l","lockMode","lockImages","opacities","subtoolbarCss","CSSStyleSheet","replaceSync","insertRule","adoptedStyleSheets","isNaN","OpacitiesToolbar2","appendToContainer","m","_calculateDepth","_ul","_disabledEvents","_getActionConstructor","_arguments","subToolbar","link","_hide","makeImageOpaque","makeImageTransparent","RestoreAction","restoreImage","RotateAction","rotateImage","r","ScaleAction","scaleImage","s","stackToFront","stackToBack","a","unlockImages","getAllTags","GPS","GPSLatitude","GPSLongitude","GPSLatitudeRef","GPSLongitudeRef","GPSImgDirectionRef","GPSImgDirection","numerator","denominator","Orientation","GPSAltitude","GPSAltitudeRef","DistortHandle","EditHandle","TYPE","icon","iconUrl","iconSize","iconAnchor","_onHandleDrag","_handled","_corner","getLatLng","updateHandle","DragHandle","formerLatLng","newLatLng","Marker","markerOptions","zIndexOffset","_bindListeners","_unbindListeners","_onHandleDragStart","_onHandleDragEnd","_fireEdit","dragend","_calculateScalingFactor","latlngA","latlngB","centerPoint","formerRadiusSquared","_d2","newRadiusSquared","sqrt","dx","dy","calculateAngleDelta","initialAngle","atan2","FreeRotateHandle","corner1","latLngToContainerPoint","corner2","abs","LockHandle","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","permanent","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","children","name","tool","click","IconSet","Class","_svg","_symbols","addSymbols","symbols","mergeOptions","boxCollector","boxZoom","BoxCollector","BoxZoom","_pane","_panes","overlayPane","_resetStateTimeout","_destroy","_onMouseDown","moved","_moved","_resetState","_clearDeferredResetState","which","disableTextSelection","disableImageDrag","_startPoint","mouseEventToContainerPoint","mousemove","_onMouseMove","_onMouseUp","_box","_point","_bounds","bounds","size","getSize","setPosition","min","_finish","enableTextSelection","enableImageDrag","containerPointToLatLng","getBottomLeft","getTopRight","DoubleClickLabels","DoubleClickZoom","_fireIfSingle","_clicked","_clickTimeout","touch","sourceCapabilities","firesTouchEvents","_onDoubleClick","labels","_labels","include","_fireDOMEvent","oldZoom","zoomDelta","setZoom","setZoomAround","containerPoint","addGoogleMutant","mutantOptions","mutantOpacity","maxZoom","maxNativeZoom","minZoom","labelOpacity","_googleMutant","tileLayer","_addLabels","attribution","subdomains","ext","obj","gecko3d","ie3d","str","confirm","confirmImageDelete","warningMsg","confirmImagesDeletes","ref","test","replace","loader","ref1","ref2","toggled","getAttribute","title1","title2","hasAttribute","distanceTo","adj","multmm","cij","multmv","v","multsm","basisToPoints","x1","y1","x2","y2","x3","y3","x4","y4","x1s","y1s","x1d","y1d","x2s","y2s","x2d","y2d","x3s","y3s","x3d","y3d","x4s","y4s","x4d","y4d","nestedKey","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"leaflet.distortableimage.js","mappings":";;;;;;;;;;AAAY;;AAEZ;;AAEA;AACA,mDAAmD,IAAI,SAAS,MAAM,IAAI;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB,GAAG;AACH;AACA,uBAAuB;AACvB,GAAG;AACH,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,UAAU,+BAA+B;AAChF;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;+CC9KA;AAAA;AAAA;AADA,IAAMA,GAAG,GAAG,EAAE;AACdC,CAAC,CAACC,qBAAqB,GAAGD,CAAC,CAACE,YAAY,CAACC,MAAM,CAAC;EAC9CC,OAAO,EAAE;IACPC,QAAQ,EAAE,IAAI;IACdC,UAAU,EAAE;MACVC,cAAc,EAAE,gCAAgC;MAChDC,SAAS,EAAE,yBAAyB;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AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;AChfa;AACb;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA6C,EAAE,aAAa,EAAC;AAC7D,yBAAyB,mBAAO,CAAC,gFAAoB;AACrD,4BAA4B,mBAAO,CAAC,sFAAuB;AAC3D,wBAAwB,mBAAO,CAAC,8EAAmB;AACnD,6CAA6C,yCAAyC,+CAA+C;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,sDAAsD;AACtD,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB,8BAA8B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,KACiC,EAAE,EAGtC;AACL,aAAa,KAC4B,EAAE,EAGtC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;;;;;;;;;;;ACrMD,8CAA2C,CAAC,WAAW,EAAC,CAAC,mBAAmB,EAAE,6CAA6C,qoBAAqoB,6pBAA6pB,KAAK,uBAAuB,EAAE,KAAK,UAAU,KAAK,WAAW,aAAa,aAAa,YAAY,MAAM,aAAa,SAAS,WAAW,aAAa,aAAa,YAAY,GAAG,QAAQ,UAAU,OAAO,yBAAyB,2BAA2B,yBAAyB,2BAA2B,6BAA6B,uBAAuB,6BAA6B,yBAAyB,uBAAuB,yBAAyB,yBAAyB,2BAA2B,uBAAuB,uBAAuB,uBAAuB,yBAAyB,uBAAuB,6BAA6B,yBAAyB,yBAAyB,2BAA2B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,2BAA2B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,2BAA2B,2BAA2B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,6BAA6B,2BAA2B,yBAAyB,uBAAuB,6BAA6B,6BAA6B,6BAA6B,2BAA2B,6BAA6B,yBAAyB,6BAA6B,6BAA6B,6BAA6B,6BAA6B,2BAA2B,yBAAyB,6BAA6B,2BAA2B,yBAAyB,yBAAyB,uBAAuB,qBAAqB,qBAAqB,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,aAAa,eAAe,aAAa,YAAY,YAAY,YAAY,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,eAAe,cAAc,YAAY,gBAAgB,YAAY,YAAY,YAAY,cAAc,iBAAiB,cAAc,YAAY,aAAa,eAAe,cAAc,cAAc,cAAc,cAAc,eAAe,cAAc,aAAa,cAAc,gBAAgB,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,aAAa,aAAa,aAAa,aAAa,aAAa,eAAe,aAAa,cAAc,cAAc,cAAc,aAAa,cAAc,WAAW,aAAa,YAAY,cAAc,eAAe,cAAc,aAAa,cAAc,YAAY,YAAY,WAAW,YAAY,YAAY,YAAY,eAAe,YAAY,aAAa,cAAc,WAAW,cAAc,WAAW,WAAW,YAAY,YAAY,aAAa,aAAa,aAAa,cAAc,eAAe,aAAa,aAAa,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,YAAY,eAAe,cAAc,eAAe,cAAc,MAAM,aAAa,WAAW,aAAa,cAAc,aAAa,cAAc,eAAe,YAAY,eAAe,aAAa,YAAY,aAAa,aAAa,cAAc,YAAY,YAAY,YAAY,aAAa,YAAY,eAAe,aAAa,aAAa,cAAc,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,cAAc,eAAe,eAAe,cAAc,eAAe,aAAa,cAAc,cAAc,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,eAAe,cAAc,aAAa,YAAY,eAAe,eAAe,eAAe,cAAc,eAAe,aAAa,eAAe,eAAe,eAAe,eAAe,cAAc,aAAa,eAAe,cAAc,aAAa,aAAa,YAAY,WAAW,WAAW,cAAc,cAAc,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,aAAa,eAAe,aAAa,YAAY,YAAY,YAAY,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,eAAe,eAAe,eAAe,eAAe,eAAe,aAAa,aAAa,cAAc,aAAa,cAAc,cAAc,gBAAgB,aAAa,YAAY,cAAc,aAAa,cAAc,eAAe,WAAW,WAAW,WAAW,gBAAgB,WAAW,YAAY,cAAc,YAAY,gBAAgB,YAAY,YA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ACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,kBAAkB;AAC/B;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA,aAAa,WAAW;AACxB;AACA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA,aAAa,UAAU;AACvB;;AAEA,CAAC;AACD;AACA,cAAc,sCAAsC;;AAEpD,0EAA0E,WAAW;AACrF,6EAA6E,WAAW;AACxF,wFAAwF,WAAW;;AAEnG;AACA;AACA,aAAa,qCAAqC;AAClD,aAAa,sDAAsD;AACnE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0EAA0E,aAAa;AACvF;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,mGAAmG,eAAe;AAClH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,6EAA6E,eAAe;AAC5F;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,gFAAgF,iBAAiB;AACjG;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE,WAAW,mFAAmF,WAAW;AAC/K;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,SAAS;AAClD;AACA;;AAEA;AACA;;AAEA,eAAe,gCAAmB;AAClC;AACA,cAAc,6DAA6D;;AAE3E,cAAc,yDAAyD;;AAEvE,cAAc,gCAAgC;;AAE9C,cAAc,2BAA2B;;AAEzC;AACA,aAAa,QAAQ;AACrB,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,0BAA0B;AACxC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC,cAAc,2BAA2B;AACzC;;AAEA;AACA,aAAa,QAAQ;AACrB,cAAc,yDAAyD;AACvE,cAAc,qBAAqB;AACnC,cAAc,eAAe;AAC7B;;AAEA;AACA,WAAW,iBAAiB;AAC5B,aAAa,gBAAgB;AAC7B;;;AAGA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,aAAa,4CAA4C;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,aAAa,mBAAmB;AAChC;AACA,aAAa,QAAQ;;AAErB;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,aAAa;AAC1B,aAAa,OAAO;AACpB,eAAe;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,uDAAuD;;AAEvD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA,kDAAkD,gCAAmB;;AAErE;AACA;AACA;AACA;;;AAGA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,gCAAmB;;AAEtC,eAAe,gCAAmB;AAClC;;AAEA,0BAA0B,gCAAmB;AAC7C,WAAW,mCAAmC;;;AAG9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,WAAW,mCAAmC;AAC9C,aAAa;AACb;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,gCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,gCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,gBAAgB,gCAAmB,wBAAwB,gCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,gCAAmB,2BAA2B;AACzD,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,gCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAmB;AACnB,qBAAqB,gCAAmB;AACxC,+CAA+C;AAC/C,sBAAsB;AACtB,uFAAuF,gCAAmB;;AAE1G,CAAC;AACD;AACA;AACA,oGAAoG,aAAa;AACjH,UAAU;AACV;;;;;;;;;;;;;;;;;;;;;AC1zBA;AACA;AAC2C;AACJ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,sCAAsC;;AAEjD;AACA,WAAW,mCAAmC;;AAE9C;AACA,WAAW,0CAA0C;;AAErD;AACA,WAAW,+BAA+B;;AAE1C;AACA,oEAAkB;AAClB;AACA,WAAW,eAAe;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,UAAU;;AAEzB,eAAe,mBAAmB;AAClC;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA,KAAK;AACL;AACA,eAAe,mBAAmB;;AAElC;AACA;;AAEA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,eAAe;AAC1B;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,YAAY,sEAAsE;AAC7F,eAAe;AACf;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA,WAAW,QAAQ;AACnB,WAAW,kBAAkB,oEAAoE,GAAG;AACpG,WAAW,eAAe;AAC1B;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wDAAwD;;AAExD,iBAAiB,0DAAQ,CAAC,qDAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;;AAEjC;AACA,KAAK;AACL,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACnNA;AAC2D;AACtB,CAAC;;AAEtC;;AAEA;AACA,OAAO,6BAA6B,0BAA0B,6BAA6B,2BAA2B,6BAA6B,WAAW,6BAA6B,GAAG,mEAAe;AAC7M;;AAEA;AACA,qBAAqB;AACrB;AACA;;AAEO;AACP;AACA,WAAW,QAAQ;AACnB,aAAa,wDAAwD;AACrE,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM;;;AAGN,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mDAAQ;AACd;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA,+DAAe,MAAM;;;;;;;;;;;;AChErB;AACA,aAAa,4IAA4I;AACzJ,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,QAAQ,+BAA+B;AAClD,aAAa;AACb;;;AAGA;AACA,qCAAqC;AACrC;;AAEA,wFAAwF;AACxF;AACA;;AAEA;AACA;AACA;;AAEA,wEAAwE;;AAExE;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;;AAGA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,+DAAe,eAAe;;;;;;;;;;;;ACxI9B;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA,+DAAe,sBAAsB;;;;;;;;;;;;;;;;;;ACzBW;AAChD,iCAAiC;AACjC;;AAEA,2BAA2B;;AAE3B;AACA,WAAW,uEAAuE;AAClF,aAAa;AACb;;AAEA;AACA,EAAE,sFAA6B;AAC/B;AACA,GAAG;AACH;;AAEA;AACA,UAAU,yEAAgB;;;;;;;;;;;;;;AClBuC;AACjE;AACA,WAAW,QAAQ;AACnB,eAAe;AACf;;AAEA;AACA,eAAe,yBAAyB;AACxC;;AAEA;AACA;;AAEA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA,IAAI;AACJ;AACA,uBAAuB,sEAAsB;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAAe,QAAQ;;;;;;;;;;;;;;;ACxCyB;AACjB;AAC/B,cAAc,4BAA4B;AAC1C,cAAc,2BAA2B;;AAEzC;AACA,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,QAAQ;AACrB;;;AAGA;AACA;AACA,IAAI,6CAAQ;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI,6CAAQ;AACZ,IAAI,kEAAe;;AAEnB;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,+DAAe,SAAS;;;;;;;;;;;;ACvExB;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,+DAAe,OAAO;;;;;;;;;;;;AChBtB,sDAAsD,gBAAgB,6CAA6C,oDAAoD,IAAI,IAAI,IAAI,IAAI;AACvL;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAAe,SAAS;;;;;;;;;;ACnBxB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAU;AACd;AACA;AACA,0BAA0B,uBAAgB;AAC1C;AACA,WAAW,mBAAO,CAAC,gDAAO;AAC1B;AACA,EAAE,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,mBAAO,CAAC,0EAAoB;;AAEhC;AACA;AACA;AACA,IAAI;AACJ;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,kBAAkB,mBAAO,CAAC,wDAAW;AACrC;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE,KAAK,EAEN;;;;;;;;;;;AC5DD,mBAAmB,mBAAO,CAAC,+CAAQ;AACnC;;;;;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF,WAAW,mBAAO,CAAC,gDAAO;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3CA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;;AAEpB,6BAA6B;;AAE7B,uBAAuB;;AAEvB,0BAA0B;AAC1B;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;;;;;;UC1DA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA,sBAAsB;UACtB,oDAAoD,uBAAuB;UAC3E;UACA;UACA,GAAG;UACH;UACA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WCxCA;WACA;WACA;WACA,eAAe,4BAA4B;WAC3C,eAAe;WACf,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA;;;;;WCJA,wCAAwC;;;;;WCAxC,qCAAqC;;;;;WCArC,8CAA8C;;;;;WCA9C;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,4CAA4C,mBAAmB;WAC/D;WACA;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA;;;;;WCzCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,2BAA2B;WAC3B,4BAA4B;WAC5B,2BAA2B;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA,iBAAiB,qCAAqC;WACtD;;WAEA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,iBAAiB;WACrC;WACA;WACA;WACA,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA,QAAQ;WACR;WACA,MAAM;WACN,KAAK;WACL,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;;WAEA;WACA;;WAEA;;WAEA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;;WAEA;WACA;WACA,EAAE;;WAEF;WACA;;WAEA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,oBAAoB,oBAAoB;WACxC;WACA;WACA;WACA;WACA,EAAE;;WAEF;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA,IAAI;WACJ;;WAEA;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;WACA;WACA;;;;;WCrYA;;;;;WCAA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB,2BAA2B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,kBAAkB,cAAc;WAChC;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,cAAc,MAAM;WACpB;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA,cAAc,aAAa;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,iBAAiB,4BAA4B;WAC7C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kBAAkB,uCAAuC;WACzD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,iCAAiC;WACpD;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,uCAAuC;WAC7D;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,sBAAsB;WAC5C;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,wCAAwC;WAC3D;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,IAAI;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,sCAAsC;WACtC;WACA;WACA,EAAE;WACF;;WAEA;;WAEA;;;;;UE9fA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA","sources":["webpack://leaflet-distortableimage/./node_modules/ansi-html-community/index.js","webpack://leaflet-distortableimage/./src/DistortableCollection.js","webpack://leaflet-distortableimage/./src/DistortableImageOverlay.js","webpack://leaflet-distortableimage/./src/components/DistortableImage.Keymapper.js","webpack://leaflet-distortableimage/./src/edit/DistortableCollection.Edit.js","webpack://leaflet-distortableimage/./src/edit/DistortableImage.Edit.js","webpack://leaflet-distortableimage/./src/edit/actions/BorderAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DeleteAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DistortAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DragAction.js","webpack://leaflet-distortableimage/./src/edit/actions/EditAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ExportAction.js","webpack://leaflet-distortableimage/./src/edit/actions/FreeRotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/GeolocateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/LockAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacitiesAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacityAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RestoreAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ScaleAction.js","webpack://leaflet-distortableimage/./src/edit/actions/StackAction.js","webpack://leaflet-distortableimage/./src/edit/actions/UnlockAction.js","webpack://leaflet-distortableimage/./src/edit/getEXIFdata.js","webpack://leaflet-distortableimage/./src/edit/handles/DistortHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/DragHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/EditHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/FreeRotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/LockHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/RotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/ScaleHandle.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.ControlBar.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.PopupBar.js","webpack://leaflet-distortableimage/./src/iconsets/IconSet.js","webpack://leaflet-distortableimage/./src/iconsets/KeymapperIconSet.js","webpack://leaflet-distortableimage/./src/iconsets/ToolbarIconSet.js","webpack://leaflet-distortableimage/./src/mapmixins/BoxCollector.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickLabels.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/./node_modules/events/events.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/index.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/named-references.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/numeric-unicode-map.js","webpack://leaflet-distortableimage/./node_modules/html-entities/lib/surrogate-pairs.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/clients/WebSocketClient.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/modules/logger/index.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/overlay.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/socket.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/createSocketURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/log.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/parseURL.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/reloadApp.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/sendMessage.js","webpack://leaflet-distortableimage/./node_modules/webpack-dev-server/client/utils/stripAnsi.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/dev-server.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/emitter.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log-apply-result.js","webpack://leaflet-distortableimage/./node_modules/webpack/hot/log.js","webpack://leaflet-distortableimage/webpack/bootstrap","webpack://leaflet-distortableimage/webpack/runtime/compat get default export","webpack://leaflet-distortableimage/webpack/runtime/define property getters","webpack://leaflet-distortableimage/webpack/runtime/get javascript update chunk filename","webpack://leaflet-distortableimage/webpack/runtime/get update manifest filename","webpack://leaflet-distortableimage/webpack/runtime/getFullHash","webpack://leaflet-distortableimage/webpack/runtime/hasOwnProperty shorthand","webpack://leaflet-distortableimage/webpack/runtime/load script","webpack://leaflet-distortableimage/webpack/runtime/make namespace object","webpack://leaflet-distortableimage/webpack/runtime/hot module replacement","webpack://leaflet-distortableimage/webpack/runtime/publicPath","webpack://leaflet-distortableimage/webpack/runtime/jsonp chunk loading","webpack://leaflet-distortableimage/webpack/before-startup","webpack://leaflet-distortableimage/webpack/startup","webpack://leaflet-distortableimage/webpack/after-startup"],"sourcesContent":["'use strict'\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '', // italic\n '4': '', // underscore\n '8': 'display:none', // hidden\n '9': '' // delete\n}\nvar _closeTags = {\n '23': '', // reset italic\n '24': '', // reset underscore\n '29': '' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = ''\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return ''\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : ''\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join(''))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n","const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n // connects to JSON file and fetches JSON data therein from remote source\n async fetchRemoteJson(url) {\n let index = 0;\n const imgCollectionProps = [];\n\n try {\n const response = await axios.get(url);\n if (response.data.hasOwnProperty('avg_cm_per_pixel')) {\n if (response.data.collection.length > 1) {\n response.data.collection.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data.collection;\n\n return {\n avg_cm_per_pixel: response.data.avg_cm_per_pixel,\n imgCollectionProps,\n };\n } else {\n if (response.data.length > 1) {\n response.data.forEach((data) => {\n imgCollectionProps[index] = data;\n index++;\n });\n return {\n imgCollectionProps,\n };\n }\n imgCollectionProps[index] = response.data;\n\n return {\n imgCollectionProps,\n };\n }\n } catch (err) {\n console.log('err', err);\n }\n },\n\n // expects url in this format: https://archive.org/download/mkl-1/mkl-1.json\n async recreateImagesFromJsonUrl(url) {\n let imageCollectionObj = {};\n\n if (url) {\n imageCollectionObj = await this.fetchRemoteJson(url);\n return imageCollectionObj;\n };\n\n return imageCollectionObj;\n },\n\n generateExportJson(allImages = false) {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (allImages || this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length - 1];\n const zc = layer.getCorners();\n\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng || zc[0].lon},\n {lat: zc[1].lat, lon: zc[1].lng || zc[1].lon},\n {lat: zc[3].lat, lon: zc[3].lng || zc[3].lon},\n {lat: zc[2].lat, lon: zc[2].lng || zc[2].lon},\n ];\n\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n tooltipText: layer.getTooltipText(),\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n interactive: true,\n tooltipText: '',\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n\n this.interactive = this.options.interactive;\n this.tooltipText = this.options.tooltipText;\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n\n L.DomEvent.on(this.getElement(), 'mousemove', this.activateTooltip, this);\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n\n L.DomEvent.on(this.getElement(), 'mouseout', this.closeTooltip, this);\n L.DomEvent.off(this.getElement(), 'mousemove', this.deactivateTooltip, this);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n activateTooltip() {\n if (!this._selected) {\n this.bindTooltip(this.tooltipText, {direction: 'top'}).openTooltip();\n }\n },\n\n closeToolTip() {\n this.closeTooltip();\n },\n\n deactivateTooltip() {\n this.unbindTooltip();\n },\n\n getTooltipText() {\n return this.tooltipText;\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
Rotate Mode
R
RotateScale Mode
r
Scale Mode
s
Distort Mode
d
Drag Mode
D
Lock (Mode) / Unlock Image
l\\xa0u
Stack up / down
q\\xa0a
Add / Remove Image Border
b
Toggle Opacity
o
Deselect All
esc
Delete Image(s)
delete\\xa0backspace
Export Image(s)
e
'\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n const opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n const outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n const tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n const tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n const size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n const zoom = this._map.getZoom();\n const center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n const map = overlay._map;\n\n const dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n let cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar named_references_1 = require(\"./named-references\");\nvar numeric_unicode_map_1 = require(\"./numeric-unicode-map\");\nvar surrogate_pairs_1 = require(\"./surrogate-pairs\");\nvar allNamedReferences = __assign(__assign({}, named_references_1.namedReferences), { all: named_references_1.namedReferences.html5 });\nvar encodeRegExps = {\n specialChars: /[<>'\"&]/g,\n nonAscii: /(?:[<>'\"&\\u0080-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n nonAsciiPrintable: /(?:[<>'\"&\\x01-\\x08\\x11-\\x15\\x17-\\x1F\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g,\n extensive: /(?:[\\x01-\\x0c\\x0e-\\x1f\\x21-\\x2c\\x2e-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7d\\x7f-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g\n};\nvar defaultEncodeOptions = {\n mode: 'specialChars',\n level: 'all',\n numeric: 'decimal'\n};\n/** Encodes all the necessary (specified by `level`) characters in the text */\nfunction encode(text, _a) {\n var _b = _a === void 0 ? defaultEncodeOptions : _a, _c = _b.mode, mode = _c === void 0 ? 'specialChars' : _c, _d = _b.numeric, numeric = _d === void 0 ? 'decimal' : _d, _e = _b.level, level = _e === void 0 ? 'all' : _e;\n if (!text) {\n return '';\n }\n var encodeRegExp = encodeRegExps[mode];\n var references = allNamedReferences[level].characters;\n var isHex = numeric === 'hexadecimal';\n encodeRegExp.lastIndex = 0;\n var _b = encodeRegExp.exec(text);\n var _c;\n if (_b) {\n _c = '';\n var _d = 0;\n do {\n if (_d !== _b.index) {\n _c += text.substring(_d, _b.index);\n }\n var _e = _b[0];\n var result_1 = references[_e];\n if (!result_1) {\n var code_1 = _e.length > 1 ? surrogate_pairs_1.getCodePoint(_e, 0) : _e.charCodeAt(0);\n result_1 = (isHex ? '&#x' + code_1.toString(16) : '&#' + code_1) + ';';\n }\n _c += result_1;\n _d = _b.index + _e.length;\n } while ((_b = encodeRegExp.exec(text)));\n if (_d !== text.length) {\n _c += text.substring(_d);\n }\n }\n else {\n _c =\n text;\n }\n return _c;\n}\nexports.encode = encode;\nvar defaultDecodeOptions = {\n scope: 'body',\n level: 'all'\n};\nvar strict = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);/g;\nvar attribute = /&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g;\nvar baseDecodeRegExps = {\n xml: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.xml\n },\n html4: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html4\n },\n html5: {\n strict: strict,\n attribute: attribute,\n body: named_references_1.bodyRegExps.html5\n }\n};\nvar decodeRegExps = __assign(__assign({}, baseDecodeRegExps), { all: baseDecodeRegExps.html5 });\nvar fromCharCode = String.fromCharCode;\nvar outOfBoundsChar = fromCharCode(65533);\nvar defaultDecodeEntityOptions = {\n level: 'all'\n};\n/** Decodes a single entity */\nfunction decodeEntity(entity, _a) {\n var _b = (_a === void 0 ? defaultDecodeEntityOptions : _a).level, level = _b === void 0 ? 'all' : _b;\n if (!entity) {\n return '';\n }\n var _b = entity;\n var decodeEntityLastChar_1 = entity[entity.length - 1];\n if (false\n && decodeEntityLastChar_1 === '=') {\n _b =\n entity;\n }\n else if (false\n && decodeEntityLastChar_1 !== ';') {\n _b =\n entity;\n }\n else {\n var decodeResultByReference_1 = allNamedReferences[level].entities[entity];\n if (decodeResultByReference_1) {\n _b = decodeResultByReference_1;\n }\n else if (entity[0] === '&' && entity[1] === '#') {\n var decodeSecondChar_1 = entity[2];\n var decodeCode_1 = decodeSecondChar_1 == 'x' || decodeSecondChar_1 == 'X'\n ? parseInt(entity.substr(3), 16)\n : parseInt(entity.substr(2));\n _b =\n decodeCode_1 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_1 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_1)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_1] || decodeCode_1);\n }\n }\n return _b;\n}\nexports.decodeEntity = decodeEntity;\n/** Decodes all entities in the text */\nfunction decode(text, _a) {\n var decodeSecondChar_1 = _a === void 0 ? defaultDecodeOptions : _a, decodeCode_1 = decodeSecondChar_1.level, level = decodeCode_1 === void 0 ? 'all' : decodeCode_1, _b = decodeSecondChar_1.scope, scope = _b === void 0 ? level === 'xml' ? 'strict' : 'body' : _b;\n if (!text) {\n return '';\n }\n var decodeRegExp = decodeRegExps[level][scope];\n var references = allNamedReferences[level].entities;\n var isAttribute = scope === 'attribute';\n var isStrict = scope === 'strict';\n decodeRegExp.lastIndex = 0;\n var replaceMatch_1 = decodeRegExp.exec(text);\n var replaceResult_1;\n if (replaceMatch_1) {\n replaceResult_1 = '';\n var replaceLastIndex_1 = 0;\n do {\n if (replaceLastIndex_1 !== replaceMatch_1.index) {\n replaceResult_1 += text.substring(replaceLastIndex_1, replaceMatch_1.index);\n }\n var replaceInput_1 = replaceMatch_1[0];\n var decodeResult_1 = replaceInput_1;\n var decodeEntityLastChar_2 = replaceInput_1[replaceInput_1.length - 1];\n if (isAttribute\n && decodeEntityLastChar_2 === '=') {\n decodeResult_1 = replaceInput_1;\n }\n else if (isStrict\n && decodeEntityLastChar_2 !== ';') {\n decodeResult_1 = replaceInput_1;\n }\n else {\n var decodeResultByReference_2 = references[replaceInput_1];\n if (decodeResultByReference_2) {\n decodeResult_1 = decodeResultByReference_2;\n }\n else if (replaceInput_1[0] === '&' && replaceInput_1[1] === '#') {\n var decodeSecondChar_2 = replaceInput_1[2];\n var decodeCode_2 = decodeSecondChar_2 == 'x' || decodeSecondChar_2 == 'X'\n ? parseInt(replaceInput_1.substr(3), 16)\n : parseInt(replaceInput_1.substr(2));\n decodeResult_1 =\n decodeCode_2 >= 0x10ffff\n ? outOfBoundsChar\n : decodeCode_2 > 65535\n ? surrogate_pairs_1.fromCodePoint(decodeCode_2)\n : fromCharCode(numeric_unicode_map_1.numericUnicodeMap[decodeCode_2] || decodeCode_2);\n }\n }\n replaceResult_1 += decodeResult_1;\n replaceLastIndex_1 = replaceMatch_1.index + replaceInput_1.length;\n } while ((replaceMatch_1 = decodeRegExp.exec(text)));\n if (replaceLastIndex_1 !== text.length) {\n replaceResult_1 += text.substring(replaceLastIndex_1);\n }\n }\n else {\n replaceResult_1 =\n text;\n }\n return replaceResult_1;\n}\nexports.decode = decode;\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.bodyRegExps={xml:/&(?:#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\\d+|#[xX][\\da-fA-F]+|[0-9a-zA-Z]+);?/g};exports.namedReferences={xml:{entities:{\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\",\"&\":\"&\"},characters:{\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\",\"&\":\"&\"}},html4:{entities:{\"'\":\"'\",\" \":\" \",\" \":\" \",\"¡\":\"¡\",\"¡\":\"¡\",\"¢\":\"¢\",\"¢\":\"¢\",\"£\":\"£\",\"£\":\"£\",\"¤\":\"¤\",\"¤\":\"¤\",\"¥\":\"¥\",\"¥\":\"¥\",\"¦\":\"¦\",\"¦\":\"¦\",\"§\":\"§\",\"§\":\"§\",\"¨\":\"¨\",\"¨\":\"¨\",\"©\":\"©\",\"©\":\"©\",\"ª\":\"ª\",\"ª\":\"ª\",\"«\":\"«\",\"«\":\"«\",\"¬\":\"¬\",\"¬\":\"¬\",\"­\":\"­\",\"­\":\"­\",\"®\":\"®\",\"®\":\"®\",\"¯\":\"¯\",\"¯\":\"¯\",\"°\":\"°\",\"°\":\"°\",\"±\":\"±\",\"±\":\"±\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"´\":\"´\",\"´\":\"´\",\"µ\":\"µ\",\"µ\":\"µ\",\"¶\":\"¶\",\"¶\":\"¶\",\"·\":\"·\",\"·\":\"·\",\"¸\":\"¸\",\"¸\":\"¸\",\"¹\":\"¹\",\"¹\":\"¹\",\"º\":\"º\",\"º\":\"º\",\"»\":\"»\",\"»\":\"»\",\"¼\":\"¼\",\"¼\":\"¼\",\"½\":\"½\",\"½\":\"½\",\"¾\":\"¾\",\"¾\":\"¾\",\"¿\":\"¿\",\"¿\":\"¿\",\"À\":\"À\",\"À\":\"À\",\"Á\":\"Á\",\"Á\":\"Á\",\"Â\":\"Â\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"È\":\"È\",\"È\":\"È\",\"É\":\"É\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"×\":\"×\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"ß\":\"ß\",\"à\":\"à\",\"à\":\"à\",\"á\":\"á\",\"á\":\"á\",\"â\":\"â\",\"â\":\"â\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"å\":\"å\",\"å\":\"å\",\"æ\":\"æ\",\"æ\":\"æ\",\"ç\":\"ç\",\"ç\":\"ç\",\"è\":\"è\",\"è\":\"è\",\"é\":\"é\",\"é\":\"é\",\"ê\":\"ê\",\"ê\":\"ê\",\"ë\":\"ë\",\"ë\":\"ë\",\"ì\":\"ì\",\"ì\":\"ì\",\"í\":\"í\",\"í\":\"í\",\"î\":\"î\",\"î\":\"î\",\"ï\":\"ï\",\"ï\":\"ï\",\"ð\":\"ð\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ò\":\"ò\",\"ó\":\"ó\",\"ó\":\"ó\",\"ô\":\"ô\",\"ô\":\"ô\",\"õ\":\"õ\",\"õ\":\"õ\",\"ö\":\"ö\",\"ö\":\"ö\",\"÷\":\"÷\",\"÷\":\"÷\",\"ø\":\"ø\",\"ø\":\"ø\",\"ù\":\"ù\",\"ù\":\"ù\",\"ú\":\"ú\",\"ú\":\"ú\",\"û\":\"û\",\"û\":\"û\",\"ü\":\"ü\",\"ü\":\"ü\",\"ý\":\"ý\",\"ý\":\"ý\",\"þ\":\"þ\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\""\":'\"',\""\":'\"',\"&\":\"&\",\"&\":\"&\",\"<\":\"<\",\"<\":\"<\",\">\":\">\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"⟨\":\"〈\",\"⟩\":\"〉\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"},characters:{\"'\":\"'\",\" \":\" \",\"¡\":\"¡\",\"¢\":\"¢\",\"£\":\"£\",\"¤\":\"¤\",\"¥\":\"¥\",\"¦\":\"¦\",\"§\":\"§\",\"¨\":\"¨\",\"©\":\"©\",\"ª\":\"ª\",\"«\":\"«\",\"¬\":\"¬\",\"­\":\"­\",\"®\":\"®\",\"¯\":\"¯\",\"°\":\"°\",\"±\":\"±\",\"²\":\"²\",\"³\":\"³\",\"´\":\"´\",\"µ\":\"µ\",\"¶\":\"¶\",\"·\":\"·\",\"¸\":\"¸\",\"¹\":\"¹\",\"º\":\"º\",\"»\":\"»\",\"¼\":\"¼\",\"½\":\"½\",\"¾\":\"¾\",\"¿\":\"¿\",\"À\":\"À\",\"Á\":\"Á\",\"Â\":\"Â\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Å\":\"Å\",\"Æ\":\"Æ\",\"Ç\":\"Ç\",\"È\":\"È\",\"É\":\"É\",\"Ê\":\"Ê\",\"Ë\":\"Ë\",\"Ì\":\"Ì\",\"Í\":\"Í\",\"Î\":\"Î\",\"Ï\":\"Ï\",\"Ð\":\"Ð\",\"Ñ\":\"Ñ\",\"Ò\":\"Ò\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Õ\":\"Õ\",\"Ö\":\"Ö\",\"×\":\"×\",\"Ø\":\"Ø\",\"Ù\":\"Ù\",\"Ú\":\"Ú\",\"Û\":\"Û\",\"Ü\":\"Ü\",\"Ý\":\"Ý\",\"Þ\":\"Þ\",\"ß\":\"ß\",\"à\":\"à\",\"á\":\"á\",\"â\":\"â\",\"ã\":\"ã\",\"ä\":\"ä\",\"å\":\"å\",\"æ\":\"æ\",\"ç\":\"ç\",\"è\":\"è\",\"é\":\"é\",\"ê\":\"ê\",\"ë\":\"ë\",\"ì\":\"ì\",\"í\":\"í\",\"î\":\"î\",\"ï\":\"ï\",\"ð\":\"ð\",\"ñ\":\"ñ\",\"ò\":\"ò\",\"ó\":\"ó\",\"ô\":\"ô\",\"õ\":\"õ\",\"ö\":\"ö\",\"÷\":\"÷\",\"ø\":\"ø\",\"ù\":\"ù\",\"ú\":\"ú\",\"û\":\"û\",\"ü\":\"ü\",\"ý\":\"ý\",\"þ\":\"þ\",\"ÿ\":\"ÿ\",'\"':\""\",\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"Œ\":\"Œ\",\"œ\":\"œ\",\"Š\":\"Š\",\"š\":\"š\",\"Ÿ\":\"Ÿ\",\"ˆ\":\"ˆ\",\"˜\":\"˜\",\" \":\" \",\" \":\" \",\" \":\" \",\"‌\":\"‌\",\"‍\":\"‍\",\"‎\":\"‎\",\"‏\":\"‏\",\"–\":\"–\",\"—\":\"—\",\"‘\":\"‘\",\"’\":\"’\",\"‚\":\"‚\",\"“\":\"“\",\"”\":\"”\",\"„\":\"„\",\"†\":\"†\",\"‡\":\"‡\",\"‰\":\"‰\",\"‹\":\"‹\",\"›\":\"›\",\"€\":\"€\",\"ƒ\":\"ƒ\",\"Α\":\"Α\",\"Β\":\"Β\",\"Γ\":\"Γ\",\"Δ\":\"Δ\",\"Ε\":\"Ε\",\"Ζ\":\"Ζ\",\"Η\":\"Η\",\"Θ\":\"Θ\",\"Ι\":\"Ι\",\"Κ\":\"Κ\",\"Λ\":\"Λ\",\"Μ\":\"Μ\",\"Ν\":\"Ν\",\"Ξ\":\"Ξ\",\"Ο\":\"Ο\",\"Π\":\"Π\",\"Ρ\":\"Ρ\",\"Σ\":\"Σ\",\"Τ\":\"Τ\",\"Υ\":\"Υ\",\"Φ\":\"Φ\",\"Χ\":\"Χ\",\"Ψ\":\"Ψ\",\"Ω\":\"Ω\",\"α\":\"α\",\"β\":\"β\",\"γ\":\"γ\",\"δ\":\"δ\",\"ε\":\"ε\",\"ζ\":\"ζ\",\"η\":\"η\",\"θ\":\"θ\",\"ι\":\"ι\",\"κ\":\"κ\",\"λ\":\"λ\",\"μ\":\"μ\",\"ν\":\"ν\",\"ξ\":\"ξ\",\"ο\":\"ο\",\"π\":\"π\",\"ρ\":\"ρ\",\"ς\":\"ς\",\"σ\":\"σ\",\"τ\":\"τ\",\"υ\":\"υ\",\"φ\":\"φ\",\"χ\":\"χ\",\"ψ\":\"ψ\",\"ω\":\"ω\",\"ϑ\":\"ϑ\",\"ϒ\":\"ϒ\",\"ϖ\":\"ϖ\",\"•\":\"•\",\"…\":\"…\",\"′\":\"′\",\"″\":\"″\",\"‾\":\"‾\",\"⁄\":\"⁄\",\"℘\":\"℘\",\"ℑ\":\"ℑ\",\"ℜ\":\"ℜ\",\"™\":\"™\",\"ℵ\":\"ℵ\",\"←\":\"←\",\"↑\":\"↑\",\"→\":\"→\",\"↓\":\"↓\",\"↔\":\"↔\",\"↵\":\"↵\",\"⇐\":\"⇐\",\"⇑\":\"⇑\",\"⇒\":\"⇒\",\"⇓\":\"⇓\",\"⇔\":\"⇔\",\"∀\":\"∀\",\"∂\":\"∂\",\"∃\":\"∃\",\"∅\":\"∅\",\"∇\":\"∇\",\"∈\":\"∈\",\"∉\":\"∉\",\"∋\":\"∋\",\"∏\":\"∏\",\"∑\":\"∑\",\"−\":\"−\",\"∗\":\"∗\",\"√\":\"√\",\"∝\":\"∝\",\"∞\":\"∞\",\"∠\":\"∠\",\"∧\":\"∧\",\"∨\":\"∨\",\"∩\":\"∩\",\"∪\":\"∪\",\"∫\":\"∫\",\"∴\":\"∴\",\"∼\":\"∼\",\"≅\":\"≅\",\"≈\":\"≈\",\"≠\":\"≠\",\"≡\":\"≡\",\"≤\":\"≤\",\"≥\":\"≥\",\"⊂\":\"⊂\",\"⊃\":\"⊃\",\"⊄\":\"⊄\",\"⊆\":\"⊆\",\"⊇\":\"⊇\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"⊥\":\"⊥\",\"⋅\":\"⋅\",\"⌈\":\"⌈\",\"⌉\":\"⌉\",\"⌊\":\"⌊\",\"⌋\":\"⌋\",\"〈\":\"⟨\",\"〉\":\"⟩\",\"◊\":\"◊\",\"♠\":\"♠\",\"♣\":\"♣\",\"♥\":\"♥\",\"♦\":\"♦\"}},html5:{entities:{\"Æ\":\"Æ\",\"Æ\":\"Æ\",\"&\":\"&\",\"&\":\"&\",\"Á\":\"Á\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"ℬ\":\"ℬ\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"ℭ\":\"ℭ\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"ⅅ\":\"ⅅ\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"∯\":\"∯\",\"¨\":\"¨\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⫤\":\"⫤\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"⇓\":\"⇓\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"Ð\":\"Ð\",\"É\":\"É\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"ℋ\":\"ℋ\",\"Ħ\":\"Ħ\",\"≎\":\"≎\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Í\":\"Í\",\"Î\":\"Î\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ì\":\"Ì\",\"ℑ\":\"ℑ\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"⇒\":\"⇒\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"ℒ\":\"ℒ\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"ℳ\":\"ℳ\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"​\":\"​\",\"≫\":\"≫\",\"≪\":\"≪\",\" \":\"\\n\",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℌ\":\"ℌ\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∷\":\"∷\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",\""\":'\"',\""\":'\"',\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"ℜ\":\"ℜ\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"⇒\":\"⇒\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↓\":\"↓\",\"←\":\"←\",\"→\":\"→\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∋\":\"∋\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⋑\":\"⋑\",\"Þ\":\"Þ\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\" \":\"\\t\",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",\"_\":\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"↑\":\"↑\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"​\":\"​\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"â\":\"â\",\"´\":\"´\",\"´\":\"´\",\"а\":\"а\",\"æ\":\"æ\",\"æ\":\"æ\",\"⁡\":\"⁡\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"&\":\"&\",\"&\":\"&\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∠\":\"∠\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"Å\":\"Å\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"≈\":\"≈\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"≈\":\"≈\",\"≊\":\"≊\",\"å\":\"å\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"≈\":\"≈\",\"≍\":\"≍\",\"ã\":\"ã\",\"ã\":\"ã\",\"ä\":\"ä\",\"ä\":\"ä\",\"∳\":\"∳\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⌅\":\"⌅\",\"⎵\":\"⎵\",\"⎶\":\"⎶\",\"≌\":\"≌\",\"б\":\"б\",\"„\":\"„\",\"∵\":\"∵\",\"∵\":\"∵\",\"⦰\":\"⦰\",\"϶\":\"϶\",\"ℬ\":\"ℬ\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▪\":\"▪\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⊥\":\"⊥\",\"⊥\":\"⊥\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"─\":\"─\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"‵\":\"‵\",\"˘\":\"˘\",\"¦\":\"¦\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"\\":\"\\\\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"•\":\"•\",\"≎\":\"≎\",\"⪮\":\"⪮\",\"≏\":\"≏\",\"≏\":\"≏\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"ˇ\":\"ˇ\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"¸\":\"¸\",\"¸\":\"¸\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"¢\":\"¢\",\"·\":\"·\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"®\":\"®\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"≗\":\"≗\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\"♣\":\"♣\",\":\":\":\",\"≔\":\"≔\",\"≔\":\"≔\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"∘\":\"∘\",\"∁\":\"∁\",\"ℂ\":\"ℂ\",\"≅\":\"≅\",\"⩭\":\"⩭\",\"∮\":\"∮\",\"𝕔\":\"𝕔\",\"∐\":\"∐\",\"©\":\"©\",\"©\":\"©\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"¤\":\"¤\",\"↶\":\"↶\",\"↷\":\"↷\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"∲\":\"∲\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⇓\":\"⇓\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"↓\":\"↓\",\"‐\":\"‐\",\"⊣\":\"⊣\",\"⤏\":\"⤏\",\"˝\":\"˝\",\"ď\":\"ď\",\"д\":\"д\",\"ⅆ\":\"ⅆ\",\"‡\":\"‡\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⋄\":\"⋄\",\"⋄\":\"⋄\",\"♦\":\"♦\",\"♦\":\"♦\",\"¨\":\"¨\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"÷\":\"÷\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",\"$\":\"$\",\"𝕕\":\"𝕕\",\"˙\":\"˙\",\"≐\":\"≐\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌆\":\"⌆\",\"↓\":\"↓\",\"⇊\":\"⇊\",\"⇃\":\"⇃\",\"⇂\":\"⇂\",\"⤐\":\"⤐\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"▾\":\"▾\",\"⇵\":\"⇵\",\"⥯\":\"⥯\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"⩷\":\"⩷\",\"≑\":\"≑\",\"é\":\"é\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\"∅\":\"∅\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"≖\":\"≖\",\"≕\":\"≕\",\"≂\":\"≂\",\"⪖\":\"⪖\",\"⪕\":\"⪕\",\"=\":\"=\",\"≟\":\"≟\",\"≡\":\"≡\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"≐\":\"≐\",\"≂\":\"≂\",\"η\":\"η\",\"ð\":\"ð\",\"ð\":\"ð\",\"ë\":\"ë\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"∃\":\"∃\",\"ℰ\":\"ℰ\",\"ⅇ\":\"ⅇ\",\"≒\":\"≒\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",\"fj\":\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"∀\":\"∀\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"≧\":\"≧\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"ϝ\":\"ϝ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≥\":\"≥\",\"≧\":\"≧\",\"⩾\":\"⩾\",\"⩾\":\"⩾\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"≫\":\"≫\",\"⋙\":\"⋙\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"≷\":\"≷\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⪈\":\"⪈\",\"≩\":\"≩\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"`\":\"`\",\"ℊ\":\"ℊ\",\"≳\":\"≳\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\">\":\">\",\">\":\">\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⪆\":\"⪆\",\"⥸\":\"⥸\",\"⋗\":\"⋗\",\"⋛\":\"⋛\",\"⪌\":\"⪌\",\"≷\":\"≷\",\"≳\":\"≳\",\"≩︀\":\"≩︀\",\"≩︀\":\"≩︀\",\"⇔\":\"⇔\",\" \":\" \",\"½\":\"½\",\"ℋ\":\"ℋ\",\"ъ\":\"ъ\",\"↔\":\"↔\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ℏ\":\"ℏ\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"‐\":\"‐\",\"í\":\"í\",\"í\":\"í\",\"⁣\":\"⁣\",\"î\":\"î\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"¡\":\"¡\",\"⇔\":\"⇔\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"ì\":\"ì\",\"ⅈ\":\"ⅈ\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ℑ\":\"ℑ\",\"ℐ\":\"ℐ\",\"ℑ\":\"ℑ\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"∈\":\"∈\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"ı\":\"ı\",\"∫\":\"∫\",\"⊺\":\"⊺\",\"ℤ\":\"ℤ\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"⨼\":\"⨼\",\"¿\":\"¿\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"∈\":\"∈\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"∈\":\"∈\",\"⁢\":\"⁢\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⇚\":\"⇚\",\"⇐\":\"⇐\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"≦\":\"≦\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"ℒ\":\"ℒ\",\"λ\":\"λ\",\"⟨\":\"⟨\",\"⦑\":\"⦑\",\"⟨\":\"⟨\",\"⪅\":\"⪅\",\"«\":\"«\",\"«\":\"«\",\"←\":\"←\",\"⇤\":\"⇤\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↩\":\"↩\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"⌈\":\"⌈\",\"{\":\"{\",\"л\":\"л\",\"⤶\":\"⤶\",\"“\":\"“\",\"„\":\"„\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"←\":\"←\",\"↢\":\"↢\",\"↽\":\"↽\",\"↼\":\"↼\",\"⇇\":\"⇇\",\"↔\":\"↔\",\"⇆\":\"⇆\",\"⇋\":\"⇋\",\"↭\":\"↭\",\"⋋\":\"⋋\",\"⋚\":\"⋚\",\"≤\":\"≤\",\"≦\":\"≦\",\"⩽\":\"⩽\",\"⩽\":\"⩽\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⪅\":\"⪅\",\"⋖\":\"⋖\",\"⋚\":\"⋚\",\"⪋\":\"⪋\",\"≶\":\"≶\",\"≲\":\"≲\",\"⥼\":\"⥼\",\"⌊\":\"⌊\",\"𝔩\":\"𝔩\",\"≶\":\"≶\",\"⪑\":\"⪑\",\"↽\":\"↽\",\"↼\":\"↼\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"≪\":\"≪\",\"⇇\":\"⇇\",\"⌞\":\"⌞\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⪇\":\"⪇\",\"≨\":\"≨\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟦\":\"⟦\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟼\":\"⟼\",\"⟶\":\"⟶\",\"↫\":\"↫\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"_\":\"_\",\"◊\":\"◊\",\"◊\":\"◊\",\"⧫\":\"⧫\",\"(\":\"(\",\"⦓\":\"⦓\",\"⇆\":\"⇆\",\"⌟\":\"⌟\",\"⇋\":\"⇋\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"↰\":\"↰\",\"≲\":\"≲\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"[\":\"[\",\"‘\":\"‘\",\"‚\":\"‚\",\"ł\":\"ł\",\"<\":\"<\",\"<\":\"<\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋖\":\"⋖\",\"⋋\":\"⋋\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"◂\":\"◂\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"✠\":\"✠\",\"↦\":\"↦\",\"↦\":\"↦\",\"↧\":\"↧\",\"↤\":\"↤\",\"↥\":\"↥\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"∡\":\"∡\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"µ\":\"µ\",\"∣\":\"∣\",\"*\":\"*\",\"⫰\":\"⫰\",\"·\":\"·\",\"·\":\"·\",\"−\":\"−\",\"⊟\":\"⊟\",\"∸\":\"∸\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"…\":\"…\",\"∓\":\"∓\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"∓\":\"∓\",\"𝓂\":\"𝓂\",\"∾\":\"∾\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"≫̸\":\"≫̸\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"≪̸\":\"≪̸\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"∇\":\"∇\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"≉\":\"≉\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"≉\":\"≉\",\"♮\":\"♮\",\"♮\":\"♮\",\"ℕ\":\"ℕ\",\" \":\" \",\" \":\" \",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"≇\":\"≇\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"≠\":\"≠\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"↗\":\"↗\",\"↗\":\"↗\",\"≐̸\":\"≐̸\",\"≢\":\"≢\",\"⤨\":\"⤨\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"∄\":\"∄\",\"𝔫\":\"𝔫\",\"≧̸\":\"≧̸\",\"≱\":\"≱\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"⩾̸\":\"⩾̸\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≯\":\"≯\",\"≯\":\"≯\",\"⇎\":\"⇎\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"∋\":\"∋\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"∋\":\"∋\",\"њ\":\"њ\",\"⇍\":\"⇍\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"≰\":\"≰\",\"↚\":\"↚\",\"↮\":\"↮\",\"≰\":\"≰\",\"≦̸\":\"≦̸\",\"⩽̸\":\"⩽̸\",\"⩽̸\":\"⩽̸\",\"≮\":\"≮\",\"≴\":\"≴\",\"≮\":\"≮\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"∤\":\"∤\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"¬\":\"¬\",\"∉\":\"∉\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"∉\":\"∉\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"∌\":\"∌\",\"∌\":\"∌\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"∦\":\"∦\",\"∦\":\"∦\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"⊀\":\"⊀\",\"⋠\":\"⋠\",\"⪯̸\":\"⪯̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⇏\":\"⇏\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"↛\":\"↛\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"⊁\":\"⊁\",\"⋡\":\"⋡\",\"⪰̸\":\"⪰̸\",\"𝓃\":\"𝓃\",\"∤\":\"∤\",\"∦\":\"∦\",\"≁\":\"≁\",\"≄\":\"≄\",\"≄\":\"≄\",\"∤\":\"∤\",\"∦\":\"∦\",\"⋢\":\"⋢\",\"⋣\":\"⋣\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊈\":\"⊈\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⫅̸\":\"⫅̸\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"⊉\":\"⊉\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"⫆̸\":\"⫆̸\",\"≹\":\"≹\",\"ñ\":\"ñ\",\"ñ\":\"ñ\",\"≸\":\"≸\",\"⋪\":\"⋪\",\"⋬\":\"⋬\",\"⋫\":\"⋫\",\"⋭\":\"⋭\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"↖\":\"↖\",\"↖\":\"↖\",\"⤧\":\"⤧\",\"Ⓢ\":\"Ⓢ\",\"ó\":\"ó\",\"ó\":\"ó\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"ô\":\"ô\",\"ô\":\"ô\",\"о\":\"о\",\"⊝\":\"⊝\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⊙\":\"⊙\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"Ω\":\"Ω\",\"∮\":\"∮\",\"↺\":\"↺\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"‾\":\"‾\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"⊖\":\"⊖\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"⊕\":\"⊕\",\"∨\":\"∨\",\"↻\":\"↻\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"ª\":\"ª\",\"º\":\"º\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ℴ\":\"ℴ\",\"ø\":\"ø\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"õ\":\"õ\",\"⊗\":\"⊗\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"∥\":\"∥\",\"¶\":\"¶\",\"¶\":\"¶\",\"∥\":\"∥\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"∂\":\"∂\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"⊥\":\"⊥\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"ℳ\":\"ℳ\",\"☎\":\"☎\",\"π\":\"π\",\"⋔\":\"⋔\",\"ϖ\":\"ϖ\",\"ℏ\":\"ℏ\",\"ℎ\":\"ℎ\",\"ℏ\":\"ℏ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⊞\":\"⊞\",\"⨢\":\"⨢\",\"∔\":\"∔\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"±\":\"±\",\"±\":\"±\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"±\":\"±\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"£\":\"£\",\"≺\":\"≺\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"≺\":\"≺\",\"⪷\":\"⪷\",\"≼\":\"≼\",\"⪯\":\"⪯\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"≾\":\"≾\",\"′\":\"′\",\"ℙ\":\"ℙ\",\"⪵\":\"⪵\",\"⪹\":\"⪹\",\"⋨\":\"⋨\",\"∏\":\"∏\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"∝\":\"∝\",\"∝\":\"∝\",\"≾\":\"≾\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"⨌\":\"⨌\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"ℍ\":\"ℍ\",\"⨖\":\"⨖\",\"?\":\"?\",\"≟\":\"≟\",\""\":'\"',\""\":'\"',\"⇛\":\"⇛\",\"⇒\":\"⇒\",\"⤜\":\"⤜\",\"⤏\":\"⤏\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"√\":\"√\",\"⦳\":\"⦳\",\"⟩\":\"⟩\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"⟩\":\"⟩\",\"»\":\"»\",\"»\":\"»\",\"→\":\"→\",\"⥵\":\"⥵\",\"⇥\":\"⇥\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"↪\":\"↪\",\"↬\":\"↬\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"ℚ\":\"ℚ\",\"⤍\":\"⤍\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"⌉\":\"⌉\",\"}\":\"}\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"”\":\"”\",\"”\":\"”\",\"↳\":\"↳\",\"ℜ\":\"ℜ\",\"ℛ\":\"ℛ\",\"ℜ\":\"ℜ\",\"ℝ\":\"ℝ\",\"▭\":\"▭\",\"®\":\"®\",\"®\":\"®\",\"⥽\":\"⥽\",\"⌋\":\"⌋\",\"𝔯\":\"𝔯\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"→\":\"→\",\"↣\":\"↣\",\"⇁\":\"⇁\",\"⇀\":\"⇀\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"⇉\":\"⇉\",\"↝\":\"↝\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"≓\":\"≓\",\"⇄\":\"⇄\",\"⇌\":\"⇌\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⟧\":\"⟧\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"⇉\":\"⇉\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"↱\":\"↱\",\"]\":\"]\",\"’\":\"’\",\"’\":\"’\",\"⋌\":\"⋌\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"▸\":\"▸\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"‚\":\"‚\",\"≻\":\"≻\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"≿\":\"≿\",\"с\":\"с\",\"⋅\":\"⋅\",\"⊡\":\"⊡\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"⤥\":\"⤥\",\"↘\":\"↘\",\"↘\":\"↘\",\"§\":\"§\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"∖\":\"∖\",\"∖\":\"∖\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"⌢\":\"⌢\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"∣\":\"∣\",\"∥\":\"∥\",\"­\":\"­\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"ς\":\"ς\",\"∼\":\"∼\",\"⩪\":\"⩪\",\"≃\":\"≃\",\"≃\":\"≃\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"←\":\"←\",\"∖\":\"∖\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"∣\":\"∣\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"♠\":\"♠\",\"∥\":\"∥\",\"⊓\":\"⊓\",\"⊓︀\":\"⊓︀\",\"⊔\":\"⊔\",\"⊔︀\":\"⊔︀\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"□\":\"□\",\"□\":\"□\",\"▪\":\"▪\",\"▪\":\"▪\",\"→\":\"→\",\"𝓈\":\"𝓈\",\"∖\":\"∖\",\"⌣\":\"⌣\",\"⋆\":\"⋆\",\"☆\":\"☆\",\"★\":\"★\",\"ϵ\":\"ϵ\",\"ϕ\":\"ϕ\",\"¯\":\"¯\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⊆\":\"⊆\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⊂\":\"⊂\",\"⊆\":\"⊆\",\"⫅\":\"⫅\",\"⊊\":\"⊊\",\"⫋\":\"⫋\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"≻\":\"≻\",\"⪸\":\"⪸\",\"≽\":\"≽\",\"⪰\":\"⪰\",\"⪺\":\"⪺\",\"⪶\":\"⪶\",\"⋩\":\"⋩\",\"≿\":\"≿\",\"∑\":\"∑\",\"♪\":\"♪\",\"¹\":\"¹\",\"¹\":\"¹\",\"²\":\"²\",\"²\":\"²\",\"³\":\"³\",\"³\":\"³\",\"⊃\":\"⊃\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⊇\":\"⊇\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"⫆\":\"⫆\",\"⊋\":\"⊋\",\"⫌\":\"⫌\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤦\":\"⤦\",\"↙\":\"↙\",\"↙\":\"↙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"⎴\":\"⎴\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⃛\":\"⃛\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"∴\":\"∴\",\"∴\":\"∴\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"ϑ\":\"ϑ\",\"≈\":\"≈\",\"∼\":\"∼\",\" \":\" \",\"≈\":\"≈\",\"∼\":\"∼\",\"þ\":\"þ\",\"þ\":\"þ\",\"˜\":\"˜\",\"×\":\"×\",\"×\":\"×\",\"⊠\":\"⊠\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"∭\":\"∭\",\"⤨\":\"⤨\",\"⊤\":\"⊤\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"⤩\":\"⤩\",\"‴\":\"‴\",\"™\":\"™\",\"▵\":\"▵\",\"▿\":\"▿\",\"◃\":\"◃\",\"⊴\":\"⊴\",\"≜\":\"≜\",\"▹\":\"▹\",\"⊵\":\"⊵\",\"◬\":\"◬\",\"≜\":\"≜\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"≬\":\"≬\",\"↞\":\"↞\",\"↠\":\"↠\",\"⇑\":\"⇑\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ú\":\"ú\",\"↑\":\"↑\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"û\":\"û\",\"у\":\"у\",\"⇅\":\"⇅\",\"ű\":\"ű\",\"⥮\":\"⥮\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"ù\":\"ù\",\"↿\":\"↿\",\"↾\":\"↾\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"¨\":\"¨\",\"¨\":\"¨\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"↑\":\"↑\",\"↕\":\"↕\",\"↿\":\"↿\",\"↾\":\"↾\",\"⊎\":\"⊎\",\"υ\":\"υ\",\"ϒ\":\"ϒ\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"▵\":\"▵\",\"▴\":\"▴\",\"⇈\":\"⇈\",\"ü\":\"ü\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⇕\":\"⇕\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⊨\":\"⊨\",\"⦜\":\"⦜\",\"ϵ\":\"ϵ\",\"ϰ\":\"ϰ\",\"∅\":\"∅\",\"ϕ\":\"ϕ\",\"ϖ\":\"ϖ\",\"∝\":\"∝\",\"↕\":\"↕\",\"ϱ\":\"ϱ\",\"ς\":\"ς\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"ϑ\":\"ϑ\",\"⊲\":\"⊲\",\"⊳\":\"⊳\",\"в\":\"в\",\"⊢\":\"⊢\",\"∨\":\"∨\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"|\":\"|\",\"|\":\"|\",\"𝔳\":\"𝔳\",\"⊲\":\"⊲\",\"⊂⃒\":\"⊂⃒\",\"⊃⃒\":\"⊃⃒\",\"𝕧\":\"𝕧\",\"∝\":\"∝\",\"⊳\":\"⊳\",\"𝓋\":\"𝓋\",\"⫋︀\":\"⫋︀\",\"⊊︀\":\"⊊︀\",\"⫌︀\":\"⫌︀\",\"⊋︀\":\"⊋︀\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"∧\":\"∧\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"℘\":\"℘\",\"≀\":\"≀\",\"≀\":\"≀\",\"𝓌\":\"𝓌\",\"⋂\":\"⋂\",\"◯\":\"◯\",\"⋃\":\"⋃\",\"▽\":\"▽\",\"𝔵\":\"𝔵\",\"⟺\":\"⟺\",\"⟷\":\"⟷\",\"ξ\":\"ξ\",\"⟸\":\"⟸\",\"⟵\":\"⟵\",\"⟼\":\"⟼\",\"⋻\":\"⋻\",\"⨀\":\"⨀\",\"𝕩\":\"𝕩\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⟹\":\"⟹\",\"⟶\":\"⟶\",\"𝓍\":\"𝓍\",\"⨆\":\"⨆\",\"⨄\":\"⨄\",\"△\":\"△\",\"⋁\":\"⋁\",\"⋀\":\"⋀\",\"ý\":\"ý\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ℨ\":\"ℨ\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"},characters:{\"Æ\":\"Æ\",\"&\":\"&\",\"Á\":\"Á\",\"Ă\":\"Ă\",\"Â\":\"Â\",\"А\":\"А\",\"𝔄\":\"𝔄\",\"À\":\"À\",\"Α\":\"Α\",\"Ā\":\"Ā\",\"⩓\":\"⩓\",\"Ą\":\"Ą\",\"𝔸\":\"𝔸\",\"⁡\":\"⁡\",\"Å\":\"Å\",\"𝒜\":\"𝒜\",\"≔\":\"≔\",\"Ã\":\"Ã\",\"Ä\":\"Ä\",\"∖\":\"∖\",\"⫧\":\"⫧\",\"⌆\":\"⌆\",\"Б\":\"Б\",\"∵\":\"∵\",\"ℬ\":\"ℬ\",\"Β\":\"Β\",\"𝔅\":\"𝔅\",\"𝔹\":\"𝔹\",\"˘\":\"˘\",\"≎\":\"≎\",\"Ч\":\"Ч\",\"©\":\"©\",\"Ć\":\"Ć\",\"⋒\":\"⋒\",\"ⅅ\":\"ⅅ\",\"ℭ\":\"ℭ\",\"Č\":\"Č\",\"Ç\":\"Ç\",\"Ĉ\":\"Ĉ\",\"∰\":\"∰\",\"Ċ\":\"Ċ\",\"¸\":\"¸\",\"·\":\"·\",\"Χ\":\"Χ\",\"⊙\":\"⊙\",\"⊖\":\"⊖\",\"⊕\":\"⊕\",\"⊗\":\"⊗\",\"∲\":\"∲\",\"”\":\"”\",\"’\":\"’\",\"∷\":\"∷\",\"⩴\":\"⩴\",\"≡\":\"≡\",\"∯\":\"∯\",\"∮\":\"∮\",\"ℂ\":\"ℂ\",\"∐\":\"∐\",\"∳\":\"∳\",\"⨯\":\"⨯\",\"𝒞\":\"𝒞\",\"⋓\":\"⋓\",\"≍\":\"≍\",\"⤑\":\"⤑\",\"Ђ\":\"Ђ\",\"Ѕ\":\"Ѕ\",\"Џ\":\"Џ\",\"‡\":\"‡\",\"↡\":\"↡\",\"⫤\":\"⫤\",\"Ď\":\"Ď\",\"Д\":\"Д\",\"∇\":\"∇\",\"Δ\":\"Δ\",\"𝔇\":\"𝔇\",\"´\":\"´\",\"˙\":\"˙\",\"˝\":\"˝\",\"`\":\"`\",\"˜\":\"˜\",\"⋄\":\"⋄\",\"ⅆ\":\"ⅆ\",\"𝔻\":\"𝔻\",\"¨\":\"¨\",\"⃜\":\"⃜\",\"≐\":\"≐\",\"⇓\":\"⇓\",\"⇐\":\"⇐\",\"⇔\":\"⇔\",\"⟸\":\"⟸\",\"⟺\":\"⟺\",\"⟹\":\"⟹\",\"⇒\":\"⇒\",\"⊨\":\"⊨\",\"⇑\":\"⇑\",\"⇕\":\"⇕\",\"∥\":\"∥\",\"↓\":\"↓\",\"⤓\":\"⤓\",\"⇵\":\"⇵\",\"̑\":\"̑\",\"⥐\":\"⥐\",\"⥞\":\"⥞\",\"↽\":\"↽\",\"⥖\":\"⥖\",\"⥟\":\"⥟\",\"⇁\":\"⇁\",\"⥗\":\"⥗\",\"⊤\":\"⊤\",\"↧\":\"↧\",\"𝒟\":\"𝒟\",\"Đ\":\"Đ\",\"Ŋ\":\"Ŋ\",\"Ð\":\"Ð\",\"É\":\"É\",\"Ě\":\"Ě\",\"Ê\":\"Ê\",\"Э\":\"Э\",\"Ė\":\"Ė\",\"𝔈\":\"𝔈\",\"È\":\"È\",\"∈\":\"∈\",\"Ē\":\"Ē\",\"◻\":\"◻\",\"▫\":\"▫\",\"Ę\":\"Ę\",\"𝔼\":\"𝔼\",\"Ε\":\"Ε\",\"⩵\":\"⩵\",\"≂\":\"≂\",\"⇌\":\"⇌\",\"ℰ\":\"ℰ\",\"⩳\":\"⩳\",\"Η\":\"Η\",\"Ë\":\"Ë\",\"∃\":\"∃\",\"ⅇ\":\"ⅇ\",\"Ф\":\"Ф\",\"𝔉\":\"𝔉\",\"◼\":\"◼\",\"▪\":\"▪\",\"𝔽\":\"𝔽\",\"∀\":\"∀\",\"ℱ\":\"ℱ\",\"Ѓ\":\"Ѓ\",\">\":\">\",\"Γ\":\"Γ\",\"Ϝ\":\"Ϝ\",\"Ğ\":\"Ğ\",\"Ģ\":\"Ģ\",\"Ĝ\":\"Ĝ\",\"Г\":\"Г\",\"Ġ\":\"Ġ\",\"𝔊\":\"𝔊\",\"⋙\":\"⋙\",\"𝔾\":\"𝔾\",\"≥\":\"≥\",\"⋛\":\"⋛\",\"≧\":\"≧\",\"⪢\":\"⪢\",\"≷\":\"≷\",\"⩾\":\"⩾\",\"≳\":\"≳\",\"𝒢\":\"𝒢\",\"≫\":\"≫\",\"Ъ\":\"Ъ\",\"ˇ\":\"ˇ\",\"^\":\"^\",\"Ĥ\":\"Ĥ\",\"ℌ\":\"ℌ\",\"ℋ\":\"ℋ\",\"ℍ\":\"ℍ\",\"─\":\"─\",\"Ħ\":\"Ħ\",\"≏\":\"≏\",\"Е\":\"Е\",\"IJ\":\"IJ\",\"Ё\":\"Ё\",\"Í\":\"Í\",\"Î\":\"Î\",\"И\":\"И\",\"İ\":\"İ\",\"ℑ\":\"ℑ\",\"Ì\":\"Ì\",\"Ī\":\"Ī\",\"ⅈ\":\"ⅈ\",\"∬\":\"∬\",\"∫\":\"∫\",\"⋂\":\"⋂\",\"⁣\":\"⁣\",\"⁢\":\"⁢\",\"Į\":\"Į\",\"𝕀\":\"𝕀\",\"Ι\":\"Ι\",\"ℐ\":\"ℐ\",\"Ĩ\":\"Ĩ\",\"І\":\"І\",\"Ï\":\"Ï\",\"Ĵ\":\"Ĵ\",\"Й\":\"Й\",\"𝔍\":\"𝔍\",\"𝕁\":\"𝕁\",\"𝒥\":\"𝒥\",\"Ј\":\"Ј\",\"Є\":\"Є\",\"Х\":\"Х\",\"Ќ\":\"Ќ\",\"Κ\":\"Κ\",\"Ķ\":\"Ķ\",\"К\":\"К\",\"𝔎\":\"𝔎\",\"𝕂\":\"𝕂\",\"𝒦\":\"𝒦\",\"Љ\":\"Љ\",\"<\":\"<\",\"Ĺ\":\"Ĺ\",\"Λ\":\"Λ\",\"⟪\":\"⟪\",\"ℒ\":\"ℒ\",\"↞\":\"↞\",\"Ľ\":\"Ľ\",\"Ļ\":\"Ļ\",\"Л\":\"Л\",\"⟨\":\"⟨\",\"←\":\"←\",\"⇤\":\"⇤\",\"⇆\":\"⇆\",\"⌈\":\"⌈\",\"⟦\":\"⟦\",\"⥡\":\"⥡\",\"⇃\":\"⇃\",\"⥙\":\"⥙\",\"⌊\":\"⌊\",\"↔\":\"↔\",\"⥎\":\"⥎\",\"⊣\":\"⊣\",\"↤\":\"↤\",\"⥚\":\"⥚\",\"⊲\":\"⊲\",\"⧏\":\"⧏\",\"⊴\":\"⊴\",\"⥑\":\"⥑\",\"⥠\":\"⥠\",\"↿\":\"↿\",\"⥘\":\"⥘\",\"↼\":\"↼\",\"⥒\":\"⥒\",\"⋚\":\"⋚\",\"≦\":\"≦\",\"≶\":\"≶\",\"⪡\":\"⪡\",\"⩽\":\"⩽\",\"≲\":\"≲\",\"𝔏\":\"𝔏\",\"⋘\":\"⋘\",\"⇚\":\"⇚\",\"Ŀ\":\"Ŀ\",\"⟵\":\"⟵\",\"⟷\":\"⟷\",\"⟶\":\"⟶\",\"𝕃\":\"𝕃\",\"↙\":\"↙\",\"↘\":\"↘\",\"↰\":\"↰\",\"Ł\":\"Ł\",\"≪\":\"≪\",\"⤅\":\"⤅\",\"М\":\"М\",\" \":\" \",\"ℳ\":\"ℳ\",\"𝔐\":\"𝔐\",\"∓\":\"∓\",\"𝕄\":\"𝕄\",\"Μ\":\"Μ\",\"Њ\":\"Њ\",\"Ń\":\"Ń\",\"Ň\":\"Ň\",\"Ņ\":\"Ņ\",\"Н\":\"Н\",\"​\":\"​\",\"\\n\":\" \",\"𝔑\":\"𝔑\",\"⁠\":\"⁠\",\" \":\" \",\"ℕ\":\"ℕ\",\"⫬\":\"⫬\",\"≢\":\"≢\",\"≭\":\"≭\",\"∦\":\"∦\",\"∉\":\"∉\",\"≠\":\"≠\",\"≂̸\":\"≂̸\",\"∄\":\"∄\",\"≯\":\"≯\",\"≱\":\"≱\",\"≧̸\":\"≧̸\",\"≫̸\":\"≫̸\",\"≹\":\"≹\",\"⩾̸\":\"⩾̸\",\"≵\":\"≵\",\"≎̸\":\"≎̸\",\"≏̸\":\"≏̸\",\"⋪\":\"⋪\",\"⧏̸\":\"⧏̸\",\"⋬\":\"⋬\",\"≮\":\"≮\",\"≰\":\"≰\",\"≸\":\"≸\",\"≪̸\":\"≪̸\",\"⩽̸\":\"⩽̸\",\"≴\":\"≴\",\"⪢̸\":\"⪢̸\",\"⪡̸\":\"⪡̸\",\"⊀\":\"⊀\",\"⪯̸\":\"⪯̸\",\"⋠\":\"⋠\",\"∌\":\"∌\",\"⋫\":\"⋫\",\"⧐̸\":\"⧐̸\",\"⋭\":\"⋭\",\"⊏̸\":\"⊏̸\",\"⋢\":\"⋢\",\"⊐̸\":\"⊐̸\",\"⋣\":\"⋣\",\"⊂⃒\":\"⊂⃒\",\"⊈\":\"⊈\",\"⊁\":\"⊁\",\"⪰̸\":\"⪰̸\",\"⋡\":\"⋡\",\"≿̸\":\"≿̸\",\"⊃⃒\":\"⊃⃒\",\"⊉\":\"⊉\",\"≁\":\"≁\",\"≄\":\"≄\",\"≇\":\"≇\",\"≉\":\"≉\",\"∤\":\"∤\",\"𝒩\":\"𝒩\",\"Ñ\":\"Ñ\",\"Ν\":\"Ν\",\"Œ\":\"Œ\",\"Ó\":\"Ó\",\"Ô\":\"Ô\",\"О\":\"О\",\"Ő\":\"Ő\",\"𝔒\":\"𝔒\",\"Ò\":\"Ò\",\"Ō\":\"Ō\",\"Ω\":\"Ω\",\"Ο\":\"Ο\",\"𝕆\":\"𝕆\",\"“\":\"“\",\"‘\":\"‘\",\"⩔\":\"⩔\",\"𝒪\":\"𝒪\",\"Ø\":\"Ø\",\"Õ\":\"Õ\",\"⨷\":\"⨷\",\"Ö\":\"Ö\",\"‾\":\"‾\",\"⏞\":\"⏞\",\"⎴\":\"⎴\",\"⏜\":\"⏜\",\"∂\":\"∂\",\"П\":\"П\",\"𝔓\":\"𝔓\",\"Φ\":\"Φ\",\"Π\":\"Π\",\"±\":\"±\",\"ℙ\":\"ℙ\",\"⪻\":\"⪻\",\"≺\":\"≺\",\"⪯\":\"⪯\",\"≼\":\"≼\",\"≾\":\"≾\",\"″\":\"″\",\"∏\":\"∏\",\"∝\":\"∝\",\"𝒫\":\"𝒫\",\"Ψ\":\"Ψ\",'\"':\""\",\"𝔔\":\"𝔔\",\"ℚ\":\"ℚ\",\"𝒬\":\"𝒬\",\"⤐\":\"⤐\",\"®\":\"®\",\"Ŕ\":\"Ŕ\",\"⟫\":\"⟫\",\"↠\":\"↠\",\"⤖\":\"⤖\",\"Ř\":\"Ř\",\"Ŗ\":\"Ŗ\",\"Р\":\"Р\",\"ℜ\":\"ℜ\",\"∋\":\"∋\",\"⇋\":\"⇋\",\"⥯\":\"⥯\",\"Ρ\":\"Ρ\",\"⟩\":\"⟩\",\"→\":\"→\",\"⇥\":\"⇥\",\"⇄\":\"⇄\",\"⌉\":\"⌉\",\"⟧\":\"⟧\",\"⥝\":\"⥝\",\"⇂\":\"⇂\",\"⥕\":\"⥕\",\"⌋\":\"⌋\",\"⊢\":\"⊢\",\"↦\":\"↦\",\"⥛\":\"⥛\",\"⊳\":\"⊳\",\"⧐\":\"⧐\",\"⊵\":\"⊵\",\"⥏\":\"⥏\",\"⥜\":\"⥜\",\"↾\":\"↾\",\"⥔\":\"⥔\",\"⇀\":\"⇀\",\"⥓\":\"⥓\",\"ℝ\":\"ℝ\",\"⥰\":\"⥰\",\"⇛\":\"⇛\",\"ℛ\":\"ℛ\",\"↱\":\"↱\",\"⧴\":\"⧴\",\"Щ\":\"Щ\",\"Ш\":\"Ш\",\"Ь\":\"Ь\",\"Ś\":\"Ś\",\"⪼\":\"⪼\",\"Š\":\"Š\",\"Ş\":\"Ş\",\"Ŝ\":\"Ŝ\",\"С\":\"С\",\"𝔖\":\"𝔖\",\"↑\":\"↑\",\"Σ\":\"Σ\",\"∘\":\"∘\",\"𝕊\":\"𝕊\",\"√\":\"√\",\"□\":\"□\",\"⊓\":\"⊓\",\"⊏\":\"⊏\",\"⊑\":\"⊑\",\"⊐\":\"⊐\",\"⊒\":\"⊒\",\"⊔\":\"⊔\",\"𝒮\":\"𝒮\",\"⋆\":\"⋆\",\"⋐\":\"⋐\",\"⊆\":\"⊆\",\"≻\":\"≻\",\"⪰\":\"⪰\",\"≽\":\"≽\",\"≿\":\"≿\",\"∑\":\"∑\",\"⋑\":\"⋑\",\"⊃\":\"⊃\",\"⊇\":\"⊇\",\"Þ\":\"Þ\",\"™\":\"™\",\"Ћ\":\"Ћ\",\"Ц\":\"Ц\",\"\\t\":\" \",\"Τ\":\"Τ\",\"Ť\":\"Ť\",\"Ţ\":\"Ţ\",\"Т\":\"Т\",\"𝔗\":\"𝔗\",\"∴\":\"∴\",\"Θ\":\"Θ\",\"  \":\"  \",\" \":\" \",\"∼\":\"∼\",\"≃\":\"≃\",\"≅\":\"≅\",\"≈\":\"≈\",\"𝕋\":\"𝕋\",\"⃛\":\"⃛\",\"𝒯\":\"𝒯\",\"Ŧ\":\"Ŧ\",\"Ú\":\"Ú\",\"↟\":\"↟\",\"⥉\":\"⥉\",\"Ў\":\"Ў\",\"Ŭ\":\"Ŭ\",\"Û\":\"Û\",\"У\":\"У\",\"Ű\":\"Ű\",\"𝔘\":\"𝔘\",\"Ù\":\"Ù\",\"Ū\":\"Ū\",_:\"_\",\"⏟\":\"⏟\",\"⎵\":\"⎵\",\"⏝\":\"⏝\",\"⋃\":\"⋃\",\"⊎\":\"⊎\",\"Ų\":\"Ų\",\"𝕌\":\"𝕌\",\"⤒\":\"⤒\",\"⇅\":\"⇅\",\"↕\":\"↕\",\"⥮\":\"⥮\",\"⊥\":\"⊥\",\"↥\":\"↥\",\"↖\":\"↖\",\"↗\":\"↗\",\"ϒ\":\"ϒ\",\"Υ\":\"Υ\",\"Ů\":\"Ů\",\"𝒰\":\"𝒰\",\"Ũ\":\"Ũ\",\"Ü\":\"Ü\",\"⊫\":\"⊫\",\"⫫\":\"⫫\",\"В\":\"В\",\"⊩\":\"⊩\",\"⫦\":\"⫦\",\"⋁\":\"⋁\",\"‖\":\"‖\",\"∣\":\"∣\",\"|\":\"|\",\"❘\":\"❘\",\"≀\":\"≀\",\" \":\" \",\"𝔙\":\"𝔙\",\"𝕍\":\"𝕍\",\"𝒱\":\"𝒱\",\"⊪\":\"⊪\",\"Ŵ\":\"Ŵ\",\"⋀\":\"⋀\",\"𝔚\":\"𝔚\",\"𝕎\":\"𝕎\",\"𝒲\":\"𝒲\",\"𝔛\":\"𝔛\",\"Ξ\":\"Ξ\",\"𝕏\":\"𝕏\",\"𝒳\":\"𝒳\",\"Я\":\"Я\",\"Ї\":\"Ї\",\"Ю\":\"Ю\",\"Ý\":\"Ý\",\"Ŷ\":\"Ŷ\",\"Ы\":\"Ы\",\"𝔜\":\"𝔜\",\"𝕐\":\"𝕐\",\"𝒴\":\"𝒴\",\"Ÿ\":\"Ÿ\",\"Ж\":\"Ж\",\"Ź\":\"Ź\",\"Ž\":\"Ž\",\"З\":\"З\",\"Ż\":\"Ż\",\"Ζ\":\"Ζ\",\"ℨ\":\"ℨ\",\"ℤ\":\"ℤ\",\"𝒵\":\"𝒵\",\"á\":\"á\",\"ă\":\"ă\",\"∾\":\"∾\",\"∾̳\":\"∾̳\",\"∿\":\"∿\",\"â\":\"â\",\"а\":\"а\",\"æ\":\"æ\",\"𝔞\":\"𝔞\",\"à\":\"à\",\"ℵ\":\"ℵ\",\"α\":\"α\",\"ā\":\"ā\",\"⨿\":\"⨿\",\"∧\":\"∧\",\"⩕\":\"⩕\",\"⩜\":\"⩜\",\"⩘\":\"⩘\",\"⩚\":\"⩚\",\"∠\":\"∠\",\"⦤\":\"⦤\",\"∡\":\"∡\",\"⦨\":\"⦨\",\"⦩\":\"⦩\",\"⦪\":\"⦪\",\"⦫\":\"⦫\",\"⦬\":\"⦬\",\"⦭\":\"⦭\",\"⦮\":\"⦮\",\"⦯\":\"⦯\",\"∟\":\"∟\",\"⊾\":\"⊾\",\"⦝\":\"⦝\",\"∢\":\"∢\",\"⍼\":\"⍼\",\"ą\":\"ą\",\"𝕒\":\"𝕒\",\"⩰\":\"⩰\",\"⩯\":\"⩯\",\"≊\":\"≊\",\"≋\":\"≋\",\"'\":\"'\",\"å\":\"å\",\"𝒶\":\"𝒶\",\"*\":\"*\",\"ã\":\"ã\",\"ä\":\"ä\",\"⨑\":\"⨑\",\"⫭\":\"⫭\",\"≌\":\"≌\",\"϶\":\"϶\",\"‵\":\"‵\",\"∽\":\"∽\",\"⋍\":\"⋍\",\"⊽\":\"⊽\",\"⌅\":\"⌅\",\"⎶\":\"⎶\",\"б\":\"б\",\"„\":\"„\",\"⦰\":\"⦰\",\"β\":\"β\",\"ℶ\":\"ℶ\",\"≬\":\"≬\",\"𝔟\":\"𝔟\",\"◯\":\"◯\",\"⨀\":\"⨀\",\"⨁\":\"⨁\",\"⨂\":\"⨂\",\"⨆\":\"⨆\",\"★\":\"★\",\"▽\":\"▽\",\"△\":\"△\",\"⨄\":\"⨄\",\"⤍\":\"⤍\",\"⧫\":\"⧫\",\"▴\":\"▴\",\"▾\":\"▾\",\"◂\":\"◂\",\"▸\":\"▸\",\"␣\":\"␣\",\"▒\":\"▒\",\"░\":\"░\",\"▓\":\"▓\",\"█\":\"█\",\"=⃥\":\"=⃥\",\"≡⃥\":\"≡⃥\",\"⌐\":\"⌐\",\"𝕓\":\"𝕓\",\"⋈\":\"⋈\",\"╗\":\"╗\",\"╔\":\"╔\",\"╖\":\"╖\",\"╓\":\"╓\",\"═\":\"═\",\"╦\":\"╦\",\"╩\":\"╩\",\"╤\":\"╤\",\"╧\":\"╧\",\"╝\":\"╝\",\"╚\":\"╚\",\"╜\":\"╜\",\"╙\":\"╙\",\"║\":\"║\",\"╬\":\"╬\",\"╣\":\"╣\",\"╠\":\"╠\",\"╫\":\"╫\",\"╢\":\"╢\",\"╟\":\"╟\",\"⧉\":\"⧉\",\"╕\":\"╕\",\"╒\":\"╒\",\"┐\":\"┐\",\"┌\":\"┌\",\"╥\":\"╥\",\"╨\":\"╨\",\"┬\":\"┬\",\"┴\":\"┴\",\"⊟\":\"⊟\",\"⊞\":\"⊞\",\"⊠\":\"⊠\",\"╛\":\"╛\",\"╘\":\"╘\",\"┘\":\"┘\",\"└\":\"└\",\"│\":\"│\",\"╪\":\"╪\",\"╡\":\"╡\",\"╞\":\"╞\",\"┼\":\"┼\",\"┤\":\"┤\",\"├\":\"├\",\"¦\":\"¦\",\"𝒷\":\"𝒷\",\"⁏\":\"⁏\",\"\\\\\":\"\\",\"⧅\":\"⧅\",\"⟈\":\"⟈\",\"•\":\"•\",\"⪮\":\"⪮\",\"ć\":\"ć\",\"∩\":\"∩\",\"⩄\":\"⩄\",\"⩉\":\"⩉\",\"⩋\":\"⩋\",\"⩇\":\"⩇\",\"⩀\":\"⩀\",\"∩︀\":\"∩︀\",\"⁁\":\"⁁\",\"⩍\":\"⩍\",\"č\":\"č\",\"ç\":\"ç\",\"ĉ\":\"ĉ\",\"⩌\":\"⩌\",\"⩐\":\"⩐\",\"ċ\":\"ċ\",\"⦲\":\"⦲\",\"¢\":\"¢\",\"𝔠\":\"𝔠\",\"ч\":\"ч\",\"✓\":\"✓\",\"χ\":\"χ\",\"○\":\"○\",\"⧃\":\"⧃\",\"ˆ\":\"ˆ\",\"≗\":\"≗\",\"↺\":\"↺\",\"↻\":\"↻\",\"Ⓢ\":\"Ⓢ\",\"⊛\":\"⊛\",\"⊚\":\"⊚\",\"⊝\":\"⊝\",\"⨐\":\"⨐\",\"⫯\":\"⫯\",\"⧂\":\"⧂\",\"♣\":\"♣\",\":\":\":\",\",\":\",\",\"@\":\"@\",\"∁\":\"∁\",\"⩭\":\"⩭\",\"𝕔\":\"𝕔\",\"℗\":\"℗\",\"↵\":\"↵\",\"✗\":\"✗\",\"𝒸\":\"𝒸\",\"⫏\":\"⫏\",\"⫑\":\"⫑\",\"⫐\":\"⫐\",\"⫒\":\"⫒\",\"⋯\":\"⋯\",\"⤸\":\"⤸\",\"⤵\":\"⤵\",\"⋞\":\"⋞\",\"⋟\":\"⋟\",\"↶\":\"↶\",\"⤽\":\"⤽\",\"∪\":\"∪\",\"⩈\":\"⩈\",\"⩆\":\"⩆\",\"⩊\":\"⩊\",\"⊍\":\"⊍\",\"⩅\":\"⩅\",\"∪︀\":\"∪︀\",\"↷\":\"↷\",\"⤼\":\"⤼\",\"⋎\":\"⋎\",\"⋏\":\"⋏\",\"¤\":\"¤\",\"∱\":\"∱\",\"⌭\":\"⌭\",\"⥥\":\"⥥\",\"†\":\"†\",\"ℸ\":\"ℸ\",\"‐\":\"‐\",\"⤏\":\"⤏\",\"ď\":\"ď\",\"д\":\"д\",\"⇊\":\"⇊\",\"⩷\":\"⩷\",\"°\":\"°\",\"δ\":\"δ\",\"⦱\":\"⦱\",\"⥿\":\"⥿\",\"𝔡\":\"𝔡\",\"♦\":\"♦\",\"ϝ\":\"ϝ\",\"⋲\":\"⋲\",\"÷\":\"÷\",\"⋇\":\"⋇\",\"ђ\":\"ђ\",\"⌞\":\"⌞\",\"⌍\":\"⌍\",$:\"$\",\"𝕕\":\"𝕕\",\"≑\":\"≑\",\"∸\":\"∸\",\"∔\":\"∔\",\"⊡\":\"⊡\",\"⌟\":\"⌟\",\"⌌\":\"⌌\",\"𝒹\":\"𝒹\",\"ѕ\":\"ѕ\",\"⧶\":\"⧶\",\"đ\":\"đ\",\"⋱\":\"⋱\",\"▿\":\"▿\",\"⦦\":\"⦦\",\"џ\":\"џ\",\"⟿\":\"⟿\",\"é\":\"é\",\"⩮\":\"⩮\",\"ě\":\"ě\",\"≖\":\"≖\",\"ê\":\"ê\",\"≕\":\"≕\",\"э\":\"э\",\"ė\":\"ė\",\"≒\":\"≒\",\"𝔢\":\"𝔢\",\"⪚\":\"⪚\",\"è\":\"è\",\"⪖\":\"⪖\",\"⪘\":\"⪘\",\"⪙\":\"⪙\",\"⏧\":\"⏧\",\"ℓ\":\"ℓ\",\"⪕\":\"⪕\",\"⪗\":\"⪗\",\"ē\":\"ē\",\"∅\":\"∅\",\" \":\" \",\" \":\" \",\" \":\" \",\"ŋ\":\"ŋ\",\" \":\" \",\"ę\":\"ę\",\"𝕖\":\"𝕖\",\"⋕\":\"⋕\",\"⧣\":\"⧣\",\"⩱\":\"⩱\",\"ε\":\"ε\",\"ϵ\":\"ϵ\",\"=\":\"=\",\"≟\":\"≟\",\"⩸\":\"⩸\",\"⧥\":\"⧥\",\"≓\":\"≓\",\"⥱\":\"⥱\",\"ℯ\":\"ℯ\",\"η\":\"η\",\"ð\":\"ð\",\"ë\":\"ë\",\"€\":\"€\",\"!\":\"!\",\"ф\":\"ф\",\"♀\":\"♀\",\"ffi\":\"ffi\",\"ff\":\"ff\",\"ffl\":\"ffl\",\"𝔣\":\"𝔣\",\"fi\":\"fi\",fj:\"fj\",\"♭\":\"♭\",\"fl\":\"fl\",\"▱\":\"▱\",\"ƒ\":\"ƒ\",\"𝕗\":\"𝕗\",\"⋔\":\"⋔\",\"⫙\":\"⫙\",\"⨍\":\"⨍\",\"½\":\"½\",\"⅓\":\"⅓\",\"¼\":\"¼\",\"⅕\":\"⅕\",\"⅙\":\"⅙\",\"⅛\":\"⅛\",\"⅔\":\"⅔\",\"⅖\":\"⅖\",\"¾\":\"¾\",\"⅗\":\"⅗\",\"⅜\":\"⅜\",\"⅘\":\"⅘\",\"⅚\":\"⅚\",\"⅝\":\"⅝\",\"⅞\":\"⅞\",\"⁄\":\"⁄\",\"⌢\":\"⌢\",\"𝒻\":\"𝒻\",\"⪌\":\"⪌\",\"ǵ\":\"ǵ\",\"γ\":\"γ\",\"⪆\":\"⪆\",\"ğ\":\"ğ\",\"ĝ\":\"ĝ\",\"г\":\"г\",\"ġ\":\"ġ\",\"⪩\":\"⪩\",\"⪀\":\"⪀\",\"⪂\":\"⪂\",\"⪄\":\"⪄\",\"⋛︀\":\"⋛︀\",\"⪔\":\"⪔\",\"𝔤\":\"𝔤\",\"ℷ\":\"ℷ\",\"ѓ\":\"ѓ\",\"⪒\":\"⪒\",\"⪥\":\"⪥\",\"⪤\":\"⪤\",\"≩\":\"≩\",\"⪊\":\"⪊\",\"⪈\":\"⪈\",\"⋧\":\"⋧\",\"𝕘\":\"𝕘\",\"ℊ\":\"ℊ\",\"⪎\":\"⪎\",\"⪐\":\"⪐\",\"⪧\":\"⪧\",\"⩺\":\"⩺\",\"⋗\":\"⋗\",\"⦕\":\"⦕\",\"⩼\":\"⩼\",\"⥸\":\"⥸\",\"≩︀\":\"≩︀\",\"ъ\":\"ъ\",\"⥈\":\"⥈\",\"↭\":\"↭\",\"ℏ\":\"ℏ\",\"ĥ\":\"ĥ\",\"♥\":\"♥\",\"…\":\"…\",\"⊹\":\"⊹\",\"𝔥\":\"𝔥\",\"⤥\":\"⤥\",\"⤦\":\"⤦\",\"⇿\":\"⇿\",\"∻\":\"∻\",\"↩\":\"↩\",\"↪\":\"↪\",\"𝕙\":\"𝕙\",\"―\":\"―\",\"𝒽\":\"𝒽\",\"ħ\":\"ħ\",\"⁃\":\"⁃\",\"í\":\"í\",\"î\":\"î\",\"и\":\"и\",\"е\":\"е\",\"¡\":\"¡\",\"𝔦\":\"𝔦\",\"ì\":\"ì\",\"⨌\":\"⨌\",\"∭\":\"∭\",\"⧜\":\"⧜\",\"℩\":\"℩\",\"ij\":\"ij\",\"ī\":\"ī\",\"ı\":\"ı\",\"⊷\":\"⊷\",\"Ƶ\":\"Ƶ\",\"℅\":\"℅\",\"∞\":\"∞\",\"⧝\":\"⧝\",\"⊺\":\"⊺\",\"⨗\":\"⨗\",\"⨼\":\"⨼\",\"ё\":\"ё\",\"į\":\"į\",\"𝕚\":\"𝕚\",\"ι\":\"ι\",\"¿\":\"¿\",\"𝒾\":\"𝒾\",\"⋹\":\"⋹\",\"⋵\":\"⋵\",\"⋴\":\"⋴\",\"⋳\":\"⋳\",\"ĩ\":\"ĩ\",\"і\":\"і\",\"ï\":\"ï\",\"ĵ\":\"ĵ\",\"й\":\"й\",\"𝔧\":\"𝔧\",\"ȷ\":\"ȷ\",\"𝕛\":\"𝕛\",\"𝒿\":\"𝒿\",\"ј\":\"ј\",\"є\":\"є\",\"κ\":\"κ\",\"ϰ\":\"ϰ\",\"ķ\":\"ķ\",\"к\":\"к\",\"𝔨\":\"𝔨\",\"ĸ\":\"ĸ\",\"х\":\"х\",\"ќ\":\"ќ\",\"𝕜\":\"𝕜\",\"𝓀\":\"𝓀\",\"⤛\":\"⤛\",\"⤎\":\"⤎\",\"⪋\":\"⪋\",\"⥢\":\"⥢\",\"ĺ\":\"ĺ\",\"⦴\":\"⦴\",\"λ\":\"λ\",\"⦑\":\"⦑\",\"⪅\":\"⪅\",\"«\":\"«\",\"⤟\":\"⤟\",\"⤝\":\"⤝\",\"↫\":\"↫\",\"⤹\":\"⤹\",\"⥳\":\"⥳\",\"↢\":\"↢\",\"⪫\":\"⪫\",\"⤙\":\"⤙\",\"⪭\":\"⪭\",\"⪭︀\":\"⪭︀\",\"⤌\":\"⤌\",\"❲\":\"❲\",\"{\":\"{\",\"[\":\"[\",\"⦋\":\"⦋\",\"⦏\":\"⦏\",\"⦍\":\"⦍\",\"ľ\":\"ľ\",\"ļ\":\"ļ\",\"л\":\"л\",\"⤶\":\"⤶\",\"⥧\":\"⥧\",\"⥋\":\"⥋\",\"↲\":\"↲\",\"≤\":\"≤\",\"⇇\":\"⇇\",\"⋋\":\"⋋\",\"⪨\":\"⪨\",\"⩿\":\"⩿\",\"⪁\":\"⪁\",\"⪃\":\"⪃\",\"⋚︀\":\"⋚︀\",\"⪓\":\"⪓\",\"⋖\":\"⋖\",\"⥼\":\"⥼\",\"𝔩\":\"𝔩\",\"⪑\":\"⪑\",\"⥪\":\"⥪\",\"▄\":\"▄\",\"љ\":\"љ\",\"⥫\":\"⥫\",\"◺\":\"◺\",\"ŀ\":\"ŀ\",\"⎰\":\"⎰\",\"≨\":\"≨\",\"⪉\":\"⪉\",\"⪇\":\"⪇\",\"⋦\":\"⋦\",\"⟬\":\"⟬\",\"⇽\":\"⇽\",\"⟼\":\"⟼\",\"↬\":\"↬\",\"⦅\":\"⦅\",\"𝕝\":\"𝕝\",\"⨭\":\"⨭\",\"⨴\":\"⨴\",\"∗\":\"∗\",\"◊\":\"◊\",\"(\":\"(\",\"⦓\":\"⦓\",\"⥭\":\"⥭\",\"‎\":\"‎\",\"⊿\":\"⊿\",\"‹\":\"‹\",\"𝓁\":\"𝓁\",\"⪍\":\"⪍\",\"⪏\":\"⪏\",\"‚\":\"‚\",\"ł\":\"ł\",\"⪦\":\"⪦\",\"⩹\":\"⩹\",\"⋉\":\"⋉\",\"⥶\":\"⥶\",\"⩻\":\"⩻\",\"⦖\":\"⦖\",\"◃\":\"◃\",\"⥊\":\"⥊\",\"⥦\":\"⥦\",\"≨︀\":\"≨︀\",\"∺\":\"∺\",\"¯\":\"¯\",\"♂\":\"♂\",\"✠\":\"✠\",\"▮\":\"▮\",\"⨩\":\"⨩\",\"м\":\"м\",\"—\":\"—\",\"𝔪\":\"𝔪\",\"℧\":\"℧\",\"µ\":\"µ\",\"⫰\":\"⫰\",\"−\":\"−\",\"⨪\":\"⨪\",\"⫛\":\"⫛\",\"⊧\":\"⊧\",\"𝕞\":\"𝕞\",\"𝓂\":\"𝓂\",\"μ\":\"μ\",\"⊸\":\"⊸\",\"⋙̸\":\"⋙̸\",\"≫⃒\":\"≫⃒\",\"⇍\":\"⇍\",\"⇎\":\"⇎\",\"⋘̸\":\"⋘̸\",\"≪⃒\":\"≪⃒\",\"⇏\":\"⇏\",\"⊯\":\"⊯\",\"⊮\":\"⊮\",\"ń\":\"ń\",\"∠⃒\":\"∠⃒\",\"⩰̸\":\"⩰̸\",\"≋̸\":\"≋̸\",\"ʼn\":\"ʼn\",\"♮\":\"♮\",\"⩃\":\"⩃\",\"ň\":\"ň\",\"ņ\":\"ņ\",\"⩭̸\":\"⩭̸\",\"⩂\":\"⩂\",\"н\":\"н\",\"–\":\"–\",\"⇗\":\"⇗\",\"⤤\":\"⤤\",\"≐̸\":\"≐̸\",\"⤨\":\"⤨\",\"𝔫\":\"𝔫\",\"↮\":\"↮\",\"⫲\":\"⫲\",\"⋼\":\"⋼\",\"⋺\":\"⋺\",\"њ\":\"њ\",\"≦̸\":\"≦̸\",\"↚\":\"↚\",\"‥\":\"‥\",\"𝕟\":\"𝕟\",\"¬\":\"¬\",\"⋹̸\":\"⋹̸\",\"⋵̸\":\"⋵̸\",\"⋷\":\"⋷\",\"⋶\":\"⋶\",\"⋾\":\"⋾\",\"⋽\":\"⋽\",\"⫽⃥\":\"⫽⃥\",\"∂̸\":\"∂̸\",\"⨔\":\"⨔\",\"↛\":\"↛\",\"⤳̸\":\"⤳̸\",\"↝̸\":\"↝̸\",\"𝓃\":\"𝓃\",\"⊄\":\"⊄\",\"⫅̸\":\"⫅̸\",\"⊅\":\"⊅\",\"⫆̸\":\"⫆̸\",\"ñ\":\"ñ\",\"ν\":\"ν\",\"#\":\"#\",\"№\":\"№\",\" \":\" \",\"⊭\":\"⊭\",\"⤄\":\"⤄\",\"≍⃒\":\"≍⃒\",\"⊬\":\"⊬\",\"≥⃒\":\"≥⃒\",\">⃒\":\">⃒\",\"⧞\":\"⧞\",\"⤂\":\"⤂\",\"≤⃒\":\"≤⃒\",\"<⃒\":\"<⃒\",\"⊴⃒\":\"⊴⃒\",\"⤃\":\"⤃\",\"⊵⃒\":\"⊵⃒\",\"∼⃒\":\"∼⃒\",\"⇖\":\"⇖\",\"⤣\":\"⤣\",\"⤧\":\"⤧\",\"ó\":\"ó\",\"ô\":\"ô\",\"о\":\"о\",\"ő\":\"ő\",\"⨸\":\"⨸\",\"⦼\":\"⦼\",\"œ\":\"œ\",\"⦿\":\"⦿\",\"𝔬\":\"𝔬\",\"˛\":\"˛\",\"ò\":\"ò\",\"⧁\":\"⧁\",\"⦵\":\"⦵\",\"⦾\":\"⦾\",\"⦻\":\"⦻\",\"⧀\":\"⧀\",\"ō\":\"ō\",\"ω\":\"ω\",\"ο\":\"ο\",\"⦶\":\"⦶\",\"𝕠\":\"𝕠\",\"⦷\":\"⦷\",\"⦹\":\"⦹\",\"∨\":\"∨\",\"⩝\":\"⩝\",\"ℴ\":\"ℴ\",\"ª\":\"ª\",\"º\":\"º\",\"⊶\":\"⊶\",\"⩖\":\"⩖\",\"⩗\":\"⩗\",\"⩛\":\"⩛\",\"ø\":\"ø\",\"⊘\":\"⊘\",\"õ\":\"õ\",\"⨶\":\"⨶\",\"ö\":\"ö\",\"⌽\":\"⌽\",\"¶\":\"¶\",\"⫳\":\"⫳\",\"⫽\":\"⫽\",\"п\":\"п\",\"%\":\"%\",\".\":\".\",\"‰\":\"‰\",\"‱\":\"‱\",\"𝔭\":\"𝔭\",\"φ\":\"φ\",\"ϕ\":\"ϕ\",\"☎\":\"☎\",\"π\":\"π\",\"ϖ\":\"ϖ\",\"ℎ\":\"ℎ\",\"+\":\"+\",\"⨣\":\"⨣\",\"⨢\":\"⨢\",\"⨥\":\"⨥\",\"⩲\":\"⩲\",\"⨦\":\"⨦\",\"⨧\":\"⨧\",\"⨕\":\"⨕\",\"𝕡\":\"𝕡\",\"£\":\"£\",\"⪳\":\"⪳\",\"⪷\":\"⪷\",\"⪹\":\"⪹\",\"⪵\":\"⪵\",\"⋨\":\"⋨\",\"′\":\"′\",\"⌮\":\"⌮\",\"⌒\":\"⌒\",\"⌓\":\"⌓\",\"⊰\":\"⊰\",\"𝓅\":\"𝓅\",\"ψ\":\"ψ\",\" \":\" \",\"𝔮\":\"𝔮\",\"𝕢\":\"𝕢\",\"⁗\":\"⁗\",\"𝓆\":\"𝓆\",\"⨖\":\"⨖\",\"?\":\"?\",\"⤜\":\"⤜\",\"⥤\":\"⥤\",\"∽̱\":\"∽̱\",\"ŕ\":\"ŕ\",\"⦳\":\"⦳\",\"⦒\":\"⦒\",\"⦥\":\"⦥\",\"»\":\"»\",\"⥵\":\"⥵\",\"⤠\":\"⤠\",\"⤳\":\"⤳\",\"⤞\":\"⤞\",\"⥅\":\"⥅\",\"⥴\":\"⥴\",\"↣\":\"↣\",\"↝\":\"↝\",\"⤚\":\"⤚\",\"∶\":\"∶\",\"❳\":\"❳\",\"}\":\"}\",\"]\":\"]\",\"⦌\":\"⦌\",\"⦎\":\"⦎\",\"⦐\":\"⦐\",\"ř\":\"ř\",\"ŗ\":\"ŗ\",\"р\":\"р\",\"⤷\":\"⤷\",\"⥩\":\"⥩\",\"↳\":\"↳\",\"▭\":\"▭\",\"⥽\":\"⥽\",\"𝔯\":\"𝔯\",\"⥬\":\"⥬\",\"ρ\":\"ρ\",\"ϱ\":\"ϱ\",\"⇉\":\"⇉\",\"⋌\":\"⋌\",\"˚\":\"˚\",\"‏\":\"‏\",\"⎱\":\"⎱\",\"⫮\":\"⫮\",\"⟭\":\"⟭\",\"⇾\":\"⇾\",\"⦆\":\"⦆\",\"𝕣\":\"𝕣\",\"⨮\":\"⨮\",\"⨵\":\"⨵\",\")\":\")\",\"⦔\":\"⦔\",\"⨒\":\"⨒\",\"›\":\"›\",\"𝓇\":\"𝓇\",\"⋊\":\"⋊\",\"▹\":\"▹\",\"⧎\":\"⧎\",\"⥨\":\"⥨\",\"℞\":\"℞\",\"ś\":\"ś\",\"⪴\":\"⪴\",\"⪸\":\"⪸\",\"š\":\"š\",\"ş\":\"ş\",\"ŝ\":\"ŝ\",\"⪶\":\"⪶\",\"⪺\":\"⪺\",\"⋩\":\"⋩\",\"⨓\":\"⨓\",\"с\":\"с\",\"⋅\":\"⋅\",\"⩦\":\"⩦\",\"⇘\":\"⇘\",\"§\":\"§\",\";\":\";\",\"⤩\":\"⤩\",\"✶\":\"✶\",\"𝔰\":\"𝔰\",\"♯\":\"♯\",\"щ\":\"щ\",\"ш\":\"ш\",\"­\":\"­\",\"σ\":\"σ\",\"ς\":\"ς\",\"⩪\":\"⩪\",\"⪞\":\"⪞\",\"⪠\":\"⪠\",\"⪝\":\"⪝\",\"⪟\":\"⪟\",\"≆\":\"≆\",\"⨤\":\"⨤\",\"⥲\":\"⥲\",\"⨳\":\"⨳\",\"⧤\":\"⧤\",\"⌣\":\"⌣\",\"⪪\":\"⪪\",\"⪬\":\"⪬\",\"⪬︀\":\"⪬︀\",\"ь\":\"ь\",\"/\":\"/\",\"⧄\":\"⧄\",\"⌿\":\"⌿\",\"𝕤\":\"𝕤\",\"♠\":\"♠\",\"⊓︀\":\"⊓︀\",\"⊔︀\":\"⊔︀\",\"𝓈\":\"𝓈\",\"☆\":\"☆\",\"⊂\":\"⊂\",\"⫅\":\"⫅\",\"⪽\":\"⪽\",\"⫃\":\"⫃\",\"⫁\":\"⫁\",\"⫋\":\"⫋\",\"⊊\":\"⊊\",\"⪿\":\"⪿\",\"⥹\":\"⥹\",\"⫇\":\"⫇\",\"⫕\":\"⫕\",\"⫓\":\"⫓\",\"♪\":\"♪\",\"¹\":\"¹\",\"²\":\"²\",\"³\":\"³\",\"⫆\":\"⫆\",\"⪾\":\"⪾\",\"⫘\":\"⫘\",\"⫄\":\"⫄\",\"⟉\":\"⟉\",\"⫗\":\"⫗\",\"⥻\":\"⥻\",\"⫂\":\"⫂\",\"⫌\":\"⫌\",\"⊋\":\"⊋\",\"⫀\":\"⫀\",\"⫈\":\"⫈\",\"⫔\":\"⫔\",\"⫖\":\"⫖\",\"⇙\":\"⇙\",\"⤪\":\"⤪\",\"ß\":\"ß\",\"⌖\":\"⌖\",\"τ\":\"τ\",\"ť\":\"ť\",\"ţ\":\"ţ\",\"т\":\"т\",\"⌕\":\"⌕\",\"𝔱\":\"𝔱\",\"θ\":\"θ\",\"ϑ\":\"ϑ\",\"þ\":\"þ\",\"×\":\"×\",\"⨱\":\"⨱\",\"⨰\":\"⨰\",\"⌶\":\"⌶\",\"⫱\":\"⫱\",\"𝕥\":\"𝕥\",\"⫚\":\"⫚\",\"‴\":\"‴\",\"▵\":\"▵\",\"≜\":\"≜\",\"◬\":\"◬\",\"⨺\":\"⨺\",\"⨹\":\"⨹\",\"⧍\":\"⧍\",\"⨻\":\"⨻\",\"⏢\":\"⏢\",\"𝓉\":\"𝓉\",\"ц\":\"ц\",\"ћ\":\"ћ\",\"ŧ\":\"ŧ\",\"⥣\":\"⥣\",\"ú\":\"ú\",\"ў\":\"ў\",\"ŭ\":\"ŭ\",\"û\":\"û\",\"у\":\"у\",\"ű\":\"ű\",\"⥾\":\"⥾\",\"𝔲\":\"𝔲\",\"ù\":\"ù\",\"▀\":\"▀\",\"⌜\":\"⌜\",\"⌏\":\"⌏\",\"◸\":\"◸\",\"ū\":\"ū\",\"ų\":\"ų\",\"𝕦\":\"𝕦\",\"υ\":\"υ\",\"⇈\":\"⇈\",\"⌝\":\"⌝\",\"⌎\":\"⌎\",\"ů\":\"ů\",\"◹\":\"◹\",\"𝓊\":\"𝓊\",\"⋰\":\"⋰\",\"ũ\":\"ũ\",\"ü\":\"ü\",\"⦧\":\"⦧\",\"⫨\":\"⫨\",\"⫩\":\"⫩\",\"⦜\":\"⦜\",\"⊊︀\":\"⊊︀\",\"⫋︀\":\"⫋︀\",\"⊋︀\":\"⊋︀\",\"⫌︀\":\"⫌︀\",\"в\":\"в\",\"⊻\":\"⊻\",\"≚\":\"≚\",\"⋮\":\"⋮\",\"𝔳\":\"𝔳\",\"𝕧\":\"𝕧\",\"𝓋\":\"𝓋\",\"⦚\":\"⦚\",\"ŵ\":\"ŵ\",\"⩟\":\"⩟\",\"≙\":\"≙\",\"℘\":\"℘\",\"𝔴\":\"𝔴\",\"𝕨\":\"𝕨\",\"𝓌\":\"𝓌\",\"𝔵\":\"𝔵\",\"ξ\":\"ξ\",\"⋻\":\"⋻\",\"𝕩\":\"𝕩\",\"𝓍\":\"𝓍\",\"ý\":\"ý\",\"я\":\"я\",\"ŷ\":\"ŷ\",\"ы\":\"ы\",\"¥\":\"¥\",\"𝔶\":\"𝔶\",\"ї\":\"ї\",\"𝕪\":\"𝕪\",\"𝓎\":\"𝓎\",\"ю\":\"ю\",\"ÿ\":\"ÿ\",\"ź\":\"ź\",\"ž\":\"ž\",\"з\":\"з\",\"ż\":\"ż\",\"ζ\":\"ζ\",\"𝔷\":\"𝔷\",\"ж\":\"ж\",\"⇝\":\"⇝\",\"𝕫\":\"𝕫\",\"𝓏\":\"𝓏\",\"‍\":\"‍\",\"‌\":\"‌\"}}};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.numericUnicodeMap={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376};","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.fromCodePoint=String.fromCodePoint||function(astralCodePoint){return String.fromCharCode(Math.floor((astralCodePoint-65536)/1024)+55296,(astralCodePoint-65536)%1024+56320)};exports.getCodePoint=String.prototype.codePointAt?function(input,position){return input.codePointAt(position)}:function(input,position){return(input.charCodeAt(position)-55296)*1024+input.charCodeAt(position+1)-56320+65536};exports.highSurrogateFrom=55296;exports.highSurrogateTo=56319;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nimport { log } from \"../utils/log.js\";\n\nvar WebSocketClient = /*#__PURE__*/function () {\n /**\n * @param {string} url\n */\n function WebSocketClient(url) {\n _classCallCheck(this, WebSocketClient);\n\n this.client = new WebSocket(url);\n\n this.client.onerror = function (error) {\n log.error(error);\n };\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n\n _createClass(WebSocketClient, [{\n key: \"onOpen\",\n value: function onOpen(f) {\n this.client.onopen = f;\n }\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onClose\",\n value: function onClose(f) {\n this.client.onclose = f;\n } // call f with the message string as the first argument\n\n /**\n * @param {(...args: any[]) => void} f\n */\n\n }, {\n key: \"onMessage\",\n value: function onMessage(f) {\n this.client.onmessage = function (e) {\n f(e.data);\n };\n }\n }]);\n\n return WebSocketClient;\n}();\n\nexport { WebSocketClient as default };","/* global __resourceQuery, __webpack_hash__ */\n/// \nimport webpackHotLog from \"webpack/hot/log.js\";\nimport stripAnsi from \"./utils/stripAnsi.js\";\nimport parseURL from \"./utils/parseURL.js\";\nimport socket from \"./socket.js\";\nimport { formatProblem, show, hide } from \"./overlay.js\";\nimport { log, setLogLevel } from \"./utils/log.js\";\nimport sendMessage from \"./utils/sendMessage.js\";\nimport reloadApp from \"./utils/reloadApp.js\";\nimport createSocketURL from \"./utils/createSocketURL.js\";\n/**\n * @typedef {Object} Options\n * @property {boolean} hot\n * @property {boolean} liveReload\n * @property {boolean} progress\n * @property {boolean | { warnings?: boolean, errors?: boolean, trustedTypesPolicyName?: string }} overlay\n * @property {string} [logging]\n * @property {number} [reconnect]\n */\n\n/**\n * @typedef {Object} Status\n * @property {boolean} isUnloading\n * @property {string} currentHash\n * @property {string} [previousHash]\n */\n\n/**\n * @type {Status}\n */\n\nvar status = {\n isUnloading: false,\n // TODO Workaround for webpack v4, `__webpack_hash__` is not replaced without HotModuleReplacement\n // eslint-disable-next-line camelcase\n currentHash: typeof __webpack_hash__ !== \"undefined\" ? __webpack_hash__ : \"\"\n};\n/** @type {Options} */\n\nvar options = {\n hot: false,\n liveReload: false,\n progress: false,\n overlay: false\n};\nvar parsedResourceQuery = parseURL(__resourceQuery);\n\nif (parsedResourceQuery.hot === \"true\") {\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n}\n\nif (parsedResourceQuery[\"live-reload\"] === \"true\") {\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n}\n\nif (parsedResourceQuery.logging) {\n options.logging = parsedResourceQuery.logging;\n}\n\nif (typeof parsedResourceQuery.reconnect !== \"undefined\") {\n options.reconnect = Number(parsedResourceQuery.reconnect);\n}\n/**\n * @param {string} level\n */\n\n\nfunction setAllLogLevel(level) {\n // This is needed because the HMR logger operate separately from dev server logger\n webpackHotLog.setLogLevel(level === \"verbose\" || level === \"log\" ? \"info\" : level);\n setLogLevel(level);\n}\n\nif (options.logging) {\n setAllLogLevel(options.logging);\n}\n\nself.addEventListener(\"beforeunload\", function () {\n status.isUnloading = true;\n});\nvar onSocketMessage = {\n hot: function hot() {\n if (parsedResourceQuery.hot === \"false\") {\n return;\n }\n\n options.hot = true;\n log.info(\"Hot Module Replacement enabled.\");\n },\n liveReload: function liveReload() {\n if (parsedResourceQuery[\"live-reload\"] === \"false\") {\n return;\n }\n\n options.liveReload = true;\n log.info(\"Live Reloading enabled.\");\n },\n invalid: function invalid() {\n log.info(\"App updated. Recompiling...\"); // Fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Invalid\");\n },\n\n /**\n * @param {string} hash\n */\n hash: function hash(_hash) {\n status.previousHash = status.currentHash;\n status.currentHash = _hash;\n },\n logging: setAllLogLevel,\n\n /**\n * @param {boolean} value\n */\n overlay: function overlay(value) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n options.overlay = value;\n },\n\n /**\n * @param {number} value\n */\n reconnect: function reconnect(value) {\n if (parsedResourceQuery.reconnect === \"false\") {\n return;\n }\n\n options.reconnect = value;\n },\n\n /**\n * @param {boolean} value\n */\n progress: function progress(value) {\n options.progress = value;\n },\n\n /**\n * @param {{ pluginName?: string, percent: number, msg: string }} data\n */\n \"progress-update\": function progressUpdate(data) {\n if (options.progress) {\n log.info(\"\".concat(data.pluginName ? \"[\".concat(data.pluginName, \"] \") : \"\").concat(data.percent, \"% - \").concat(data.msg, \".\"));\n }\n\n sendMessage(\"Progress\", data);\n },\n \"still-ok\": function stillOk() {\n log.info(\"Nothing changed.\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"StillOk\");\n },\n ok: function ok() {\n sendMessage(\"Ok\");\n\n if (options.overlay) {\n hide();\n }\n\n reloadApp(options, status);\n },\n // TODO: remove in v5 in favor of 'static-changed'\n\n /**\n * @param {string} file\n */\n \"content-changed\": function contentChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {string} file\n */\n \"static-changed\": function staticChanged(file) {\n log.info(\"\".concat(file ? \"\\\"\".concat(file, \"\\\"\") : \"Content\", \" from static directory was changed. Reloading...\"));\n self.location.reload();\n },\n\n /**\n * @param {Error[]} warnings\n * @param {any} params\n */\n warnings: function warnings(_warnings, params) {\n log.warn(\"Warnings while compiling.\");\n\n var printableWarnings = _warnings.map(function (error) {\n var _formatProblem = formatProblem(\"warning\", error),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Warnings\", printableWarnings);\n\n for (var i = 0; i < printableWarnings.length; i++) {\n log.warn(printableWarnings[i]);\n }\n\n var needShowOverlayForWarnings = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.warnings;\n\n if (needShowOverlayForWarnings) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"warning\", _warnings, trustedTypesPolicyName || null);\n }\n\n if (params && params.preventReloading) {\n return;\n }\n\n reloadApp(options, status);\n },\n\n /**\n * @param {Error[]} errors\n */\n errors: function errors(_errors) {\n log.error(\"Errors while compiling. Reload prevented.\");\n\n var printableErrors = _errors.map(function (error) {\n var _formatProblem2 = formatProblem(\"error\", error),\n header = _formatProblem2.header,\n body = _formatProblem2.body;\n\n return \"\".concat(header, \"\\n\").concat(stripAnsi(body));\n });\n\n sendMessage(\"Errors\", printableErrors);\n\n for (var i = 0; i < printableErrors.length; i++) {\n log.error(printableErrors[i]);\n }\n\n var needShowOverlayForErrors = typeof options.overlay === \"boolean\" ? options.overlay : options.overlay && options.overlay.errors;\n\n if (needShowOverlayForErrors) {\n var trustedTypesPolicyName = typeof options.overlay === \"object\" && options.overlay.trustedTypesPolicyName;\n show(\"error\", _errors, trustedTypesPolicyName || null);\n }\n },\n\n /**\n * @param {Error} error\n */\n error: function error(_error) {\n log.error(_error);\n },\n close: function close() {\n log.info(\"Disconnected!\");\n\n if (options.overlay) {\n hide();\n }\n\n sendMessage(\"Close\");\n }\n};\nvar socketURL = createSocketURL(parsedResourceQuery);\nsocket(socketURL, onSocketMessage, options.reconnect);","/******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./client-src/modules/logger/SyncBailHookFake.js\":\n/*!*******************************************************!*\\\n !*** ./client-src/modules/logger/SyncBailHookFake.js ***!\n \\*******************************************************/\n/***/ (function(module) {\n\n\n/**\n * Client stub for tapable SyncBailHook\n */\n\nmodule.exports = function clientTapableSyncBailHook() {\n return {\n call: function call() {}\n };\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/Logger.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/Logger.js ***!\n \\****************************************************/\n/***/ (function(__unused_webpack_module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nvar LogType = Object.freeze({\n error:\n /** @type {\"error\"} */\n \"error\",\n // message, c style arguments\n warn:\n /** @type {\"warn\"} */\n \"warn\",\n // message, c style arguments\n info:\n /** @type {\"info\"} */\n \"info\",\n // message, c style arguments\n log:\n /** @type {\"log\"} */\n \"log\",\n // message, c style arguments\n debug:\n /** @type {\"debug\"} */\n \"debug\",\n // message, c style arguments\n trace:\n /** @type {\"trace\"} */\n \"trace\",\n // no arguments\n group:\n /** @type {\"group\"} */\n \"group\",\n // [label]\n groupCollapsed:\n /** @type {\"groupCollapsed\"} */\n \"groupCollapsed\",\n // [label]\n groupEnd:\n /** @type {\"groupEnd\"} */\n \"groupEnd\",\n // [label]\n profile:\n /** @type {\"profile\"} */\n \"profile\",\n // [profileName]\n profileEnd:\n /** @type {\"profileEnd\"} */\n \"profileEnd\",\n // [profileName]\n time:\n /** @type {\"time\"} */\n \"time\",\n // name, time as [seconds, nanoseconds]\n clear:\n /** @type {\"clear\"} */\n \"clear\",\n // no arguments\n status:\n /** @type {\"status\"} */\n \"status\" // message, arguments\n\n});\nexports.LogType = LogType;\n/** @typedef {typeof LogType[keyof typeof LogType]} LogTypeEnum */\n\nvar LOG_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger raw log method\");\nvar TIMERS_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger times\");\nvar TIMERS_AGGREGATES_SYMBOL = (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; })(\"webpack logger aggregated times\");\n\nvar WebpackLogger = /*#__PURE__*/function () {\n /**\n * @param {function(LogTypeEnum, any[]=): void} log log function\n * @param {function(string | function(): string): WebpackLogger} getChildLogger function to create child logger\n */\n function WebpackLogger(log, getChildLogger) {\n _classCallCheck(this, WebpackLogger);\n\n this[LOG_SYMBOL] = log;\n this.getChildLogger = getChildLogger;\n }\n\n _createClass(WebpackLogger, [{\n key: \"error\",\n value: function error() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this[LOG_SYMBOL](LogType.warn, args);\n }\n }, {\n key: \"info\",\n value: function info() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this[LOG_SYMBOL](LogType.info, args);\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this[LOG_SYMBOL](LogType.log, args);\n }\n }, {\n key: \"debug\",\n value: function debug() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this[LOG_SYMBOL](LogType.debug, args);\n }\n }, {\n key: \"assert\",\n value: function assert(assertion) {\n if (!assertion) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n this[LOG_SYMBOL](LogType.error, args);\n }\n }\n }, {\n key: \"trace\",\n value: function trace() {\n this[LOG_SYMBOL](LogType.trace, [\"Trace\"]);\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this[LOG_SYMBOL](LogType.clear);\n }\n }, {\n key: \"status\",\n value: function status() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this[LOG_SYMBOL](LogType.status, args);\n }\n }, {\n key: \"group\",\n value: function group() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this[LOG_SYMBOL](LogType.group, args);\n }\n }, {\n key: \"groupCollapsed\",\n value: function groupCollapsed() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this[LOG_SYMBOL](LogType.groupCollapsed, args);\n }\n }, {\n key: \"groupEnd\",\n value: function groupEnd() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this[LOG_SYMBOL](LogType.groupEnd, args);\n }\n }, {\n key: \"profile\",\n value: function profile(label) {\n this[LOG_SYMBOL](LogType.profile, [label]);\n }\n }, {\n key: \"profileEnd\",\n value: function profileEnd(label) {\n this[LOG_SYMBOL](LogType.profileEnd, [label]);\n }\n }, {\n key: \"time\",\n value: function time(label) {\n this[TIMERS_SYMBOL] = this[TIMERS_SYMBOL] || new Map();\n this[TIMERS_SYMBOL].set(label, process.hrtime());\n }\n }, {\n key: \"timeLog\",\n value: function timeLog(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeLog()\"));\n }\n\n var time = process.hrtime(prev);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeEnd\",\n value: function timeEnd(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeEnd()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }, {\n key: \"timeAggregate\",\n value: function timeAggregate(label) {\n var prev = this[TIMERS_SYMBOL] && this[TIMERS_SYMBOL].get(label);\n\n if (!prev) {\n throw new Error(\"No such label '\".concat(label, \"' for WebpackLogger.timeAggregate()\"));\n }\n\n var time = process.hrtime(prev);\n this[TIMERS_SYMBOL].delete(label);\n this[TIMERS_AGGREGATES_SYMBOL] = this[TIMERS_AGGREGATES_SYMBOL] || new Map();\n var current = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n\n if (current !== undefined) {\n if (time[1] + current[1] > 1e9) {\n time[0] += current[0] + 1;\n time[1] = time[1] - 1e9 + current[1];\n } else {\n time[0] += current[0];\n time[1] += current[1];\n }\n }\n\n this[TIMERS_AGGREGATES_SYMBOL].set(label, time);\n }\n }, {\n key: \"timeAggregateEnd\",\n value: function timeAggregateEnd(label) {\n if (this[TIMERS_AGGREGATES_SYMBOL] === undefined) return;\n var time = this[TIMERS_AGGREGATES_SYMBOL].get(label);\n if (time === undefined) return;\n this[TIMERS_AGGREGATES_SYMBOL].delete(label);\n this[LOG_SYMBOL](LogType.time, [label].concat(_toConsumableArray(time)));\n }\n }]);\n\n return WebpackLogger;\n}();\n\nexports.Logger = WebpackLogger;\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/createConsoleLogger.js ***!\n \\*****************************************************************/\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof (typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }) !== \"undefined\" && iter[(typeof Symbol !== \"undefined\" ? Symbol : function (i) { return i; }).iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n LogType = _require.LogType;\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterItemTypes} FilterItemTypes */\n\n/** @typedef {import(\"../../declarations/WebpackOptions\").FilterTypes} FilterTypes */\n\n/** @typedef {import(\"./Logger\").LogTypeEnum} LogTypeEnum */\n\n/** @typedef {function(string): boolean} FilterFunction */\n\n/**\n * @typedef {Object} LoggerConsole\n * @property {function(): void} clear\n * @property {function(): void} trace\n * @property {(...args: any[]) => void} info\n * @property {(...args: any[]) => void} log\n * @property {(...args: any[]) => void} warn\n * @property {(...args: any[]) => void} error\n * @property {(...args: any[]) => void=} debug\n * @property {(...args: any[]) => void=} group\n * @property {(...args: any[]) => void=} groupCollapsed\n * @property {(...args: any[]) => void=} groupEnd\n * @property {(...args: any[]) => void=} status\n * @property {(...args: any[]) => void=} profile\n * @property {(...args: any[]) => void=} profileEnd\n * @property {(...args: any[]) => void=} logTime\n */\n\n/**\n * @typedef {Object} LoggerOptions\n * @property {false|true|\"none\"|\"error\"|\"warn\"|\"info\"|\"log\"|\"verbose\"} level loglevel\n * @property {FilterTypes|boolean} debug filter for debug logging\n * @property {LoggerConsole} console the console to log to\n */\n\n/**\n * @param {FilterItemTypes} item an input item\n * @returns {FilterFunction} filter function\n */\n\n\nvar filterToFunction = function filterToFunction(item) {\n if (typeof item === \"string\") {\n var regExp = new RegExp(\"[\\\\\\\\/]\".concat(item.replace( // eslint-disable-next-line no-useless-escape\n /[-[\\]{}()*+?.\\\\^$|]/g, \"\\\\$&\"), \"([\\\\\\\\/]|$|!|\\\\?)\"));\n return function (ident) {\n return regExp.test(ident);\n };\n }\n\n if (item && typeof item === \"object\" && typeof item.test === \"function\") {\n return function (ident) {\n return item.test(ident);\n };\n }\n\n if (typeof item === \"function\") {\n return item;\n }\n\n if (typeof item === \"boolean\") {\n return function () {\n return item;\n };\n }\n};\n/**\n * @enum {number}\n */\n\n\nvar LogLevel = {\n none: 6,\n false: 6,\n error: 5,\n warn: 4,\n info: 3,\n log: 2,\n true: 2,\n verbose: 1\n};\n/**\n * @param {LoggerOptions} options options object\n * @returns {function(string, LogTypeEnum, any[]): void} logging function\n */\n\nmodule.exports = function (_ref) {\n var _ref$level = _ref.level,\n level = _ref$level === void 0 ? \"info\" : _ref$level,\n _ref$debug = _ref.debug,\n debug = _ref$debug === void 0 ? false : _ref$debug,\n console = _ref.console;\n var debugFilters = typeof debug === \"boolean\" ? [function () {\n return debug;\n }] :\n /** @type {FilterItemTypes[]} */\n [].concat(debug).map(filterToFunction);\n /** @type {number} */\n\n var loglevel = LogLevel[\"\".concat(level)] || 0;\n /**\n * @param {string} name name of the logger\n * @param {LogTypeEnum} type type of the log entry\n * @param {any[]} args arguments of the log entry\n * @returns {void}\n */\n\n var logger = function logger(name, type, args) {\n var labeledArgs = function labeledArgs() {\n if (Array.isArray(args)) {\n if (args.length > 0 && typeof args[0] === \"string\") {\n return [\"[\".concat(name, \"] \").concat(args[0])].concat(_toConsumableArray(args.slice(1)));\n } else {\n return [\"[\".concat(name, \"]\")].concat(_toConsumableArray(args));\n }\n } else {\n return [];\n }\n };\n\n var debug = debugFilters.some(function (f) {\n return f(name);\n });\n\n switch (type) {\n case LogType.debug:\n if (!debug) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.debug === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.debug.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.log:\n if (!debug && loglevel > LogLevel.log) return;\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.info:\n if (!debug && loglevel > LogLevel.info) return;\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.warn:\n if (!debug && loglevel > LogLevel.warn) return;\n console.warn.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.error:\n if (!debug && loglevel > LogLevel.error) return;\n console.error.apply(console, _toConsumableArray(labeledArgs()));\n break;\n\n case LogType.trace:\n if (!debug) return;\n console.trace();\n break;\n\n case LogType.groupCollapsed:\n if (!debug && loglevel > LogLevel.log) return;\n\n if (!debug && loglevel > LogLevel.verbose) {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.groupCollapsed === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupCollapsed.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n }\n\n // falls through\n\n case LogType.group:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.group === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.group.apply(console, _toConsumableArray(labeledArgs()));\n } else {\n console.log.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.groupEnd:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.groupEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.groupEnd();\n }\n\n break;\n\n case LogType.time:\n {\n if (!debug && loglevel > LogLevel.log) return;\n var ms = args[1] * 1000 + args[2] / 1000000;\n var msg = \"[\".concat(name, \"] \").concat(args[0], \": \").concat(ms, \" ms\");\n\n if (typeof console.logTime === \"function\") {\n console.logTime(msg);\n } else {\n console.log(msg);\n }\n\n break;\n }\n\n case LogType.profile:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profile === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profile.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.profileEnd:\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n if (typeof console.profileEnd === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.profileEnd.apply(console, _toConsumableArray(labeledArgs()));\n }\n\n break;\n\n case LogType.clear:\n if (!debug && loglevel > LogLevel.log) return; // eslint-disable-next-line node/no-unsupported-features/node-builtins\n\n if (typeof console.clear === \"function\") {\n // eslint-disable-next-line node/no-unsupported-features/node-builtins\n console.clear();\n }\n\n break;\n\n case LogType.status:\n if (!debug && loglevel > LogLevel.info) return;\n\n if (typeof console.status === \"function\") {\n if (args.length === 0) {\n console.status();\n } else {\n console.status.apply(console, _toConsumableArray(labeledArgs()));\n }\n } else {\n if (args.length !== 0) {\n console.info.apply(console, _toConsumableArray(labeledArgs()));\n }\n }\n\n break;\n\n default:\n throw new Error(\"Unexpected LogType \".concat(type));\n }\n };\n\n return logger;\n};\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/lib/logging/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/webpack/lib/logging/runtime.js ***!\n \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nvar SyncBailHook = __webpack_require__(/*! tapable/lib/SyncBailHook */ \"./client-src/modules/logger/SyncBailHookFake.js\");\n\nvar _require = __webpack_require__(/*! ./Logger */ \"./node_modules/webpack/lib/logging/Logger.js\"),\n Logger = _require.Logger;\n\nvar createConsoleLogger = __webpack_require__(/*! ./createConsoleLogger */ \"./node_modules/webpack/lib/logging/createConsoleLogger.js\");\n/** @type {createConsoleLogger.LoggerOptions} */\n\n\nvar currentDefaultLoggerOptions = {\n level: \"info\",\n debug: false,\n console: console\n};\nvar currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n/**\n * @param {string} name name of the logger\n * @returns {Logger} a logger\n */\n\nexports.getLogger = function (name) {\n return new Logger(function (type, args) {\n if (exports.hooks.log.call(name, type, args) === undefined) {\n currentDefaultLogger(name, type, args);\n }\n }, function (childName) {\n return exports.getLogger(\"\".concat(name, \"/\").concat(childName));\n });\n};\n/**\n * @param {createConsoleLogger.LoggerOptions} options new options, merge with old options\n * @returns {void}\n */\n\n\nexports.configureDefaultLogger = function (options) {\n _extends(currentDefaultLoggerOptions, options);\n\n currentDefaultLogger = createConsoleLogger(currentDefaultLoggerOptions);\n};\n\nexports.hooks = {\n log: new SyncBailHook([\"origin\", \"type\", \"args\"])\n};\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************!*\\\n !*** ./client-src/modules/logger/index.js ***!\n \\********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport default export from named module */ webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__; }\n/* harmony export */ });\n/* harmony import */ var webpack_lib_logging_runtime_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webpack/lib/logging/runtime.js */ \"./node_modules/webpack/lib/logging/runtime.js\");\n\n}();\nvar __webpack_export_target__ = exports;\nfor(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];\nif(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, \"__esModule\", { value: true });\n/******/ })()\n;","// The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\nimport ansiHTML from \"ansi-html-community\";\nimport { encode } from \"html-entities\";\nvar colors = {\n reset: [\"transparent\", \"transparent\"],\n black: \"181818\",\n red: \"E36049\",\n green: \"B3CB74\",\n yellow: \"FFD080\",\n blue: \"7CAFC2\",\n magenta: \"7FACCA\",\n cyan: \"C3C2EF\",\n lightgrey: \"EBE7E3\",\n darkgrey: \"6D7891\"\n};\n/** @type {HTMLIFrameElement | null | undefined} */\n\nvar iframeContainerElement;\n/** @type {HTMLDivElement | null | undefined} */\n\nvar containerElement;\n/** @type {Array<(element: HTMLDivElement) => void>} */\n\nvar onLoadQueue = [];\n/** @type {TrustedTypePolicy | undefined} */\n\nvar overlayTrustedTypesPolicy;\nansiHTML.setColors(colors);\n/**\n * @param {string | null} trustedTypesPolicyName\n */\n\nfunction createContainer(trustedTypesPolicyName) {\n // Enable Trusted Types if they are available in the current browser.\n if (window.trustedTypes) {\n overlayTrustedTypesPolicy = window.trustedTypes.createPolicy(trustedTypesPolicyName || \"webpack-dev-server#overlay\", {\n createHTML: function createHTML(value) {\n return value;\n }\n });\n }\n\n iframeContainerElement = document.createElement(\"iframe\");\n iframeContainerElement.id = \"webpack-dev-server-client-overlay\";\n iframeContainerElement.src = \"about:blank\";\n iframeContainerElement.style.position = \"fixed\";\n iframeContainerElement.style.left = 0;\n iframeContainerElement.style.top = 0;\n iframeContainerElement.style.right = 0;\n iframeContainerElement.style.bottom = 0;\n iframeContainerElement.style.width = \"100vw\";\n iframeContainerElement.style.height = \"100vh\";\n iframeContainerElement.style.border = \"none\";\n iframeContainerElement.style.zIndex = 9999999999;\n\n iframeContainerElement.onload = function () {\n containerElement =\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.createElement(\"div\");\n containerElement.id = \"webpack-dev-server-client-overlay-div\";\n containerElement.style.position = \"fixed\";\n containerElement.style.boxSizing = \"border-box\";\n containerElement.style.left = 0;\n containerElement.style.top = 0;\n containerElement.style.right = 0;\n containerElement.style.bottom = 0;\n containerElement.style.width = \"100vw\";\n containerElement.style.height = \"100vh\";\n containerElement.style.backgroundColor = \"rgba(0, 0, 0, 0.85)\";\n containerElement.style.color = \"#E8E8E8\";\n containerElement.style.fontFamily = \"Menlo, Consolas, monospace\";\n containerElement.style.fontSize = \"large\";\n containerElement.style.padding = \"2rem\";\n containerElement.style.lineHeight = \"1.2\";\n containerElement.style.whiteSpace = \"pre-wrap\";\n containerElement.style.overflow = \"auto\";\n var headerElement = document.createElement(\"span\");\n headerElement.innerText = \"Compiled with problems:\";\n var closeButtonElement = document.createElement(\"button\");\n closeButtonElement.innerText = \"X\";\n closeButtonElement.style.background = \"transparent\";\n closeButtonElement.style.border = \"none\";\n closeButtonElement.style.fontSize = \"20px\";\n closeButtonElement.style.fontWeight = \"bold\";\n closeButtonElement.style.color = \"white\";\n closeButtonElement.style.cursor = \"pointer\";\n closeButtonElement.style.cssFloat = \"right\"; // @ts-ignore\n\n closeButtonElement.style.styleFloat = \"right\";\n closeButtonElement.addEventListener(\"click\", function () {\n hide();\n });\n containerElement.appendChild(headerElement);\n containerElement.appendChild(closeButtonElement);\n containerElement.appendChild(document.createElement(\"br\"));\n containerElement.appendChild(document.createElement(\"br\"));\n /** @type {Document} */\n\n /** @type {HTMLIFrameElement} */\n iframeContainerElement.contentDocument.body.appendChild(containerElement);\n onLoadQueue.forEach(function (onLoad) {\n onLoad(\n /** @type {HTMLDivElement} */\n containerElement);\n });\n onLoadQueue = [];\n /** @type {HTMLIFrameElement} */\n\n iframeContainerElement.onload = null;\n };\n\n document.body.appendChild(iframeContainerElement);\n}\n/**\n * @param {(element: HTMLDivElement) => void} callback\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction ensureOverlayExists(callback, trustedTypesPolicyName) {\n if (containerElement) {\n // Everything is ready, call the callback right away.\n callback(containerElement);\n return;\n }\n\n onLoadQueue.push(callback);\n\n if (iframeContainerElement) {\n return;\n }\n\n createContainer(trustedTypesPolicyName);\n} // Successful compilation.\n\n\nfunction hide() {\n if (!iframeContainerElement) {\n return;\n } // Clean up and reset internal state.\n\n\n document.body.removeChild(iframeContainerElement);\n iframeContainerElement = null;\n containerElement = null;\n}\n/**\n * @param {string} type\n * @param {string | { file?: string, moduleName?: string, loc?: string, message?: string }} item\n * @returns {{ header: string, body: string }}\n */\n\n\nfunction formatProblem(type, item) {\n var header = type === \"warning\" ? \"WARNING\" : \"ERROR\";\n var body = \"\";\n\n if (typeof item === \"string\") {\n body += item;\n } else {\n var file = item.file || \"\"; // eslint-disable-next-line no-nested-ternary\n\n var moduleName = item.moduleName ? item.moduleName.indexOf(\"!\") !== -1 ? \"\".concat(item.moduleName.replace(/^(\\s|\\S)*!/, \"\"), \" (\").concat(item.moduleName, \")\") : \"\".concat(item.moduleName) : \"\";\n var loc = item.loc;\n header += \"\".concat(moduleName || file ? \" in \".concat(moduleName ? \"\".concat(moduleName).concat(file ? \" (\".concat(file, \")\") : \"\") : file).concat(loc ? \" \".concat(loc) : \"\") : \"\");\n body += item.message || \"\";\n }\n\n return {\n header: header,\n body: body\n };\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n/**\n * @param {string} type\n * @param {Array} messages\n * @param {string | null} trustedTypesPolicyName\n */\n\n\nfunction show(type, messages, trustedTypesPolicyName) {\n ensureOverlayExists(function () {\n messages.forEach(function (message) {\n var entryElement = document.createElement(\"div\");\n var typeElement = document.createElement(\"span\");\n\n var _formatProblem = formatProblem(type, message),\n header = _formatProblem.header,\n body = _formatProblem.body;\n\n typeElement.innerText = header;\n typeElement.style.color = \"#\".concat(colors.red); // Make it look similar to our terminal.\n\n var text = ansiHTML(encode(body));\n var messageTextNode = document.createElement(\"div\");\n messageTextNode.innerHTML = overlayTrustedTypesPolicy ? overlayTrustedTypesPolicy.createHTML(text) : text;\n entryElement.appendChild(typeElement);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(messageTextNode);\n entryElement.appendChild(document.createElement(\"br\"));\n entryElement.appendChild(document.createElement(\"br\"));\n /** @type {HTMLDivElement} */\n\n containerElement.appendChild(entryElement);\n });\n }, trustedTypesPolicyName);\n}\n\nexport { formatProblem, show, hide };","/* global __webpack_dev_server_client__ */\nimport WebSocketClient from \"./clients/WebSocketClient.js\";\nimport { log } from \"./utils/log.js\"; // this WebsocketClient is here as a default fallback, in case the client is not injected\n\n/* eslint-disable camelcase */\n\nvar Client = // eslint-disable-next-line no-nested-ternary\ntypeof __webpack_dev_server_client__ !== \"undefined\" ? typeof __webpack_dev_server_client__.default !== \"undefined\" ? __webpack_dev_server_client__.default : __webpack_dev_server_client__ : WebSocketClient;\n/* eslint-enable camelcase */\n\nvar retries = 0;\nvar maxRetries = 10; // Initialized client is exported so external consumers can utilize the same instance\n// It is mutable to enforce singleton\n// eslint-disable-next-line import/no-mutable-exports\n\nexport var client = null;\n/**\n * @param {string} url\n * @param {{ [handler: string]: (data?: any, params?: any) => any }} handlers\n * @param {number} [reconnect]\n */\n\nvar socket = function initSocket(url, handlers, reconnect) {\n client = new Client(url);\n client.onOpen(function () {\n retries = 0;\n\n if (typeof reconnect !== \"undefined\") {\n maxRetries = reconnect;\n }\n });\n client.onClose(function () {\n if (retries === 0) {\n handlers.close();\n } // Try to reconnect.\n\n\n client = null; // After 10 retries stop trying, to prevent logspam.\n\n if (retries < maxRetries) {\n // Exponentially increase timeout to reconnect.\n // Respectfully copied from the package `got`.\n // eslint-disable-next-line no-restricted-properties\n var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n retries += 1;\n log.info(\"Trying to reconnect...\");\n setTimeout(function () {\n socket(url, handlers, reconnect);\n }, retryInMs);\n }\n });\n client.onMessage(\n /**\n * @param {any} data\n */\n function (data) {\n var message = JSON.parse(data);\n\n if (handlers[message.type]) {\n handlers[message.type](message.data, message.params);\n }\n });\n};\n\nexport default socket;","/**\n * @param {{ protocol?: string, auth?: string, hostname?: string, port?: string, pathname?: string, search?: string, hash?: string, slashes?: boolean }} objURL\n * @returns {string}\n */\nfunction format(objURL) {\n var protocol = objURL.protocol || \"\";\n\n if (protocol && protocol.substr(-1) !== \":\") {\n protocol += \":\";\n }\n\n var auth = objURL.auth || \"\";\n\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, \":\");\n auth += \"@\";\n }\n\n var host = \"\";\n\n if (objURL.hostname) {\n host = auth + (objURL.hostname.indexOf(\":\") === -1 ? objURL.hostname : \"[\".concat(objURL.hostname, \"]\"));\n\n if (objURL.port) {\n host += \":\".concat(objURL.port);\n }\n }\n\n var pathname = objURL.pathname || \"\";\n\n if (objURL.slashes) {\n host = \"//\".concat(host || \"\");\n\n if (pathname && pathname.charAt(0) !== \"/\") {\n pathname = \"/\".concat(pathname);\n }\n } else if (!host) {\n host = \"\";\n }\n\n var search = objURL.search || \"\";\n\n if (search && search.charAt(0) !== \"?\") {\n search = \"?\".concat(search);\n }\n\n var hash = objURL.hash || \"\";\n\n if (hash && hash.charAt(0) !== \"#\") {\n hash = \"#\".concat(hash);\n }\n\n pathname = pathname.replace(/[?#]/g,\n /**\n * @param {string} match\n * @returns {string}\n */\n function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace(\"#\", \"%23\");\n return \"\".concat(protocol).concat(host).concat(pathname).concat(search).concat(hash);\n}\n/**\n * @param {URL & { fromCurrentScript?: boolean }} parsedURL\n * @returns {string}\n */\n\n\nfunction createSocketURL(parsedURL) {\n var hostname = parsedURL.hostname; // Node.js module parses it as `::`\n // `new URL(urlString, [baseURLString])` parses it as '[::]'\n\n var isInAddrAny = hostname === \"0.0.0.0\" || hostname === \"::\" || hostname === \"[::]\"; // why do we need this check?\n // hostname n/a for file protocol (example, when using electron, ionic)\n // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n if (isInAddrAny && self.location.hostname && self.location.protocol.indexOf(\"http\") === 0) {\n hostname = self.location.hostname;\n }\n\n var socketURLProtocol = parsedURL.protocol || self.location.protocol; // When https is used in the app, secure web sockets are always necessary because the browser doesn't accept non-secure web sockets.\n\n if (socketURLProtocol === \"auto:\" || hostname && isInAddrAny && self.location.protocol === \"https:\") {\n socketURLProtocol = self.location.protocol;\n }\n\n socketURLProtocol = socketURLProtocol.replace(/^(?:http|.+-extension|file)/i, \"ws\");\n var socketURLAuth = \"\"; // `new URL(urlString, [baseURLstring])` doesn't have `auth` property\n // Parse authentication credentials in case we need them\n\n if (parsedURL.username) {\n socketURLAuth = parsedURL.username; // Since HTTP basic authentication does not allow empty username,\n // we only include password if the username is not empty.\n\n if (parsedURL.password) {\n // Result: :\n socketURLAuth = socketURLAuth.concat(\":\", parsedURL.password);\n }\n } // In case the host is a raw IPv6 address, it can be enclosed in\n // the brackets as the brackets are needed in the final URL string.\n // Need to remove those as url.format blindly adds its own set of brackets\n // if the host string contains colons. That would lead to non-working\n // double brackets (e.g. [[::]]) host\n //\n // All of these web socket url params are optionally passed in through resourceQuery,\n // so we need to fall back to the default if they are not provided\n\n\n var socketURLHostname = (hostname || self.location.hostname || \"localhost\").replace(/^\\[(.*)\\]$/, \"$1\");\n var socketURLPort = parsedURL.port;\n\n if (!socketURLPort || socketURLPort === \"0\") {\n socketURLPort = self.location.port;\n } // If path is provided it'll be passed in via the resourceQuery as a\n // query param so it has to be parsed out of the querystring in order for the\n // client to open the socket to the correct location.\n\n\n var socketURLPathname = \"/ws\";\n\n if (parsedURL.pathname && !parsedURL.fromCurrentScript) {\n socketURLPathname = parsedURL.pathname;\n }\n\n return format({\n protocol: socketURLProtocol,\n auth: socketURLAuth,\n hostname: socketURLHostname,\n port: socketURLPort,\n pathname: socketURLPathname,\n slashes: true\n });\n}\n\nexport default createSocketURL;","/**\n * @returns {string}\n */\nfunction getCurrentScriptSource() {\n // `document.currentScript` is the most accurate way to find the current script,\n // but is not supported in all browsers.\n if (document.currentScript) {\n return document.currentScript.getAttribute(\"src\");\n } // Fallback to getting all scripts running in the document.\n\n\n var scriptElements = document.scripts || [];\n var scriptElementsWithSrc = Array.prototype.filter.call(scriptElements, function (element) {\n return element.getAttribute(\"src\");\n });\n\n if (scriptElementsWithSrc.length > 0) {\n var currentScript = scriptElementsWithSrc[scriptElementsWithSrc.length - 1];\n return currentScript.getAttribute(\"src\");\n } // Fail as there was no script to use.\n\n\n throw new Error(\"[webpack-dev-server] Failed to get current script source.\");\n}\n\nexport default getCurrentScriptSource;","import logger from \"../modules/logger/index.js\";\nvar name = \"webpack-dev-server\"; // default level is set on the client side, so it does not need\n// to be set by the CLI or API\n\nvar defaultLevel = \"info\"; // options new options, merge with old options\n\n/**\n * @param {false | true | \"none\" | \"error\" | \"warn\" | \"info\" | \"log\" | \"verbose\"} level\n * @returns {void}\n */\n\nfunction setLogLevel(level) {\n logger.configureDefaultLogger({\n level: level\n });\n}\n\nsetLogLevel(defaultLevel);\nvar log = logger.getLogger(name);\nexport { log, setLogLevel };","import getCurrentScriptSource from \"./getCurrentScriptSource.js\";\n/**\n * @param {string} resourceQuery\n * @returns {{ [key: string]: string | boolean }}\n */\n\nfunction parseURL(resourceQuery) {\n /** @type {{ [key: string]: string }} */\n var options = {};\n\n if (typeof resourceQuery === \"string\" && resourceQuery !== \"\") {\n var searchParams = resourceQuery.slice(1).split(\"&\");\n\n for (var i = 0; i < searchParams.length; i++) {\n var pair = searchParams[i].split(\"=\");\n options[pair[0]] = decodeURIComponent(pair[1]);\n }\n } else {\n // Else, get the url from the