!function (t, e) { "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self).turf = {}) }(this, (function (t) { "use strict"; var e = 6371008.8, n = { centimeters: 637100880, centimetres: 637100880, degrees: 57.22891354143274, feet: 20902260.511392, inches: 39.37 * e, kilometers: 6371.0088, kilometres: 6371.0088, meters: e, metres: e, miles: 3958.761333810546, millimeters: 6371008800, millimetres: 6371008800, nauticalmiles: e / 1852, radians: 1, yards: 6967335.223679999 }, r = { centimeters: 100, centimetres: 100, degrees: 1 / 111325, feet: 3.28084, inches: 39.37, kilometers: .001, kilometres: .001, meters: 1, metres: 1, miles: 1 / 1609.344, millimeters: 1e3, millimetres: 1e3, nauticalmiles: 1 / 1852, radians: 1 / e, yards: 1.0936133 }, i = { acres: 247105e-9, centimeters: 1e4, centimetres: 1e4, feet: 10.763910417, hectares: 1e-4, inches: 1550.003100006, kilometers: 1e-6, kilometres: 1e-6, meters: 1, metres: 1, miles: 386e-9, millimeters: 1e6, millimetres: 1e6, yards: 1.195990046 }; function o(t, e, n) { void 0 === n && (n = {}); var r = {type: "Feature"}; return (0 === n.id || n.id) && (r.id = n.id), n.bbox && (r.bbox = n.bbox), r.properties = e || {}, r.geometry = t, r } function s(t, e, n) { switch (t) { case "Point": return a(e).geometry; case "LineString": return h(e).geometry; case "Polygon": return l(e).geometry; case "MultiPoint": return d(e).geometry; case "MultiLineString": return g(e).geometry; case "MultiPolygon": return y(e).geometry; default: throw new Error(t + " is invalid") } } function a(t, e, n) { if (void 0 === n && (n = {}), !t) throw new Error("coordinates is required"); if (!Array.isArray(t)) throw new Error("coordinates must be an Array"); if (t.length < 2) throw new Error("coordinates must be at least 2 numbers long"); if (!C(t[0]) || !C(t[1])) throw new Error("coordinates must contain numbers"); return o({type: "Point", coordinates: t}, e, n) } function u(t, e, n) { return void 0 === n && (n = {}), f(t.map((function (t) { return a(t, e) })), n) } function l(t, e, n) { void 0 === n && (n = {}); for (var r = 0, i = t; r < i.length; r++) { var s = i[r]; if (s.length < 4) throw new Error("Each LinearRing of a Polygon must have 4 or more Positions."); for (var a = 0; a < s[s.length - 1].length; a++) if (s[s.length - 1][a] !== s[0][a]) throw new Error("First and last Position are not equivalent.") } return o({type: "Polygon", coordinates: t}, e, n) } function c(t, e, n) { return void 0 === n && (n = {}), f(t.map((function (t) { return l(t, e) })), n) } function h(t, e, n) { if (void 0 === n && (n = {}), t.length < 2) throw new Error("coordinates must be an array of two or more positions"); return o({type: "LineString", coordinates: t}, e, n) } function p(t, e, n) { return void 0 === n && (n = {}), f(t.map((function (t) { return h(t, e) })), n) } function f(t, e) { void 0 === e && (e = {}); var n = {type: "FeatureCollection"}; return e.id && (n.id = e.id), e.bbox && (n.bbox = e.bbox), n.features = t, n } function g(t, e, n) { return void 0 === n && (n = {}), o({type: "MultiLineString", coordinates: t}, e, n) } function d(t, e, n) { return void 0 === n && (n = {}), o({type: "MultiPoint", coordinates: t}, e, n) } function y(t, e, n) { return void 0 === n && (n = {}), o({type: "MultiPolygon", coordinates: t}, e, n) } function v(t, e, n) { return void 0 === n && (n = {}), o({type: "GeometryCollection", geometries: t}, e, n) } function _(t, e) { if (void 0 === e && (e = 0), e && !(e >= 0)) throw new Error("precision must be a positive number"); var n = Math.pow(10, e || 0); return Math.round(t * n) / n } function m(t, e) { void 0 === e && (e = "kilometers"); var r = n[e]; if (!r) throw new Error(e + " units is invalid"); return t * r } function x(t, e) { void 0 === e && (e = "kilometers"); var r = n[e]; if (!r) throw new Error(e + " units is invalid"); return t / r } function E(t, e) { return w(x(t, e)) } function b(t) { var e = t % 360; return e < 0 && (e += 360), e } function w(t) { return 180 * (t % (2 * Math.PI)) / Math.PI } function I(t) { return t % 360 * Math.PI / 180 } function N(t, e, n) { if (void 0 === e && (e = "kilometers"), void 0 === n && (n = "kilometers"), !(t >= 0)) throw new Error("length must be a positive number"); return m(x(t, e), n) } function S(t, e, n) { if (void 0 === e && (e = "meters"), void 0 === n && (n = "kilometers"), !(t >= 0)) throw new Error("area must be a positive number"); var r = i[e]; if (!r) throw new Error("invalid original units"); var o = i[n]; if (!o) throw new Error("invalid final units"); return t / r * o } function C(t) { return !isNaN(t) && null !== t && !Array.isArray(t) } function P(t) { return !!t && t.constructor === Object } function M(t) { if (!t) throw new Error("bbox is required"); if (!Array.isArray(t)) throw new Error("bbox must be an Array"); if (4 !== t.length && 6 !== t.length) throw new Error("bbox must be an Array of 4 or 6 numbers"); t.forEach((function (t) { if (!C(t)) throw new Error("bbox must only contain numbers") })) } function L(t) { if (!t) throw new Error("id is required"); if (-1 === ["string", "number"].indexOf(typeof t)) throw new Error("id must be a number or a string") } var O = Object.freeze({ __proto__: null, earthRadius: e, factors: n, unitsFactors: r, areaFactors: i, feature: o, geometry: s, point: a, points: u, polygon: l, polygons: c, lineString: h, lineStrings: p, featureCollection: f, multiLineString: g, multiPoint: d, multiPolygon: y, geometryCollection: v, round: _, radiansToLength: m, lengthToRadians: x, lengthToDegrees: E, bearingToAzimuth: b, radiansToDegrees: w, degreesToRadians: I, convertLength: N, convertArea: S, isNumber: C, isObject: P, validateBBox: M, validateId: L }); function R(t, e, n) { if (null !== t) for (var r, i, o, s, a, u, l, c, h = 0, p = 0, f = t.type, g = "FeatureCollection" === f, d = "Feature" === f, y = g ? t.features.length : 1, v = 0; v < y; v++) { a = (c = !!(l = g ? t.features[v].geometry : d ? t.geometry : t) && "GeometryCollection" === l.type) ? l.geometries.length : 1; for (var _ = 0; _ < a; _++) { var m = 0, x = 0; if (null !== (s = c ? l.geometries[_] : l)) { u = s.coordinates; var E = s.type; switch (h = !n || "Polygon" !== E && "MultiPolygon" !== E ? 0 : 1, E) { case null: break; case "Point": if (!1 === e(u, p, v, m, x)) return !1; p++, m++; break; case "LineString": case "MultiPoint": for (r = 0; r < u.length; r++) { if (!1 === e(u[r], p, v, m, x)) return !1; p++, "MultiPoint" === E && m++ } "LineString" === E && m++; break; case "Polygon": case "MultiLineString": for (r = 0; r < u.length; r++) { for (i = 0; i < u[r].length - h; i++) { if (!1 === e(u[r][i], p, v, m, x)) return !1; p++ } "MultiLineString" === E && m++, "Polygon" === E && x++ } "Polygon" === E && m++; break; case "MultiPolygon": for (r = 0; r < u.length; r++) { for (x = 0, i = 0; i < u[r].length; i++) { for (o = 0; o < u[r][i].length - h; o++) { if (!1 === e(u[r][i][o], p, v, m, x)) return !1; p++ } x++ } m++ } break; case "GeometryCollection": for (r = 0; r < s.geometries.length; r++) if (!1 === R(s.geometries[r], e, n)) return !1; break; default: throw new Error("Unknown Geometry Type") } } } } } function T(t, e, n, r) { var i = n; return R(t, (function (t, r, o, s, a) { i = 0 === r && void 0 === n ? t : e(i, t, r, o, s, a) }), r), i } function A(t, e) { var n; switch (t.type) { case "FeatureCollection": for (n = 0; n < t.features.length && !1 !== e(t.features[n].properties, n); n++) ; break; case "Feature": e(t.properties, 0) } } function D(t, e, n) { var r = n; return A(t, (function (t, i) { r = 0 === i && void 0 === n ? t : e(r, t, i) })), r } function F(t, e) { if ("Feature" === t.type) e(t, 0); else if ("FeatureCollection" === t.type) for (var n = 0; n < t.features.length && !1 !== e(t.features[n], n); n++) ; } function k(t, e, n) { var r = n; return F(t, (function (t, i) { r = 0 === i && void 0 === n ? t : e(r, t, i) })), r } function G(t) { var e = []; return R(t, (function (t) { e.push(t) })), e } function q(t, e) { var n, r, i, o, s, a, u, l, c, h, p = 0, f = "FeatureCollection" === t.type, g = "Feature" === t.type, d = f ? t.features.length : 1; for (n = 0; n < d; n++) { for (a = f ? t.features[n].geometry : g ? t.geometry : t, l = f ? t.features[n].properties : g ? t.properties : {}, c = f ? t.features[n].bbox : g ? t.bbox : void 0, h = f ? t.features[n].id : g ? t.id : void 0, s = (u = !!a && "GeometryCollection" === a.type) ? a.geometries.length : 1, i = 0; i < s; i++) if (null !== (o = u ? a.geometries[i] : a)) switch (o.type) { case "Point": case "LineString": case "MultiPoint": case "Polygon": case "MultiLineString": case "MultiPolygon": if (!1 === e(o, p, l, c, h)) return !1; break; case "GeometryCollection": for (r = 0; r < o.geometries.length; r++) if (!1 === e(o.geometries[r], p, l, c, h)) return !1; break; default: throw new Error("Unknown Geometry Type") } else if (!1 === e(null, p, l, c, h)) return !1; p++ } } function B(t, e, n) { var r = n; return q(t, (function (t, i, o, s, a) { r = 0 === i && void 0 === n ? t : e(r, t, i, o, s, a) })), r } function z(t, e) { q(t, (function (t, n, r, i, s) { var a, u = null === t ? null : t.type; switch (u) { case null: case "Point": case "LineString": case "Polygon": return !1 !== e(o(t, r, {bbox: i, id: s}), n, 0) && void 0 } switch (u) { case "MultiPoint": a = "Point"; break; case "MultiLineString": a = "LineString"; break; case "MultiPolygon": a = "Polygon" } for (var l = 0; l < t.coordinates.length; l++) { var c = t.coordinates[l]; if (!1 === e(o({type: a, coordinates: c}, r), n, l)) return !1 } })) } function j(t, e, n) { var r = n; return z(t, (function (t, i, o) { r = 0 === i && 0 === o && void 0 === n ? t : e(r, t, i, o) })), r } function U(t, e) { z(t, (function (t, n, r) { var i = 0; if (t.geometry) { var o = t.geometry.type; if ("Point" !== o && "MultiPoint" !== o) { var s, a = 0, u = 0, l = 0; return !1 !== R(t, (function (o, c, p, f, g) { if (void 0 === s || n > a || f > u || g > l) return s = o, a = n, u = f, l = g, void (i = 0); var d = h([s, o], t.properties); if (!1 === e(d, n, r, g, i)) return !1; i++, s = o })) && void 0 } } })) } function V(t, e, n) { var r = n, i = !1; return U(t, (function (t, o, s, a, u) { r = !1 === i && void 0 === n ? t : e(r, t, o, s, a, u), i = !0 })), r } function X(t, e) { if (!t) throw new Error("geojson is required"); z(t, (function (t, n, r) { if (null !== t.geometry) { var i = t.geometry.type, o = t.geometry.coordinates; switch (i) { case "LineString": if (!1 === e(t, n, r, 0, 0)) return !1; break; case "Polygon": for (var s = 0; s < o.length; s++) if (!1 === e(h(o[s], t.properties), n, r, s)) return !1 } } })) } function Y(t, e, n) { var r = n; return X(t, (function (t, i, o, s) { r = 0 === i && void 0 === n ? t : e(r, t, i, o, s) })), r } function H(t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n, r = e.featureIndex || 0, i = e.multiFeatureIndex || 0, o = e.geometryIndex || 0, s = e.segmentIndex || 0, a = e.properties; switch (t.type) { case "FeatureCollection": r < 0 && (r = t.features.length + r), a = a || t.features[r].properties, n = t.features[r].geometry; break; case "Feature": a = a || t.properties, n = t.geometry; break; case "Point": case "MultiPoint": return null; case "LineString": case "Polygon": case "MultiLineString": case "MultiPolygon": n = t; break; default: throw new Error("geojson is invalid") } if (null === n) return null; var u = n.coordinates; switch (n.type) { case "Point": case "MultiPoint": return null; case "LineString": return s < 0 && (s = u.length + s - 1), h([u[s], u[s + 1]], a, e); case "Polygon": return o < 0 && (o = u.length + o), s < 0 && (s = u[o].length + s - 1), h([u[o][s], u[o][s + 1]], a, e); case "MultiLineString": return i < 0 && (i = u.length + i), s < 0 && (s = u[i].length + s - 1), h([u[i][s], u[i][s + 1]], a, e); case "MultiPolygon": return i < 0 && (i = u.length + i), o < 0 && (o = u[i].length + o), s < 0 && (s = u[i][o].length - s - 1), h([u[i][o][s], u[i][o][s + 1]], a, e) } throw new Error("geojson is invalid") } function W(t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n, r = e.featureIndex || 0, i = e.multiFeatureIndex || 0, o = e.geometryIndex || 0, s = e.coordIndex || 0, u = e.properties; switch (t.type) { case "FeatureCollection": r < 0 && (r = t.features.length + r), u = u || t.features[r].properties, n = t.features[r].geometry; break; case "Feature": u = u || t.properties, n = t.geometry; break; case "Point": case "MultiPoint": return null; case "LineString": case "Polygon": case "MultiLineString": case "MultiPolygon": n = t; break; default: throw new Error("geojson is invalid") } if (null === n) return null; var l = n.coordinates; switch (n.type) { case "Point": return a(l, u, e); case "MultiPoint": return i < 0 && (i = l.length + i), a(l[i], u, e); case "LineString": return s < 0 && (s = l.length + s), a(l[s], u, e); case "Polygon": return o < 0 && (o = l.length + o), s < 0 && (s = l[o].length + s), a(l[o][s], u, e); case "MultiLineString": return i < 0 && (i = l.length + i), s < 0 && (s = l[i].length + s), a(l[i][s], u, e); case "MultiPolygon": return i < 0 && (i = l.length + i), o < 0 && (o = l[i].length + o), s < 0 && (s = l[i][o].length - s), a(l[i][o][s], u, e) } throw new Error("geojson is invalid") } var J = Object.freeze({ __proto__: null, coordAll: G, coordEach: R, coordReduce: T, featureEach: F, featureReduce: k, findPoint: W, findSegment: H, flattenEach: z, flattenReduce: j, geomEach: q, geomReduce: B, lineEach: X, lineReduce: Y, propEach: A, propReduce: D, segmentEach: U, segmentReduce: V }); function Z(t) { var e = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; return R(t, (function (t) { e[0] > t[0] && (e[0] = t[0]), e[1] > t[1] && (e[1] = t[1]), e[2] < t[0] && (e[2] = t[0]), e[3] < t[1] && (e[3] = t[1]) })), e } function K(t) { if (!t) throw new Error("coord is required"); if (!Array.isArray(t)) { if ("Feature" === t.type && null !== t.geometry && "Point" === t.geometry.type) return t.geometry.coordinates; if ("Point" === t.type) return t.coordinates } if (Array.isArray(t) && t.length >= 2 && !Array.isArray(t[0]) && !Array.isArray(t[1])) return t; throw new Error("coord must be GeoJSON Point or an Array of numbers") } function Q(t) { if (Array.isArray(t)) return t; if ("Feature" === t.type) { if (null !== t.geometry) return t.geometry.coordinates } else if (t.coordinates) return t.coordinates; throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array") } function $(t) { if (t.length > 1 && C(t[0]) && C(t[1])) return !0; if (Array.isArray(t[0]) && t[0].length) return $(t[0]); throw new Error("coordinates must only contain numbers") } function tt(t, e, n) { if (!e || !n) throw new Error("type and name required"); if (!t || t.type !== e) throw new Error("Invalid input to " + n + ": must be a " + e + ", given " + t.type) } function et(t, e, n) { if (!t) throw new Error("No feature passed"); if (!n) throw new Error(".featureOf() requires a name"); if (!t || "Feature" !== t.type || !t.geometry) throw new Error("Invalid input to " + n + ", Feature with geometry required"); if (!t.geometry || t.geometry.type !== e) throw new Error("Invalid input to " + n + ": must be a " + e + ", given " + t.geometry.type) } function nt(t, e, n) { if (!t) throw new Error("No featureCollection passed"); if (!n) throw new Error(".collectionOf() requires a name"); if (!t || "FeatureCollection" !== t.type) throw new Error("Invalid input to " + n + ", FeatureCollection required"); for (var r = 0, i = t.features; r < i.length; r++) { var o = i[r]; if (!o || "Feature" !== o.type || !o.geometry) throw new Error("Invalid input to " + n + ", Feature with geometry required"); if (!o.geometry || o.geometry.type !== e) throw new Error("Invalid input to " + n + ": must be a " + e + ", given " + o.geometry.type) } } function rt(t) { return "Feature" === t.type ? t.geometry : t } function it(t, e) { return "FeatureCollection" === t.type ? "FeatureCollection" : "GeometryCollection" === t.type ? "GeometryCollection" : "Feature" === t.type && null !== t.geometry ? t.geometry.type : t.type } Z.default = Z; var ot = Object.freeze({ __proto__: null, getCoord: K, getCoords: Q, containsNumber: $, geojsonType: tt, featureOf: et, collectionOf: nt, getGeom: rt, getType: it }), st = Object.getOwnPropertySymbols, at = Object.prototype.hasOwnProperty, ut = Object.prototype.propertyIsEnumerable; /* object-assign (c) Sindre Sorhus @license MIT */ function lt(t) { if (null == t) throw new TypeError("Object.assign cannot be called with null or undefined"); return Object(t) } var ct = function () { try { if (!Object.assign) return !1; var t = new String("abc"); if (t[5] = "de", "5" === Object.getOwnPropertyNames(t)[0]) return !1; for (var e = {}, n = 0; n < 10; n++) e["_" + String.fromCharCode(n)] = n; if ("0123456789" !== Object.getOwnPropertyNames(e).map((function (t) { return e[t] })).join("")) return !1; var r = {}; return "abcdefghijklmnopqrst".split("").forEach((function (t) { r[t] = t })), "abcdefghijklmnopqrst" === Object.keys(Object.assign({}, r)).join("") } catch (t) { return !1 } }() ? Object.assign : function (t, e) { for (var n, r, i = lt(t), o = 1; o < arguments.length; o++) { for (var s in n = Object(arguments[o])) at.call(n, s) && (i[s] = n[s]); if (st) { r = st(n); for (var a = 0; a < r.length; a++) ut.call(n, r[a]) && (i[r[a]] = n[r[a]]) } } return i }, ht = {successCallback: null, verbose: !1}, pt = {}; /** * @license GNU Affero General Public License. * Copyright (c) 2015, 2015 Ronny Lorenz * v. 1.2.0 * https://github.com/RaumZeit/MarchingSquares.js * * MarchingSquaresJS is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MarchingSquaresJS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * As additional permission under GNU Affero General Public License version 3 * section 7, third-party projects (personal or commercial) may distribute, * include, or link against UNMODIFIED VERSIONS of MarchingSquaresJS without the * requirement that said third-party project for that reason alone becomes * subject to any requirement of the GNU Affero General Public License version 3. * Any modifications to MarchingSquaresJS, however, must be shared with the public * and made available. * * In summary this: * - allows you to use MarchingSquaresJS at no cost * - allows you to use MarchingSquaresJS for both personal and commercial purposes * - allows you to distribute UNMODIFIED VERSIONS of MarchingSquaresJS under any * license as long as this license notice is included * - enables you to keep the source code of your program that uses MarchingSquaresJS * undisclosed * - forces you to share any modifications you have made to MarchingSquaresJS, * e.g. bug-fixes * * You should have received a copy of the GNU Affero General Public License * along with MarchingSquaresJS. If not, see . */ function ft(t, e, n) { n = n || {}; for (var r = Object.keys(ht), i = 0; i < r.length; i++) { var o = r[i], s = n[o]; s = null != s ? s : ht[o], pt[o] = s } pt.verbose && console.log("MarchingSquaresJS-isoContours: computing isocontour for " + e); var a = function (t) { var e = [], n = 0, r = 1e-7; return t.cells.forEach((function (i, o) { i.forEach((function (i, s) { if (void 0 !== i && (5 !== (f = i).cval && 10 !== f.cval) && !dt(i)) { var a = function (t, e, n) { var r, i, o = t.length, s = [], a = [0, 0, 1, 1, 0, 0, 0, 0, -1, 0, 1, 1, -1, 0, -1, 0], u = [0, -1, 0, 0, 1, 1, 1, 1, 0, -1, 0, 0, 0, -1, 0, 0], l = ["none", "left", "bottom", "left", "right", "none", "bottom", "left", "top", "top", "none", "top", "right", "right", "bottom", "none"], c = ["none", "bottom", "right", "right", "top", "top", "top", "top", "left", "bottom", "right", "right", "left", "bottom", "left", "none"], h = t[e][n], p = h.cval, f = l[p], g = vt(h, f); s.push([n + g[0], e + g[1]]), f = c[p], g = vt(h, f), s.push([n + g[0], e + g[1]]), yt(h); var d = n + a[p], y = e + u[p], v = p; for (; d >= 0 && y >= 0 && y < o && (d != n || y != e) && void 0 !== (h = t[y][d]);) { if (0 === (p = h.cval) || 15 === p) return {path: s, info: "mergeable"}; f = c[p], r = a[p], i = u[p], 5 !== p && 10 !== p || (5 === p ? h.flipped ? -1 === u[v] ? (f = "left", r = -1, i = 0) : (f = "right", r = 1, i = 0) : -1 === a[v] && (f = "bottom", r = 0, i = -1) : 10 === p && (h.flipped ? -1 === a[v] ? (f = "top", r = 0, i = 1) : (f = "bottom", r = 0, i = -1) : 1 === u[v] && (f = "left", r = -1, i = 0))), g = vt(h, f), s.push([d + g[0], y + g[1]]), yt(h), d += r, y += i, v = p } return {path: s, info: "closed"} }(t.cells, o, s), u = !1; if ("mergeable" === a.info) for (var l = a.path[a.path.length - 1][0], c = a.path[a.path.length - 1][1], h = n - 1; h >= 0; h--) if (Math.abs(e[h][0][0] - l) <= r && Math.abs(e[h][0][1] - c) <= r) { for (var p = a.path.length - 2; p >= 0; --p) e[h].unshift(a.path[p]); u = !0; break } u || (e[n++] = a.path) } var f })) })), e }(function (t, e) { for (var n = t.length - 1, r = t[0].length - 1, i = {rows: n, cols: r, cells: []}, o = 0; o < n; ++o) { i.cells[o] = []; for (var s = 0; s < r; ++s) { var a = 0, u = t[o + 1][s], l = t[o + 1][s + 1], c = t[o][s + 1], h = t[o][s]; if (!(isNaN(u) || isNaN(l) || isNaN(c) || isNaN(h))) { a |= u >= e ? 8 : 0, a |= l >= e ? 4 : 0, a |= c >= e ? 2 : 0; var p, f, g, d, y = !1; if (5 === (a |= h >= e ? 1 : 0) || 10 === a) { var v = (u + l + c + h) / 4; 5 === a && v < e ? (a = 10, y = !0) : 10 === a && v < e && (a = 5, y = !0) } if (0 !== a && 15 !== a) p = f = g = d = .5, 1 === a ? (g = 1 - gt(e, u, h), f = 1 - gt(e, c, h)) : 2 === a ? (f = gt(e, h, c), d = 1 - gt(e, l, c)) : 3 === a ? (g = 1 - gt(e, u, h), d = 1 - gt(e, l, c)) : 4 === a ? (p = gt(e, u, l), d = gt(e, c, l)) : 5 === a ? (p = gt(e, u, l), d = gt(e, c, l), f = 1 - gt(e, c, h), g = 1 - gt(e, u, h)) : 6 === a ? (f = gt(e, h, c), p = gt(e, u, l)) : 7 === a ? (g = 1 - gt(e, u, h), p = gt(e, u, l)) : 8 === a ? (g = gt(e, h, u), p = 1 - gt(e, l, u)) : 9 === a ? (f = 1 - gt(e, c, h), p = 1 - gt(e, l, u)) : 10 === a ? (p = 1 - gt(e, l, u), d = 1 - gt(e, l, c), f = gt(e, h, c), g = gt(e, h, u)) : 11 === a ? (p = 1 - gt(e, l, u), d = 1 - gt(e, l, c)) : 12 === a ? (g = gt(e, h, u), d = gt(e, c, l)) : 13 === a ? (f = 1 - gt(e, c, h), d = gt(e, c, l)) : 14 === a ? (g = gt(e, h, u), f = gt(e, h, c)) : console.log("MarchingSquaresJS-isoContours: Illegal cval detected: " + a), i.cells[o][s] = { cval: a, flipped: y, top: p, right: d, bottom: f, left: g } } } } return i }(t, e)); return "function" == typeof pt.successCallback && pt.successCallback(a), a } function gt(t, e, n) { return (t - e) / (n - e) } function dt(t) { return 0 === t.cval || 15 === t.cval } function yt(t) { dt(t) || 5 === t.cval || 10 === t.cval || (t.cval = 15) } function vt(t, e) { return "top" === e ? [t.top, 1] : "bottom" === e ? [t.bottom, 0] : "right" === e ? [1, t.right] : "left" === e ? [0, t.left] : void 0 } function _t(t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = e.zProperty || "elevation", r = e.flip, i = e.flags; nt(t, "Point", "input must contain Points"); for (var o = function (t, e) { var n = {}; return F(t, (function (t) { var e = Q(t)[1]; n[e] || (n[e] = []), n[e].push(t) })), Object.keys(n).map((function (t) { return n[t].sort((function (t, e) { return Q(t)[0] - Q(e)[0] })) })).sort((function (t, n) { return e ? Q(t[0])[1] - Q(n[0])[1] : Q(n[0])[1] - Q(t[0])[1] })) }(t, r), s = [], a = 0; a < o.length; a++) { for (var u = o[a], l = [], c = 0; c < u.length; c++) { var h = u[c]; h.properties[n] ? l.push(h.properties[n]) : l.push(0), !0 === i && (h.properties.matrixPosition = [a, c]) } s.push(l) } return s } var mt = Et, xt = Et; function Et(t, e, n, r, i) { bt(t, e, n || 0, r || t.length - 1, i || It) } function bt(t, e, n, r, i) { for (; r > n;) { if (r - n > 600) { var o = r - n + 1, s = e - n + 1, a = Math.log(o), u = .5 * Math.exp(2 * a / 3), l = .5 * Math.sqrt(a * u * (o - u) / o) * (s - o / 2 < 0 ? -1 : 1); bt(t, e, Math.max(n, Math.floor(e - s * u / o + l)), Math.min(r, Math.floor(e + (o - s) * u / o + l)), i) } var c = t[e], h = n, p = r; for (wt(t, n, e), i(t[r], c) > 0 && wt(t, n, r); h < p;) { for (wt(t, h, p), h++, p--; i(t[h], c) < 0;) h++; for (; i(t[p], c) > 0;) p-- } 0 === i(t[n], c) ? wt(t, n, p) : wt(t, ++p, r), p <= e && (n = p + 1), e <= p && (r = p - 1) } } function wt(t, e, n) { var r = t[e]; t[e] = t[n], t[n] = r } function It(t, e) { return t < e ? -1 : t > e ? 1 : 0 } mt.default = xt; var Nt = Ct, St = Ct; function Ct(t, e) { if (!(this instanceof Ct)) return new Ct(t, e); this._maxEntries = Math.max(4, t || 9), this._minEntries = Math.max(2, Math.ceil(.4 * this._maxEntries)), e && this._initFormat(e), this.clear() } function Pt(t, e, n) { if (!n) return e.indexOf(t); for (var r = 0; r < e.length; r++) if (n(t, e[r])) return r; return -1 } function Mt(t, e) { Lt(t, 0, t.children.length, e, t) } function Lt(t, e, n, r, i) { i || (i = Gt(null)), i.minX = 1 / 0, i.minY = 1 / 0, i.maxX = -1 / 0, i.maxY = -1 / 0; for (var o, s = e; s < n; s++) o = t.children[s], Ot(i, t.leaf ? r(o) : o); return i } function Ot(t, e) { return t.minX = Math.min(t.minX, e.minX), t.minY = Math.min(t.minY, e.minY), t.maxX = Math.max(t.maxX, e.maxX), t.maxY = Math.max(t.maxY, e.maxY), t } function Rt(t, e) { return t.minX - e.minX } function Tt(t, e) { return t.minY - e.minY } function At(t) { return (t.maxX - t.minX) * (t.maxY - t.minY) } function Dt(t) { return t.maxX - t.minX + (t.maxY - t.minY) } function Ft(t, e) { return t.minX <= e.minX && t.minY <= e.minY && e.maxX <= t.maxX && e.maxY <= t.maxY } function kt(t, e) { return e.minX <= t.maxX && e.minY <= t.maxY && e.maxX >= t.minX && e.maxY >= t.minY } function Gt(t) { return {children: t, height: 1, leaf: !0, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0} } function qt(t, e, n, r, i) { for (var o, s = [e, n]; s.length;) (n = s.pop()) - (e = s.pop()) <= r || (o = e + Math.ceil((n - e) / r / 2) * r, mt(t, o, e, n, i), s.push(e, o, o, n)) } function Bt(t) { var e = {exports: {}}; return t(e, e.exports), e.exports } Ct.prototype = { all: function () { return this._all(this.data, []) }, search: function (t) { var e = this.data, n = [], r = this.toBBox; if (!kt(t, e)) return n; for (var i, o, s, a, u = []; e;) { for (i = 0, o = e.children.length; i < o; i++) s = e.children[i], kt(t, a = e.leaf ? r(s) : s) && (e.leaf ? n.push(s) : Ft(t, a) ? this._all(s, n) : u.push(s)); e = u.pop() } return n }, collides: function (t) { var e = this.data, n = this.toBBox; if (!kt(t, e)) return !1; for (var r, i, o, s, a = []; e;) { for (r = 0, i = e.children.length; r < i; r++) if (o = e.children[r], kt(t, s = e.leaf ? n(o) : o)) { if (e.leaf || Ft(t, s)) return !0; a.push(o) } e = a.pop() } return !1 }, load: function (t) { if (!t || !t.length) return this; if (t.length < this._minEntries) { for (var e = 0, n = t.length; e < n; e++) this.insert(t[e]); return this } var r = this._build(t.slice(), 0, t.length - 1, 0); if (this.data.children.length) if (this.data.height === r.height) this._splitRoot(this.data, r); else { if (this.data.height < r.height) { var i = this.data; this.data = r, r = i } this._insert(r, this.data.height - r.height - 1, !0) } else this.data = r; return this }, insert: function (t) { return t && this._insert(t, this.data.height - 1), this }, clear: function () { return this.data = Gt([]), this }, remove: function (t, e) { if (!t) return this; for (var n, r, i, o, s = this.data, a = this.toBBox(t), u = [], l = []; s || u.length;) { if (s || (s = u.pop(), r = u[u.length - 1], n = l.pop(), o = !0), s.leaf && -1 !== (i = Pt(t, s.children, e))) return s.children.splice(i, 1), u.push(s), this._condense(u), this; o || s.leaf || !Ft(s, a) ? r ? (n++, s = r.children[n], o = !1) : s = null : (u.push(s), l.push(n), n = 0, r = s, s = s.children[0]) } return this }, toBBox: function (t) { return t }, compareMinX: Rt, compareMinY: Tt, toJSON: function () { return this.data }, fromJSON: function (t) { return this.data = t, this }, _all: function (t, e) { for (var n = []; t;) t.leaf ? e.push.apply(e, t.children) : n.push.apply(n, t.children), t = n.pop(); return e }, _build: function (t, e, n, r) { var i, o = n - e + 1, s = this._maxEntries; if (o <= s) return Mt(i = Gt(t.slice(e, n + 1)), this.toBBox), i; r || (r = Math.ceil(Math.log(o) / Math.log(s)), s = Math.ceil(o / Math.pow(s, r - 1))), (i = Gt([])).leaf = !1, i.height = r; var a, u, l, c, h = Math.ceil(o / s), p = h * Math.ceil(Math.sqrt(s)); for (qt(t, e, n, p, this.compareMinX), a = e; a <= n; a += p) for (qt(t, a, l = Math.min(a + p - 1, n), h, this.compareMinY), u = a; u <= l; u += h) c = Math.min(u + h - 1, l), i.children.push(this._build(t, u, c, r - 1)); return Mt(i, this.toBBox), i }, _chooseSubtree: function (t, e, n, r) { for (var i, o, s, a, u, l, c, h, p, f; r.push(e), !e.leaf && r.length - 1 !== n;) { for (c = h = 1 / 0, i = 0, o = e.children.length; i < o; i++) u = At(s = e.children[i]), p = t, f = s, (l = (Math.max(f.maxX, p.maxX) - Math.min(f.minX, p.minX)) * (Math.max(f.maxY, p.maxY) - Math.min(f.minY, p.minY)) - u) < h ? (h = l, c = u < c ? u : c, a = s) : l === h && u < c && (c = u, a = s); e = a || e.children[0] } return e }, _insert: function (t, e, n) { var r = this.toBBox, i = n ? t : r(t), o = [], s = this._chooseSubtree(i, this.data, e, o); for (s.children.push(t), Ot(s, i); e >= 0 && o[e].children.length > this._maxEntries;) this._split(o, e), e--; this._adjustParentBBoxes(i, o, e) }, _split: function (t, e) { var n = t[e], r = n.children.length, i = this._minEntries; this._chooseSplitAxis(n, i, r); var o = this._chooseSplitIndex(n, i, r), s = Gt(n.children.splice(o, n.children.length - o)); s.height = n.height, s.leaf = n.leaf, Mt(n, this.toBBox), Mt(s, this.toBBox), e ? t[e - 1].children.push(s) : this._splitRoot(n, s) }, _splitRoot: function (t, e) { this.data = Gt([t, e]), this.data.height = t.height + 1, this.data.leaf = !1, Mt(this.data, this.toBBox) }, _chooseSplitIndex: function (t, e, n) { var r, i, o, s, a, u, l, c, h, p, f, g, d, y; for (u = l = 1 / 0, r = e; r <= n - e; r++) i = Lt(t, 0, r, this.toBBox), o = Lt(t, r, n, this.toBBox), h = i, p = o, f = void 0, g = void 0, d = void 0, y = void 0, f = Math.max(h.minX, p.minX), g = Math.max(h.minY, p.minY), d = Math.min(h.maxX, p.maxX), y = Math.min(h.maxY, p.maxY), s = Math.max(0, d - f) * Math.max(0, y - g), a = At(i) + At(o), s < u ? (u = s, c = r, l = a < l ? a : l) : s === u && a < l && (l = a, c = r); return c }, _chooseSplitAxis: function (t, e, n) { var r = t.leaf ? this.compareMinX : Rt, i = t.leaf ? this.compareMinY : Tt; this._allDistMargin(t, e, n, r) < this._allDistMargin(t, e, n, i) && t.children.sort(r) }, _allDistMargin: function (t, e, n, r) { t.children.sort(r); var i, o, s = this.toBBox, a = Lt(t, 0, e, s), u = Lt(t, n - e, n, s), l = Dt(a) + Dt(u); for (i = e; i < n - e; i++) o = t.children[i], Ot(a, t.leaf ? s(o) : o), l += Dt(a); for (i = n - e - 1; i >= e; i--) o = t.children[i], Ot(u, t.leaf ? s(o) : o), l += Dt(u); return l }, _adjustParentBBoxes: function (t, e, n) { for (var r = n; r >= 0; r--) Ot(e[r], t) }, _condense: function (t) { for (var e, n = t.length - 1; n >= 0; n--) 0 === t[n].children.length ? n > 0 ? (e = t[n - 1].children).splice(e.indexOf(t[n]), 1) : this.clear() : Mt(t[n], this.toBBox) }, _initFormat: function (t) { var e = ["return a", " - b", ";"]; this.compareMinX = new Function("a", "b", e.join(t[0])), this.compareMinY = new Function("a", "b", e.join(t[1])), this.toBBox = new Function("a", "return {minX: a" + t[0] + ", minY: a" + t[1] + ", maxX: a" + t[2] + ", maxY: a" + t[3] + "};") } }, Nt.default = St; var zt = function (t, e, n) { var r = t * e, i = jt * t, o = i - (i - t), s = t - o, a = jt * e, u = a - (a - e), l = e - u, c = s * l - (r - o * u - s * u - o * l); if (n) return n[0] = c, n[1] = r, n; return [c, r] }, jt = +(Math.pow(2, 27) + 1); var Ut = function (t, e) { var n = 0 | t.length, r = 0 | e.length; if (1 === n && 1 === r) return function (t, e) { var n = t + e, r = n - t, i = t - (n - r) + (e - r); if (i) return [i, n]; return [n] }(t[0], e[0]); var i, o, s = new Array(n + r), a = 0, u = 0, l = 0, c = Math.abs, h = t[u], p = c(h), f = e[l], g = c(f); p < g ? (o = h, (u += 1) < n && (h = t[u], p = c(h))) : (o = f, (l += 1) < r && (f = e[l], g = c(f))); u < n && p < g || l >= r ? (i = h, (u += 1) < n && (h = t[u], p = c(h))) : (i = f, (l += 1) < r && (f = e[l], g = c(f))); var d, y, v = i + o, _ = v - i, m = o - _, x = m, E = v; for (; u < n && l < r;) p < g ? (i = h, (u += 1) < n && (h = t[u], p = c(h))) : (i = f, (l += 1) < r && (f = e[l], g = c(f))), (m = (o = x) - (_ = (v = i + o) - i)) && (s[a++] = m), x = E - ((d = E + v) - (y = d - E)) + (v - y), E = d; for (; u < n;) (m = (o = x) - (_ = (v = (i = h) + o) - i)) && (s[a++] = m), x = E - ((d = E + v) - (y = d - E)) + (v - y), E = d, (u += 1) < n && (h = t[u]); for (; l < r;) (m = (o = x) - (_ = (v = (i = f) + o) - i)) && (s[a++] = m), x = E - ((d = E + v) - (y = d - E)) + (v - y), E = d, (l += 1) < r && (f = e[l]); x && (s[a++] = x); E && (s[a++] = E); a || (s[a++] = 0); return s.length = a, s }; var Vt = function (t, e, n) { var r = t + e, i = r - t, o = e - i, s = t - (r - i); if (n) return n[0] = s + o, n[1] = r, n; return [s + o, r] }; var Xt = function (t, e) { var n = t.length; if (1 === n) { var r = zt(t[0], e); return r[0] ? r : [r[1]] } var i = new Array(2 * n), o = [.1, .1], s = [.1, .1], a = 0; zt(t[0], e, o), o[0] && (i[a++] = o[0]); for (var u = 1; u < n; ++u) { zt(t[u], e, s); var l = o[1]; Vt(l, s[0], o), o[0] && (i[a++] = o[0]); var c = s[1], h = o[1], p = c + h, f = h - (p - c); o[1] = p, f && (i[a++] = f) } o[1] && (i[a++] = o[1]); 0 === a && (i[a++] = 0); return i.length = a, i }; var Yt = function (t, e) { var n = 0 | t.length, r = 0 | e.length; if (1 === n && 1 === r) return function (t, e) { var n = t + e, r = n - t, i = t - (n - r) + (e - r); if (i) return [i, n]; return [n] }(t[0], -e[0]); var i, o, s = new Array(n + r), a = 0, u = 0, l = 0, c = Math.abs, h = t[u], p = c(h), f = -e[l], g = c(f); p < g ? (o = h, (u += 1) < n && (h = t[u], p = c(h))) : (o = f, (l += 1) < r && (f = -e[l], g = c(f))); u < n && p < g || l >= r ? (i = h, (u += 1) < n && (h = t[u], p = c(h))) : (i = f, (l += 1) < r && (f = -e[l], g = c(f))); var d, y, v = i + o, _ = v - i, m = o - _, x = m, E = v; for (; u < n && l < r;) p < g ? (i = h, (u += 1) < n && (h = t[u], p = c(h))) : (i = f, (l += 1) < r && (f = -e[l], g = c(f))), (m = (o = x) - (_ = (v = i + o) - i)) && (s[a++] = m), x = E - ((d = E + v) - (y = d - E)) + (v - y), E = d; for (; u < n;) (m = (o = x) - (_ = (v = (i = h) + o) - i)) && (s[a++] = m), x = E - ((d = E + v) - (y = d - E)) + (v - y), E = d, (u += 1) < n && (h = t[u]); for (; l < r;) (m = (o = x) - (_ = (v = (i = f) + o) - i)) && (s[a++] = m), x = E - ((d = E + v) - (y = d - E)) + (v - y), E = d, (l += 1) < r && (f = -e[l]); x && (s[a++] = x); E && (s[a++] = E); a || (s[a++] = 0); return s.length = a, s }; var Ht = Bt((function (t) { function e(t, e) { for (var n = new Array(t.length - 1), r = 1; r < t.length; ++r) for (var i = n[r - 1] = new Array(t.length - 1), o = 0, s = 0; o < t.length; ++o) o !== e && (i[s++] = t[r][o]); return n } function n(t) { if (1 === t.length) return t[0]; if (2 === t.length) return ["sum(", t[0], ",", t[1], ")"].join(""); var e = t.length >> 1; return ["sum(", n(t.slice(0, e)), ",", n(t.slice(e)), ")"].join("") } function r(t) { if (2 === t.length) return [ ["sum(prod(", t[0][0], ",", t[1][1], "),prod(-", t[0][1], ",", t[1][0], "))"].join("") ]; for (var i = [], o = 0; o < t.length; ++o) i.push(["scale(", n(r(e(t, o))), ",", (s = o, 1 & s ? "-" : ""), t[0][o], ")"].join("")); return i; var s } function i(t) { for (var i = [], o = [], s = function (t) { for (var e = new Array(t), n = 0; n < t; ++n) { e[n] = new Array(t); for (var r = 0; r < t; ++r) e[n][r] = ["m", r, "[", t - n - 1, "]"].join("") } return e }(t), a = [], u = 0; u < t; ++u) 0 == (1 & u) ? i.push.apply(i, r(e(s, u))) : o.push.apply(o, r(e(s, u))), a.push("m" + u); var l = n(i), c = n(o), h = "orientation" + t + "Exact", p = ["function ", h, "(", a.join(), "){var p=", l, ",n=", c, ",d=sub(p,n);return d[d.length-1];};return ", h].join(""); return new Function("sum", "prod", "scale", "sub", p)(Ut, zt, Xt, Yt) } var o = i(3), s = i(4), a = [function () { return 0 }, function () { return 0 }, function (t, e) { return e[0] - t[0] }, function (t, e, n) { var r, i = (t[1] - n[1]) * (e[0] - n[0]), s = (t[0] - n[0]) * (e[1] - n[1]), a = i - s; if (i > 0) { if (s <= 0) return a; r = i + s } else { if (!(i < 0)) return a; if (s >= 0) return a; r = -(i + s) } var u = 33306690738754716e-32 * r; return a >= u || a <= -u ? a : o(t, e, n) }, function (t, e, n, r) { var i = t[0] - r[0], o = e[0] - r[0], a = n[0] - r[0], u = t[1] - r[1], l = e[1] - r[1], c = n[1] - r[1], h = t[2] - r[2], p = e[2] - r[2], f = n[2] - r[2], g = o * c, d = a * l, y = a * u, v = i * c, _ = i * l, m = o * u, x = h * (g - d) + p * (y - v) + f * (_ - m), E = 7771561172376103e-31 * ((Math.abs(g) + Math.abs(d)) * Math.abs(h) + (Math.abs(y) + Math.abs(v)) * Math.abs(p) + (Math.abs(_) + Math.abs(m)) * Math.abs(f)); return x > E || -x > E ? x : s(t, e, n, r) }]; function u(t) { var e = a[t.length]; return e || (e = a[t.length] = i(t.length)), e.apply(void 0, t) } !function () { for (; a.length <= 5;) a.push(i(a.length)); for (var e = [], n = ["slow"], r = 0; r <= 5; ++r) e.push("a" + r), n.push("o" + r); var o = ["function getOrientation(", e.join(), "){switch(arguments.length){case 0:case 1:return 0;"]; for (r = 2; r <= 5; ++r) o.push("case ", r, ":return o", r, "(", e.slice(0, r).join(), ");"); o.push("}var s=new Array(arguments.length);for(var i=0;i 1 && Jt(t[o[l - 2]], t[o[l - 1]], u) <= 0;) l -= 1, o.pop(); for (o.push(a), l = s.length; l > 1 && Jt(t[s[l - 2]], t[s[l - 1]], u) >= 0;) l -= 1, s.pop(); s.push(a) } n = new Array(s.length + o.length - 2); for (var c = 0, h = (r = 0, o.length); r < h; ++r) n[c++] = o[r]; for (var p = s.length - 2; p > 0; --p) n[c++] = s[p]; return n }, Jt = Ht[3]; var Zt = Qt, Kt = Qt; function Qt(t, e) { if (!(this instanceof Qt)) return new Qt(t, e); if (this.data = t || [], this.length = this.data.length, this.compare = e || $t, this.length > 0) for (var n = (this.length >> 1) - 1; n >= 0; n--) this._down(n) } function $t(t, e) { return t < e ? -1 : t > e ? 1 : 0 } Qt.prototype = { push: function (t) { this.data.push(t), this.length++, this._up(this.length - 1) }, pop: function () { if (0 !== this.length) { var t = this.data[0]; return this.length--, this.length > 0 && (this.data[0] = this.data[this.length], this._down(0)), this.data.pop(), t } }, peek: function () { return this.data[0] }, _up: function (t) { for (var e = this.data, n = this.compare, r = e[t]; t > 0;) { var i = t - 1 >> 1, o = e[i]; if (n(r, o) >= 0) break; e[t] = o, t = i } e[t] = r }, _down: function (t) { for (var e = this.data, n = this.compare, r = this.length >> 1, i = e[t]; t < r;) { var o = 1 + (t << 1), s = o + 1, a = e[o]; if (s < this.length && n(e[s], a) < 0 && (o = s, a = e[s]), n(a, i) >= 0) break; e[t] = a, t = o } e[t] = i } }, Zt.default = Kt; var te = function (t, e) { for (var n = t[0], r = t[1], i = !1, o = 0, s = e.length - 1; o < e.length; s = o++) { var a = e[o][0], u = e[o][1], l = e[s][0], c = e[s][1]; u > r != c > r && n < (l - a) * (r - u) / (c - u) + a && (i = !i) } return i }, ee = Ht[3], ne = ie, re = ie; function ie(t, e, n) { e = Math.max(0, void 0 === e ? 2 : e), n = n || 0; for (var r, i = function (t) { for (var e = t[0], n = t[0], r = t[0], i = t[0], o = 0; o < t.length; o++) { var s = t[o]; s[0] < e[0] && (e = s), s[0] > r[0] && (r = s), s[1] < n[1] && (n = s), s[1] > i[1] && (i = s) } var a = [e, n, r, i], u = a.slice(); for (o = 0; o < t.length; o++) te(t[o], a) || u.push(t[o]); var l = Wt(u), c = []; for (o = 0; o < l.length; o++) c.push(u[l[o]]); return c }(t), o = Nt(16, ["[0]", "[1]", "[0]", "[1]"]).load(t), s = [], a = 0; a < i.length; a++) { var u = i[a]; o.remove(u), r = he(u, r), s.push(r) } var l = Nt(16); for (a = 0; a < s.length; a++) l.insert(ce(s[a])); for (var c = e * e, h = n * n; s.length;) { var p = s.shift(), f = p.p, g = p.next.p, d = pe(f, g); if (!(d < h)) { var y = d / c; (u = oe(o, p.prev.p, f, g, p.next.next.p, y, l)) && Math.min(pe(u, f), pe(u, g)) <= y && (s.push(p), s.push(he(u, p)), o.remove(u), l.remove(p), l.insert(ce(p)), l.insert(ce(p.next))) } } p = r; var v = []; do { v.push(p.p), p = p.next } while (p !== r); return v.push(p.p), v } function oe(t, e, n, r, i, o, s) { for (var a = new Zt(null, se), u = t.data; u;) { for (var l = 0; l < u.children.length; l++) { var c = u.children[l], h = u.leaf ? fe(c, n, r) : ae(n, r, c); h > o || a.push({node: c, dist: h}) } for (; a.length && !a.peek().node.children;) { var p = a.pop(), f = p.node, g = fe(f, e, n), d = fe(f, r, i); if (p.dist < g && p.dist < d && le(n, f, s) && le(r, f, s)) return f } (u = a.pop()) && (u = u.node) } return null } function se(t, e) { return t.dist - e.dist } function ae(t, e, n) { if (ue(t, n) || ue(e, n)) return 0; var r = ge(t[0], t[1], e[0], e[1], n.minX, n.minY, n.maxX, n.minY); if (0 === r) return 0; var i = ge(t[0], t[1], e[0], e[1], n.minX, n.minY, n.minX, n.maxY); if (0 === i) return 0; var o = ge(t[0], t[1], e[0], e[1], n.maxX, n.minY, n.maxX, n.maxY); if (0 === o) return 0; var s = ge(t[0], t[1], e[0], e[1], n.minX, n.maxY, n.maxX, n.maxY); return 0 === s ? 0 : Math.min(r, i, o, s) } function ue(t, e) { return t[0] >= e.minX && t[0] <= e.maxX && t[1] >= e.minY && t[1] <= e.maxY } function le(t, e, n) { for (var r, i, o, s, a = Math.min(t[0], e[0]), u = Math.min(t[1], e[1]), l = Math.max(t[0], e[0]), c = Math.max(t[1], e[1]), h = n.search({ minX: a, minY: u, maxX: l, maxY: c }), p = 0; p < h.length; p++) if (r = h[p].p, i = h[p].next.p, o = t, r !== (s = e) && i !== o && ee(r, i, o) > 0 != ee(r, i, s) > 0 && ee(o, s, r) > 0 != ee(o, s, i) > 0) return !1; return !0 } function ce(t) { var e = t.p, n = t.next.p; return t.minX = Math.min(e[0], n[0]), t.minY = Math.min(e[1], n[1]), t.maxX = Math.max(e[0], n[0]), t.maxY = Math.max(e[1], n[1]), t } function he(t, e) { var n = {p: t, prev: null, next: null, minX: 0, minY: 0, maxX: 0, maxY: 0}; return e ? (n.next = e.next, n.prev = e, e.next.prev = n, e.next = n) : (n.prev = n, n.next = n), n } function pe(t, e) { var n = t[0] - e[0], r = t[1] - e[1]; return n * n + r * r } function fe(t, e, n) { var r = e[0], i = e[1], o = n[0] - r, s = n[1] - i; if (0 !== o || 0 !== s) { var a = ((t[0] - r) * o + (t[1] - i) * s) / (o * o + s * s); a > 1 ? (r = n[0], i = n[1]) : a > 0 && (r += o * a, i += s * a) } return (o = t[0] - r) * o + (s = t[1] - i) * s } function ge(t, e, n, r, i, o, s, a) { var u, l, c, h, p = n - t, f = r - e, g = s - i, d = a - o, y = t - i, v = e - o, _ = p * p + f * f, m = p * g + f * d, x = g * g + d * d, E = p * y + f * v, b = g * y + d * v, w = _ * x - m * m, I = w, N = w; 0 === w ? (l = 0, I = 1, h = b, N = x) : (h = _ * b - m * E, (l = m * b - x * E) < 0 ? (l = 0, h = b, N = x) : l > I && (l = I, h = b + m, N = x)), h < 0 ? (h = 0, -E < 0 ? l = 0 : -E > _ ? l = I : (l = -E, I = _)) : h > N && (h = N, -E + m < 0 ? l = 0 : -E + m > _ ? l = I : (l = -E + m, I = _)); var S = (1 - (c = 0 === h ? 0 : h / N)) * i + c * s - ((1 - (u = 0 === l ? 0 : l / I)) * t + u * n), C = (1 - c) * o + c * a - ((1 - u) * e + u * r); return S * S + C * C } function de(t, e) { void 0 === e && (e = {}), e.concavity = e.concavity || 1 / 0; var n = []; if (R(t, (function (t) { n.push([t[0], t[1]]) })), !n.length) return null; var r = ne(n, e.concavity); return r.length > 3 ? l([r]) : null } function ye(t, e, n) { if (void 0 === n && (n = {}), !t) throw new Error("point is required"); if (!e) throw new Error("polygon is required"); var r = K(t), i = rt(e), o = i.type, s = e.bbox, a = i.coordinates; if (s && !1 === function (t, e) { return e[0] <= t[0] && e[1] <= t[1] && e[2] >= t[0] && e[3] >= t[1] }(r, s)) return !1; "Polygon" === o && (a = [a]); for (var u = !1, l = 0; l < a.length && !u; l++) if (ve(r, a[l][0], n.ignoreBoundary)) { for (var c = !1, h = 1; h < a[l].length && !c;) ve(r, a[l][h], !n.ignoreBoundary) && (c = !0), h++; c || (u = !0) } return u } function ve(t, e, n) { var r = !1; e[0][0] === e[e.length - 1][0] && e[0][1] === e[e.length - 1][1] && (e = e.slice(0, e.length - 1)); for (var i = 0, o = e.length - 1; i < e.length; o = i++) { var s = e[i][0], a = e[i][1], u = e[o][0], l = e[o][1]; if (t[1] * (s - u) + a * (u - t[0]) + l * (t[0] - s) == 0 && (s - t[0]) * (u - t[0]) <= 0 && (a - t[1]) * (l - t[1]) <= 0) return !n; a > t[1] != l > t[1] && t[0] < (u - s) * (t[1] - a) / (l - a) + s && (r = !r) } return r } function _e(t, e) { var n = []; return F(t, (function (t) { var r = !1; if ("Point" === t.geometry.type) q(e, (function (e) { ye(t, e) && (r = !0) })), r && n.push(t); else { if ("MultiPoint" !== t.geometry.type) throw new Error("Input geometry must be a Point or MultiPoint"); var i = []; q(e, (function (e) { R(t, (function (t) { ye(t, e) && (r = !0, i.push(t)) })) })), r && n.push(d(i)) } })), f(n) } function me(t, e, n) { void 0 === n && (n = {}); var r = K(t), i = K(e), o = I(i[1] - r[1]), s = I(i[0] - r[0]), a = I(r[1]), u = I(i[1]), l = Math.pow(Math.sin(o / 2), 2) + Math.pow(Math.sin(s / 2), 2) * Math.cos(a) * Math.cos(u); return m(2 * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l)), n.units) } function xe(t, e) { var n = !1; return f(function (t) { if (t.length < 3) return []; t.sort(be); var e, n, r, i, o, s, a = t.length - 1, u = t[a].x, l = t[0].x, c = t[a].y, h = c, p = 1e-12; for (; a--;) t[a].y < c && (c = t[a].y), t[a].y > h && (h = t[a].y); var f, g = l - u, d = h - c, y = g > d ? g : d, v = .5 * (l + u), _ = .5 * (h + c), m = [new Ee({__sentinel: !0, x: v - 20 * y, y: _ - y}, {__sentinel: !0, x: v, y: _ + 20 * y}, { __sentinel: !0, x: v + 20 * y, y: _ - y })], x = [], E = []; a = t.length; for (; a--;) { for (E.length = 0, f = m.length; f--;) (g = t[a].x - m[f].x) > 0 && g * g > m[f].r ? (x.push(m[f]), m.splice(f, 1)) : g * g + (d = t[a].y - m[f].y) * d > m[f].r || (E.push(m[f].a, m[f].b, m[f].b, m[f].c, m[f].c, m[f].a), m.splice(f, 1)); for (we(E), f = E.length; f;) n = E[--f], e = E[--f], r = t[a], i = n.x - e.x, o = n.y - e.y, s = 2 * (i * (r.y - n.y) - o * (r.x - n.x)), Math.abs(s) > p && m.push(new Ee(e, n, r)) } Array.prototype.push.apply(x, m), a = x.length; for (; a--;) (x[a].a.__sentinel || x[a].b.__sentinel || x[a].c.__sentinel) && x.splice(a, 1); return x }(t.features.map((function (t) { var r = {x: t.geometry.coordinates[0], y: t.geometry.coordinates[1]}; return e ? r.z = t.properties[e] : 3 === t.geometry.coordinates.length && (n = !0, r.z = t.geometry.coordinates[2]), r }))).map((function (t) { var e = [t.a.x, t.a.y], r = [t.b.x, t.b.y], i = [t.c.x, t.c.y], o = {}; return n ? (e.push(t.a.z), r.push(t.b.z), i.push(t.c.z)) : o = {a: t.a.z, b: t.b.z, c: t.c.z}, l([ [e, r, i, e] ], o) }))) } ne.default = re; var Ee = function (t, e, n) { this.a = t, this.b = e, this.c = n; var r, i, o = e.x - t.x, s = e.y - t.y, a = n.x - t.x, u = n.y - t.y, l = o * (t.x + e.x) + s * (t.y + e.y), c = a * (t.x + n.x) + u * (t.y + n.y), h = 2 * (o * (n.y - e.y) - s * (n.x - e.x)); this.x = (u * l - s * c) / h, this.y = (o * c - a * l) / h, r = this.x - t.x, i = this.y - t.y, this.r = r * r + i * i }; function be(t, e) { return e.x - t.x } function we(t) { var e, n, r, i, o, s = t.length; t: for (; s;) for (n = t[--s], e = t[--s], r = s; r;) if (o = t[--r], e === (i = t[--r]) && n === o || e === o && n === i) { t.splice(s, 2), t.splice(r, 2), s -= 2; continue t } } function Ie(t) { if (!t) throw new Error("geojson is required"); switch (t.type) { case "Feature": return Ne(t); case "FeatureCollection": return function (t) { var e = {type: "FeatureCollection"}; return Object.keys(t).forEach((function (n) { switch (n) { case "type": case "features": return; default: e[n] = t[n] } })), e.features = t.features.map((function (t) { return Ne(t) })), e }(t); case "Point": case "LineString": case "Polygon": case "MultiPoint": case "MultiLineString": case "MultiPolygon": case "GeometryCollection": return Ce(t); default: throw new Error("unknown GeoJSON type") } } function Ne(t) { var e = {type: "Feature"}; return Object.keys(t).forEach((function (n) { switch (n) { case "type": case "properties": case "geometry": return; default: e[n] = t[n] } })), e.properties = Se(t.properties), e.geometry = Ce(t.geometry), e } function Se(t) { var e = {}; return t ? (Object.keys(t).forEach((function (n) { var r = t[n]; "object" == typeof r ? null === r ? e[n] = null : Array.isArray(r) ? e[n] = r.map((function (t) { return t })) : e[n] = Se(r) : e[n] = r })), e) : e } function Ce(t) { var e = {type: t.type}; return t.bbox && (e.bbox = t.bbox), "GeometryCollection" === t.type ? (e.geometries = t.geometries.map((function (t) { return Ce(t) })), e) : (e.coordinates = Pe(t.coordinates), e) } function Pe(t) { var e = t; return "object" != typeof e[0] ? e.slice() : e.map((function (t) { return Pe(t) })) } function Me(t, e) { if (void 0 === e && (e = {}), !P(e = e || {})) throw new Error("options is invalid"); var n = e.mutate; if ("FeatureCollection" !== it(t)) throw new Error("geojson must be a FeatureCollection"); if (!t.features.length) throw new Error("geojson is empty"); !1 !== n && void 0 !== n || (t = Ie(t)); var r = [], i = Y(t, (function (t, e) { var n = function (t, e) { var n, r = t.geometry.coordinates, i = e.geometry.coordinates, o = Le(r[0]), s = Le(r[r.length - 1]), a = Le(i[0]), u = Le(i[i.length - 1]); if (o === u) n = i.concat(r.slice(1)); else if (a === s) n = r.concat(i.slice(1)); else if (o === a) n = r.slice(1).reverse().concat(i); else { if (s !== u) return null; n = r.concat(i.reverse().slice(1)) } return h(n) }(t, e); return n || (r.push(t), e) })); return i && r.push(i), r.length ? 1 === r.length ? r[0] : g(r.map((function (t) { return t.coordinates }))) : null } function Le(t) { return t[0].toString() + "," + t[1].toString() } function Oe(t) { return t } function Re(t, e) { var n = function (t) { if (null == t) return Oe; var e, n, r = t.scale[0], i = t.scale[1], o = t.translate[0], s = t.translate[1]; return function (t, a) { a || (e = n = 0); var u = 2, l = t.length, c = new Array(l); for (c[0] = (e += t[0]) * r + o, c[1] = (n += t[1]) * i + s; u < l;) c[u] = t[u], ++u; return c } }(t.transform), r = t.arcs; function i(t, e) { e.length && e.pop(); for (var i = r[t < 0 ? ~t : t], o = 0, s = i.length; o < s; ++o) e.push(n(i[o], o)); t < 0 && function (t, e) { for (var n, r = t.length, i = r - e; i < --r;) n = t[i], t[i++] = t[r], t[r] = n }(e, s) } function o(t) { return n(t) } function s(t) { for (var e = [], n = 0, r = t.length; n < r; ++n) i(t[n], e); return e.length < 2 && e.push(e[0]), e } function a(t) { for (var e = s(t); e.length < 4;) e.push(e[0]); return e } function u(t) { return t.map(a) } return function t(e) { var n, r = e.type; switch (r) { case "GeometryCollection": return {type: r, geometries: e.geometries.map(t)}; case "Point": n = o(e.coordinates); break; case "MultiPoint": n = e.coordinates.map(o); break; case "LineString": n = s(e.arcs); break; case "MultiLineString": n = e.arcs.map(s); break; case "Polygon": n = u(e.arcs); break; case "MultiPolygon": n = e.arcs.map(u); break; default: return null } return {type: r, coordinates: n} }(e) } function Te(t, e) { var n = {}, r = {}, i = {}, o = [], s = -1; function a(t, e) { for (var r in t) { var i = t[r]; delete e[i.start], delete i.start, delete i.end, i.forEach((function (t) { n[t < 0 ? ~t : t] = 1 })), o.push(i) } } return e.forEach((function (n, r) { var i, o = t.arcs[n < 0 ? ~n : n]; o.length < 3 && !o[1][0] && !o[1][1] && (i = e[++s], e[s] = n, e[r] = i) })), e.forEach((function (e) { var n, o, s = function (e) { var n, r = t.arcs[e < 0 ? ~e : e], i = r[0]; t.transform ? (n = [0, 0], r.forEach((function (t) { n[0] += t[0], n[1] += t[1] }))) : n = r[r.length - 1]; return e < 0 ? [n, i] : [i, n] }(e), a = s[0], u = s[1]; if (n = i[a]) if (delete i[n.end], n.push(e), n.end = u, o = r[u]) { delete r[o.start]; var l = o === n ? n : n.concat(o); r[l.start = n.start] = i[l.end = o.end] = l } else r[n.start] = i[n.end] = n; else if (n = r[u]) if (delete r[n.start], n.unshift(e), n.start = a, o = i[a]) { delete i[o.end]; var c = o === n ? n : o.concat(n); r[c.start = o.start] = i[c.end = n.end] = c } else r[n.start] = i[n.end] = n; else r[(n = [e]).start = a] = i[n.end = u] = n })), a(i, r), a(r, i), e.forEach((function (t) { n[t < 0 ? ~t : t] || o.push([t]) })), o } function Ae(t, e) { var n = {}, r = [], i = []; function o(t) { t.forEach((function (e) { e.forEach((function (e) { (n[e = e < 0 ? ~e : e] || (n[e] = [])).push(t) })) })), r.push(t) } function s(e) { return function (t) { for (var e, n = -1, r = t.length, i = t[r - 1], o = 0; ++n < r;) e = i, i = t[n], o += e[0] * i[1] - e[1] * i[0]; return Math.abs(o) }(Re(t, {type: "Polygon", arcs: [e]}).coordinates[0]) } return e.forEach((function t(e) { switch (e.type) { case "GeometryCollection": e.geometries.forEach(t); break; case "Polygon": o(e.arcs); break; case "MultiPolygon": e.arcs.forEach(o) } })), r.forEach((function (t) { if (!t._) { var e = [], r = [t]; for (t._ = 1, i.push(e); t = r.pop();) e.push(t), t.forEach((function (t) { t.forEach((function (t) { n[t < 0 ? ~t : t].forEach((function (t) { t._ || (t._ = 1, r.push(t)) })) })) })) } })), r.forEach((function (t) { delete t._ })), { type: "MultiPolygon", arcs: i.map((function (e) { var r, i = []; if (e.forEach((function (t) { t.forEach((function (t) { t.forEach((function (t) { n[t < 0 ? ~t : t].length < 2 && i.push(t) })) })) })), (r = (i = Te(t, i)).length) > 1) for (var o, a, u = 1, l = s(i[0]); u < r; ++u) (o = s(i[u])) > l && (a = i[0], i[0] = i[u], i[u] = a, l = o); return i })).filter((function (t) { return t.length > 0 })) } } var De = Object.prototype.hasOwnProperty; function Fe(t, e, n, r, i, o) { 3 === arguments.length && (r = o = Array, i = null); for (var s = new r(t = 1 << Math.max(4, Math.ceil(Math.log(t) / Math.LN2))), a = new o(t), u = t - 1, l = 0; l < t; ++l) s[l] = i; function c(r, o) { for (var l = e(r) & u, c = s[l], h = 0; c != i;) { if (n(c, r)) return a[l] = o; if (++h >= t) throw new Error("full hashmap"); c = s[l = l + 1 & u] } return s[l] = r, a[l] = o, o } function h(r, o) { for (var l = e(r) & u, c = s[l], h = 0; c != i;) { if (n(c, r)) return a[l]; if (++h >= t) throw new Error("full hashmap"); c = s[l = l + 1 & u] } return s[l] = r, a[l] = o, o } function p(r, o) { for (var l = e(r) & u, c = s[l], h = 0; c != i;) { if (n(c, r)) return a[l]; if (++h >= t) break; c = s[l = l + 1 & u] } return o } function f() { for (var t = [], e = 0, n = s.length; e < n; ++e) { var r = s[e]; r != i && t.push(r) } return t } return {set: c, maybeSet: h, get: p, keys: f} } function ke(t, e) { return t[0] === e[0] && t[1] === e[1] } var Ge = new ArrayBuffer(16), qe = new Float64Array(Ge), Be = new Uint32Array(Ge); function ze(t) { qe[0] = t[0], qe[1] = t[1]; var e = Be[0] ^ Be[1]; return 2147483647 & (e = e << 5 ^ e >> 7 ^ Be[2] ^ Be[3]) } function je(t) { var e, n, r, i, o = t.coordinates, s = t.lines, a = t.rings, u = function () { for (var t = Fe(1.4 * o.length, E, b, Int32Array, -1, Int32Array), e = new Int32Array(o.length), n = 0, r = o.length; n < r; ++n) e[n] = t.maybeSet(n, n); return e }(), l = new Int32Array(o.length), c = new Int32Array(o.length), h = new Int32Array(o.length), p = new Int8Array(o.length), f = 0; for (e = 0, n = o.length; e < n; ++e) l[e] = c[e] = h[e] = -1; for (e = 0, n = s.length; e < n; ++e) { var g = s[e], d = g[0], y = g[1]; for (r = u[d], i = u[++d], ++f, p[r] = 1; ++d <= y;) x(e, r, r = i, i = u[d]); ++f, p[i] = 1 } for (e = 0, n = o.length; e < n; ++e) l[e] = -1; for (e = 0, n = a.length; e < n; ++e) { var v = a[e], _ = v[0] + 1, m = v[1]; for (x(e, u[m - 1], r = u[_ - 1], i = u[_]); ++_ <= m;) x(e, r, r = i, i = u[_]) } function x(t, e, n, r) { if (l[n] !== t) { l[n] = t; var i = c[n]; if (i >= 0) { var o = h[n]; i === e && o === r || i === r && o === e || (++f, p[n] = 1) } else c[n] = e, h[n] = r } } function E(t) { return ze(o[t]) } function b(t, e) { return ke(o[t], o[e]) } l = c = h = null; var w, I = function (t, e, n, r, i) { 3 === arguments.length && (r = Array, i = null); for (var o = new r(t = 1 << Math.max(4, Math.ceil(Math.log(t) / Math.LN2))), s = t - 1, a = 0; a < t; ++a) o[a] = i; function u(r) { for (var a = e(r) & s, u = o[a], l = 0; u != i;) { if (n(u, r)) return !0; if (++l >= t) throw new Error("full hashset"); u = o[a = a + 1 & s] } return o[a] = r, !0 } function l(r) { for (var a = e(r) & s, u = o[a], l = 0; u != i;) { if (n(u, r)) return !0; if (++l >= t) break; u = o[a = a + 1 & s] } return !1 } function c() { for (var t = [], e = 0, n = o.length; e < n; ++e) { var r = o[e]; r != i && t.push(r) } return t } return {add: u, has: l, values: c} }(1.4 * f, ze, ke); for (e = 0, n = o.length; e < n; ++e) p[w = u[e]] && I.add(o[w]); return I } function Ue(t, e, n, r) { Ve(t, e, n), Ve(t, e, e + r), Ve(t, e + r, n) } function Ve(t, e, n) { for (var r, i = e + (n-- - e >> 1); e < i; ++e, --n) r = t[e], t[e] = t[n], t[n] = r } function Xe(t) { var e, n, r = {}; for (e in t) r[e] = null == (n = t[e]) ? {type: null} : ("FeatureCollection" === n.type ? Ye : "Feature" === n.type ? He : We)(n); return r } function Ye(t) { var e = {type: "GeometryCollection", geometries: t.features.map(He)}; return null != t.bbox && (e.bbox = t.bbox), e } function He(t) { var e, n = We(t.geometry); for (e in null != t.id && (n.id = t.id), null != t.bbox && (n.bbox = t.bbox), t.properties) { n.properties = t.properties; break } return n } function We(t) { if (null == t) return {type: null}; var e = "GeometryCollection" === t.type ? { type: "GeometryCollection", geometries: t.geometries.map(We) } : "Point" === t.type || "MultiPoint" === t.type ? {type: t.type, coordinates: t.coordinates} : { type: t.type, arcs: t.coordinates }; return null != t.bbox && (e.bbox = t.bbox), e } function Je(t, e) { var n = function (t) { var e = 1 / 0, n = 1 / 0, r = -1 / 0, i = -1 / 0; function o(t) { null != t && De.call(s, t.type) && s[t.type](t) } var s = { GeometryCollection: function (t) { t.geometries.forEach(o) }, Point: function (t) { a(t.coordinates) }, MultiPoint: function (t) { t.coordinates.forEach(a) }, LineString: function (t) { u(t.arcs) }, MultiLineString: function (t) { t.arcs.forEach(u) }, Polygon: function (t) { t.arcs.forEach(u) }, MultiPolygon: function (t) { t.arcs.forEach(l) } }; function a(t) { var o = t[0], s = t[1]; o < e && (e = o), o > r && (r = o), s < n && (n = s), s > i && (i = s) } function u(t) { t.forEach(a) } function l(t) { t.forEach(u) } for (var c in t) o(t[c]); return r >= e && i >= n ? [e, n, r, i] : void 0 }(t = Xe(t)), r = e > 0 && n && function (t, e, n) { var r = e[0], i = e[1], o = e[2], s = e[3], a = o - r ? (n - 1) / (o - r) : 1, u = s - i ? (n - 1) / (s - i) : 1; function l(t) { return [Math.round((t[0] - r) * a), Math.round((t[1] - i) * u)] } function c(t, e) { for (var n, o, s, l, c, h = -1, p = 0, f = t.length, g = new Array(f); ++h < f;) n = t[h], l = Math.round((n[0] - r) * a), c = Math.round((n[1] - i) * u), l === o && c === s || (g[p++] = [o = l, s = c]); for (g.length = p; p < e;) p = g.push([g[0][0], g[0][1]]); return g } function h(t) { return c(t, 2) } function p(t) { return c(t, 4) } function f(t) { return t.map(p) } function g(t) { null != t && De.call(d, t.type) && d[t.type](t) } var d = { GeometryCollection: function (t) { t.geometries.forEach(g) }, Point: function (t) { t.coordinates = l(t.coordinates) }, MultiPoint: function (t) { t.coordinates = t.coordinates.map(l) }, LineString: function (t) { t.arcs = h(t.arcs) }, MultiLineString: function (t) { t.arcs = t.arcs.map(h) }, Polygon: function (t) { t.arcs = f(t.arcs) }, MultiPolygon: function (t) { t.arcs = t.arcs.map(f) } }; for (var y in t) g(t[y]); return {scale: [1 / a, 1 / u], translate: [r, i]} }(t, n, e), i = function (t) { var e, n, r, i, o = t.coordinates, s = t.lines, a = t.rings, u = s.length + a.length; for (delete t.lines, delete t.rings, r = 0, i = s.length; r < i; ++r) for (e = s[r]; e = e.next;) ++u; for (r = 0, i = a.length; r < i; ++r) for (n = a[r]; n = n.next;) ++u; var l = Fe(2 * u * 1.4, ze, ke), c = t.arcs = []; for (r = 0, i = s.length; r < i; ++r) { e = s[r]; do { h(e) } while (e = e.next) } for (r = 0, i = a.length; r < i; ++r) if ((n = a[r]).next) do { h(n) } while (n = n.next); else p(n); function h(t) { var e, n, r, i, s, a, u, h; if (r = l.get(e = o[t[0]])) for (u = 0, h = r.length; u < h; ++u) if (f(i = r[u], t)) return t[0] = i[0], void (t[1] = i[1]); if (s = l.get(n = o[t[1]])) for (u = 0, h = s.length; u < h; ++u) if (g(a = s[u], t)) return t[1] = a[0], void (t[0] = a[1]); r ? r.push(t) : l.set(e, [t]), s ? s.push(t) : l.set(n, [t]), c.push(t) } function p(t) { var e, n, r, i, s; if (n = l.get(o[t[0]])) for (i = 0, s = n.length; i < s; ++i) { if (d(r = n[i], t)) return t[0] = r[0], void (t[1] = r[1]); if (y(r, t)) return t[0] = r[1], void (t[1] = r[0]) } if (n = l.get(e = o[t[0] + v(t)])) for (i = 0, s = n.length; i < s; ++i) { if (d(r = n[i], t)) return t[0] = r[0], void (t[1] = r[1]); if (y(r, t)) return t[0] = r[1], void (t[1] = r[0]) } n ? n.push(t) : l.set(e, [t]), c.push(t) } function f(t, e) { var n = t[0], r = e[0], i = t[1]; if (n - i != r - e[1]) return !1; for (; n <= i; ++n, ++r) if (!ke(o[n], o[r])) return !1; return !0 } function g(t, e) { var n = t[0], r = e[0], i = t[1], s = e[1]; if (n - i != r - s) return !1; for (; n <= i; ++n, --s) if (!ke(o[n], o[s])) return !1; return !0 } function d(t, e) { var n = t[0], r = e[0], i = t[1] - n; if (i !== e[1] - r) return !1; for (var s = v(t), a = v(e), u = 0; u < i; ++u) if (!ke(o[n + (u + s) % i], o[r + (u + a) % i])) return !1; return !0 } function y(t, e) { var n = t[0], r = e[0], i = t[1], s = e[1], a = i - n; if (a !== s - r) return !1; for (var u = v(t), l = a - v(e), c = 0; c < a; ++c) if (!ke(o[n + (c + u) % a], o[s - (c + l) % a])) return !1; return !0 } function v(t) { for (var e = t[0], n = t[1], r = e, i = r, s = o[r]; ++r < n;) { var a = o[r]; (a[0] < s[0] || a[0] === s[0] && a[1] < s[1]) && (i = r, s = a) } return i - e } return t }(function (t) { var e, n, r, i = je(t), o = t.coordinates, s = t.lines, a = t.rings; for (n = 0, r = s.length; n < r; ++n) for (var u = s[n], l = u[0], c = u[1]; ++l < c;) i.has(o[l]) && (e = { 0: l, 1: u[1] }, u[1] = l, u = u.next = e); for (n = 0, r = a.length; n < r; ++n) for (var h = a[n], p = h[0], f = p, g = h[1], d = i.has(o[p]); ++f < g;) i.has(o[f]) && (d ? (e = { 0: f, 1: h[1] }, h[1] = f, h = h.next = e) : (Ue(o, p, g, g - f), o[g] = o[p], d = !0, f = p)); return t }(function (t) { var e = -1, n = [], r = [], i = []; function o(t) { t && De.call(s, t.type) && s[t.type](t) } var s = { GeometryCollection: function (t) { t.geometries.forEach(o) }, LineString: function (t) { t.arcs = a(t.arcs) }, MultiLineString: function (t) { t.arcs = t.arcs.map(a) }, Polygon: function (t) { t.arcs = t.arcs.map(u) }, MultiPolygon: function (t) { t.arcs = t.arcs.map(l) } }; function a(t) { for (var r = 0, o = t.length; r < o; ++r) i[++e] = t[r]; var s = {0: e - o + 1, 1: e}; return n.push(s), s } function u(t) { for (var n = 0, o = t.length; n < o; ++n) i[++e] = t[n]; var s = {0: e - o + 1, 1: e}; return r.push(s), s } function l(t) { return t.map(u) } for (var c in t) o(t[c]); return {type: "Topology", coordinates: i, lines: n, rings: r, objects: t} }(t))), o = i.coordinates, s = Fe(1.4 * i.arcs.length, Ze, Ke); function a(t) { t && De.call(u, t.type) && u[t.type](t) } t = i.objects, i.bbox = n, i.arcs = i.arcs.map((function (t, e) { return s.set(t, e), o.slice(t[0], t[1] + 1) })), delete i.coordinates, o = null; var u = { GeometryCollection: function (t) { t.geometries.forEach(a) }, LineString: function (t) { t.arcs = l(t.arcs) }, MultiLineString: function (t) { t.arcs = t.arcs.map(l) }, Polygon: function (t) { t.arcs = t.arcs.map(l) }, MultiPolygon: function (t) { t.arcs = t.arcs.map(c) } }; function l(t) { var e = []; do { var n = s.get(t); e.push(t[0] < t[1] ? n : ~n) } while (t = t.next); return e } function c(t) { return t.map(l) } for (var h in t) a(t[h]); return r && (i.transform = r, i.arcs = function (t) { for (var e = -1, n = t.length; ++e < n;) { for (var r, i, o = t[e], s = 0, a = 1, u = o.length, l = o[0], c = l[0], h = l[1]; ++s < u;) r = (l = o[s])[0], i = l[1], r === c && i === h || (o[a++] = [r - c, i - h], c = r, h = i); 1 === a && (o[a++] = [0, 0]), o.length = a } return t }(i.arcs)), i } function Ze(t) { var e, n = t[0], r = t[1]; return r < n && (e = n, n = r, r = e), n + 31 * r } function Ke(t, e) { var n, r = t[0], i = t[1], o = e[0], s = e[1]; return i < r && (n = r, r = i, i = n), s < o && (n = o, o = s, s = n), r === o && i === s } function Qe(t, e) { if (void 0 === e && (e = {}), "FeatureCollection" !== it(t)) throw new Error("geojson must be a FeatureCollection"); if (!t.features.length) throw new Error("geojson is empty"); !1 !== e.mutate && void 0 !== e.mutate || (t = Ie(t)); var n = []; z(t, (function (t) { n.push(t.geometry) })); var r = Je({geoms: v(n).geometry}); return function (t) { return Re(t, Ae.apply(this, arguments)) }(r, r.objects.geoms.geometries) } function $e(t, e) { if (void 0 === e && (e = {}), !P(e = e || {})) throw new Error("options is invalid"); var n = e.mutate; if ("FeatureCollection" !== it(t)) throw new Error("geojson must be a FeatureCollection"); if (!t.features.length) throw new Error("geojson is empty"); !1 !== n && void 0 !== n || (t = Ie(t)); var r = function (t) { var e = {}; z(t, (function (t) { e[t.geometry.type] = !0 })); var n = Object.keys(e); if (1 === n.length) return n[0]; return null }(t); if (!r) throw new Error("geojson must be homogenous"); var i = t; switch (r) { case "LineString": return Me(i, e); case "Polygon": return Qe(i, e); default: throw new Error(r + " is not supported") } } function tn(t, e) { void 0 === e && (e = {}); var n = "object" == typeof e ? e.mutate : e; if (!t) throw new Error("geojson is required"); var r = it(t), i = []; switch (r) { case "LineString": i = en(t); break; case "MultiLineString": case "Polygon": Q(t).forEach((function (t) { i.push(en(t)) })); break; case "MultiPolygon": Q(t).forEach((function (t) { var e = []; t.forEach((function (t) { e.push(en(t)) })), i.push(e) })); break; case "Point": return t; case "MultiPoint": var s = {}; Q(t).forEach((function (t) { var e = t.join("-"); Object.prototype.hasOwnProperty.call(s, e) || (i.push(t), s[e] = !0) })); break; default: throw new Error(r + " geometry not supported") } return t.coordinates ? !0 === n ? (t.coordinates = i, t) : { type: r, coordinates: i } : !0 === n ? (t.geometry.coordinates = i, t) : o({type: r, coordinates: i}, t.properties, { bbox: t.bbox, id: t.id }) } function en(t) { var e = Q(t); if (2 === e.length && !nn(e[0], e[1])) return e; var n = [], r = e.length - 1, i = n.length; n.push(e[0]); for (var o = 1; o < r; o++) { var s = n[n.length - 1]; e[o][0] === s[0] && e[o][1] === s[1] || (n.push(e[o]), (i = n.length) > 2 && rn(n[i - 3], n[i - 1], n[i - 2]) && n.splice(n.length - 2, 1)) } if (n.push(e[e.length - 1]), i = n.length, nn(e[0], e[e.length - 1]) && i < 4) throw new Error("invalid polygon"); return rn(n[i - 3], n[i - 1], n[i - 2]) && n.splice(n.length - 2, 1), n } function nn(t, e) { return t[0] === e[0] && t[1] === e[1] } function rn(t, e, n) { var r = n[0], i = n[1], o = t[0], s = t[1], a = e[0], u = e[1], l = a - o, c = u - s; return 0 === (r - o) * c - (i - s) * l && (Math.abs(l) >= Math.abs(c) ? l > 0 ? o <= r && r <= a : a <= r && r <= o : c > 0 ? s <= i && i <= u : u <= i && i <= s) } function on(t, e, n) { var r = e.x, i = e.y, o = n.x - r, s = n.y - i; if (0 !== o || 0 !== s) { var a = ((t.x - r) * o + (t.y - i) * s) / (o * o + s * s); a > 1 ? (r = n.x, i = n.y) : a > 0 && (r += o * a, i += s * a) } return (o = t.x - r) * o + (s = t.y - i) * s } function sn(t, e, n, r, i) { for (var o, s = r, a = e + 1; a < n; a++) { var u = on(t[a], t[e], t[n]); u > s && (o = a, s = u) } s > r && (o - e > 1 && sn(t, e, o, r, i), i.push(t[o]), n - o > 1 && sn(t, o, n, r, i)) } function an(t, e) { var n = t.length - 1, r = [t[0]]; return sn(t, 0, n, e, r), r.push(t[n]), r } function un(t, e, n) { if (t.length <= 2) return t; var r = void 0 !== e ? e * e : 1; return t = an(t = n ? t : function (t, e) { for (var n, r, i, o, s, a = t[0], u = [a], l = 1, c = t.length; l < c; l++) n = t[l], i = a, o = void 0, s = void 0, o = (r = n).x - i.x, s = r.y - i.y, o * o + s * s > e && (u.push(n), a = n); return a !== n && u.push(n), u }(t, r), r) } function ln(t, e, n) { return un(t.map((function (t) { return {x: t[0], y: t[1], z: t[2]} })), e, n).map((function (t) { return t.z ? [t.x, t.y, t.z] : [t.x, t.y] })) } function cn(t, e, n) { return t.map((function (t) { var r = t.map((function (t) { return {x: t[0], y: t[1]} })); if (r.length < 4) throw new Error("invalid polygon"); for (var i = un(r, e, n).map((function (t) { return [t.x, t.y] })); !hn(i);) i = un(r, e -= .01 * e, n).map((function (t) { return [t.x, t.y] })); return i[i.length - 1][0] === i[0][0] && i[i.length - 1][1] === i[0][1] || i.push(i[0]), i })) } function hn(t) { return !(t.length < 3) && !(3 === t.length && t[2][0] === t[0][0] && t[2][1] === t[0][1]) } var pn = function () { function t(t) { this.points = t.points || [], this.duration = t.duration || 1e4, this.sharpness = t.sharpness || .85, this.centers = [], this.controls = [], this.stepLength = t.stepLength || 60, this.length = this.points.length, this.delay = 0; for (var e = 0; e < this.length; e++) this.points[e].z = this.points[e].z || 0; for (e = 0; e < this.length - 1; e++) { var n = this.points[e], r = this.points[e + 1]; this.centers.push({x: (n.x + r.x) / 2, y: (n.y + r.y) / 2, z: (n.z + r.z) / 2}) } this.controls.push([this.points[0], this.points[0]]); for (e = 0; e < this.centers.length - 1; e++) { var i = this.points[e + 1].x - (this.centers[e].x + this.centers[e + 1].x) / 2, o = this.points[e + 1].y - (this.centers[e].y + this.centers[e + 1].y) / 2, s = this.points[e + 1].z - (this.centers[e].y + this.centers[e + 1].z) / 2; this.controls.push([{ x: (1 - this.sharpness) * this.points[e + 1].x + this.sharpness * (this.centers[e].x + i), y: (1 - this.sharpness) * this.points[e + 1].y + this.sharpness * (this.centers[e].y + o), z: (1 - this.sharpness) * this.points[e + 1].z + this.sharpness * (this.centers[e].z + s) }, { x: (1 - this.sharpness) * this.points[e + 1].x + this.sharpness * (this.centers[e + 1].x + i), y: (1 - this.sharpness) * this.points[e + 1].y + this.sharpness * (this.centers[e + 1].y + o), z: (1 - this.sharpness) * this.points[e + 1].z + this.sharpness * (this.centers[e + 1].z + s) }]) } return this.controls.push([this.points[this.length - 1], this.points[this.length - 1]]), this.steps = this.cacheSteps(this.stepLength), this } return t.prototype.cacheSteps = function (t) { var e = [], n = this.pos(0); e.push(0); for (var r = 0; r < this.duration; r += 10) { var i = this.pos(r); Math.sqrt((i.x - n.x) * (i.x - n.x) + (i.y - n.y) * (i.y - n.y) + (i.z - n.z) * (i.z - n.z)) > t && (e.push(r), n = i) } return e }, t.prototype.vector = function (t) { var e = this.pos(t + 10), n = this.pos(t - 10); return { angle: 180 * Math.atan2(e.y - n.y, e.x - n.x) / 3.14, speed: Math.sqrt((n.x - e.x) * (n.x - e.x) + (n.y - e.y) * (n.y - e.y) + (n.z - e.z) * (n.z - e.z)) } }, t.prototype.pos = function (t) { var e = t - this.delay; e < 0 && (e = 0), e > this.duration && (e = this.duration - 1); var n = e / this.duration; if (n >= 1) return this.points[this.length - 1]; var r = Math.floor((this.points.length - 1) * n); return function (t, e, n, r, i) { var o = function (t) { var e = t * t; return [e * t, 3 * e * (1 - t), 3 * t * (1 - t) * (1 - t), (1 - t) * (1 - t) * (1 - t)] }(t); return { x: i.x * o[0] + r.x * o[1] + n.x * o[2] + e.x * o[3], y: i.y * o[0] + r.y * o[1] + n.y * o[2] + e.y * o[3], z: i.z * o[0] + r.z * o[1] + n.z * o[2] + e.z * o[3] } }((this.length - 1) * n - r, this.points[r], this.controls[r][1], this.controls[r + 1][0], this.points[r + 1]) }, t }(); function fn(t, e) { void 0 === e && (e = {}); for (var n = e.resolution || 1e4, r = e.sharpness || .85, i = [], o = rt(t).coordinates.map((function (t) { return {x: t[0], y: t[1]} })), s = new pn({duration: n, points: o, sharpness: r}), a = function (t) { var e = s.pos(t); Math.floor(t / 100) % 2 == 0 && i.push([e.x, e.y]) }, u = 0; u < s.duration; u += 10) a(u); return a(s.duration), h(i, e.properties) } function gn(t, e) { void 0 === e && (e = {}); var n = Number(t[0]), r = Number(t[1]), i = Number(t[2]), o = Number(t[3]); if (6 === t.length) throw new Error("@turf/bbox-polygon does not support BBox with 6 positions"); var s = [n, r]; return l([ [s, [i, r], [i, o], [n, o], s ] ], e.properties, {bbox: t, id: e.id}) } function dn(t) { return gn(Z(t)) } function yn(t) { var e = t[0], n = t[1], r = t[2], i = t[3]; if (me(t.slice(0, 2), [r, n]) >= me(t.slice(0, 2), [e, i])) { var o = (n + i) / 2; return [e, o - (r - e) / 2, r, o + (r - e) / 2] } var s = (e + r) / 2; return [s - (i - n) / 2, n, s + (i - n) / 2, i] } function vn(t, e, n, r) { void 0 === r && (r = {}); var i = K(t), o = I(i[0]), s = I(i[1]), u = I(n), l = x(e, r.units), c = Math.asin(Math.sin(s) * Math.cos(l) + Math.cos(s) * Math.sin(l) * Math.cos(u)); return a([w(o + Math.atan2(Math.sin(u) * Math.sin(l) * Math.cos(s), Math.cos(l) - Math.sin(s) * Math.sin(c))), w(c)], r.properties) } function _n(t, e, n) { void 0 === n && (n = {}); for (var r = n.steps || 64, i = n.properties ? n.properties : !Array.isArray(t) && "Feature" === t.type && t.properties ? t.properties : {}, o = [], s = 0; s < r; s++) o.push(vn(t, e, -360 * s / r, n).geometry.coordinates); return o.push(o[0]), l([o], i) } function mn(t, e, n) { if (void 0 === n && (n = {}), !0 === n.final) return function (t, e) { var n = mn(e, t); return n = (n + 180) % 360 }(t, e); var r = K(t), i = K(e), o = I(r[0]), s = I(i[0]), a = I(r[1]), u = I(i[1]), l = Math.sin(s - o) * Math.cos(u), c = Math.cos(a) * Math.sin(u) - Math.sin(a) * Math.cos(u) * Math.cos(s - o); return w(Math.atan2(l, c)) } function xn(t, e) { void 0 === e && (e = {}); var n = Z(t); return a([(n[0] + n[2]) / 2, (n[1] + n[3]) / 2], e.properties, e) } function En(t, e) { void 0 === e && (e = {}); var n = 0, r = 0, i = 0; return R(t, (function (t) { n += t[0], r += t[1], i++ }), !0), a([n / i, r / i], e.properties) } function bn(t) { var e = []; return "FeatureCollection" === t.type ? F(t, (function (t) { R(t, (function (n) { e.push(a(n, t.properties)) })) })) : R(t, (function (n) { e.push(a(n, t.properties)) })), f(e) } var wn = Nn, In = Nn; function Nn(t, e, n) { n = n || 2; var r, i, o, s, a, u, l, c = e && e.length, h = c ? e[0] * n : t.length, p = Sn(t, 0, h, n, !0), f = []; if (!p) return f; if (c && (p = function (t, e, n, r) { var i, o, s, a = []; for (i = 0, o = e.length; i < o; i++) (s = Sn(t, e[i] * r, i < o - 1 ? e[i + 1] * r : t.length, r, !1)) === s.next && (s.steiner = !0), a.push(Fn(s)); for (a.sort(Tn), i = 0; i < a.length; i++) An(a[i], n), n = Cn(n, n.next); return n }(t, e, p, n)), t.length > 80 * n) { r = o = t[0], i = s = t[1]; for (var g = n; g < h; g += n) (a = t[g]) < r && (r = a), (u = t[g + 1]) < i && (i = u), a > o && (o = a), u > s && (s = u); l = 0 !== (l = Math.max(o - r, s - i)) ? 1 / l : 0 } return Pn(p, f, n, r, i, l), f } function Sn(t, e, n, r, i) { var o, s; if (i === Hn(t, e, n, r) > 0) for (o = e; o < n; o += r) s = Vn(o, t[o], t[o + 1], s); else for (o = n - r; o >= e; o -= r) s = Vn(o, t[o], t[o + 1], s); return s && Bn(s, s.next) && (Xn(s), s = s.next), s } function Cn(t, e) { if (!t) return t; e || (e = t); var n, r = t; do { if (n = !1, r.steiner || !Bn(r, r.next) && 0 !== qn(r.prev, r, r.next)) r = r.next; else { if (Xn(r), (r = e = r.prev) === r.next) break; n = !0 } } while (n || r !== e); return e } function Pn(t, e, n, r, i, o, s) { if (t) { !s && o && function (t, e, n, r) { var i = t; do { null === i.z && (i.z = Dn(i.x, i.y, e, n, r)), i.prevZ = i.prev, i.nextZ = i.next, i = i.next } while (i !== t); i.prevZ.nextZ = null, i.prevZ = null, function (t) { var e, n, r, i, o, s, a, u, l = 1; do { for (n = t, t = null, o = null, s = 0; n;) { for (s++, r = n, a = 0, e = 0; e < l && (a++, r = r.nextZ); e++) ; for (u = l; a > 0 || u > 0 && r;) 0 !== a && (0 === u || !r || n.z <= r.z) ? (i = n, n = n.nextZ, a--) : (i = r, r = r.nextZ, u--), o ? o.nextZ = i : t = i, i.prevZ = o, o = i; n = r } o.nextZ = null, l *= 2 } while (s > 1) }(i) }(t, r, i, o); for (var a, u, l = t; t.prev !== t.next;) if (a = t.prev, u = t.next, o ? Ln(t, r, i, o) : Mn(t)) e.push(a.i / n), e.push(t.i / n), e.push(u.i / n), Xn(t), t = u.next, l = u.next; else if ((t = u) === l) { s ? 1 === s ? Pn(t = On(t, e, n), e, n, r, i, o, 2) : 2 === s && Rn(t, e, n, r, i, o) : Pn(Cn(t), e, n, r, i, o, 1); break } } } function Mn(t) { var e = t.prev, n = t, r = t.next; if (qn(e, n, r) >= 0) return !1; for (var i = t.next.next; i !== t.prev;) { if (kn(e.x, e.y, n.x, n.y, r.x, r.y, i.x, i.y) && qn(i.prev, i, i.next) >= 0) return !1; i = i.next } return !0 } function Ln(t, e, n, r) { var i = t.prev, o = t, s = t.next; if (qn(i, o, s) >= 0) return !1; for (var a = i.x < o.x ? i.x < s.x ? i.x : s.x : o.x < s.x ? o.x : s.x, u = i.y < o.y ? i.y < s.y ? i.y : s.y : o.y < s.y ? o.y : s.y, l = i.x > o.x ? i.x > s.x ? i.x : s.x : o.x > s.x ? o.x : s.x, c = i.y > o.y ? i.y > s.y ? i.y : s.y : o.y > s.y ? o.y : s.y, h = Dn(a, u, e, n, r), p = Dn(l, c, e, n, r), f = t.prevZ, g = t.nextZ; f && f.z >= h && g && g.z <= p;) { if (f !== t.prev && f !== t.next && kn(i.x, i.y, o.x, o.y, s.x, s.y, f.x, f.y) && qn(f.prev, f, f.next) >= 0) return !1; if (f = f.prevZ, g !== t.prev && g !== t.next && kn(i.x, i.y, o.x, o.y, s.x, s.y, g.x, g.y) && qn(g.prev, g, g.next) >= 0) return !1; g = g.nextZ } for (; f && f.z >= h;) { if (f !== t.prev && f !== t.next && kn(i.x, i.y, o.x, o.y, s.x, s.y, f.x, f.y) && qn(f.prev, f, f.next) >= 0) return !1; f = f.prevZ } for (; g && g.z <= p;) { if (g !== t.prev && g !== t.next && kn(i.x, i.y, o.x, o.y, s.x, s.y, g.x, g.y) && qn(g.prev, g, g.next) >= 0) return !1; g = g.nextZ } return !0 } function On(t, e, n) { var r = t; do { var i = r.prev, o = r.next.next; !Bn(i, o) && zn(i, r, r.next, o) && jn(i, o) && jn(o, i) && (e.push(i.i / n), e.push(r.i / n), e.push(o.i / n), Xn(r), Xn(r.next), r = t = o), r = r.next } while (r !== t); return r } function Rn(t, e, n, r, i, o) { var s = t; do { for (var a = s.next.next; a !== s.prev;) { if (s.i !== a.i && Gn(s, a)) { var u = Un(s, a); return s = Cn(s, s.next), u = Cn(u, u.next), Pn(s, e, n, r, i, o), void Pn(u, e, n, r, i, o) } a = a.next } s = s.next } while (s !== t) } function Tn(t, e) { return t.x - e.x } function An(t, e) { if (e = function (t, e) { var n, r = e, i = t.x, o = t.y, s = -1 / 0; do { if (o <= r.y && o >= r.next.y && r.next.y !== r.y) { var a = r.x + (o - r.y) * (r.next.x - r.x) / (r.next.y - r.y); if (a <= i && a > s) { if (s = a, a === i) { if (o === r.y) return r; if (o === r.next.y) return r.next } n = r.x < r.next.x ? r : r.next } } r = r.next } while (r !== e); if (!n) return null; if (i === s) return n.prev; var u, l = n, c = n.x, h = n.y, p = 1 / 0; r = n.next; for (; r !== l;) i >= r.x && r.x >= c && i !== r.x && kn(o < h ? i : s, o, c, h, o < h ? s : i, o, r.x, r.y) && ((u = Math.abs(o - r.y) / (i - r.x)) < p || u === p && r.x > n.x) && jn(r, t) && (n = r, p = u), r = r.next; return n }(t, e)) { var n = Un(e, t); Cn(n, n.next) } } function Dn(t, e, n, r, i) { return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * i) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - r) * i) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1 } function Fn(t) { var e = t, n = t; do { e.x < n.x && (n = e), e = e.next } while (e !== t); return n } function kn(t, e, n, r, i, o, s, a) { return (i - s) * (e - a) - (t - s) * (o - a) >= 0 && (t - s) * (r - a) - (n - s) * (e - a) >= 0 && (n - s) * (o - a) - (i - s) * (r - a) >= 0 } function Gn(t, e) { return t.next.i !== e.i && t.prev.i !== e.i && !function (t, e) { var n = t; do { if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && zn(n, n.next, t, e)) return !0; n = n.next } while (n !== t); return !1 }(t, e) && jn(t, e) && jn(e, t) && function (t, e) { var n = t, r = !1, i = (t.x + e.x) / 2, o = (t.y + e.y) / 2; do { n.y > o != n.next.y > o && n.next.y !== n.y && i < (n.next.x - n.x) * (o - n.y) / (n.next.y - n.y) + n.x && (r = !r), n = n.next } while (n !== t); return r }(t, e) } function qn(t, e, n) { return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) } function Bn(t, e) { return t.x === e.x && t.y === e.y } function zn(t, e, n, r) { return !!(Bn(t, e) && Bn(n, r) || Bn(t, r) && Bn(n, e)) || qn(t, e, n) > 0 != qn(t, e, r) > 0 && qn(n, r, t) > 0 != qn(n, r, e) > 0 } function jn(t, e) { return qn(t.prev, t, t.next) < 0 ? qn(t, e, t.next) >= 0 && qn(t, t.prev, e) >= 0 : qn(t, e, t.prev) < 0 || qn(t, t.next, e) < 0 } function Un(t, e) { var n = new Yn(t.i, t.x, t.y), r = new Yn(e.i, e.x, e.y), i = t.next, o = e.prev; return t.next = e, e.prev = t, n.next = i, i.prev = n, r.next = n, n.prev = r, o.next = r, r.prev = o, r } function Vn(t, e, n, r) { var i = new Yn(t, e, n); return r ? (i.next = r.next, i.prev = r, r.next.prev = i, r.next = i) : (i.prev = i, i.next = i), i } function Xn(t) { t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ) } function Yn(t, e, n) { this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1 } function Hn(t, e, n, r) { for (var i = 0, o = e, s = n - r; o < n; o += r) i += (t[s] - t[o]) * (t[o + 1] + t[s + 1]), s = o; return i } function Wn(t) { var e = function (t) { for (var e = t[0][0].length, n = {vertices: [], holes: [], dimensions: e}, r = 0, i = 0; i < t.length; i++) { for (var o = 0; o < t[i].length; o++) for (var s = 0; s < e; s++) n.vertices.push(t[i][o][s]); i > 0 && (r += t[i - 1].length, n.holes.push(r)) } return n }(t), n = wn(e.vertices, e.holes, 2), r = [], i = []; n.forEach((function (t, r) { var o = n[r]; i.push([e.vertices[2 * o], e.vertices[2 * o + 1]]) })); for (var o = 0; o < i.length; o += 3) { var s = i.slice(o, o + 3); s.push(i[o]), r.push(l([s])) } return r } function Jn(t, e) { if (!t) throw new Error("targetPoint is required"); if (!e) throw new Error("points is required"); var n, r = 1 / 0, i = 0; return F(e, (function (e, n) { var o = me(t, e); o < r && (i = n, r = o) })), (n = Ie(e.features[i])).properties.featureIndex = i, n.properties.distanceToPoint = r, n } function Zn(t) { if (!t) throw new Error("geojson is required"); var e = []; return z(t, (function (t) { !function (t, e) { var n = [], r = t.geometry; if (null !== r) { switch (r.type) { case "Polygon": n = Q(r); break; case "LineString": n = [Q(r)] } n.forEach((function (n) { (function (t, e) { var n = []; return t.reduce((function (t, r) { var i = h([t, r], e); return i.bbox = function (t, e) { var n = t[0], r = t[1], i = e[0], o = e[1]; return [n < i ? n : i, r < o ? r : o, n > i ? n : i, r > o ? r : o] }(t, r), n.push(i), r })), n })(n, t.properties).forEach((function (t) { t.id = e.length, e.push(t) })) })) } }(t, e) })), f(e) } Nn.deviation = function (t, e, n, r) { var i = e && e.length, o = i ? e[0] * n : t.length, s = Math.abs(Hn(t, 0, o, n)); if (i) for (var a = 0, u = e.length; a < u; a++) { var l = e[a] * n, c = a < u - 1 ? e[a + 1] * n : t.length; s -= Math.abs(Hn(t, l, c, n)) } var h = 0; for (a = 0; a < r.length; a += 3) { var p = r[a] * n, f = r[a + 1] * n, g = r[a + 2] * n; h += Math.abs((t[p] - t[g]) * (t[f + 1] - t[p + 1]) - (t[p] - t[f]) * (t[g + 1] - t[p + 1])) } return 0 === s && 0 === h ? 0 : Math.abs((h - s) / s) }, Nn.flatten = function (t) { for (var e = t[0][0].length, n = {vertices: [], holes: [], dimensions: e}, r = 0, i = 0; i < t.length; i++) { for (var o = 0; o < t[i].length; o++) for (var s = 0; s < e; s++) n.vertices.push(t[i][o][s]); i > 0 && (r += t[i - 1].length, n.holes.push(r)) } return n }, wn.default = In; var Kn = Bt((function (t, e) { function n(t, e, n) { void 0 === n && (n = {}); var r = {type: "Feature"}; return (0 === n.id || n.id) && (r.id = n.id), n.bbox && (r.bbox = n.bbox), r.properties = e || {}, r.geometry = t, r } function r(t, e, r) { if (void 0 === r && (r = {}), !t) throw new Error("coordinates is required"); if (!Array.isArray(t)) throw new Error("coordinates must be an Array"); if (t.length < 2) throw new Error("coordinates must be at least 2 numbers long"); if (!f(t[0]) || !f(t[1])) throw new Error("coordinates must contain numbers"); return n({type: "Point", coordinates: t}, e, r) } function i(t, e, r) { void 0 === r && (r = {}); for (var i = 0, o = t; i < o.length; i++) { var s = o[i]; if (s.length < 4) throw new Error("Each LinearRing of a Polygon must have 4 or more Positions."); for (var a = 0; a < s[s.length - 1].length; a++) if (s[s.length - 1][a] !== s[0][a]) throw new Error("First and last Position are not equivalent.") } return n({type: "Polygon", coordinates: t}, e, r) } function o(t, e, r) { if (void 0 === r && (r = {}), t.length < 2) throw new Error("coordinates must be an array of two or more positions"); return n({type: "LineString", coordinates: t}, e, r) } function s(t, e) { void 0 === e && (e = {}); var n = {type: "FeatureCollection"}; return e.id && (n.id = e.id), e.bbox && (n.bbox = e.bbox), n.features = t, n } function a(t, e, r) { return void 0 === r && (r = {}), n({type: "MultiLineString", coordinates: t}, e, r) } function u(t, e, r) { return void 0 === r && (r = {}), n({type: "MultiPoint", coordinates: t}, e, r) } function l(t, e, r) { return void 0 === r && (r = {}), n({type: "MultiPolygon", coordinates: t}, e, r) } function c(t, n) { void 0 === n && (n = "kilometers"); var r = e.factors[n]; if (!r) throw new Error(n + " units is invalid"); return t * r } function h(t, n) { void 0 === n && (n = "kilometers"); var r = e.factors[n]; if (!r) throw new Error(n + " units is invalid"); return t / r } function p(t) { return 180 * (t % (2 * Math.PI)) / Math.PI } function f(t) { return !isNaN(t) && null !== t && !Array.isArray(t) } Object.defineProperty(e, "__esModule", {value: !0}), e.earthRadius = 6371008.8, e.factors = { centimeters: 100 * e.earthRadius, centimetres: 100 * e.earthRadius, degrees: e.earthRadius / 111325, feet: 3.28084 * e.earthRadius, inches: 39.37 * e.earthRadius, kilometers: e.earthRadius / 1e3, kilometres: e.earthRadius / 1e3, meters: e.earthRadius, metres: e.earthRadius, miles: e.earthRadius / 1609.344, millimeters: 1e3 * e.earthRadius, millimetres: 1e3 * e.earthRadius, nauticalmiles: e.earthRadius / 1852, radians: 1, yards: 1.0936 * e.earthRadius }, e.unitsFactors = { centimeters: 100, centimetres: 100, degrees: 1 / 111325, feet: 3.28084, inches: 39.37, kilometers: .001, kilometres: .001, meters: 1, metres: 1, miles: 1 / 1609.344, millimeters: 1e3, millimetres: 1e3, nauticalmiles: 1 / 1852, radians: 1 / e.earthRadius, yards: 1.0936133 }, e.areaFactors = { acres: 247105e-9, centimeters: 1e4, centimetres: 1e4, feet: 10.763910417, hectares: 1e-4, inches: 1550.003100006, kilometers: 1e-6, kilometres: 1e-6, meters: 1, metres: 1, miles: 386e-9, millimeters: 1e6, millimetres: 1e6, yards: 1.195990046 }, e.feature = n, e.geometry = function (t, e, n) { switch (t) { case "Point": return r(e).geometry; case "LineString": return o(e).geometry; case "Polygon": return i(e).geometry; case "MultiPoint": return u(e).geometry; case "MultiLineString": return a(e).geometry; case "MultiPolygon": return l(e).geometry; default: throw new Error(t + " is invalid") } }, e.point = r, e.points = function (t, e, n) { return void 0 === n && (n = {}), s(t.map((function (t) { return r(t, e) })), n) }, e.polygon = i, e.polygons = function (t, e, n) { return void 0 === n && (n = {}), s(t.map((function (t) { return i(t, e) })), n) }, e.lineString = o, e.lineStrings = function (t, e, n) { return void 0 === n && (n = {}), s(t.map((function (t) { return o(t, e) })), n) }, e.featureCollection = s, e.multiLineString = a, e.multiPoint = u, e.multiPolygon = l, e.geometryCollection = function (t, e, r) { return void 0 === r && (r = {}), n({type: "GeometryCollection", geometries: t}, e, r) }, e.round = function (t, e) { if (void 0 === e && (e = 0), e && !(e >= 0)) throw new Error("precision must be a positive number"); var n = Math.pow(10, e || 0); return Math.round(t * n) / n }, e.radiansToLength = c, e.lengthToRadians = h, e.lengthToDegrees = function (t, e) { return p(h(t, e)) }, e.bearingToAzimuth = function (t) { var e = t % 360; return e < 0 && (e += 360), e }, e.radiansToDegrees = p, e.degreesToRadians = function (t) { return t % 360 * Math.PI / 180 }, e.convertLength = function (t, e, n) { if (void 0 === e && (e = "kilometers"), void 0 === n && (n = "kilometers"), !(t >= 0)) throw new Error("length must be a positive number"); return c(h(t, e), n) }, e.convertArea = function (t, n, r) { if (void 0 === n && (n = "meters"), void 0 === r && (r = "kilometers"), !(t >= 0)) throw new Error("area must be a positive number"); var i = e.areaFactors[n]; if (!i) throw new Error("invalid original units"); var o = e.areaFactors[r]; if (!o) throw new Error("invalid final units"); return t / i * o }, e.isNumber = f, e.isObject = function (t) { return !!t && t.constructor === Object }, e.validateBBox = function (t) { if (!t) throw new Error("bbox is required"); if (!Array.isArray(t)) throw new Error("bbox must be an Array"); if (4 !== t.length && 6 !== t.length) throw new Error("bbox must be an Array of 4 or 6 numbers"); t.forEach((function (t) { if (!f(t)) throw new Error("bbox must only contain numbers") })) }, e.validateId = function (t) { if (!t) throw new Error("id is required"); if (-1 === ["string", "number"].indexOf(typeof t)) throw new Error("id must be a number or a string") } })); function Qn(t, e, n) { if (null !== t) for (var r, i, o, s, a, u, l, c, h = 0, p = 0, f = t.type, g = "FeatureCollection" === f, d = "Feature" === f, y = g ? t.features.length : 1, v = 0; v < y; v++) { a = (c = !!(l = g ? t.features[v].geometry : d ? t.geometry : t) && "GeometryCollection" === l.type) ? l.geometries.length : 1; for (var _ = 0; _ < a; _++) { var m = 0, x = 0; if (null !== (s = c ? l.geometries[_] : l)) { u = s.coordinates; var E = s.type; switch (h = !n || "Polygon" !== E && "MultiPolygon" !== E ? 0 : 1, E) { case null: break; case "Point": if (!1 === e(u, p, v, m, x)) return !1; p++, m++; break; case "LineString": case "MultiPoint": for (r = 0; r < u.length; r++) { if (!1 === e(u[r], p, v, m, x)) return !1; p++, "MultiPoint" === E && m++ } "LineString" === E && m++; break; case "Polygon": case "MultiLineString": for (r = 0; r < u.length; r++) { for (i = 0; i < u[r].length - h; i++) { if (!1 === e(u[r][i], p, v, m, x)) return !1; p++ } "MultiLineString" === E && m++, "Polygon" === E && x++ } "Polygon" === E && m++; break; case "MultiPolygon": for (r = 0; r < u.length; r++) { for (x = 0, i = 0; i < u[r].length; i++) { for (o = 0; o < u[r][i].length - h; o++) { if (!1 === e(u[r][i][o], p, v, m, x)) return !1; p++ } x++ } m++ } break; case "GeometryCollection": for (r = 0; r < s.geometries.length; r++) if (!1 === Qn(s.geometries[r], e, n)) return !1; break; default: throw new Error("Unknown Geometry Type") } } } } } function $n(t, e) { var n; switch (t.type) { case "FeatureCollection": for (n = 0; n < t.features.length && !1 !== e(t.features[n].properties, n); n++) ; break; case "Feature": e(t.properties, 0) } } function tr(t, e) { if ("Feature" === t.type) e(t, 0); else if ("FeatureCollection" === t.type) for (var n = 0; n < t.features.length && !1 !== e(t.features[n], n); n++) ; } function er(t, e) { var n, r, i, o, s, a, u, l, c, h, p = 0, f = "FeatureCollection" === t.type, g = "Feature" === t.type, d = f ? t.features.length : 1; for (n = 0; n < d; n++) { for (a = f ? t.features[n].geometry : g ? t.geometry : t, l = f ? t.features[n].properties : g ? t.properties : {}, c = f ? t.features[n].bbox : g ? t.bbox : void 0, h = f ? t.features[n].id : g ? t.id : void 0, s = (u = !!a && "GeometryCollection" === a.type) ? a.geometries.length : 1, i = 0; i < s; i++) if (null !== (o = u ? a.geometries[i] : a)) switch (o.type) { case "Point": case "LineString": case "MultiPoint": case "Polygon": case "MultiLineString": case "MultiPolygon": if (!1 === e(o, p, l, c, h)) return !1; break; case "GeometryCollection": for (r = 0; r < o.geometries.length; r++) if (!1 === e(o.geometries[r], p, l, c, h)) return !1; break; default: throw new Error("Unknown Geometry Type") } else if (!1 === e(null, p, l, c, h)) return !1; p++ } } function nr(t, e) { er(t, (function (t, n, r, i, o) { var s, a = null === t ? null : t.type; switch (a) { case null: case "Point": case "LineString": case "Polygon": return !1 !== e(Kn.feature(t, r, {bbox: i, id: o}), n, 0) && void 0 } switch (a) { case "MultiPoint": s = "Point"; break; case "MultiLineString": s = "LineString"; break; case "MultiPolygon": s = "Polygon" } for (var u = 0; u < t.coordinates.length; u++) { var l = {type: s, coordinates: t.coordinates[u]}; if (!1 === e(Kn.feature(l, r), n, u)) return !1 } })) } function rr(t, e) { nr(t, (function (t, n, r) { var i = 0; if (t.geometry) { var o = t.geometry.type; if ("Point" !== o && "MultiPoint" !== o) { var s, a = 0, u = 0, l = 0; return !1 !== Qn(t, (function (o, c, h, p, f) { if (void 0 === s || n > a || p > u || f > l) return s = o, a = n, u = p, l = f, void (i = 0); var g = Kn.lineString([s, o], t.properties); if (!1 === e(g, n, r, f, i)) return !1; i++, s = o })) && void 0 } } })) } function ir(t, e) { if (!t) throw new Error("geojson is required"); nr(t, (function (t, n, r) { if (null !== t.geometry) { var i = t.geometry.type, o = t.geometry.coordinates; switch (i) { case "LineString": if (!1 === e(t, n, r, 0, 0)) return !1; break; case "Polygon": for (var s = 0; s < o.length; s++) if (!1 === e(Kn.lineString(o[s], t.properties), n, r, s)) return !1 } } })) } var or = function (t) { var e = []; return Qn(t, (function (t) { e.push(t) })), e }, sr = Qn, ar = function (t, e, n, r) { var i = n; return Qn(t, (function (t, r, o, s, a) { i = 0 === r && void 0 === n ? t : e(i, t, r, o, s, a) }), r), i }, ur = tr, lr = function (t, e, n) { var r = n; return tr(t, (function (t, i) { r = 0 === i && void 0 === n ? t : e(r, t, i) })), r }, cr = function (t, e) { if (e = e || {}, !Kn.isObject(e)) throw new Error("options is invalid"); var n, r = e.featureIndex || 0, i = e.multiFeatureIndex || 0, o = e.geometryIndex || 0, s = e.coordIndex || 0, a = e.properties; switch (t.type) { case "FeatureCollection": r < 0 && (r = t.features.length + r), a = a || t.features[r].properties, n = t.features[r].geometry; break; case "Feature": a = a || t.properties, n = t.geometry; break; case "Point": case "MultiPoint": return null; case "LineString": case "Polygon": case "MultiLineString": case "MultiPolygon": n = t; break; default: throw new Error("geojson is invalid") } if (null === n) return null; var u = n.coordinates; switch (n.type) { case "Point": return Kn.point(u, a, e); case "MultiPoint": return i < 0 && (i = u.length + i), Kn.point(u[i], a, e); case "LineString": return s < 0 && (s = u.length + s), Kn.point(u[s], a, e); case "Polygon": return o < 0 && (o = u.length + o), s < 0 && (s = u[o].length + s), Kn.point(u[o][s], a, e); case "MultiLineString": return i < 0 && (i = u.length + i), s < 0 && (s = u[i].length + s), Kn.point(u[i][s], a, e); case "MultiPolygon": return i < 0 && (i = u.length + i), o < 0 && (o = u[i].length + o), s < 0 && (s = u[i][o].length - s), Kn.point(u[i][o][s], a, e) } throw new Error("geojson is invalid") }, hr = function (t, e) { if (e = e || {}, !Kn.isObject(e)) throw new Error("options is invalid"); var n, r = e.featureIndex || 0, i = e.multiFeatureIndex || 0, o = e.geometryIndex || 0, s = e.segmentIndex || 0, a = e.properties; switch (t.type) { case "FeatureCollection": r < 0 && (r = t.features.length + r), a = a || t.features[r].properties, n = t.features[r].geometry; break; case "Feature": a = a || t.properties, n = t.geometry; break; case "Point": case "MultiPoint": return null; case "LineString": case "Polygon": case "MultiLineString": case "MultiPolygon": n = t; break; default: throw new Error("geojson is invalid") } if (null === n) return null; var u = n.coordinates; switch (n.type) { case "Point": case "MultiPoint": return null; case "LineString": return s < 0 && (s = u.length + s - 1), Kn.lineString([u[s], u[s + 1]], a, e); case "Polygon": return o < 0 && (o = u.length + o), s < 0 && (s = u[o].length + s - 1), Kn.lineString([u[o][s], u[o][s + 1]], a, e); case "MultiLineString": return i < 0 && (i = u.length + i), s < 0 && (s = u[i].length + s - 1), Kn.lineString([u[i][s], u[i][s + 1]], a, e); case "MultiPolygon": return i < 0 && (i = u.length + i), o < 0 && (o = u[i].length + o), s < 0 && (s = u[i][o].length - s - 1), Kn.lineString([u[i][o][s], u[i][o][s + 1]], a, e) } throw new Error("geojson is invalid") }, pr = nr, fr = function (t, e, n) { var r = n; return nr(t, (function (t, i, o) { r = 0 === i && 0 === o && void 0 === n ? t : e(r, t, i, o) })), r }, gr = er, dr = function (t, e, n) { var r = n; return er(t, (function (t, i, o, s, a) { r = 0 === i && void 0 === n ? t : e(r, t, i, o, s, a) })), r }, yr = ir, vr = function (t, e, n) { var r = n; return ir(t, (function (t, i, o, s) { r = 0 === i && void 0 === n ? t : e(r, t, i, o, s) })), r }, _r = $n, mr = function (t, e, n) { var r = n; return $n(t, (function (t, i) { r = 0 === i && void 0 === n ? t : e(r, t, i) })), r }, xr = rr, Er = function (t, e, n) { var r = n, i = !1; return rr(t, (function (t, o, s, a, u) { r = !1 === i && void 0 === n ? t : e(r, t, o, s, a, u), i = !0 })), r }, br = Object.defineProperty({ coordAll: or, coordEach: sr, coordReduce: ar, featureEach: ur, featureReduce: lr, findPoint: cr, findSegment: hr, flattenEach: pr, flattenReduce: fr, geomEach: gr, geomReduce: dr, lineEach: yr, lineReduce: vr, propEach: _r, propReduce: mr, segmentEach: xr, segmentReduce: Er }, "__esModule", {value: !0}); function wr(t) { var e = [1 / 0, 1 / 0, -1 / 0, -1 / 0]; return br.coordEach(t, (function (t) { e[0] > t[0] && (e[0] = t[0]), e[1] > t[1] && (e[1] = t[1]), e[2] < t[0] && (e[2] = t[0]), e[3] < t[1] && (e[3] = t[1]) })), e } wr.default = wr; var Ir = wr, Nr = Object.defineProperty({default: Ir}, "__esModule", {value: !0}).default, Sr = br.featureEach, Cr = (br.coordEach, Kn.polygon, Kn.featureCollection); function Pr(t) { var e = Nt(t); return e.insert = function (t) { if ("Feature" !== t.type) throw new Error("invalid feature"); return t.bbox = t.bbox ? t.bbox : Nr(t), Nt.prototype.insert.call(this, t) }, e.load = function (t) { var e = []; return Array.isArray(t) ? t.forEach((function (t) { if ("Feature" !== t.type) throw new Error("invalid features"); t.bbox = t.bbox ? t.bbox : Nr(t), e.push(t) })) : Sr(t, (function (t) { if ("Feature" !== t.type) throw new Error("invalid features"); t.bbox = t.bbox ? t.bbox : Nr(t), e.push(t) })), Nt.prototype.load.call(this, e) }, e.remove = function (t, e) { if ("Feature" !== t.type) throw new Error("invalid feature"); return t.bbox = t.bbox ? t.bbox : Nr(t), Nt.prototype.remove.call(this, t, e) }, e.clear = function () { return Nt.prototype.clear.call(this) }, e.search = function (t) { var e = Nt.prototype.search.call(this, this.toBBox(t)); return Cr(e) }, e.collides = function (t) { return Nt.prototype.collides.call(this, this.toBBox(t)) }, e.all = function () { var t = Nt.prototype.all.call(this); return Cr(t) }, e.toJSON = function () { return Nt.prototype.toJSON.call(this) }, e.fromJSON = function (t) { return Nt.prototype.fromJSON.call(this, t) }, e.toBBox = function (t) { var e; if (t.bbox) e = t.bbox; else if (Array.isArray(t) && 4 === t.length) e = t; else if (Array.isArray(t) && 6 === t.length) e = [t[0], t[1], t[3], t[4]]; else if ("Feature" === t.type) e = Nr(t); else { if ("FeatureCollection" !== t.type) throw new Error("invalid geojson"); e = Nr(t) } return {minX: e[0], minY: e[1], maxX: e[2], maxY: e[3]} }, e } var Mr = Pr, Lr = Pr; function Or(t, e) { var n = {}, r = []; if ("LineString" === t.type && (t = o(t)), "LineString" === e.type && (e = o(e)), "Feature" === t.type && "Feature" === e.type && null !== t.geometry && null !== e.geometry && "LineString" === t.geometry.type && "LineString" === e.geometry.type && 2 === t.geometry.coordinates.length && 2 === e.geometry.coordinates.length) { var i = Rr(t, e); return i && r.push(i), f(r) } var s = Mr(); return s.load(Zn(e)), F(Zn(t), (function (t) { F(s.search(t), (function (e) { var i = Rr(t, e); if (i) { var o = Q(i).join(","); n[o] || (n[o] = !0, r.push(i)) } })) })), f(r) } function Rr(t, e) { var n = Q(t), r = Q(e); if (2 !== n.length) throw new Error(" line1 must only contain 2 coordinates"); if (2 !== r.length) throw new Error(" line2 must only contain 2 coordinates"); var i = n[0][0], o = n[0][1], s = n[1][0], u = n[1][1], l = r[0][0], c = r[0][1], h = r[1][0], p = r[1][1], f = (p - c) * (s - i) - (h - l) * (u - o), g = (h - l) * (o - c) - (p - c) * (i - l), d = (s - i) * (o - c) - (u - o) * (i - l); if (0 === f) return null; var y = g / f, v = d / f; return y >= 0 && y <= 1 && v >= 0 && v <= 1 ? a([i + y * (s - i), o + y * (u - o)]) : null } function Tr(t, e, n) { void 0 === n && (n = {}); var r = a([1 / 0, 1 / 0], {dist: 1 / 0}), i = 0; return z(t, (function (t) { for (var o = Q(t), s = 0; s < o.length - 1; s++) { var u = a(o[s]); u.properties.dist = me(e, u, n); var l = a(o[s + 1]); l.properties.dist = me(e, l, n); var c = me(u, l, n), p = Math.max(u.properties.dist, l.properties.dist), f = mn(u, l), g = vn(e, p, f + 90, n), d = vn(e, p, f - 90, n), y = Or(h([g.geometry.coordinates, d.geometry.coordinates]), h([u.geometry.coordinates, l.geometry.coordinates])), v = null; y.features.length > 0 && ((v = y.features[0]).properties.dist = me(e, v, n), v.properties.location = i + me(u, v, n)), u.properties.dist < r.properties.dist && ((r = u).properties.index = s, r.properties.location = i), l.properties.dist < r.properties.dist && ((r = l).properties.index = s + 1, r.properties.location = i + c), v && v.properties.dist < r.properties.dist && ((r = v).properties.index = s), i += c } })), r } function Ar(t, n, r) { void 0 === r && (r = {}); var i = K(t), o = K(n); return o[0] += o[0] - i[0] > 180 ? -360 : i[0] - o[0] > 180 ? 360 : 0, N(function (t, n, r) { var i = r = void 0 === r ? e : Number(r), o = t[1] * Math.PI / 180, s = n[1] * Math.PI / 180, a = s - o, u = Math.abs(n[0] - t[0]) * Math.PI / 180; u > Math.PI && (u -= 2 * Math.PI); var l = Math.log(Math.tan(s / 2 + Math.PI / 4) / Math.tan(o / 2 + Math.PI / 4)), c = Math.abs(l) > 1e-11 ? a / l : Math.cos(o); return Math.sqrt(a * a + c * c * u * u) * i }(i, o), "meters", r.units) } function Dr(t, e, n) { if (void 0 === n && (n = {}), n.method || (n.method = "geodesic"), n.units || (n.units = "kilometers"), !t) throw new Error("pt is required"); if (Array.isArray(t) ? t = a(t) : "Point" === t.type ? t = o(t) : et(t, "Point", "point"), !e) throw new Error("line is required"); Array.isArray(e) ? e = h(e) : "LineString" === e.type ? e = o(e) : et(e, "LineString", "line"); var r = 1 / 0, i = t.geometry.coordinates; return U(e, (function (t) { var e = t.geometry.coordinates[0], o = t.geometry.coordinates[1], s = function (t, e, n, r) { var i = [n[0] - e[0], n[1] - e[1]], o = Fr([t[0] - e[0], t[1] - e[1]], i); if (o <= 0) return kr(t, e, {method: r.method, units: "degrees"}); var s = Fr(i, i); if (s <= o) return kr(t, n, {method: r.method, units: "degrees"}); var a = o / s, u = [e[0] + a * i[0], e[1] + a * i[1]]; return kr(t, u, {method: r.method, units: "degrees"}) }(i, e, o, n); s < r && (r = s) })), N(r, "degrees", n.units) } function Fr(t, e) { return t[0] * e[0] + t[1] * e[1] } function kr(t, e, n) { return "planar" === n.method ? Ar(t, e, n) : me(t, e, n) } function Gr(t, e, n, r, i, o, s, a) { var u, l, c, h, p = {x: null, y: null, onLine1: !1, onLine2: !1}; return 0 === (u = (a - o) * (n - t) - (s - i) * (r - e)) ? null !== p.x && null !== p.y && p : (h = (n - t) * (l = e - o) - (r - e) * (c = t - i), l = ((s - i) * l - (a - o) * c) / u, c = h / u, p.x = t + l * (n - t), p.y = e + l * (r - e), l >= 0 && l <= 1 && (p.onLine1 = !0), c >= 0 && c <= 1 && (p.onLine2 = !0), !(!p.onLine1 || !p.onLine2) && [p.x, p.y]) } function qr(t) { for (var e = function (t) { if ("FeatureCollection" !== t.type) return "Feature" !== t.type ? f([o(t)]) : f([t]); return t }(t), n = xn(e), r = !1, i = 0; !r && i < e.features.length;) { var s, u = e.features[i].geometry, l = !1; if ("Point" === u.type) n.geometry.coordinates[0] === u.coordinates[0] && n.geometry.coordinates[1] === u.coordinates[1] && (r = !0); else if ("MultiPoint" === u.type) { var c = !1; for (s = 0; !c && s < u.coordinates.length;) n.geometry.coordinates[0] === u.coordinates[s][0] && n.geometry.coordinates[1] === u.coordinates[s][1] && (r = !0, c = !0), s++ } else if ("LineString" === u.type) for (s = 0; !l && s < u.coordinates.length - 1;) Br(n.geometry.coordinates[0], n.geometry.coordinates[1], u.coordinates[s][0], u.coordinates[s][1], u.coordinates[s + 1][0], u.coordinates[s + 1][1]) && (l = !0, r = !0), s++; else if ("MultiLineString" === u.type) for (var h = 0; h < u.coordinates.length;) { l = !1, s = 0; for (var p = u.coordinates[h]; !l && s < p.length - 1;) Br(n.geometry.coordinates[0], n.geometry.coordinates[1], p[s][0], p[s][1], p[s + 1][0], p[s + 1][1]) && (l = !0, r = !0), s++; h++ } else "Polygon" !== u.type && "MultiPolygon" !== u.type || ye(n, u) && (r = !0); i++ } if (r) return n; var g = f([]); for (i = 0; i < e.features.length; i++) g.features = g.features.concat(bn(e.features[i]).features); return a(Jn(n, g).geometry.coordinates) } function Br(t, e, n, r, i, o) { return Math.sqrt((i - n) * (i - n) + (o - r) * (o - r)) === Math.sqrt((t - n) * (t - n) + (e - r) * (e - r)) + Math.sqrt((i - t) * (i - t) + (o - e) * (o - e)) } Mr.default = Lr; var zr = 6378137; function jr(t) { return B(t, (function (t, e) { return t + function (t) { var e, n = 0; switch (t.type) { case "Polygon": return Ur(t.coordinates); case "MultiPolygon": for (e = 0; e < t.coordinates.length; e++) n += Ur(t.coordinates[e]); return n; case "Point": case "MultiPoint": case "LineString": case "MultiLineString": return 0 } return 0 }(e) }), 0) } function Ur(t) { var e = 0; if (t && t.length > 0) { e += Math.abs(Vr(t[0])); for (var n = 1; n < t.length; n++) e -= Math.abs(Vr(t[n])) } return e } function Vr(t) { var e, n, r, i, o, s, a = 0, u = t.length; if (u > 2) { for (s = 0; s < u; s++) s === u - 2 ? (r = u - 2, i = u - 1, o = 0) : s === u - 1 ? (r = u - 1, i = 0, o = 1) : (r = s, i = s + 1, o = s + 2), e = t[r], n = t[i], a += (Xr(t[o][0]) - Xr(e[0])) * Math.sin(Xr(n[1])); a = a * zr * zr / 2 } return a } function Xr(t) { return t * Math.PI / 180 } function Yr(t, e) { return void 0 === e && (e = {}), V(t, (function (t, n) { var r = n.geometry.coordinates; return t + me(r[0], r[1], e) }), 0) } function Hr(t, e, n, r) { if (!P(r = r || {})) throw new Error("options is invalid"); var i, o = []; if ("Feature" === t.type) i = t.geometry.coordinates; else { if ("LineString" !== t.type) throw new Error("input must be a LineString Feature or Geometry"); i = t.coordinates } for (var s, a, u, l = i.length, c = 0, p = 0; p < i.length && !(e >= c && p === i.length - 1); p++) { if (c > e && 0 === o.length) { if (!(s = e - c)) return o.push(i[p]), h(o); a = mn(i[p], i[p - 1]) - 180, u = vn(i[p], s, a, r), o.push(u.geometry.coordinates) } if (c >= n) return (s = n - c) ? (a = mn(i[p], i[p - 1]) - 180, u = vn(i[p], s, a, r), o.push(u.geometry.coordinates), h(o)) : (o.push(i[p]), h(o)); if (c >= e && o.push(i[p]), p === i.length - 1) return h(o); c += me(i[p], i[p + 1], r) } if (c < e && i.length === l) throw new Error("Start position is beyond line"); var f = i[i.length - 1]; return h([f, f]) } function Wr(t, e, n) { void 0 === n && (n = {}); for (var r = K(t), i = Q(e), o = 0; o < i.length - 1; o++) { var s = !1; if (n.ignoreEndVertices && (0 === o && (s = "start"), o === i.length - 2 && (s = "end"), 0 === o && o + 1 === i.length - 1 && (s = "both")), Jr(i[o], i[o + 1], r, s, void 0 === n.epsilon ? null : n.epsilon)) return !0 } return !1 } function Jr(t, e, n, r, i) { var o = n[0], s = n[1], a = t[0], u = t[1], l = e[0], c = e[1], h = l - a, p = c - u, f = (n[0] - a) * p - (n[1] - u) * h; if (null !== i) { if (Math.abs(f) > i) return !1 } else if (0 !== f) return !1; return r ? "start" === r ? Math.abs(h) >= Math.abs(p) ? h > 0 ? a < o && o <= l : l <= o && o < a : p > 0 ? u < s && s <= c : c <= s && s < u : "end" === r ? Math.abs(h) >= Math.abs(p) ? h > 0 ? a <= o && o < l : l < o && o <= a : p > 0 ? u <= s && s < c : c < s && s <= u : "both" === r && (Math.abs(h) >= Math.abs(p) ? h > 0 ? a < o && o < l : l < o && o < a : p > 0 ? u < s && s < c : c < s && s < u) : Math.abs(h) >= Math.abs(p) ? h > 0 ? a <= o && o <= l : l <= o && o <= a : p > 0 ? u <= s && s <= c : c <= s && s <= u } function Zr(t, e) { var n = rt(t), r = rt(e), i = n.type, o = r.type; switch (i) { case "Point": switch (o) { case "MultiPoint": return function (t, e) { var n, r = !1; for (n = 0; n < e.coordinates.length; n++) if (Qr(e.coordinates[n], t.coordinates)) { r = !0; break } return r }(n, r); case "LineString": return Wr(n, r, {ignoreEndVertices: !0}); case "Polygon": case "MultiPolygon": return ye(n, r, {ignoreBoundary: !0}); default: throw new Error("feature2 " + o + " geometry not supported") } case "MultiPoint": switch (o) { case "MultiPoint": return function (t, e) { for (var n = 0; n < t.coordinates.length; n++) { for (var r = !1, i = 0; i < e.coordinates.length; i++) Qr(t.coordinates[n], e.coordinates[i]) && (r = !0); if (!r) return !1 } return !0 }(n, r); case "LineString": return function (t, e) { for (var n = !1, r = 0; r < t.coordinates.length; r++) { if (!Wr(t.coordinates[r], e)) return !1; n || (n = Wr(t.coordinates[r], e, {ignoreEndVertices: !0})) } return n }(n, r); case "Polygon": case "MultiPolygon": return function (t, e) { for (var n = !0, r = !1, i = 0; i < t.coordinates.length; i++) { if (!(r = ye(t.coordinates[1], e))) { n = !1; break } r = ye(t.coordinates[1], e, {ignoreBoundary: !0}) } return n && r }(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } case "LineString": switch (o) { case "LineString": return function (t, e) { for (var n = 0; n < t.coordinates.length; n++) if (!Wr(t.coordinates[n], e)) return !1; return !0 }(n, r); case "Polygon": case "MultiPolygon": return function (t, e) { var n = Z(e), r = Z(t); if (!Kr(n, r)) return !1; for (var i = !1, o = 0; o < t.coordinates.length - 1; o++) { if (!ye(t.coordinates[o], e)) return !1; if (i || (i = ye(t.coordinates[o], e, {ignoreBoundary: !0})), !i) i = ye($r(t.coordinates[o], t.coordinates[o + 1]), e, {ignoreBoundary: !0}) } return i }(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } case "Polygon": switch (o) { case "Polygon": case "MultiPolygon": return function (t, e) { var n = Z(t); if (!Kr(Z(e), n)) return !1; for (var r = 0; r < t.coordinates[0].length; r++) if (!ye(t.coordinates[0][r], e)) return !1; return !0 }(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } default: throw new Error("feature1 " + i + " geometry not supported") } } function Kr(t, e) { return !(t[0] > e[0]) && (!(t[2] < e[2]) && (!(t[1] > e[1]) && !(t[3] < e[3]))) } function Qr(t, e) { return t[0] === e[0] && t[1] === e[1] } function $r(t, e) { return [(t[0] + e[0]) / 2, (t[1] + e[1]) / 2] } function ti(t, e, n) { void 0 === n && (n = {}), n.mask && !n.units && (n.units = "kilometers"); for (var r = [], i = t[0], o = t[1], s = t[2], u = t[3], l = e / me([i, o], [s, o], n) * (s - i), c = e / me([i, o], [i, u], n) * (u - o), h = s - i, p = u - o, g = Math.floor(h / l), d = (p - Math.floor(p / c) * c) / 2, y = i + (h - g * l) / 2; y <= s;) { for (var v = o + d; v <= u;) { var _ = a([y, v], n.properties); n.mask ? Zr(_, n.mask) && r.push(_) : r.push(_), v += c } y += l } return f(r) } function ei(t, e) { void 0 === e && (e = {}); var n = e.precision, r = e.coordinates, i = e.mutate; if (n = null == n || isNaN(n) ? 6 : n, r = null == r || isNaN(r) ? 3 : r, !t) throw new Error(" is required"); if ("number" != typeof n) throw new Error(" must be a number"); if ("number" != typeof r) throw new Error(" must be a number"); !1 !== i && void 0 !== i || (t = JSON.parse(JSON.stringify(t))); var o = Math.pow(10, n); return R(t, (function (t) { !function (t, e, n) { t.length > n && t.splice(n, t.length); for (var r = 0; r < t.length; r++) t[r] = Math.round(t[r] * e) / e }(t, o, r) })), t } function ni(t) { if (!t) throw new Error("geojson is required"); var e = []; return z(t, (function (t) { e.push(t) })), f(e) } function ri(t, e, n) { if ("Polygon" !== t.geometry.type) throw new Error("The input feature must be a Polygon"); void 0 === n && (n = 1); var r = t.geometry.coordinates, i = [], o = {}; if (n) { for (var s = [], a = 0; a < r.length; a++) for (var u = 0; u < r[a].length - 1; u++) s.push(d(a, u)); var l = Nt(); l.load(s) } for (var c = 0; c < r.length; c++) for (var h = 0; h < r[c].length - 1; h++) { if (n) l.search(d(c, h)).forEach((function (t) { var e = t.ring, n = t.edge; g(c, h, e, n) })); else for (var p = 0; p < r.length; p++) for (var f = 0; f < r[p].length - 1; f++) g(c, h, p, f) } return e || (i = {type: "Feature", geometry: {type: "MultiPoint", coordinates: i}}), i; function g(t, n, s, a) { var u, l, c = r[t][n], h = r[t][n + 1], p = r[s][a], f = r[s][a + 1], g = function (t, e, n, r) { if (ii(t, n) || ii(t, r) || ii(e, n) || ii(r, n)) return null; var i = t[0], o = t[1], s = e[0], a = e[1], u = n[0], l = n[1], c = r[0], h = r[1], p = (i - s) * (l - h) - (o - a) * (u - c); return 0 === p ? null : [((i * a - o * s) * (u - c) - (i - s) * (u * h - l * c)) / p, ((i * a - o * s) * (l - h) - (o - a) * (u * h - l * c)) / p] }(c, h, p, f); if (null !== g && (u = h[0] !== c[0] ? (g[0] - c[0]) / (h[0] - c[0]) : (g[1] - c[1]) / (h[1] - c[1]), l = f[0] !== p[0] ? (g[0] - p[0]) / (f[0] - p[0]) : (g[1] - p[1]) / (f[1] - p[1]), !(u >= 1 || u <= 0 || l >= 1 || l <= 0))) { var d = g, y = !o[d]; y && (o[d] = !0), e ? i.push(e(g, t, n, c, h, u, s, a, p, f, l, y)) : i.push(g) } } function d(t, e) { var n, i, o, s, a = r[t][e], u = r[t][e + 1]; return a[0] < u[0] ? (n = a[0], i = u[0]) : (n = u[0], i = a[0]), a[1] < u[1] ? (o = a[1], s = u[1]) : (o = u[1], s = a[1]), { minX: n, minY: o, maxX: i, maxY: s, ring: t, edge: e } } } function ii(t, e) { if (!t || !e) return !1; if (t.length !== e.length) return !1; for (var n = 0, r = t.length; n < r; n++) if (t[n] instanceof Array && e[n] instanceof Array) { if (!ii(t[n], e[n])) return !1 } else if (t[n] !== e[n]) return !1; return !0 } function oi(t) { if ("Feature" != t.type) throw new Error("The input must a geojson object of type Feature"); if (void 0 === t.geometry || null == t.geometry) throw new Error("The input must a geojson object with a non-empty geometry"); if ("Polygon" != t.geometry.type) throw new Error("The input must be a geojson Polygon"); for (var e = t.geometry.coordinates.length, n = [], r = 0; r < e; r++) { var i = t.geometry.coordinates[r]; ci(i[0], i[i.length - 1]) || i.push(i[0]), n.push.apply(n, i.slice(0, i.length - 1)) } if (!function (t) { for (var e = {}, n = 1, r = 0, i = t.length; r < i; ++r) { if (Object.prototype.hasOwnProperty.call(e, t[r])) { n = 0; break } e[t[r]] = 1 } return n }(n)) throw new Error("The input polygon may not have duplicate vertices (except for the first and last vertex of each ring)"); var o = n.length, s = ri(t, (function (t, e, n, r, i, o, s, a, u, l, c, h) { return [t, e, n, r, i, o, s, a, u, l, c, h] })), a = s.length; if (0 == a) { var u = []; for (r = 0; r < e; r++) u.push(l([t.geometry.coordinates[r]], { parent: -1, winding: li(t.geometry.coordinates[r]) })); var c = f(u); return G(), q(), c } var h = [], p = []; for (r = 0; r < e; r++) { h.push([]); for (var g = 0; g < t.geometry.coordinates[r].length - 1; g++) h[r].push([new si(t.geometry.coordinates[r][hi(g + 1, t.geometry.coordinates[r].length - 1)], 1, [r, g], [r, hi(g + 1, t.geometry.coordinates[r].length - 1)], void 0)]), p.push(new ai(t.geometry.coordinates[r][g], [r, hi(g - 1, t.geometry.coordinates[r].length - 1)], [r, g], void 0, void 0, !1, !0)) } for (r = 0; r < a; r++) h[s[r][1]][s[r][2]].push(new si(s[r][0], s[r][5], [s[r][1], s[r][2]], [s[r][6], s[r][7]], void 0)), s[r][11] && p.push(new ai(s[r][0], [s[r][1], s[r][2]], [s[r][6], s[r][7]], void 0, void 0, !0, !0)); var d = p.length; for (r = 0; r < h.length; r++) for (g = 0; g < h[r].length; g++) h[r][g].sort((function (t, e) { return t.param < e.param ? -1 : 1 })); var y = []; for (r = 0; r < d; r++) y.push({ minX: p[r].coord[0], minY: p[r].coord[1], maxX: p[r].coord[0], maxY: p[r].coord[1], index: r }); var v = Nt(); v.load(y); for (r = 0; r < h.length; r++) for (g = 0; g < h[r].length; g++) for (var _ = 0; _ < h[r][g].length; _++) { x = _ == h[r][g].length - 1 ? h[r][hi(g + 1, t.geometry.coordinates[r].length - 1)][0].coord : h[r][g][_ + 1].coord; var m = v.search({minX: x[0], minY: x[1], maxX: x[0], maxY: x[1]})[0]; h[r][g][_].nxtIsectAlongEdgeIn = m.index } for (r = 0; r < h.length; r++) for (g = 0; g < h[r].length; g++) for (_ = 0; _ < h[r][g].length; _++) { var x = h[r][g][_].coord, E = (m = v.search({minX: x[0], minY: x[1], maxX: x[0], maxY: x[1]})[0]).index; E < o ? p[E].nxtIsectAlongRingAndEdge2 = h[r][g][_].nxtIsectAlongEdgeIn : ci(p[E].ringAndEdge1, h[r][g][_].ringAndEdgeIn) ? p[E].nxtIsectAlongRingAndEdge1 = h[r][g][_].nxtIsectAlongEdgeIn : p[E].nxtIsectAlongRingAndEdge2 = h[r][g][_].nxtIsectAlongEdgeIn } var b = []; for (r = 0, g = 0; g < e; g++) { var w = r; for (_ = 0; _ < t.geometry.coordinates[g].length - 1; _++) p[r].coord[0] < p[w].coord[0] && (w = r), r++; var I = p[w].nxtIsectAlongRingAndEdge2; for (_ = 0; _ < p.length; _++) if (p[_].nxtIsectAlongRingAndEdge1 == w || p[_].nxtIsectAlongRingAndEdge2 == w) { var N = _; break } var S = ui([p[N].coord, p[w].coord, p[I].coord], !0) ? 1 : -1; b.push({isect: w, parent: -1, winding: S}) } b.sort((function (t, e) { return p[t.isect].coord > p[e.isect].coord ? -1 : 1 })); for (u = []; b.length > 0;) { var C = b.pop(), P = C.isect, M = C.parent, L = C.winding, O = u.length, R = [p[P].coord], T = P; if (p[P].ringAndEdge1Walkable) var A = p[P].ringAndEdge1, D = p[P].nxtIsectAlongRingAndEdge1; else A = p[P].ringAndEdge2, D = p[P].nxtIsectAlongRingAndEdge2; for (; !ci(p[P].coord, p[D].coord);) { R.push(p[D].coord); var F = void 0; for (r = 0; r < b.length; r++) if (b[r].isect == D) { F = r; break } if (null != F && b.splice(F, 1), ci(A, p[D].ringAndEdge1)) { if (A = p[D].ringAndEdge2, p[D].ringAndEdge2Walkable = !1, p[D].ringAndEdge1Walkable) { var k = {isect: D}; ui([p[T].coord, p[D].coord, p[p[D].nxtIsectAlongRingAndEdge2].coord], 1 == L) ? (k.parent = M, k.winding = -L) : (k.parent = O, k.winding = L), b.push(k) } T = D, D = p[D].nxtIsectAlongRingAndEdge2 } else { if (A = p[D].ringAndEdge1, p[D].ringAndEdge1Walkable = !1, p[D].ringAndEdge2Walkable) { k = {isect: D}; ui([p[T].coord, p[D].coord, p[p[D].nxtIsectAlongRingAndEdge1].coord], 1 == L) ? (k.parent = M, k.winding = -L) : (k.parent = O, k.winding = L), b.push(k) } T = D, D = p[D].nxtIsectAlongRingAndEdge1 } } R.push(p[D].coord), u.push(l([R], {index: O, parent: M, winding: L, netWinding: void 0})) } c = f(u); function G() { for (var t = [], e = 0; e < c.features.length; e++) -1 == c.features[e].properties.parent && t.push(e); if (t.length > 1) for (e = 0; e < t.length; e++) { for (var n = -1, r = 0; r < c.features.length; r++) t[e] != r && ye(c.features[t[e]].geometry.coordinates[0][0], c.features[r], {ignoreBoundary: !0}) && jr(c.features[r]) < Infinity && (n = r); c.features[t[e]].properties.parent = n } } function q() { for (var t = 0; t < c.features.length; t++) if (-1 == c.features[t].properties.parent) { var e = c.features[t].properties.winding; c.features[t].properties.netWinding = e, B(t, e) } } function B(t, e) { for (var n = 0; n < c.features.length; n++) if (c.features[n].properties.parent == t) { var r = e + c.features[n].properties.winding; c.features[n].properties.netWinding = r, B(n, r) } } return G(), q(), c } var si = function (t, e, n, r, i) { this.coord = t, this.param = e, this.ringAndEdgeIn = n, this.ringAndEdgeOut = r, this.nxtIsectAlongEdgeIn = i }, ai = function (t, e, n, r, i, o, s) { this.coord = t, this.ringAndEdge1 = e, this.ringAndEdge2 = n, this.nxtIsectAlongRingAndEdge1 = r, this.nxtIsectAlongRingAndEdge2 = i, this.ringAndEdge1Walkable = o, this.ringAndEdge2Walkable = s }; function ui(t, e) { if (void 0 === e && (e = !0), 3 != t.length) throw new Error("This function requires an array of three points [x,y]"); return (t[1][0] - t[0][0]) * (t[2][1] - t[0][1]) - (t[1][1] - t[0][1]) * (t[2][0] - t[0][0]) >= 0 == e } function li(t) { for (var e = 0, n = 0; n < t.length - 1; n++) t[n][0] < t[e][0] && (e = n); if (ui([t[hi(e - 1, t.length - 1)], t[e], t[hi(e + 1, t.length - 1)]], !0)) var r = 1; else r = -1; return r } function ci(t, e) { if (!t || !e) return !1; if (t.length != e.length) return !1; for (var n = 0, r = t.length; n < r; n++) if (t[n] instanceof Array && e[n] instanceof Array) { if (!ci(t[n], e[n])) return !1 } else if (t[n] != e[n]) return !1; return !0 } function hi(t, e) { return (t % e + e) % e } var pi = Math.PI / 180, fi = 180 / Math.PI, gi = function (t, e) { this.lon = t, this.lat = e, this.x = pi * t, this.y = pi * e }; gi.prototype.view = function () { return String(this.lon).slice(0, 4) + "," + String(this.lat).slice(0, 4) }, gi.prototype.antipode = function () { var t = -1 * this.lat, e = this.lon < 0 ? 180 + this.lon : -1 * (180 - this.lon); return new gi(e, t) }; var di = function () { this.coords = [], this.length = 0 }; di.prototype.move_to = function (t) { this.length++, this.coords.push(t) }; var yi = function (t) { this.properties = t || {}, this.geometries = [] }; yi.prototype.json = function () { if (this.geometries.length <= 0) return { geometry: {type: "LineString", coordinates: null}, type: "Feature", properties: this.properties }; if (1 === this.geometries.length) return { geometry: {type: "LineString", coordinates: this.geometries[0].coords}, type: "Feature", properties: this.properties }; for (var t = [], e = 0; e < this.geometries.length; e++) t.push(this.geometries[e].coords); return {geometry: {type: "MultiLineString", coordinates: t}, type: "Feature", properties: this.properties} }, yi.prototype.wkt = function () { for (var t = "", e = "LINESTRING(", n = function (t) { e += t[0] + " " + t[1] + "," }, r = 0; r < this.geometries.length; r++) { if (0 === this.geometries[r].coords.length) return "LINESTRING(empty)"; this.geometries[r].coords.forEach(n), t += e.substring(0, e.length - 1) + ")" } return t }; var vi = function (t, e, n) { if (!t || void 0 === t.x || void 0 === t.y) throw new Error("GreatCircle constructor expects two args: start and end objects with x and y properties"); if (!e || void 0 === e.x || void 0 === e.y) throw new Error("GreatCircle constructor expects two args: start and end objects with x and y properties"); this.start = new gi(t.x, t.y), this.end = new gi(e.x, e.y), this.properties = n || {}; var r = this.start.x - this.end.x, i = this.start.y - this.end.y, o = Math.pow(Math.sin(i / 2), 2) + Math.cos(this.start.y) * Math.cos(this.end.y) * Math.pow(Math.sin(r / 2), 2); if (this.g = 2 * Math.asin(Math.sqrt(o)), this.g === Math.PI) throw new Error("it appears " + t.view() + " and " + e.view() + " are 'antipodal', e.g diametrically opposite, thus there is no single route but rather infinite"); if (isNaN(this.g)) throw new Error("could not calculate great circle between " + t + " and " + e) }; function _i(t, e) { var n = [], r = Mr(); return z(e, (function (e) { if (n.forEach((function (t, e) { t.id = e })), n.length) { var i = r.search(e); if (i.features.length) { var o = xi(e, i); n = n.filter((function (t) { return t.id !== o.id })), r.remove(o), F(mi(o, e), (function (t) { n.push(t), r.insert(t) })) } } else (n = mi(t, e).features).forEach((function (t) { t.bbox || (t.bbox = yn(Z(t))) })), r.load(f(n)) })), f(n) } function mi(t, e) { var n = [], r = Q(t)[0], i = Q(t)[t.geometry.coordinates.length - 1]; if (Ei(r, K(e)) || Ei(i, K(e))) return f([t]); var o = Mr(), s = Zn(t); o.load(s); var a = o.search(e); if (!a.features.length) return f([t]); var u = xi(e, a), l = k(s, (function (t, r, i) { var o = Q(r)[1], s = K(e); return i === u.id ? (t.push(s), n.push(h(t)), Ei(s, o) ? [s] : [s, o]) : (t.push(o), t) }), [r]); return l.length > 1 && n.push(h(l)), f(n) } function xi(t, e) { if (!e.features.length) throw new Error("lines must contain features"); if (1 === e.features.length) return e.features[0]; var n, r = 1 / 0; return F(e, (function (e) { var i = Tr(e, t).properties.dist; i < r && (n = e, r = i) })), n } function Ei(t, e) { return t[0] === e[0] && t[1] === e[1] } function bi(t, e, n, r, i) { void 0 === i && (i = {}); var o = i.steps || 64, s = wi(n), a = wi(r), u = Array.isArray(t) || "Feature" !== t.type ? {} : t.properties; if (s === a) return h(_n(t, e, i).geometry.coordinates[0], u); for (var l = s, c = s < a ? a : a + 360, p = l, f = [], g = 0; p < c;) f.push(vn(t, e, p, i).geometry.coordinates), p = l + 360 * ++g / o; return p > c && f.push(vn(t, e, c, i).geometry.coordinates), h(f, u) } function wi(t) { var e = t % 360; return e < 0 && (e += 360), e } function Ii(t, e) { void 0 === e && (e = {}); var n = rt(t); switch (e.properties || "Feature" !== t.type || (e.properties = t.properties), n.type) { case "Polygon": return Ni(n, e); case "MultiPolygon": return function (t, e) { void 0 === e && (e = {}); var n = rt(t).coordinates, r = e.properties ? e.properties : "Feature" === t.type ? t.properties : {}, i = []; return n.forEach((function (t) { i.push(Si(t, r)) })), f(i) }(n, e); default: throw new Error("invalid poly") } } function Ni(t, e) { return void 0 === e && (e = {}), Si(rt(t).coordinates, e.properties ? e.properties : "Feature" === t.type ? t.properties : {}) } function Si(t, e) { return t.length > 1 ? g(t, e) : h(t[0], e) } function Ci(t, e) { var n, r, i; void 0 === e && (e = {}); var o = e.properties, s = null === (n = e.autoComplete) || void 0 === n || n, a = null === (r = e.orderCoords) || void 0 === r || r; switch (null !== (i = e.mutate) && void 0 !== i && i || (t = Ie(t)), t.type) { case "FeatureCollection": var u = []; return t.features.forEach((function (t) { u.push(Q(Pi(t, {}, s, a))) })), y(u, o); default: return Pi(t, o, s, a) } } function Pi(t, e, n, r) { e = e || ("Feature" === t.type ? t.properties : {}); var i = rt(t), o = i.coordinates, s = i.type; if (!o.length) throw new Error("line must contain coordinates"); switch (s) { case "LineString": return n && (o = Mi(o)), l([o], e); case "MultiLineString": var a = [], u = 0; return o.forEach((function (t) { if (n && (t = Mi(t)), r) { var e = function (t) { var e = t[0], n = t[1], r = t[2], i = t[3]; return Math.abs(e - r) * Math.abs(n - i) }(Z(h(t))); e > u ? (a.unshift(t), u = e) : a.push(t) } else a.push(t) })), l(a, e); default: throw new Error("geometry type " + s + " is not supported") } } function Mi(t) { var e = t[0], n = e[0], r = e[1], i = t[t.length - 1], o = i[0], s = i[1]; return n === o && r === s || t.push(e), t } function Li(t, e) { var n, r, i, o, s, a, u; for (r = 1; r <= 8; r *= 2) { for (n = [], o = !(Ri(i = t[t.length - 1], e) & r), s = 0; s < t.length; s++) (u = !(Ri(a = t[s], e) & r)) !== o && n.push(Oi(i, a, r, e)), u && n.push(a), i = a, o = u; if (!(t = n).length) break } return n } function Oi(t, e, n, r) { return 8 & n ? [t[0] + (e[0] - t[0]) * (r[3] - t[1]) / (e[1] - t[1]), r[3]] : 4 & n ? [t[0] + (e[0] - t[0]) * (r[1] - t[1]) / (e[1] - t[1]), r[1]] : 2 & n ? [r[2], t[1] + (e[1] - t[1]) * (r[2] - t[0]) / (e[0] - t[0])] : 1 & n ? [r[0], t[1] + (e[1] - t[1]) * (r[0] - t[0]) / (e[0] - t[0])] : null } function Ri(t, e) { var n = 0; return t[0] < e[0] ? n |= 1 : t[0] > e[2] && (n |= 2), t[1] < e[1] ? n |= 4 : t[1] > e[3] && (n |= 8), n } function Ti(t, e) { for (var n = [], r = 0, i = t; r < i.length; r++) { var o = Li(i[r], e); o.length > 0 && (o[0][0] === o[o.length - 1][0] && o[0][1] === o[o.length - 1][1] || o.push(o[0]), o.length >= 4 && n.push(o)) } return n } vi.prototype.interpolate = function (t) { var e = Math.sin((1 - t) * this.g) / Math.sin(this.g), n = Math.sin(t * this.g) / Math.sin(this.g), r = e * Math.cos(this.start.y) * Math.cos(this.start.x) + n * Math.cos(this.end.y) * Math.cos(this.end.x), i = e * Math.cos(this.start.y) * Math.sin(this.start.x) + n * Math.cos(this.end.y) * Math.sin(this.end.x), o = e * Math.sin(this.start.y) + n * Math.sin(this.end.y), s = fi * Math.atan2(o, Math.sqrt(Math.pow(r, 2) + Math.pow(i, 2))); return [fi * Math.atan2(i, r), s] }, vi.prototype.Arc = function (t, e) { var n = []; if (!t || t <= 2) n.push([this.start.lon, this.start.lat]), n.push([this.end.lon, this.end.lat]); else for (var r = 1 / (t - 1), i = 0; i < t; ++i) { var o = r * i, s = this.interpolate(o); n.push(s) } for (var a = !1, u = 0, l = e && e.offset ? e.offset : 10, c = 180 - l, h = -180 + l, p = 360 - l, f = 1; f < n.length; ++f) { var g = n[f - 1][0], d = n[f][0], y = Math.abs(d - g); y > p && (d > c && g < h || g > c && d < h) ? a = !0 : y > u && (u = y) } var v = []; if (a && u < l) { var _ = []; v.push(_); for (var m = 0; m < n.length; ++m) { var x = parseFloat(n[m][0]); if (m > 0 && Math.abs(x - n[m - 1][0]) > p) { var E = parseFloat(n[m - 1][0]), b = parseFloat(n[m - 1][1]), w = parseFloat(n[m][0]), I = parseFloat(n[m][1]); if (E > -180 && E < h && 180 === w && m + 1 < n.length && n[m - 1][0] > -180 && n[m - 1][0] < h) { _.push([-180, n[m][1]]), m++, _.push([n[m][0], n[m][1]]); continue } if (E > c && E < 180 && -180 === w && m + 1 < n.length && n[m - 1][0] > c && n[m - 1][0] < 180) { _.push([180, n[m][1]]), m++, _.push([n[m][0], n[m][1]]); continue } if (E < h && w > c) { var N = E; E = w, w = N; var S = b; b = I, I = S } if (E > c && w < h && (w += 360), E <= 180 && w >= 180 && E < w) { var C = (180 - E) / (w - E), P = C * I + (1 - C) * b; _.push([n[m - 1][0] > c ? 180 : -180, P]), (_ = []).push([n[m - 1][0] > c ? -180 : 180, P]), v.push(_) } else _ = [], v.push(_); _.push([x, n[m][1]]) } else _.push([n[m][0], n[m][1]]) } } else { var M = []; v.push(M); for (var L = 0; L < n.length; ++L) M.push([n[L][0], n[L][1]]) } for (var O = new yi(this.properties), R = 0; R < v.length; ++R) { var T = new di; O.geometries.push(T); for (var A = v[R], D = 0; D < A.length; ++D) T.move_to(A[D]) } return O }; var Ai = Bt((function (t, e) { function n(t) { var e = []; for (var n in t) e.push(n); return e } (t.exports = "function" == typeof Object.keys ? Object.keys : n).shim = n })), Di = Bt((function (t, e) { var n = "[object Arguments]" == function () { return Object.prototype.toString.call(arguments) }(); function r(t) { return "[object Arguments]" == Object.prototype.toString.call(t) } function i(t) { return t && "object" == typeof t && "number" == typeof t.length && Object.prototype.hasOwnProperty.call(t, "callee") && !Object.prototype.propertyIsEnumerable.call(t, "callee") || !1 } (e = t.exports = n ? r : i).supported = r, e.unsupported = i })), Fi = Bt((function (t) { var e = Array.prototype.slice, n = t.exports = function (t, o, s) { return s || (s = {}), t === o || (t instanceof Date && o instanceof Date ? t.getTime() === o.getTime() : !t || !o || "object" != typeof t && "object" != typeof o ? s.strict ? t === o : t == o : function (t, o, s) { var a, u; if (r(t) || r(o)) return !1; if (t.prototype !== o.prototype) return !1; if (Di(t)) return !!Di(o) && (t = e.call(t), o = e.call(o), n(t, o, s)); if (i(t)) { if (!i(o)) return !1; if (t.length !== o.length) return !1; for (a = 0; a < t.length; a++) if (t[a] !== o[a]) return !1; return !0 } try { var l = Ai(t), c = Ai(o) } catch (t) { return !1 } if (l.length != c.length) return !1; for (l.sort(), c.sort(), a = l.length - 1; a >= 0; a--) if (l[a] != c[a]) return !1; for (a = l.length - 1; a >= 0; a--) if (u = l[a], !n(t[u], o[u], s)) return !1; return typeof t == typeof o }(t, o, s)) }; function r(t) { return null == t } function i(t) { return !(!t || "object" != typeof t || "number" != typeof t.length) && ("function" == typeof t.copy && "function" == typeof t.slice && !(t.length > 0 && "number" != typeof t[0])) } })); function ki(t, e, n) { if (void 0 === n && (n = {}), !P(n = n || {})) throw new Error("options is invalid"); var r, i = n.tolerance || 0, o = [], s = Mr(), a = Zn(t); return s.load(a), U(e, (function (t) { var e = !1; t && (F(s.search(t), (function (n) { if (!1 === e) { var o = Q(t).sort(), s = Q(n).sort(); Fi(o, s) || (0 === i ? Wr(o[0], n) && Wr(o[1], n) : Tr(n, o[0]).properties.dist <= i && Tr(n, o[1]).properties.dist <= i) ? (e = !0, r = r ? Gi(r, t) : t) : (0 === i ? Wr(s[0], t) && Wr(s[1], t) : Tr(t, s[0]).properties.dist <= i && Tr(t, s[1]).properties.dist <= i) && (r = r ? Gi(r, n) : n) } })), !1 === e && r && (o.push(r), r = void 0)) })), r && o.push(r), f(o) } function Gi(t, e) { var n = Q(e), r = Q(t), i = r[0], o = r[r.length - 1], s = t.geometry.coordinates; return Fi(n[0], i) ? s.unshift(n[1]) : Fi(n[0], o) ? s.push(n[1]) : Fi(n[1], i) ? s.unshift(n[0]) : Fi(n[1], o) && s.push(n[0]), t } function qi(t) { var e = t % 360; return e < 0 && (e += 360), e } function Bi(t, e, n) { var r; return void 0 === n && (n = {}), (r = n.final ? zi(K(e), K(t)) : zi(K(t), K(e))) > 180 ? -(360 - r) : r } function zi(t, e) { var n = I(t[1]), r = I(e[1]), i = I(e[0] - t[0]); i > Math.PI && (i -= 2 * Math.PI), i < -Math.PI && (i += 2 * Math.PI); var o = Math.log(Math.tan(r / 2 + Math.PI / 4) / Math.tan(n / 2 + Math.PI / 4)); return (w(Math.atan2(i, o)) + 360) % 360 } function ji(t, n, r, i) { void 0 === i && (i = {}); var o = n < 0, s = N(Math.abs(n), i.units, "meters"); o && (s = -Math.abs(s)); var u = K(t), l = function (t, n, r, i) { i = void 0 === i ? e : Number(i); var o = n / i, s = t[0] * Math.PI / 180, a = I(t[1]), u = I(r), l = o * Math.cos(u), c = a + l; Math.abs(c) > Math.PI / 2 && (c = c > 0 ? Math.PI - c : -Math.PI - c); var h = Math.log(Math.tan(c / 2 + Math.PI / 4) / Math.tan(a / 2 + Math.PI / 4)), p = Math.abs(h) > 1e-11 ? l / h : Math.cos(a), f = o * Math.sin(u) / p; return [(180 * (s + f) / Math.PI + 540) % 360 - 180, 180 * c / Math.PI] }(u, s, r); return l[0] += l[0] - u[0] > 180 ? -360 : u[0] - l[0] > 180 ? 360 : 0, a(l, i.properties) } function Ui(t, e, n, r, i, o) { for (var s = 0; s < t.length; s++) { var a = t[s], u = t[s + 1]; s === t.length - 1 && (u = t[0]), r = Xi(a, u, e), n <= 0 && r > 0 ? Xi(e, a, i) < 0 || (i = a) : n > 0 && r <= 0 && (Vi(e, a, o) || (o = a)), n = r } return [i, o] } function Vi(t, e, n) { return Xi(t, e, n) > 0 } function Xi(t, e, n) { return (e[0] - t[0]) * (n[1] - t[1]) - (n[0] - t[0]) * (e[1] - t[1]) } function Yi(t) { for (var e, n, r = Q(t), i = 0, o = 1; o < r.length;) e = n || r[0], i += ((n = r[o])[0] - e[0]) * (n[1] + e[1]), o++; return i > 0 } function Hi(t, e) { switch ("Feature" === t.type ? t.geometry.type : t.type) { case "GeometryCollection": return q(t, (function (t) { Hi(t, e) })), t; case "LineString": return Wi(Q(t), e), t; case "Polygon": return Ji(Q(t), e), t; case "MultiLineString": return Q(t).forEach((function (t) { Wi(t, e) })), t; case "MultiPolygon": return Q(t).forEach((function (t) { Ji(t, e) })), t; case "Point": case "MultiPoint": return t } } function Wi(t, e) { Yi(t) === e && t.reverse() } function Ji(t, e) { Yi(t[0]) !== e && t[0].reverse(); for (var n = 1; n < t.length; n++) Yi(t[n]) === e && t[n].reverse() } function Zi(t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = e.zProperty || "elevation", r = e.flip, i = e.flags; nt(t, "Point", "input must contain Points"); for (var o = function (t, e) { var n = {}; return F(t, (function (t) { var e = Q(t)[1]; n[e] || (n[e] = []), n[e].push(t) })), Object.keys(n).map((function (t) { return n[t].sort((function (t, e) { return Q(t)[0] - Q(e)[0] })) })).sort((function (t, n) { return e ? Q(t[0])[1] - Q(n[0])[1] : Q(n[0])[1] - Q(t[0])[1] })) } /*! * @license GNU Affero General Public License. * Copyright (c) 2015, 2015 Ronny Lorenz * v. 1.2.0 * https://github.com/RaumZeit/MarchingSquares.js * * MarchingSquaresJS is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MarchingSquaresJS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * As additional permission under GNU Affero General Public License version 3 * section 7, third-party projects (personal or commercial) may distribute, * include, or link against UNMODIFIED VERSIONS of MarchingSquaresJS without the * requirement that said third-party project for that reason alone becomes * subject to any requirement of the GNU Affero General Public License version 3. * Any modifications to MarchingSquaresJS, however, must be shared with the public * and made available. * * In summary this: * - allows you to use MarchingSquaresJS at no cost * - allows you to use MarchingSquaresJS for both personal and commercial purposes * - allows you to distribute UNMODIFIED VERSIONS of MarchingSquaresJS under any * license as long as this license notice is included * - enables you to keep the source code of your program that uses MarchingSquaresJS * undisclosed * - forces you to share any modifications you have made to MarchingSquaresJS, * e.g. bug-fixes * * You should have received a copy of the GNU Affero General Public License * along with MarchingSquaresJS. If not, see . */ (t, r), s = [], a = 0; a < o.length; a++) { for (var u = o[a], l = [], c = 0; c < u.length; c++) { var h = u[c]; h.properties[n] ? l.push(h.properties[n]) : l.push(0), !0 === i && (h.properties.matrixPosition = [a, c]) } s.push(l) } return s } var Ki = {successCallback: null, verbose: !1, polygons: !1}, Qi = {}; function $i(t, e, n, r) { r = r || {}; for (var i = Object.keys(Ki), o = 0; o < i.length; o++) { var s = i[o], a = r[s]; a = null != a ? a : Ki[s], Qi[s] = a } Qi.verbose && console.log("MarchingSquaresJS-isoBands: computing isobands for [" + e + ":" + (e + n) + "]"); var u, l = function (t, e, n) { for (var r = t.length - 1, i = t[0].length - 1, o = { rows: r, cols: i, cells: [] }, s = e + Math.abs(n), a = 0; a < r; ++a) { o.cells[a] = []; for (var u = 0; u < i; ++u) { var l = 0, c = t[a + 1][u], h = t[a + 1][u + 1], p = t[a][u + 1], f = t[a][u]; if (!(isNaN(c) || isNaN(h) || isNaN(p) || isNaN(f))) { l |= c < e ? 0 : c > s ? 128 : 64, l |= h < e ? 0 : h > s ? 32 : 16, l |= p < e ? 0 : p > s ? 8 : 4; var g = +(l |= f < e ? 0 : f > s ? 2 : 1), d = 0; if (17 === l || 18 === l || 33 === l || 34 === l || 38 === l || 68 === l || 72 === l || 98 === l || 102 === l || 132 === l || 136 === l || 137 === l || 152 === l || 153 === l) { var y = (c + h + p + f) / 4; d = y > s ? 2 : y < e ? 0 : 1, 34 === l ? 1 === d ? l = 35 : 0 === d && (l = 136) : 136 === l ? 1 === d ? (l = 35, d = 4) : 0 === d && (l = 34) : 17 === l ? 1 === d ? (l = 155, d = 4) : 0 === d && (l = 153) : 68 === l ? 1 === d ? (l = 103, d = 4) : 0 === d && (l = 102) : 153 === l ? 1 === d && (l = 155) : 102 === l ? 1 === d && (l = 103) : 152 === l ? d < 2 && (l = 156, d = 1) : 137 === l ? d < 2 && (l = 139, d = 1) : 98 === l ? d < 2 && (l = 99, d = 1) : 38 === l ? d < 2 && (l = 39, d = 1) : 18 === l ? d > 0 ? (l = 156, d = 4) : l = 152 : 33 === l ? d > 0 ? (l = 139, d = 4) : l = 137 : 72 === l ? d > 0 ? (l = 99, d = 4) : l = 98 : 132 === l && (d > 0 ? (l = 39, d = 4) : l = 38) } if (0 != l && 170 != l) { var v, _, m, x, E, b, w, I; v = _ = m = x = E = b = w = I = .5; var N = []; 1 === l ? (m = 1 - Vo(e, p, f), I = 1 - Vo(e, c, f), N.push(Go[l])) : 169 === l ? (m = Vo(s, f, p), I = Vo(s, f, c), N.push(Go[l])) : 4 === l ? (b = 1 - Vo(e, h, p), x = Vo(e, f, p), N.push(Fo[l])) : 166 === l ? (b = Vo(s, p, h), x = 1 - Vo(s, p, f), N.push(Fo[l])) : 16 === l ? (E = Vo(e, p, h), _ = Vo(e, c, h), N.push(Do[l])) : 154 === l ? (E = 1 - Vo(s, h, p), _ = 1 - Vo(s, h, c), N.push(Do[l])) : 64 === l ? (w = Vo(e, f, c), v = 1 - Vo(e, h, c), N.push(Bo[l])) : 106 === l ? (w = 1 - Vo(s, c, f), v = Vo(s, c, h), N.push(Bo[l])) : 168 === l ? (x = Vo(s, f, p), m = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), N.push(ko[l]), N.push(Go[l])) : 2 === l ? (x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), N.push(ko[l]), N.push(Go[l])) : 162 === l ? (E = Vo(s, p, h), b = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), N.push(ko[l]), N.push(Go[l])) : 8 === l ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), N.push(Do[l]), N.push(Fo[l])) : 138 === l ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c), N.push(Do[l]), N.push(Fo[l])) : 32 === l ? (E = Vo(s, p, h), b = Vo(e, p, h), v = Vo(e, c, h), _ = Vo(s, c, h), N.push(Do[l]), N.push(Fo[l])) : 42 === l ? (I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h), N.push(qo[l]), N.push(Bo[l])) : 128 === l && (I = Vo(e, f, c), w = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c), N.push(qo[l]), N.push(Bo[l])), 5 === l ? (b = 1 - Vo(e, h, p), I = 1 - Vo(e, c, f), N.push(Fo[l])) : 165 === l ? (b = Vo(s, p, h), I = Vo(s, f, c), N.push(Fo[l])) : 20 === l ? (x = Vo(e, f, p), _ = Vo(e, c, h), N.push(ko[l])) : 150 === l ? (x = 1 - Vo(s, p, f), _ = 1 - Vo(s, h, c), N.push(ko[l])) : 80 === l ? (E = Vo(e, p, h), w = Vo(e, f, c), N.push(Do[l])) : 90 === l ? (E = 1 - Vo(s, h, p), w = 1 - Vo(s, c, f), N.push(Do[l])) : 65 === l ? (m = 1 - Vo(e, p, f), v = 1 - Vo(e, h, c), N.push(Go[l])) : 105 === l ? (m = Vo(s, f, p), v = Vo(s, c, h), N.push(Go[l])) : 160 === l ? (E = Vo(s, p, h), b = Vo(e, p, h), I = Vo(e, f, c), w = Vo(s, f, c), N.push(Do[l]), N.push(Fo[l])) : 10 === l ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), N.push(Do[l]), N.push(Fo[l])) : 130 === l ? (x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c), N.push(ko[l]), N.push(Go[l])) : 40 === l ? (x = Vo(s, f, p), m = Vo(e, f, p), v = Vo(e, c, h), _ = Vo(s, c, h), N.push(ko[l]), N.push(Go[l])) : 101 === l ? (b = Vo(s, p, h), v = Vo(s, c, h), N.push(Fo[l])) : 69 === l ? (b = 1 - Vo(e, h, p), v = 1 - Vo(e, h, c), N.push(Fo[l])) : 149 === l ? (I = Vo(s, f, c), _ = 1 - Vo(s, h, c), N.push(qo[l])) : 21 === l ? (I = 1 - Vo(e, c, f), _ = Vo(e, c, h), N.push(qo[l])) : 86 === l ? (x = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), N.push(ko[l])) : 84 === l ? (x = Vo(e, f, p), w = Vo(e, f, c), N.push(ko[l])) : 89 === l ? (E = 1 - Vo(s, h, p), m = Vo(s, f, p), N.push(Go[l])) : 81 === l ? (E = Vo(e, p, h), m = 1 - Vo(e, p, f), N.push(Go[l])) : 96 === l ? (E = Vo(s, p, h), b = Vo(e, p, h), w = Vo(e, f, c), v = Vo(s, c, h), N.push(Do[l]), N.push(Fo[l])) : 74 === l ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), w = 1 - Vo(s, c, f), v = 1 - Vo(e, h, c), N.push(Do[l]), N.push(Fo[l])) : 24 === l ? (E = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), _ = Vo(e, c, h), N.push(Do[l]), N.push(Go[l])) : 146 === l ? (E = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), _ = 1 - Vo(s, h, c), N.push(Do[l]), N.push(Go[l])) : 6 === l ? (b = 1 - Vo(e, h, p), x = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), N.push(Fo[l]), N.push(ko[l])) : 164 === l ? (b = Vo(s, p, h), x = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), N.push(Fo[l]), N.push(ko[l])) : 129 === l ? (m = 1 - Vo(e, p, f), I = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c), N.push(Go[l]), N.push(qo[l])) : 41 === l ? (m = Vo(s, f, p), I = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h), N.push(Go[l]), N.push(qo[l])) : 66 === l ? (x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), v = 1 - Vo(e, h, c), N.push(ko[l]), N.push(Go[l])) : 104 === l ? (x = Vo(s, f, p), m = Vo(e, f, p), w = Vo(e, f, c), v = Vo(s, c, h), N.push(Go[l]), N.push(zo[l])) : 144 === l ? (E = Vo(e, p, h), I = Vo(e, f, c), w = Vo(s, f, c), _ = 1 - Vo(s, h, c), N.push(Do[l]), N.push(Bo[l])) : 26 === l ? (E = 1 - Vo(s, h, p), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), _ = Vo(e, c, h), N.push(Do[l]), N.push(Bo[l])) : 36 === l ? (b = Vo(s, p, h), x = Vo(e, f, p), v = Vo(e, c, h), _ = Vo(s, c, h), N.push(Fo[l]), N.push(ko[l])) : 134 === l ? (b = 1 - Vo(e, h, p), x = 1 - Vo(s, p, f), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c), N.push(Fo[l]), N.push(ko[l])) : 9 === l ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), m = Vo(s, f, p), I = 1 - Vo(e, c, f), N.push(Do[l]), N.push(Fo[l])) : 161 === l ? (E = Vo(s, p, h), b = Vo(e, p, h), m = 1 - Vo(e, p, f), I = Vo(s, f, c), N.push(Do[l]), N.push(Fo[l])) : 37 === l ? (b = Vo(s, p, h), I = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h), N.push(Fo[l]), N.push(qo[l])) : 133 === l ? (b = 1 - Vo(e, h, p), I = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c), N.push(Fo[l]), N.push(qo[l])) : 148 === l ? (x = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), _ = 1 - Vo(s, h, c), N.push(ko[l]), N.push(Bo[l])) : 22 === l ? (x = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), _ = Vo(e, c, h), N.push(ko[l]), N.push(Bo[l])) : 82 === l ? (E = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), N.push(Do[l]), N.push(Go[l])) : 88 === l ? (E = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), w = Vo(e, f, c), N.push(Do[l]), N.push(Go[l])) : 73 === l ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), m = Vo(s, f, p), v = 1 - Vo(e, h, c), N.push(Do[l]), N.push(Fo[l])) : 97 === l ? (E = Vo(s, p, h), b = Vo(e, p, h), m = 1 - Vo(e, p, f), v = Vo(s, c, h), N.push(Do[l]), N.push(Fo[l])) : 145 === l ? (E = Vo(e, p, h), m = 1 - Vo(e, p, f), I = Vo(s, f, c), _ = 1 - Vo(s, h, c), N.push(Do[l]), N.push(qo[l])) : 25 === l ? (E = 1 - Vo(s, h, p), m = Vo(s, f, p), I = 1 - Vo(e, c, f), _ = Vo(e, c, h), N.push(Do[l]), N.push(qo[l])) : 70 === l ? (b = 1 - Vo(e, h, p), x = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), v = 1 - Vo(e, h, c), N.push(Fo[l]), N.push(ko[l])) : 100 === l ? (b = Vo(s, p, h), x = Vo(e, f, p), w = Vo(e, f, c), v = Vo(s, c, h), N.push(Fo[l]), N.push(ko[l])) : 34 === l ? (0 === d ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c)) : (E = Vo(s, p, h), b = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h)), N.push(Do[l]), N.push(Fo[l]), N.push(qo[l]), N.push(Bo[l])) : 35 === l ? (4 === d ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c)) : (E = Vo(s, p, h), b = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h)), N.push(Do[l]), N.push(Fo[l]), N.push(Go[l]), N.push(Bo[l])) : 136 === l ? (0 === d ? (E = Vo(s, p, h), b = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h)) : (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c)), N.push(Do[l]), N.push(Fo[l]), N.push(qo[l]), N.push(Bo[l])) : 153 === l ? (0 === d ? (E = Vo(e, p, h), m = 1 - Vo(e, p, f), I = 1 - Vo(e, c, f), _ = Vo(e, c, h)) : (E = 1 - Vo(s, h, p), m = Vo(s, f, p), I = Vo(s, f, c), _ = 1 - Vo(s, h, c)), N.push(Do[l]), N.push(Go[l])) : 102 === l ? (0 === d ? (b = 1 - Vo(e, h, p), x = Vo(e, f, p), w = Vo(e, f, c), v = 1 - Vo(e, h, c)) : (b = Vo(s, p, h), x = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), v = Vo(s, c, h)), N.push(Fo[l]), N.push(Bo[l])) : 155 === l ? (4 === d ? (E = Vo(e, p, h), m = 1 - Vo(e, p, f), I = 1 - Vo(e, c, f), _ = Vo(e, c, h)) : (E = 1 - Vo(s, h, p), m = Vo(s, f, p), I = Vo(s, f, c), _ = 1 - Vo(s, h, c)), N.push(Do[l]), N.push(qo[l])) : 103 === l ? (4 === d ? (b = 1 - Vo(e, h, p), x = Vo(e, f, p), w = Vo(e, f, c), v = 1 - Vo(e, h, c)) : (b = Vo(s, p, h), x = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), v = Vo(s, c, h)), N.push(Fo[l]), N.push(ko[l])) : 152 === l ? (0 === d ? (E = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), _ = Vo(e, c, h)) : (E = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), _ = 1 - Vo(s, h, c)), N.push(Do[l]), N.push(ko[l]), N.push(Go[l])) : 156 === l ? (4 === d ? (E = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), _ = Vo(e, c, h)) : (E = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), _ = 1 - Vo(s, h, c)), N.push(Do[l]), N.push(Go[l]), N.push(Bo[l])) : 137 === l ? (0 === d ? (E = Vo(s, p, h), b = Vo(e, p, h), m = 1 - Vo(e, p, f), I = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h)) : (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), m = Vo(s, f, p), I = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c)), N.push(Do[l]), N.push(Fo[l]), N.push(Go[l])) : 139 === l ? (4 === d ? (E = Vo(s, p, h), b = Vo(e, p, h), m = 1 - Vo(e, p, f), I = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h)) : (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), m = Vo(s, f, p), I = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c)), N.push(Do[l]), N.push(Fo[l]), N.push(qo[l])) : 98 === l ? (0 === d ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), w = Vo(e, f, c), v = 1 - Vo(e, h, c)) : (E = Vo(s, p, h), b = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), v = Vo(s, c, h)), N.push(Do[l]), N.push(Fo[l]), N.push(Bo[l])) : 99 === l ? (4 === d ? (E = 1 - Vo(e, h, p), b = 1 - Vo(s, h, p), x = Vo(s, f, p), m = Vo(e, f, p), w = Vo(e, f, c), v = 1 - Vo(e, h, c)) : (E = Vo(s, p, h), b = Vo(e, p, h), x = 1 - Vo(e, p, f), m = 1 - Vo(s, p, f), w = 1 - Vo(s, c, f), v = Vo(s, c, h)), N.push(Do[l]), N.push(Fo[l]), N.push(Go[l])) : 38 === l ? (0 === d ? (b = 1 - Vo(e, h, p), x = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c)) : (b = Vo(s, p, h), x = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h)), N.push(Fo[l]), N.push(qo[l]), N.push(Bo[l])) : 39 === l ? (4 === d ? (b = 1 - Vo(e, h, p), x = Vo(e, f, p), I = Vo(e, f, c), w = Vo(s, f, c), v = 1 - Vo(s, h, c), _ = 1 - Vo(e, h, c)) : (b = Vo(s, p, h), x = 1 - Vo(s, p, f), I = 1 - Vo(s, c, f), w = 1 - Vo(e, c, f), v = Vo(e, c, h), _ = Vo(s, c, h)), N.push(Fo[l]), N.push(ko[l]), N.push(Bo[l])) : 85 === l && (E = 1, b = 0, x = 1, m = 0, I = 0, w = 1, v = 0, _ = 1), (v < 0 || v > 1 || _ < 0 || _ > 1 || E < 0 || E > 1 || x < 0 || x > 1 || I < 0 || I > 1 || w < 0 || w > 1) && console.log("MarchingSquaresJS-isoBands: " + l + " " + g + " " + c + "," + h + "," + p + "," + f + " " + d + " " + v + " " + _ + " " + E + " " + b + " " + x + " " + m + " " + I + " " + w), o.cells[a][u] = { cval: l, cval_real: g, flipped: d, topleft: v, topright: _, righttop: E, rightbottom: b, bottomright: x, bottomleft: m, leftbottom: I, lefttop: w, edges: N } } } } } return o }(t, e, n); return Qi.polygons ? (Qi.verbose && console.log("MarchingSquaresJS-isoBands: returning single polygons for each grid cell"), u = function (t) { var e = [], n = 0; return t.cells.forEach((function (t, r) { t.forEach((function (t, i) { if (void 0 !== t) { var o = Uo[t.cval](t); "object" == typeof o && Xo(o) ? "object" == typeof o[0] && Xo(o[0]) ? "object" == typeof o[0][0] && Xo(o[0][0]) ? o.forEach((function (t) { t.forEach((function (t) { t[0] += i, t[1] += r })), e[n++] = t })) : (o.forEach((function (t) { t[0] += i, t[1] += r })), e[n++] = o) : console.log("MarchingSquaresJS-isoBands: bandcell polygon with malformed coordinates") : console.log("MarchingSquaresJS-isoBands: bandcell polygon with null coordinates") } })) })), e }(l)) : (Qi.verbose && console.log("MarchingSquaresJS-isoBands: returning polygon paths for entire data grid"), u = function (t) { for (var e = [], n = t.rows, r = t.cols, i = [], o = 0; o < n; o++) for (var s = 0; s < r; s++) if (void 0 !== t.cells[o][s] && t.cells[o][s].edges.length > 0) { var a = Ho(t.cells[o][s]), u = null, l = s, c = o; null !== a && i.push([a.p[0] + l, a.p[1] + c]); do { if (null === (u = Wo(t.cells[c][l], a.x, a.y, a.o))) break; if (i.push([u.p[0] + l, u.p[1] + c]), l += u.x, a = u, (c += u.y) < 0 || c >= n || l < 0 || l >= r || void 0 === t.cells[c][l]) { var h = Yo(t, l -= u.x, c -= u.y, u.x, u.y, u.o); if (null === h) break; h.path.forEach((function (t) { i.push(t) })), l = h.i, c = h.j, a = h } } while (void 0 !== t.cells[c][l] && t.cells[c][l].edges.length > 0); e.push(i), i = [], t.cells[o][s].edges.length > 0 && s-- } return e }(l)), "function" == typeof Qi.successCallback && Qi.successCallback(u), u } var to = 64, eo = 16, no = [], ro = [], io = [], oo = [], so = [], ao = [], uo = [], lo = [], co = [], ho = [], po = [], fo = [], go = [], yo = [], vo = [], _o = [], mo = [], xo = [], Eo = [], bo = [], wo = [], Io = [], No = [], So = []; uo[85] = ho[85] = -1, lo[85] = po[85] = 0, co[85] = fo[85] = 1, Eo[85] = Io[85] = 1, bo[85] = No[85] = 0, wo[85] = So[85] = 1, no[85] = oo[85] = 0, ro[85] = so[85] = -1, io[85] = vo[85] = 0, _o[85] = go[85] = 0, mo[85] = yo[85] = 1, ao[85] = xo[85] = 1, Io[1] = Io[169] = 0, No[1] = No[169] = -1, So[1] = So[169] = 0, go[1] = go[169] = -1, yo[1] = yo[169] = 0, vo[1] = vo[169] = 0, ho[4] = ho[166] = 0, po[4] = po[166] = -1, fo[4] = fo[166] = 1, _o[4] = _o[166] = 1, mo[4] = mo[166] = 0, xo[4] = xo[166] = 0, uo[16] = uo[154] = 0, lo[16] = lo[154] = 1, co[16] = co[154] = 1, oo[16] = oo[154] = 1, so[16] = so[154] = 0, ao[16] = ao[154] = 1, Eo[64] = Eo[106] = 0, bo[64] = bo[106] = 1, wo[64] = wo[106] = 0, no[64] = no[106] = -1, ro[64] = ro[106] = 0, io[64] = io[106] = 1, Eo[2] = Eo[168] = 0, bo[2] = bo[168] = -1, wo[2] = wo[168] = 1, Io[2] = Io[168] = 0, No[2] = No[168] = -1, So[2] = So[168] = 0, go[2] = go[168] = -1, yo[2] = yo[168] = 0, vo[2] = vo[168] = 0, _o[2] = _o[168] = -1, mo[2] = mo[168] = 0, xo[2] = xo[168] = 1, uo[8] = uo[162] = 0, lo[8] = lo[162] = -1, co[8] = co[162] = 0, ho[8] = ho[162] = 0, po[8] = po[162] = -1, fo[8] = fo[162] = 1, go[8] = go[162] = 1, yo[8] = yo[162] = 0, vo[8] = vo[162] = 1, _o[8] = _o[162] = 1, mo[8] = mo[162] = 0, xo[8] = xo[162] = 0, uo[32] = uo[138] = 0, lo[32] = lo[138] = 1, co[32] = co[138] = 1, ho[32] = ho[138] = 0, po[32] = po[138] = 1, fo[32] = fo[138] = 0, no[32] = no[138] = 1, ro[32] = ro[138] = 0, io[32] = io[138] = 0, oo[32] = oo[138] = 1, so[32] = so[138] = 0, ao[32] = ao[138] = 1, Io[128] = Io[42] = 0, No[128] = No[42] = 1, So[128] = So[42] = 1, Eo[128] = Eo[42] = 0, bo[128] = bo[42] = 1, wo[128] = wo[42] = 0, no[128] = no[42] = -1, ro[128] = ro[42] = 0, io[128] = io[42] = 1, oo[128] = oo[42] = -1, so[128] = so[42] = 0, ao[128] = ao[42] = 0, ho[5] = ho[165] = -1, po[5] = po[165] = 0, fo[5] = fo[165] = 0, Io[5] = Io[165] = 1, No[5] = No[165] = 0, So[5] = So[165] = 0, _o[20] = _o[150] = 0, mo[20] = mo[150] = 1, xo[20] = xo[150] = 1, oo[20] = oo[150] = 0, so[20] = so[150] = -1, ao[20] = ao[150] = 1, uo[80] = uo[90] = -1, lo[80] = lo[90] = 0, co[80] = co[90] = 1, Eo[80] = Eo[90] = 1, bo[80] = bo[90] = 0, wo[80] = wo[90] = 1, go[65] = go[105] = 0, yo[65] = yo[105] = 1, vo[65] = vo[105] = 0, no[65] = no[105] = 0, ro[65] = ro[105] = -1, io[65] = io[105] = 0, uo[160] = uo[10] = -1, lo[160] = lo[10] = 0, co[160] = co[10] = 1, ho[160] = ho[10] = -1, po[160] = po[10] = 0, fo[160] = fo[10] = 0, Io[160] = Io[10] = 1, No[160] = No[10] = 0, So[160] = So[10] = 0, Eo[160] = Eo[10] = 1, bo[160] = bo[10] = 0, wo[160] = wo[10] = 1, _o[130] = _o[40] = 0, mo[130] = mo[40] = 1, xo[130] = xo[40] = 1, go[130] = go[40] = 0, yo[130] = yo[40] = 1, vo[130] = vo[40] = 0, no[130] = no[40] = 0, ro[130] = ro[40] = -1, io[130] = io[40] = 0, oo[130] = oo[40] = 0, so[130] = so[40] = -1, ao[130] = ao[40] = 1, ho[37] = ho[133] = 0, po[37] = po[133] = 1, fo[37] = fo[133] = 1, Io[37] = Io[133] = 0, No[37] = No[133] = 1, So[37] = So[133] = 0, no[37] = no[133] = -1, ro[37] = ro[133] = 0, io[37] = io[133] = 0, oo[37] = oo[133] = 1, so[37] = so[133] = 0, ao[37] = ao[133] = 0, _o[148] = _o[22] = -1, mo[148] = mo[22] = 0, xo[148] = xo[22] = 0, Io[148] = Io[22] = 0, No[148] = No[22] = -1, So[148] = So[22] = 1, Eo[148] = Eo[22] = 0, bo[148] = bo[22] = 1, wo[148] = wo[22] = 1, oo[148] = oo[22] = -1, so[148] = so[22] = 0, ao[148] = ao[22] = 1, uo[82] = uo[88] = 0, lo[82] = lo[88] = -1, co[82] = co[88] = 1, _o[82] = _o[88] = 1, mo[82] = mo[88] = 0, xo[82] = xo[88] = 1, go[82] = go[88] = -1, yo[82] = yo[88] = 0, vo[82] = vo[88] = 1, Eo[82] = Eo[88] = 0, bo[82] = bo[88] = -1, wo[82] = wo[88] = 0, uo[73] = uo[97] = 0, lo[73] = lo[97] = 1, co[73] = co[97] = 0, ho[73] = ho[97] = 0, po[73] = po[97] = -1, fo[73] = fo[97] = 0, go[73] = go[97] = 1, yo[73] = yo[97] = 0, vo[73] = vo[97] = 0, no[73] = no[97] = 1, ro[73] = ro[97] = 0, io[73] = io[97] = 1, uo[145] = uo[25] = 0, lo[145] = lo[25] = -1, co[145] = co[25] = 0, go[145] = go[25] = 1, yo[145] = yo[25] = 0, vo[145] = vo[25] = 1, Io[145] = Io[25] = 0, No[145] = No[25] = 1, So[145] = So[25] = 1, oo[145] = oo[25] = -1, so[145] = so[25] = 0, ao[145] = ao[25] = 0, ho[70] = ho[100] = 0, po[70] = po[100] = 1, fo[70] = fo[100] = 0, _o[70] = _o[100] = -1, mo[70] = mo[100] = 0, xo[70] = xo[100] = 1, Eo[70] = Eo[100] = 0, bo[70] = bo[100] = -1, wo[70] = wo[100] = 1, no[70] = no[100] = 1, ro[70] = ro[100] = 0, io[70] = io[100] = 0, ho[101] = ho[69] = 0, po[101] = po[69] = 1, fo[101] = fo[69] = 0, no[101] = no[69] = 1, ro[101] = ro[69] = 0, io[101] = io[69] = 0, Io[149] = Io[21] = 0, No[149] = No[21] = 1, So[149] = So[21] = 1, oo[149] = oo[21] = -1, so[149] = so[21] = 0, ao[149] = ao[21] = 0, _o[86] = _o[84] = -1, mo[86] = mo[84] = 0, xo[86] = xo[84] = 1, Eo[86] = Eo[84] = 0, bo[86] = bo[84] = -1, wo[86] = wo[84] = 1, uo[89] = uo[81] = 0, lo[89] = lo[81] = -1, co[89] = co[81] = 0, go[89] = go[81] = 1, yo[89] = yo[81] = 0, vo[89] = vo[81] = 1, uo[96] = uo[74] = 0, lo[96] = lo[74] = 1, co[96] = co[74] = 0, ho[96] = ho[74] = -1, po[96] = po[74] = 0, fo[96] = fo[74] = 1, Eo[96] = Eo[74] = 1, bo[96] = bo[74] = 0, wo[96] = wo[74] = 0, no[96] = no[74] = 1, ro[96] = ro[74] = 0, io[96] = io[74] = 1, uo[24] = uo[146] = 0, lo[24] = lo[146] = -1, co[24] = co[146] = 1, _o[24] = _o[146] = 1, mo[24] = mo[146] = 0, xo[24] = xo[146] = 1, go[24] = go[146] = 0, yo[24] = yo[146] = 1, vo[24] = vo[146] = 1, oo[24] = oo[146] = 0, so[24] = so[146] = -1, ao[24] = ao[146] = 0, ho[6] = ho[164] = -1, po[6] = po[164] = 0, fo[6] = fo[164] = 1, _o[6] = _o[164] = -1, mo[6] = mo[164] = 0, xo[6] = xo[164] = 0, Io[6] = Io[164] = 0, No[6] = No[164] = -1, So[6] = So[164] = 1, Eo[6] = Eo[164] = 1, bo[6] = bo[164] = 0, wo[6] = wo[164] = 0, go[129] = go[41] = 0, yo[129] = yo[41] = 1, vo[129] = vo[41] = 1, Io[129] = Io[41] = 0, No[129] = No[41] = 1, So[129] = So[41] = 0, no[129] = no[41] = -1, ro[129] = ro[41] = 0, io[129] = io[41] = 0, oo[129] = oo[41] = 0, so[129] = so[41] = -1, ao[129] = ao[41] = 0, _o[66] = _o[104] = 0, mo[66] = mo[104] = 1, xo[66] = xo[104] = 0, go[66] = go[104] = -1, yo[66] = yo[104] = 0, vo[66] = vo[104] = 1, Eo[66] = Eo[104] = 0, bo[66] = bo[104] = -1, wo[66] = wo[104] = 0, no[66] = no[104] = 0, ro[66] = ro[104] = -1, io[66] = io[104] = 1, uo[144] = uo[26] = -1, lo[144] = lo[26] = 0, co[144] = co[26] = 0, Io[144] = Io[26] = 1, No[144] = No[26] = 0, So[144] = So[26] = 1, Eo[144] = Eo[26] = 0, bo[144] = bo[26] = 1, wo[144] = wo[26] = 1, oo[144] = oo[26] = -1, so[144] = so[26] = 0, ao[144] = ao[26] = 1, ho[36] = ho[134] = 0, po[36] = po[134] = 1, fo[36] = fo[134] = 1, _o[36] = _o[134] = 0, mo[36] = mo[134] = 1, xo[36] = xo[134] = 0, no[36] = no[134] = 0, ro[36] = ro[134] = -1, io[36] = io[134] = 1, oo[36] = oo[134] = 1, so[36] = so[134] = 0, ao[36] = ao[134] = 0, uo[9] = uo[161] = -1, lo[9] = lo[161] = 0, co[9] = co[161] = 0, ho[9] = ho[161] = 0, po[9] = po[161] = -1, fo[9] = fo[161] = 0, go[9] = go[161] = 1, yo[9] = yo[161] = 0, vo[9] = vo[161] = 0, Io[9] = Io[161] = 1, No[9] = No[161] = 0, So[9] = So[161] = 1, uo[136] = 0, lo[136] = 1, co[136] = 1, ho[136] = 0, po[136] = 1, fo[136] = 0, _o[136] = -1, mo[136] = 0, xo[136] = 1, go[136] = -1, yo[136] = 0, vo[136] = 0, Io[136] = 0, No[136] = -1, So[136] = 0, Eo[136] = 0, bo[136] = -1, wo[136] = 1, no[136] = 1, ro[136] = 0, io[136] = 0, oo[136] = 1, so[136] = 0, ao[136] = 1, uo[34] = 0, lo[34] = -1, co[34] = 0, ho[34] = 0, po[34] = -1, fo[34] = 1, _o[34] = 1, mo[34] = 0, xo[34] = 0, go[34] = 1, yo[34] = 0, vo[34] = 1, Io[34] = 0, No[34] = 1, So[34] = 1, Eo[34] = 0, bo[34] = 1, wo[34] = 0, no[34] = -1, ro[34] = 0, io[34] = 1, oo[34] = -1, so[34] = 0, ao[34] = 0, uo[35] = 0, lo[35] = 1, co[35] = 1, ho[35] = 0, po[35] = -1, fo[35] = 1, _o[35] = 1, mo[35] = 0, xo[35] = 0, go[35] = -1, yo[35] = 0, vo[35] = 0, Io[35] = 0, No[35] = -1, So[35] = 0, Eo[35] = 0, bo[35] = 1, wo[35] = 0, no[35] = -1, ro[35] = 0, io[35] = 1, oo[35] = 1, so[35] = 0, ao[35] = 1, uo[153] = 0, lo[153] = 1, co[153] = 1, go[153] = -1, yo[153] = 0, vo[153] = 0, Io[153] = 0, No[153] = -1, So[153] = 0, oo[153] = 1, so[153] = 0, ao[153] = 1, ho[102] = 0, po[102] = -1, fo[102] = 1, _o[102] = 1, mo[102] = 0, xo[102] = 0, Eo[102] = 0, bo[102] = 1, wo[102] = 0, no[102] = -1, ro[102] = 0, io[102] = 1, uo[155] = 0, lo[155] = -1, co[155] = 0, go[155] = 1, yo[155] = 0, vo[155] = 1, Io[155] = 0, No[155] = 1, So[155] = 1, oo[155] = -1, so[155] = 0, ao[155] = 0, ho[103] = 0, po[103] = 1, fo[103] = 0, _o[103] = -1, mo[103] = 0, xo[103] = 1, Eo[103] = 0, bo[103] = -1, wo[103] = 1, no[103] = 1, ro[103] = 0, io[103] = 0, uo[152] = 0, lo[152] = 1, co[152] = 1, _o[152] = -1, mo[152] = 0, xo[152] = 1, go[152] = -1, yo[152] = 0, vo[152] = 0, Io[152] = 0, No[152] = -1, So[152] = 0, Eo[152] = 0, bo[152] = -1, wo[152] = 1, oo[152] = 1, so[152] = 0, ao[152] = 1, uo[156] = 0, lo[156] = -1, co[156] = 1, _o[156] = 1, mo[156] = 0, xo[156] = 1, go[156] = -1, yo[156] = 0, vo[156] = 0, Io[156] = 0, No[156] = -1, So[156] = 0, Eo[156] = 0, bo[156] = 1, wo[156] = 1, oo[156] = -1, so[156] = 0, ao[156] = 1, uo[137] = 0, lo[137] = 1, co[137] = 1, ho[137] = 0, po[137] = 1, fo[137] = 0, go[137] = -1, yo[137] = 0, vo[137] = 0, Io[137] = 0, No[137] = -1, So[137] = 0, no[137] = 1, ro[137] = 0, io[137] = 0, oo[137] = 1, so[137] = 0, ao[137] = 1, uo[139] = 0, lo[139] = 1, co[139] = 1, ho[139] = 0, po[139] = -1, fo[139] = 0, go[139] = 1, yo[139] = 0, vo[139] = 0, Io[139] = 0, No[139] = 1, So[139] = 0, no[139] = -1, ro[139] = 0, io[139] = 0, oo[139] = 1, so[139] = 0, ao[139] = 1, uo[98] = 0, lo[98] = -1, co[98] = 0, ho[98] = 0, po[98] = -1, fo[98] = 1, _o[98] = 1, mo[98] = 0, xo[98] = 0, go[98] = 1, yo[98] = 0, vo[98] = 1, Eo[98] = 0, bo[98] = 1, wo[98] = 0, no[98] = -1, ro[98] = 0, io[98] = 1, uo[99] = 0, lo[99] = 1, co[99] = 0, ho[99] = 0, po[99] = -1, fo[99] = 1, _o[99] = 1, mo[99] = 0, xo[99] = 0, go[99] = -1, yo[99] = 0, vo[99] = 1, Eo[99] = 0, bo[99] = -1, wo[99] = 0, no[99] = 1, ro[99] = 0, io[99] = 1, ho[38] = 0, po[38] = -1, fo[38] = 1, _o[38] = 1, mo[38] = 0, xo[38] = 0, Io[38] = 0, No[38] = 1, So[38] = 1, Eo[38] = 0, bo[38] = 1, wo[38] = 0, no[38] = -1, ro[38] = 0, io[38] = 1, oo[38] = -1, so[38] = 0, ao[38] = 0, ho[39] = 0, po[39] = 1, fo[39] = 1, _o[39] = -1, mo[39] = 0, xo[39] = 0, Io[39] = 0, No[39] = -1, So[39] = 1, Eo[39] = 0, bo[39] = 1, wo[39] = 0, no[39] = -1, ro[39] = 0, io[39] = 1, oo[39] = 1, so[39] = 0, ao[39] = 0; var Co = function (t) { return [ [t.bottomleft, 0], [0, 0], [0, t.leftbottom] ] }, Po = function (t) { return [ [1, t.rightbottom], [1, 0], [t.bottomright, 0] ] }, Mo = function (t) { return [ [t.topright, 1], [1, 1], [1, t.righttop] ] }, Lo = function (t) { return [ [0, t.lefttop], [0, 1], [t.topleft, 1] ] }, Oo = function (t) { return [ [t.bottomright, 0], [t.bottomleft, 0], [0, t.leftbottom], [0, t.lefttop] ] }, Ro = function (t) { return [ [t.bottomright, 0], [t.bottomleft, 0], [1, t.righttop], [1, t.rightbottom] ] }, To = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [t.topleft, 1], [t.topright, 1] ] }, Ao = function (t) { return [ [0, t.leftbottom], [0, t.lefttop], [t.topleft, 1], [t.topright, 1] ] }, Do = [], Fo = [], ko = [], Go = [], qo = [], Bo = [], zo = [], jo = []; Go[1] = qo[1] = 18, Go[169] = qo[169] = 18, ko[4] = Fo[4] = 12, ko[166] = Fo[166] = 12, Do[16] = jo[16] = 4, Do[154] = jo[154] = 4, Bo[64] = zo[64] = 22, Bo[106] = zo[106] = 22, ko[2] = Bo[2] = 17, Go[2] = qo[2] = 18, ko[168] = Bo[168] = 17, Go[168] = qo[168] = 18, Do[8] = Go[8] = 9, Fo[8] = ko[8] = 12, Do[162] = Go[162] = 9, Fo[162] = ko[162] = 12, Do[32] = jo[32] = 4, Fo[32] = zo[32] = 1, Do[138] = jo[138] = 4, Fo[138] = zo[138] = 1, qo[128] = jo[128] = 21, Bo[128] = zo[128] = 22, qo[42] = jo[42] = 21, Bo[42] = zo[42] = 22, Fo[5] = qo[5] = 14, Fo[165] = qo[165] = 14, ko[20] = jo[20] = 6, ko[150] = jo[150] = 6, Do[80] = Bo[80] = 11, Do[90] = Bo[90] = 11, Go[65] = zo[65] = 3, Go[105] = zo[105] = 3, Do[160] = Bo[160] = 11, Fo[160] = qo[160] = 14, Do[10] = Bo[10] = 11, Fo[10] = qo[10] = 14, ko[130] = jo[130] = 6, Go[130] = zo[130] = 3, ko[40] = jo[40] = 6, Go[40] = zo[40] = 3, Fo[101] = zo[101] = 1, Fo[69] = zo[69] = 1, qo[149] = jo[149] = 21, qo[21] = jo[21] = 21, ko[86] = Bo[86] = 17, ko[84] = Bo[84] = 17, Do[89] = Go[89] = 9, Do[81] = Go[81] = 9, Do[96] = zo[96] = 0, Fo[96] = Bo[96] = 15, Do[74] = zo[74] = 0, Fo[74] = Bo[74] = 15, Do[24] = ko[24] = 8, Go[24] = jo[24] = 7, Do[146] = ko[146] = 8, Go[146] = jo[146] = 7, Fo[6] = Bo[6] = 15, ko[6] = qo[6] = 16, Fo[164] = Bo[164] = 15, ko[164] = qo[164] = 16, Go[129] = jo[129] = 7, qo[129] = zo[129] = 20, Go[41] = jo[41] = 7, qo[41] = zo[41] = 20, ko[66] = zo[66] = 2, Go[66] = Bo[66] = 19, ko[104] = zo[104] = 2, Go[104] = Bo[104] = 19, Do[144] = qo[144] = 10, Bo[144] = jo[144] = 23, Do[26] = qo[26] = 10, Bo[26] = jo[26] = 23, Fo[36] = jo[36] = 5, ko[36] = zo[36] = 2, Fo[134] = jo[134] = 5, ko[134] = zo[134] = 2, Do[9] = qo[9] = 10, Fo[9] = Go[9] = 13, Do[161] = qo[161] = 10, Fo[161] = Go[161] = 13, Fo[37] = jo[37] = 5, qo[37] = zo[37] = 20, Fo[133] = jo[133] = 5, qo[133] = zo[133] = 20, ko[148] = qo[148] = 16, Bo[148] = jo[148] = 23, ko[22] = qo[22] = 16, Bo[22] = jo[22] = 23, Do[82] = ko[82] = 8, Go[82] = Bo[82] = 19, Do[88] = ko[88] = 8, Go[88] = Bo[88] = 19, Do[73] = zo[73] = 0, Fo[73] = Go[73] = 13, Do[97] = zo[97] = 0, Fo[97] = Go[97] = 13, Do[145] = Go[145] = 9, qo[145] = jo[145] = 21, Do[25] = Go[25] = 9, qo[25] = jo[25] = 21, Fo[70] = zo[70] = 1, ko[70] = Bo[70] = 17, Fo[100] = zo[100] = 1, ko[100] = Bo[100] = 17, Do[34] = Go[34] = 9, Fo[34] = ko[34] = 12, qo[34] = jo[34] = 21, Bo[34] = zo[34] = 22, Do[136] = jo[136] = 4, Fo[136] = zo[136] = 1, ko[136] = Bo[136] = 17, Go[136] = qo[136] = 18, Do[35] = jo[35] = 4, Fo[35] = ko[35] = 12, Go[35] = qo[35] = 18, Bo[35] = zo[35] = 22, Do[153] = jo[153] = 4, Go[153] = qo[153] = 18, Fo[102] = ko[102] = 12, Bo[102] = zo[102] = 22, Do[155] = Go[155] = 9, qo[155] = jo[155] = 23, Fo[103] = zo[103] = 1, ko[103] = Bo[103] = 17, Do[152] = jo[152] = 4, ko[152] = Bo[152] = 17, Go[152] = qo[152] = 18, Do[156] = ko[156] = 8, Go[156] = qo[156] = 18, Bo[156] = jo[156] = 23, Do[137] = jo[137] = 4, Fo[137] = zo[137] = 1, Go[137] = qo[137] = 18, Do[139] = jo[139] = 4, Fo[139] = Go[139] = 13, qo[139] = zo[139] = 20, Do[98] = Go[98] = 9, Fo[98] = ko[98] = 12, Bo[98] = zo[98] = 22, Do[99] = zo[99] = 0, Fo[99] = ko[99] = 12, Go[99] = Bo[99] = 19, Fo[38] = ko[38] = 12, qo[38] = jo[38] = 21, Bo[38] = zo[38] = 22, Fo[39] = jo[39] = 5, ko[39] = qo[39] = 16, Bo[39] = zo[39] = 22; var Uo = []; function Vo(t, e, n) { return (t - e) / (n - e) } function Xo(t) { return t.constructor.toString().indexOf("Array") > -1 } function Yo(t, e, n, r, i, o) { for (var s = t.cells[n][e], a = s.cval_real, u = e + r, l = n + i, c = [], h = !1; !h;) { if (void 0 === t.cells[l] || void 0 === t.cells[l][u]) if (l -= i, u -= r, a = (s = t.cells[l][u]).cval_real, -1 === i) if (0 === o) if (1 & a) c.push([u, l]), r = -1, i = 0, o = 0; else { if (!(4 & a)) { c.push([u + s.bottomright, l]), r = 0, i = 1, o = 1, h = !0; break } c.push([u + 1, l]), r = 1, i = 0, o = 0 } else { if (!(1 & a)) { if (4 & a) { c.push([u + s.bottomright, l]), r = 0, i = 1, o = 1, h = !0; break } c.push([u + s.bottomleft, l]), r = 0, i = 1, o = 0, h = !0; break } c.push([u, l]), r = -1, i = 0, o = 0 } else if (1 === i) if (0 === o) { if (!(a & eo)) { if (a & to) { c.push([u + s.topleft, l + 1]), r = 0, i = -1, o = 0, h = !0; break } c.push([u + s.topright, l + 1]), r = 0, i = -1, o = 1, h = !0; break } c.push([u + 1, l + 1]), r = 1, i = 0, o = 1 } else c.push([u + 1, l + 1]), r = 1, i = 0, o = 1; else if (-1 === r) if (0 === o) { if (!(a & to)) { if (1 & a) { c.push([u, l + s.leftbottom]), r = 1, i = 0, o = 0, h = !0; break } c.push([u, l + s.lefttop]), r = 1, i = 0, o = 1, h = !0; break } c.push([u, l + 1]), r = 0, i = 1, o = 0 } else { if (!(a & to)) { console.log("MarchingSquaresJS-isoBands: wtf"); break } c.push([u, l + 1]), r = 0, i = 1, o = 0 } else { if (1 !== r) { console.log("MarchingSquaresJS-isoBands: we came from nowhere!"); break } if (0 === o) { if (!(4 & a)) { c.push([u + 1, l + s.rightbottom]), r = -1, i = 0, o = 0, h = !0; break } c.push([u + 1, l]), r = 0, i = -1, o = 1 } else { if (!(4 & a)) { if (a & eo) { c.push([u + 1, l + s.righttop]), r = -1, i = 0, o = 1; break } c.push([u + 1, l + s.rightbottom]), r = -1, i = 0, o = 0, h = !0; break } c.push([u + 1, l]), r = 0, i = -1, o = 1 } } else if (a = (s = t.cells[l][u]).cval_real, -1 === r) if (0 === o) if (void 0 !== t.cells[l - 1] && void 0 !== t.cells[l - 1][u]) r = 0, i = -1, o = 1; else { if (!(1 & a)) { c.push([u + s.bottomright, l]), r = 0, i = 1, o = 1, h = !0; break } c.push([u, l]) } else { if (!(a & to)) { console.log("MarchingSquaresJS-isoBands: found entry from top at " + u + "," + l); break } console.log("MarchingSquaresJS-isoBands: proceeding in x-direction!") } else if (1 === r) { if (0 === o) { console.log("MarchingSquaresJS-isoBands: wtf"); break } if (void 0 !== t.cells[l + 1] && void 0 !== t.cells[l + 1][u]) r = 0, i = 1, o = 0; else { if (!(a & eo)) { c.push([u + s.topleft, l + 1]), r = 0, i = -1, o = 0, h = !0; break } c.push([u + 1, l + 1]), r = 1, i = 0, o = 1 } } else if (-1 === i) { if (1 !== o) { console.log("MarchingSquaresJS-isoBands: wtf"); break } if (void 0 !== t.cells[l][u + 1]) r = 1, i = 0, o = 1; else { if (!(4 & a)) { c.push([u + 1, l + s.righttop]), r = -1, i = 0, o = 1, h = !0; break } c.push([u + 1, l]), r = 0, i = -1, o = 1 } } else { if (1 !== i) { console.log("MarchingSquaresJS-isoBands: where did we came from???"); break } if (0 !== o) { console.log("MarchingSquaresJS-isoBands: wtf"); break } if (void 0 !== t.cells[l][u - 1]) r = -1, i = 0, o = 0; else { if (!(a & to)) { c.push([u, l + s.leftbottom]), r = 1, i = 0, o = 0, h = !0; break } c.push([u, l + 1]), r = 0, i = 1, o = 0 } } if (l += i, (u += r) === e && l === n) break } return {path: c, i: u, j: l, x: r, y: i, o: o} } function Ho(t) { if (t.edges.length > 0) { var e = t.edges[t.edges.length - 1], n = t.cval_real; switch (e) { case 0: return n & eo ? {p: [1, t.righttop], x: -1, y: 0, o: 1} : {p: [t.topleft, 1], x: 0, y: -1, o: 0}; case 1: return 4 & n ? {p: [t.topleft, 1], x: 0, y: -1, o: 0} : {p: [1, t.rightbottom], x: -1, y: 0, o: 0}; case 2: return 4 & n ? {p: [t.bottomright, 0], x: 0, y: 1, o: 1} : {p: [t.topleft, 1], x: 0, y: -1, o: 0}; case 3: return 1 & n ? {p: [t.topleft, 1], x: 0, y: -1, o: 0} : {p: [t.bottomleft, 0], x: 0, y: 1, o: 0}; case 4: return n & eo ? {p: [1, t.righttop], x: -1, y: 0, o: 1} : {p: [t.topright, 1], x: 0, y: -1, o: 1}; case 5: return 4 & n ? {p: [t.topright, 1], x: 0, y: -1, o: 1} : {p: [1, t.rightbottom], x: -1, y: 0, o: 0}; case 6: return 4 & n ? {p: [t.bottomright, 0], x: 0, y: 1, o: 1} : {p: [t.topright, 1], x: 0, y: -1, o: 1}; case 7: return 1 & n ? {p: [t.topright, 1], x: 0, y: -1, o: 1} : {p: [t.bottomleft, 0], x: 0, y: 1, o: 0}; case 8: return 4 & n ? {p: [t.bottomright, 0], x: 0, y: 1, o: 1} : {p: [1, t.righttop], x: -1, y: 0, o: 1}; case 9: return 1 & n ? {p: [1, t.righttop], x: -1, y: 0, o: 1} : {p: [t.bottomleft, 0], x: 0, y: 1, o: 0}; case 10: return 1 & n ? {p: [0, t.leftbottom], x: 1, y: 0, o: 0} : {p: [1, t.righttop], x: -1, y: 0, o: 1}; case 11: return n & to ? {p: [1, t.righttop], x: -1, y: 0, o: 1} : {p: [0, t.lefttop], x: 1, y: 0, o: 1}; case 12: return 4 & n ? {p: [t.bottomright, 0], x: 0, y: 1, o: 1} : {p: [1, t.rightbottom], x: -1, y: 0, o: 0}; case 13: return 1 & n ? {p: [1, t.rightbottom], x: -1, y: 0, o: 0} : {p: [t.bottomleft, 0], x: 0, y: 1, o: 0}; case 14: return 1 & n ? {p: [0, t.leftbottom], x: 1, y: 0, o: 0} : {p: [1, t.rightbottom], x: -1, y: 0, o: 0}; case 15: return n & to ? {p: [1, t.rightbottom], x: -1, y: 0, o: 0} : {p: [0, t.lefttop], x: 1, y: 0, o: 1}; case 16: return 4 & n ? {p: [t.bottomright, 0], x: 0, y: 1, o: 1} : {p: [0, t.leftbottom], x: 1, y: 0, o: 0}; case 17: return n & to ? {p: [t.bottomright, 0], x: 0, y: 1, o: 1} : {p: [0, t.lefttop], x: 1, y: 0, o: 1}; case 18: return 1 & n ? {p: [0, t.leftbottom], x: 1, y: 0, o: 0} : {p: [t.bottomleft, 0], x: 0, y: 1, o: 0}; case 19: return n & to ? {p: [t.bottomleft, 0], x: 0, y: 1, o: 0} : {p: [0, t.lefttop], x: 1, y: 0, o: 1}; case 20: return n & to ? {p: [t.topleft, 1], x: 0, y: -1, o: 0} : {p: [0, t.leftbottom], x: 1, y: 0, o: 0}; case 21: return n & eo ? {p: [0, t.leftbottom], x: 1, y: 0, o: 0} : {p: [t.topright, 1], x: 0, y: -1, o: 1}; case 22: return n & to ? {p: [t.topleft, 1], x: 0, y: -1, o: 0} : {p: [0, t.lefttop], x: 1, y: 0, o: 1}; case 23: return n & eo ? {p: [0, t.lefttop], x: 1, y: 0, o: 1} : {p: [t.topright, 1], x: 0, y: -1, o: 1}; default: console.log("MarchingSquaresJS-isoBands: edge index out of range!"), console.log(t) } } return null } function Wo(t, e, n, r) { var i, o, s, a, u, l = t.cval; switch (e) { case -1: switch (r) { case 0: i = Fo[l], s = ho[l], a = po[l], u = fo[l]; break; default: i = Do[l], s = uo[l], a = lo[l], u = co[l] } break; case 1: switch (r) { case 0: i = qo[l], s = Io[l], a = No[l], u = So[l]; break; default: i = Bo[l], s = Eo[l], a = bo[l], u = wo[l] } break; default: switch (n) { case -1: switch (r) { case 0: i = zo[l], s = no[l], a = ro[l], u = io[l]; break; default: i = jo[l], s = oo[l], a = so[l], u = ao[l] } break; case 1: switch (r) { case 0: i = Go[l], s = go[l], a = yo[l], u = vo[l]; break; default: i = ko[l], s = _o[l], a = mo[l], u = xo[l] } } } if (o = t.edges.indexOf(i), void 0 === t.edges[o]) return null; switch (function (t, e) { delete t.edges[e]; for (var n = e + 1; n < t.edges.length; n++) t.edges[n - 1] = t.edges[n]; t.edges.pop() }(t, o), l = t.cval_real, i) { case 0: l & eo ? (e = t.topleft, n = 1) : (e = 1, n = t.righttop); break; case 1: 4 & l ? (e = 1, n = t.rightbottom) : (e = t.topleft, n = 1); break; case 2: 4 & l ? (e = t.topleft, n = 1) : (e = t.bottomright, n = 0); break; case 3: 1 & l ? (e = t.bottomleft, n = 0) : (e = t.topleft, n = 1); break; case 4: l & eo ? (e = t.topright, n = 1) : (e = 1, n = t.righttop); break; case 5: 4 & l ? (e = 1, n = t.rightbottom) : (e = t.topright, n = 1); break; case 6: 4 & l ? (e = t.topright, n = 1) : (e = t.bottomright, n = 0); break; case 7: 1 & l ? (e = t.bottomleft, n = 0) : (e = t.topright, n = 1); break; case 8: 4 & l ? (e = 1, n = t.righttop) : (e = t.bottomright, n = 0); break; case 9: 1 & l ? (e = t.bottomleft, n = 0) : (e = 1, n = t.righttop); break; case 10: 1 & l ? (e = 1, n = t.righttop) : (e = 0, n = t.leftbottom); break; case 11: l & to ? (e = 0, n = t.lefttop) : (e = 1, n = t.righttop); break; case 12: 4 & l ? (e = 1, n = t.rightbottom) : (e = t.bottomright, n = 0); break; case 13: 1 & l ? (e = t.bottomleft, n = 0) : (e = 1, n = t.rightbottom); break; case 14: 1 & l ? (e = 1, n = t.rightbottom) : (e = 0, n = t.leftbottom); break; case 15: l & to ? (e = 0, n = t.lefttop) : (e = 1, n = t.rightbottom); break; case 16: 4 & l ? (e = 0, n = t.leftbottom) : (e = t.bottomright, n = 0); break; case 17: l & to ? (e = 0, n = t.lefttop) : (e = t.bottomright, n = 0); break; case 18: 1 & l ? (e = t.bottomleft, n = 0) : (e = 0, n = t.leftbottom); break; case 19: l & to ? (e = 0, n = t.lefttop) : (e = t.bottomleft, n = 0); break; case 20: l & to ? (e = 0, n = t.leftbottom) : (e = t.topleft, n = 1); break; case 21: l & eo ? (e = t.topright, n = 1) : (e = 0, n = t.leftbottom); break; case 22: l & to ? (e = 0, n = t.lefttop) : (e = t.topleft, n = 1); break; case 23: l & eo ? (e = t.topright, n = 1) : (e = 0, n = t.lefttop); break; default: return console.log("MarchingSquaresJS-isoBands: edge index out of range!"), console.log(t), null } return void 0 !== e && void 0 !== n && void 0 !== s && void 0 !== a && void 0 !== u || (console.log("MarchingSquaresJS-isoBands: undefined value!"), console.log(t), console.log(e + " " + n + " " + s + " " + a + " " + u)), { p: [e, n], x: s, y: a, o: u } } function Jo(t) { var e = [], n = []; t.forEach((function (t) { var r = jr(l([t])); n.push(r), e.push({ring: t, area: r}) })), n.sort((function (t, e) { return e - t })); var r = []; return n.forEach((function (t) { for (var n = 0; n < e.length; n++) if (e[n].area === t) { r.push(e[n].ring), e.splice(n, 1); break } })), r } function Zo(t) { for (var e = t.map((function (t) { return {lrCoordinates: t, grouped: !1} })), n = []; !Qo(e);) for (var r = 0; r < e.length; r++) if (!e[r].grouped) { var i = []; i.push(e[r].lrCoordinates), e[r].grouped = !0; for (var o = l([e[r].lrCoordinates]), s = r + 1; s < e.length; s++) { if (!e[s].grouped) Ko(l([e[s].lrCoordinates]), o) && (i.push(e[s].lrCoordinates), e[s].grouped = !0) } n.push(i) } return n } function Ko(t, e) { for (var n = bn(t), r = 0; r < n.features.length; r++) if (!ye(n.features[r], e)) return !1; return !0 } function Qo(t) { for (var e = 0; e < t.length; e++) if (!1 === t[e].grouped) return !1; return !0 } function $o(t, e, n) { if (!P(n = n || {})) throw new Error("options is invalid"); var r = n.pivot, i = n.mutate; if (!t) throw new Error("geojson is required"); if (null == e || isNaN(e)) throw new Error("angle is required"); return 0 === e || (r || (r = En(t)), !1 !== i && void 0 !== i || (t = Ie(t)), R(t, (function (t) { var n = Bi(r, t) + e, i = Ar(r, t), o = Q(ji(r, i, n)); t[0] = o[0], t[1] = o[1] }))), t } function ts(t, e, n) { if (!P(n = n || {})) throw new Error("options is invalid"); var r = n.origin, i = n.mutate; if (!t) throw new Error("geojson required"); if ("number" != typeof e || 0 === e) throw new Error("invalid factor"); var o = Array.isArray(r) || "object" == typeof r; return !0 !== i && (t = Ie(t)), "FeatureCollection" !== t.type || o ? es(t, e, r) : (F(t, (function (n, i) { t.features[i] = es(n, e, r) })), t) } function es(t, e, n) { var r = "Point" === it(t); return n = function (t, e) { null == e && (e = "centroid"); if (Array.isArray(e) || "object" == typeof e) return K(e); var n = t.bbox ? t.bbox : Z(t), r = n[0], i = n[1], o = n[2], s = n[3]; switch (e) { case "sw": case "southwest": case "westsouth": case "bottomleft": return a([r, i]); case "se": case "southeast": case "eastsouth": case "bottomright": return a([o, i]); case "nw": case "northwest": case "westnorth": case "topleft": return a([r, s]); case "ne": case "northeast": case "eastnorth": case "topright": return a([o, s]); case "center": return xn(t); case void 0: case null: case "centroid": return En(t); default: throw new Error("invalid origin") } }(t, n), 1 === e || r || R(t, (function (t) { var r = Ar(n, t), i = Bi(n, t), o = Q(ji(n, r * e, i)); t[0] = o[0], t[1] = o[1], 3 === t.length && (t[2] *= e) })), t } function ns(t) { var e = t[0], n = t[1]; return [n[0] - e[0], n[1] - e[1]] } function rs(t, e) { return t[0] * e[1] - e[0] * t[1] } function is(t, e) { return !function (t, e) { return 0 === rs(ns(t), ns(e)) }(t, e) && function (t, e) { var n, r, i = t[0], o = ns(t), s = e[0], a = ns(e), u = rs(o, a); return function (t, e) { return [t[0] + e[0], t[1] + e[1]] }(i, function (t, e) { return [t * e[0], t * e[1]] }(rs((r = i, [(n = s)[0] - r[0], n[1] - r[1]]), a) / u, o)) }(t, e) } function os(t, e, n) { var r = [], i = E(e, n), o = Q(t), s = []; return o.forEach((function (t, e) { if (e !== o.length - 1) { var n = (l = t, c = o[e + 1], h = i, p = Math.sqrt((l[0] - c[0]) * (l[0] - c[0]) + (l[1] - c[1]) * (l[1] - c[1])), f = l[0] + h * (c[1] - l[1]) / p, g = c[0] + h * (c[1] - l[1]) / p, d = l[1] + h * (l[0] - c[0]) / p, y = c[1] + h * (l[0] - c[0]) / p, [ [f, d], [g, y] ]); if (r.push(n), e > 0) { var a = r[e - 1], u = is(n, a); !1 !== u && (a[1] = u, n[0] = u), s.push(a[0]), e === o.length - 2 && (s.push(n[0]), s.push(n[1])) } 2 === o.length && (s.push(n[0]), s.push(n[1])) } var l, c, h, p, f, g, d, y })), h(s, t.properties) } function ss(t, e, n) { var r = e[0] - t[0], i = e[1] - t[1], o = n[0] - e[0]; return function (t) { return (t > 0) - (t < 0) || +t }(r * (n[1] - e[1]) - o * i) } function as(t, e) { return e.geometry.coordinates[0].every((function (e) { return ye(a(e), t) })) } Uo[1] = Uo[169] = Co, Uo[4] = Uo[166] = Po, Uo[16] = Uo[154] = Mo, Uo[64] = Uo[106] = Lo, Uo[168] = Uo[2] = Oo, Uo[162] = Uo[8] = Ro, Uo[138] = Uo[32] = To, Uo[42] = Uo[128] = Ao, Uo[5] = Uo[165] = function (t) { return [ [0, 0], [0, t.leftbottom], [1, t.rightbottom], [1, 0] ] }, Uo[20] = Uo[150] = function (t) { return [ [1, 0], [t.bottomright, 0], [t.topright, 1], [1, 1] ] }, Uo[80] = Uo[90] = function (t) { return [ [1, 1], [1, t.righttop], [0, t.lefttop], [0, 1] ] }, Uo[65] = Uo[105] = function (t) { return [ [t.bottomleft, 0], [0, 0], [0, 1], [t.topleft, 1] ] }, Uo[160] = Uo[10] = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [0, t.leftbottom], [0, t.lefttop] ] }, Uo[130] = Uo[40] = function (t) { return [ [t.topleft, 1], [t.topright, 1], [t.bottomright, 0], [t.bottomleft, 0] ] }, Uo[85] = function () { return [ [0, 0], [0, 1], [1, 1], [1, 0] ] }, Uo[101] = Uo[69] = function (t) { return [ [1, t.rightbottom], [1, 0], [0, 0], [0, 1], [t.topleft, 1] ] }, Uo[149] = Uo[21] = function (t) { return [ [t.topright, 1], [1, 1], [1, 0], [0, 0], [0, t.leftbottom] ] }, Uo[86] = Uo[84] = function (t) { return [ [1, 0], [t.bottomright, 0], [0, t.lefttop], [0, 1], [1, 1] ] }, Uo[89] = Uo[81] = function (t) { return [ [1, 1], [1, t.righttop], [t.bottomleft, 0], [0, 0], [0, 1] ] }, Uo[96] = Uo[74] = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [0, t.lefttop], [0, 1], [t.topleft, 1] ] }, Uo[24] = Uo[146] = function (t) { return [ [1, 1], [1, t.righttop], [t.bottomright, 0], [t.bottomleft, 0], [t.topright, 1] ] }, Uo[6] = Uo[164] = function (t) { return [ [1, t.rightbottom], [1, 0], [t.bottomright, 0], [0, t.leftbottom], [0, t.lefttop] ] }, Uo[129] = Uo[41] = function (t) { return [ [t.topright, 1], [t.bottomleft, 0], [0, 0], [0, t.leftbottom], [t.topleft, 1] ] }, Uo[66] = Uo[104] = function (t) { return [ [t.bottomright, 0], [t.bottomleft, 0], [0, t.lefttop], [0, 1], [t.topleft, 1] ] }, Uo[144] = Uo[26] = function (t) { return [ [1, 1], [1, t.righttop], [0, t.leftbottom], [0, t.lefttop], [t.topright, 1] ] }, Uo[36] = Uo[134] = function (t) { return [ [1, t.rightbottom], [1, 0], [t.bottomright, 0], [t.topleft, 1], [t.topright, 1] ] }, Uo[9] = Uo[161] = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [t.bottomleft, 0], [0, 0], [0, t.leftbottom] ] }, Uo[37] = Uo[133] = function (t) { return [ [1, t.rightbottom], [1, 0], [0, 0], [0, t.leftbottom], [t.topleft, 1], [t.topright, 1] ] }, Uo[148] = Uo[22] = function (t) { return [ [1, 1], [1, 0], [t.bottomright, 0], [0, t.leftbottom], [0, t.lefttop], [t.topright, 1] ] }, Uo[82] = Uo[88] = function (t) { return [ [1, 1], [1, t.righttop], [t.bottomright, 0], [t.bottomleft, 0], [0, t.lefttop], [0, 1] ] }, Uo[73] = Uo[97] = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [t.bottomleft, 0], [0, 0], [0, 1], [t.topleft, 1] ] }, Uo[145] = Uo[25] = function (t) { return [ [1, 1], [1, t.righttop], [t.bottomleft, 0], [0, 0], [0, t.leftbottom], [t.topright, 1] ] }, Uo[70] = Uo[100] = function (t) { return [ [1, t.rightbottom], [1, 0], [t.bottomright, 0], [0, t.lefttop], [0, 1], [t.topleft, 1] ] }, Uo[34] = function (t) { return [Ao(t), Ro(t)] }, Uo[35] = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [t.bottomright, 0], [t.bottomleft, 0], [0, t.leftbottom], [0, t.lefttop], [t.topleft, 1], [t.topright, 1] ] }, Uo[136] = function (t) { return [To(t), Oo(t)] }, Uo[153] = function (t) { return [Mo(t), Co(t)] }, Uo[102] = function (t) { return [Po(t), Lo(t)] }, Uo[155] = function (t) { return [ [1, 1], [1, t.righttop], [t.bottomleft, 0], [0, 0], [0, t.leftbottom], [t.topright, 1] ] }, Uo[103] = function (t) { return [ [1, t.rightbottom], [1, 0], [t.bottomright, 0], [0, t.lefttop], [0, 1], [t.topleft, 1] ] }, Uo[152] = function (t) { return [Mo(t), Oo(t)] }, Uo[156] = function (t) { return [ [1, 1], [1, t.righttop], [t.bottomright, 0], [t.bottomleft, 0], [0, t.leftbottom], [0, t.lefttop], [t.topright, 1] ] }, Uo[137] = function (t) { return [To(t), Co(t)] }, Uo[139] = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [t.bottomleft, 0], [0, 0], [0, t.leftbottom], [t.topleft, 1], [t.topright, 1] ] }, Uo[98] = function (t) { return [Ro(t), Lo(t)] }, Uo[99] = function (t) { return [ [1, t.righttop], [1, t.rightbottom], [t.bottomright, 0], [t.bottomleft, 0], [0, t.lefttop], [0, 1], [t.topleft, 1] ] }, Uo[38] = function (t) { return [Po(t), Ao(t)] }, Uo[39] = function (t) { return [ [1, t.rightbottom], [1, 0], [t.bottomright, 0], [0, t.leftbottom], [0, t.lefttop], [t.topleft, 1], [t.topright, 1] ] }; var us = function () { function t(e) { this.id = t.buildId(e), this.coordinates = e, this.innerEdges = [], this.outerEdges = [], this.outerEdgesSorted = !1 } return t.buildId = function (t) { return t.join(",") }, t.prototype.removeInnerEdge = function (t) { this.innerEdges = this.innerEdges.filter((function (e) { return e.from.id !== t.from.id })) }, t.prototype.removeOuterEdge = function (t) { this.outerEdges = this.outerEdges.filter((function (e) { return e.to.id !== t.to.id })) }, t.prototype.addOuterEdge = function (t) { this.outerEdges.push(t), this.outerEdgesSorted = !1 }, t.prototype.sortOuterEdges = function () { var t = this; this.outerEdgesSorted || (this.outerEdges.sort((function (e, n) { var r = e.to, i = n.to; if (r.coordinates[0] - t.coordinates[0] >= 0 && i.coordinates[0] - t.coordinates[0] < 0) return 1; if (r.coordinates[0] - t.coordinates[0] < 0 && i.coordinates[0] - t.coordinates[0] >= 0) return -1; if (r.coordinates[0] - t.coordinates[0] == 0 && i.coordinates[0] - t.coordinates[0] == 0) return r.coordinates[1] - t.coordinates[1] >= 0 || i.coordinates[1] - t.coordinates[1] >= 0 ? r.coordinates[1] - i.coordinates[1] : i.coordinates[1] - r.coordinates[1]; var o = ss(t.coordinates, r.coordinates, i.coordinates); return o < 0 ? 1 : o > 0 ? -1 : Math.pow(r.coordinates[0] - t.coordinates[0], 2) + Math.pow(r.coordinates[1] - t.coordinates[1], 2) - (Math.pow(i.coordinates[0] - t.coordinates[0], 2) + Math.pow(i.coordinates[1] - t.coordinates[1], 2)) })), this.outerEdgesSorted = !0) }, t.prototype.getOuterEdges = function () { return this.sortOuterEdges(), this.outerEdges }, t.prototype.getOuterEdge = function (t) { return this.sortOuterEdges(), this.outerEdges[t] }, t.prototype.addInnerEdge = function (t) { this.innerEdges.push(t) }, t }(), ls = function () { function t(t, e) { this.from = t, this.to = e, this.next = void 0, this.label = void 0, this.symetric = void 0, this.ring = void 0, this.from.addOuterEdge(this), this.to.addInnerEdge(this) } return t.prototype.getSymetric = function () { return this.symetric || (this.symetric = new t(this.to, this.from), this.symetric.symetric = this), this.symetric }, t.prototype.deleteEdge = function () { this.from.removeOuterEdge(this), this.to.removeInnerEdge(this) }, t.prototype.isEqual = function (t) { return this.from.id === t.from.id && this.to.id === t.to.id }, t.prototype.toString = function () { return "Edge { " + this.from.id + " -> " + this.to.id + " }" }, t.prototype.toLineString = function () { return h([this.from.coordinates, this.to.coordinates]) }, t.prototype.compareTo = function (t) { return ss(t.from.coordinates, t.to.coordinates, this.to.coordinates) }, t }(), cs = function () { function t() { this.edges = [], this.polygon = void 0, this.envelope = void 0 } return t.prototype.push = function (t) { this.edges.push(t), this.polygon = this.envelope = void 0 }, t.prototype.get = function (t) { return this.edges[t] }, Object.defineProperty(t.prototype, "length", { get: function () { return this.edges.length }, enumerable: !0, configurable: !0 }), t.prototype.forEach = function (t) { this.edges.forEach(t) }, t.prototype.map = function (t) { return this.edges.map(t) }, t.prototype.some = function (t) { return this.edges.some(t) }, t.prototype.isValid = function () { return !0 }, t.prototype.isHole = function () { var t = this, e = this.edges.reduce((function (e, n, r) { return n.from.coordinates[1] > t.edges[e].from.coordinates[1] && (e = r), e }), 0), n = (0 === e ? this.length : e) - 1, r = (e + 1) % this.length, i = ss(this.edges[n].from.coordinates, this.edges[e].from.coordinates, this.edges[r].from.coordinates); return 0 === i ? this.edges[n].from.coordinates[0] > this.edges[r].from.coordinates[0] : i > 0 }, t.prototype.toMultiPoint = function () { return d(this.edges.map((function (t) { return t.from.coordinates }))) }, t.prototype.toPolygon = function () { if (this.polygon) return this.polygon; var t = this.edges.map((function (t) { return t.from.coordinates })); return t.push(this.edges[0].from.coordinates), this.polygon = l([t]) }, t.prototype.getEnvelope = function () { return this.envelope ? this.envelope : this.envelope = dn(this.toPolygon()) }, t.findEdgeRingContaining = function (t, e) { var n, r, i = t.getEnvelope(); return e.forEach((function (e) { var o, s, u, l, c, h, p = e.getEnvelope(); if ((r && (n = r.getEnvelope()), s = i, u = (o = p).geometry.coordinates[0].map((function (t) { return t[0] })), l = o.geometry.coordinates[0].map((function (t) { return t[1] })), c = s.geometry.coordinates[0].map((function (t) { return t[0] })), h = s.geometry.coordinates[0].map((function (t) { return t[1] })), Math.max.apply(null, u) !== Math.max.apply(null, c) || Math.max.apply(null, l) !== Math.max.apply(null, h) || Math.min.apply(null, u) !== Math.min.apply(null, c) || Math.min.apply(null, l) !== Math.min.apply(null, h)) && as(p, i)) { for (var f = t.map((function (t) { return t.from.coordinates })), g = void 0, d = function (t) { e.some((function (e) { return n = t, r = e.from.coordinates, n[0] === r[0] && n[1] === r[1]; var n, r })) || (g = t) }, y = 0, v = f; y < v.length; y++) { d(v[y]) } g && e.inside(a(g)) && (r && !as(n, p) || (r = e)) } })), r }, t.prototype.inside = function (t) { return ye(t, this.toPolygon()) }, t }(); var hs = function () { function t() { this.edges = [], this.nodes = {} } return t.fromGeoJson = function (e) { !function (t) { if (!t) throw new Error("No geojson passed"); if ("FeatureCollection" !== t.type && "GeometryCollection" !== t.type && "MultiLineString" !== t.type && "LineString" !== t.type && "Feature" !== t.type) throw new Error("Invalid input type '" + t.type + "'. Geojson must be FeatureCollection, GeometryCollection, LineString, MultiLineString or Feature") }(e); var n = new t; return z(e, (function (t) { et(t, "LineString", "Graph::fromGeoJson"), T(t, (function (t, e) { if (t) { var r = n.getNode(t), i = n.getNode(e); n.addEdge(r, i) } return e })) })), n }, t.prototype.getNode = function (t) { var e = us.buildId(t), n = this.nodes[e]; return n || (n = this.nodes[e] = new us(t)), n }, t.prototype.addEdge = function (t, e) { var n = new ls(t, e), r = n.getSymetric(); this.edges.push(n), this.edges.push(r) }, t.prototype.deleteDangles = function () { var t = this; Object.keys(this.nodes).map((function (e) { return t.nodes[e] })).forEach((function (e) { return t._removeIfDangle(e) })) }, t.prototype._removeIfDangle = function (t) { var e = this; if (t.innerEdges.length <= 1) { var n = t.getOuterEdges().map((function (t) { return t.to })); this.removeNode(t), n.forEach((function (t) { return e._removeIfDangle(t) })) } }, t.prototype.deleteCutEdges = function () { var t = this; this._computeNextCWEdges(), this._findLabeledEdgeRings(), this.edges.forEach((function (e) { e.label === e.symetric.label && (t.removeEdge(e.symetric), t.removeEdge(e)) })) }, t.prototype._computeNextCWEdges = function (t) { var e = this; void 0 === t ? Object.keys(this.nodes).forEach((function (t) { return e._computeNextCWEdges(e.nodes[t]) })) : t.getOuterEdges().forEach((function (e, n) { t.getOuterEdge((0 === n ? t.getOuterEdges().length : n) - 1).symetric.next = e })) }, t.prototype._computeNextCCWEdges = function (t, e) { for (var n, r, i = t.getOuterEdges(), o = i.length - 1; o >= 0; --o) { var s = i[o], a = s.symetric, u = void 0, l = void 0; s.label === e && (u = s), a.label === e && (l = a), u && l && (l && (r = l), u && (r && (r.next = u, r = void 0), n || (n = u))) } r && (r.next = n) }, t.prototype._findLabeledEdgeRings = function () { var t = [], e = 0; return this.edges.forEach((function (n) { if (!(n.label >= 0)) { t.push(n); var r = n; do { r.label = e, r = r.next } while (!n.isEqual(r)); e++ } })), t }, t.prototype.getEdgeRings = function () { var t = this; this._computeNextCWEdges(), this.edges.forEach((function (t) { t.label = void 0 })), this._findLabeledEdgeRings().forEach((function (e) { t._findIntersectionNodes(e).forEach((function (n) { t._computeNextCCWEdges(n, e.label) })) })); var e = []; return this.edges.forEach((function (n) { n.ring || e.push(t._findEdgeRing(n)) })), e }, t.prototype._findIntersectionNodes = function (t) { var e = [], n = t, r = function () { var r = 0; n.from.getOuterEdges().forEach((function (e) { e.label === t.label && ++r })), r > 1 && e.push(n.from), n = n.next }; do { r() } while (!t.isEqual(n)); return e }, t.prototype._findEdgeRing = function (t) { var e = t, n = new cs; do { n.push(e), e.ring = n, e = e.next } while (!t.isEqual(e)); return n }, t.prototype.removeNode = function (t) { var e = this; t.getOuterEdges().forEach((function (t) { return e.removeEdge(t) })), t.innerEdges.forEach((function (t) { return e.removeEdge(t) })), delete this.nodes[t.id] }, t.prototype.removeEdge = function (t) { this.edges = this.edges.filter((function (e) { return !e.isEqual(t) })), t.deleteEdge() }, t }(); function ps(t, e) { var n = !0; return z(t, (function (t) { z(e, (function (e) { if (!1 === n) return !1; n = function (t, e) { switch (t.type) { case "Point": switch (e.type) { case "Point": return n = t.coordinates, r = e.coordinates, !(n[0] === r[0] && n[1] === r[1]); case "LineString": return !fs(e, t); case "Polygon": return !ye(t, e) } break; case "LineString": switch (e.type) { case "Point": return !fs(t, e); case "LineString": return !function (t, e) { if (Or(t, e).features.length > 0) return !0; return !1 }(t, e); case "Polygon": return !gs(e, t) } break; case "Polygon": switch (e.type) { case "Point": return !ye(e, t); case "LineString": return !gs(t, e); case "Polygon": return !function (t, e) { for (var n = 0, r = t.coordinates[0]; n < r.length; n++) { if (ye(r[n], e)) return !0 } for (var i = 0, o = e.coordinates[0]; i < o.length; i++) { if (ye(o[i], t)) return !0 } if (Or(Ii(t), Ii(e)).features.length > 0) return !0; return !1 }(e, t) } } var n, r; return !1 }(t.geometry, e.geometry) })) })), n } function fs(t, e) { for (var n = 0; n < t.coordinates.length - 1; n++) if (ds(t.coordinates[n], t.coordinates[n + 1], e.coordinates)) return !0; return !1 } function gs(t, e) { for (var n = 0, r = e.coordinates; n < r.length; n++) { if (ye(r[n], t)) return !0 } return Or(e, Ii(t)).features.length > 0 } function ds(t, e, n) { var r = n[0] - t[0], i = n[1] - t[1], o = e[0] - t[0], s = e[1] - t[1]; return 0 == r * s - i * o && (Math.abs(o) >= Math.abs(s) ? o > 0 ? t[0] <= n[0] && n[0] <= e[0] : e[0] <= n[0] && n[0] <= t[0] : s > 0 ? t[1] <= n[1] && n[1] <= e[1] : e[1] <= n[1] && n[1] <= t[1]) } function ys(t, e) { return !(t[0] > e[0]) && (!(t[2] < e[2]) && (!(t[1] > e[1]) && !(t[3] < e[3]))) } function vs(t, e) { return t[0] === e[0] && t[1] === e[1] } function _s(t, e) { return [(t[0] + e[0]) / 2, (t[1] + e[1]) / 2] } function ms(t, e) { for (var n = !1, r = !1, i = t.coordinates.length, o = 0; o < i && !n && !r;) { for (var s = 0; s < e.coordinates.length - 1; s++) { var a = !0; 0 !== s && s !== e.coordinates.length - 2 || (a = !1), bs(e.coordinates[s], e.coordinates[s + 1], t.coordinates[o], a) ? n = !0 : r = !0 } o++ } return n && r } function xs(t, e) { return Or(t, Ni(e)).features.length > 0 } function Es(t, e) { for (var n = !1, r = !1, i = t.coordinates.length, o = 0; o < i && (!n || !r); o++) ye(a(t.coordinates[o]), e) ? n = !0 : r = !0; return r && n } function bs(t, e, n, r) { var i = n[0] - t[0], o = n[1] - t[1], s = e[0] - t[0], a = e[1] - t[1]; return 0 == i * a - o * s && (r ? Math.abs(s) >= Math.abs(a) ? s > 0 ? t[0] <= n[0] && n[0] <= e[0] : e[0] <= n[0] && n[0] <= t[0] : a > 0 ? t[1] <= n[1] && n[1] <= e[1] : e[1] <= n[1] && n[1] <= t[1] : Math.abs(s) >= Math.abs(a) ? s > 0 ? t[0] < n[0] && n[0] < e[0] : e[0] < n[0] && n[0] < t[0] : a > 0 ? t[1] < n[1] && n[1] < e[1] : e[1] < n[1] && n[1] < t[1]) } var ws = function (t) { this.precision = t && t.precision ? t.precision : 17, this.direction = !(!t || !t.direction) && t.direction, this.pseudoNode = !(!t || !t.pseudoNode) && t.pseudoNode, this.objectComparator = t && t.objectComparator ? t.objectComparator : Ss }; function Is(t) { return t.coordinates.map((function (e) { return {type: t.type.replace("Multi", ""), coordinates: e} })) } function Ns(t, e) { return t.hasOwnProperty("coordinates") ? t.coordinates.length === e.coordinates.length : t.length === e.length } function Ss(t, e) { return Fi(t, e, {strict: !0}) } ws.prototype.compare = function (t, e) { if (t.type !== e.type || !Ns(t, e)) return !1; switch (t.type) { case "Point": return this.compareCoord(t.coordinates, e.coordinates); case "LineString": return this.compareLine(t.coordinates, e.coordinates, 0, !1); case "Polygon": return this.comparePolygon(t, e); case "Feature": return this.compareFeature(t, e); default: if (0 === t.type.indexOf("Multi")) { var n = this, r = Is(t), i = Is(e); return r.every((function (t) { return this.some((function (e) { return n.compare(t, e) })) }), i) } } return !1 }, ws.prototype.compareCoord = function (t, e) { if (t.length !== e.length) return !1; for (var n = 0; n < t.length; n++) if (t[n].toFixed(this.precision) !== e[n].toFixed(this.precision)) return !1; return !0 }, ws.prototype.compareLine = function (t, e, n, r) { if (!Ns(t, e)) return !1; var i = this.pseudoNode ? t : this.removePseudo(t), o = this.pseudoNode ? e : this.removePseudo(e); if (!r || this.compareCoord(i[0], o[0]) || (o = this.fixStartIndex(o, i))) { var s = this.compareCoord(i[n], o[n]); return this.direction || s ? this.comparePath(i, o) : !!this.compareCoord(i[n], o[o.length - (1 + n)]) && this.comparePath(i.slice().reverse(), o) } }, ws.prototype.fixStartIndex = function (t, e) { for (var n, r = -1, i = 0; i < t.length; i++) if (this.compareCoord(t[i], e[0])) { r = i; break } return r >= 0 && (n = [].concat(t.slice(r, t.length), t.slice(1, r + 1))), n }, ws.prototype.comparePath = function (t, e) { var n = this; return t.every((function (t, e) { return n.compareCoord(t, this[e]) }), e) }, ws.prototype.comparePolygon = function (t, e) { if (this.compareLine(t.coordinates[0], e.coordinates[0], 1, !0)) { var n = t.coordinates.slice(1, t.coordinates.length), r = e.coordinates.slice(1, e.coordinates.length), i = this; return n.every((function (t) { return this.some((function (e) { return i.compareLine(t, e, 1, !0) })) }), r) } return !1 }, ws.prototype.compareFeature = function (t, e) { return !(t.id !== e.id || !this.objectComparator(t.properties, e.properties) || !this.compareBBox(t, e)) && this.compare(t.geometry, e.geometry) }, ws.prototype.compareBBox = function (t, e) { return !!(!t.bbox && !e.bbox || t.bbox && e.bbox && this.compareCoord(t.bbox, e.bbox)) }, ws.prototype.removePseudo = function (t) { return t }; var Cs = ws; function Ps(t, e) { var n = !1; return z(t, (function (t) { z(e, (function (e) { if (!0 === n) return !0; n = !ps(t.geometry, e.geometry) })) })), n } var Ms = Bt((function (t) { function e(t, e, n, r) { this.dataset = [], this.epsilon = 1, this.minPts = 2, this.distance = this._euclideanDistance, this.clusters = [], this.noise = [], this._visited = [], this._assigned = [], this._datasetLength = 0, this._init(t, e, n, r) } e.prototype.run = function (t, e, n, r) { this._init(t, e, n, r); for (var i = 0; i < this._datasetLength; i++) if (1 !== this._visited[i]) { this._visited[i] = 1; var o = this._regionQuery(i); if (o.length < this.minPts) this.noise.push(i); else { var s = this.clusters.length; this.clusters.push([]), this._addToCluster(i, s), this._expandCluster(s, o) } } return this.clusters }, e.prototype._init = function (t, e, n, r) { if (t) { if (!(t instanceof Array)) throw Error("Dataset must be of type array, " + typeof t + " given"); this.dataset = t, this.clusters = [], this.noise = [], this._datasetLength = t.length, this._visited = new Array(this._datasetLength), this._assigned = new Array(this._datasetLength) } e && (this.epsilon = e), n && (this.minPts = n), r && (this.distance = r) }, e.prototype._expandCluster = function (t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; if (1 !== this._visited[r]) { this._visited[r] = 1; var i = this._regionQuery(r); i.length >= this.minPts && (e = this._mergeArrays(e, i)) } 1 !== this._assigned[r] && this._addToCluster(r, t) } }, e.prototype._addToCluster = function (t, e) { this.clusters[e].push(t), this._assigned[t] = 1 }, e.prototype._regionQuery = function (t) { for (var e = [], n = 0; n < this._datasetLength; n++) { this.distance(this.dataset[t], this.dataset[n]) < this.epsilon && e.push(n) } return e }, e.prototype._mergeArrays = function (t, e) { for (var n = e.length, r = 0; r < n; r++) { var i = e[r]; t.indexOf(i) < 0 && t.push(i) } return t }, e.prototype._euclideanDistance = function (t, e) { for (var n = 0, r = Math.min(t.length, e.length); r--;) n += (t[r] - e[r]) * (t[r] - e[r]); return Math.sqrt(n) }, t.exports && (t.exports = e) })), Ls = Bt((function (t) { function e(t, e, n) { this.k = 3, this.dataset = [], this.assignments = [], this.centroids = [], this.init(t, e, n) } e.prototype.init = function (t, e, n) { this.assignments = [], this.centroids = [], void 0 !== t && (this.dataset = t), void 0 !== e && (this.k = e), void 0 !== n && (this.distance = n) }, e.prototype.run = function (t, e) { this.init(t, e); for (var n = this.dataset.length, r = 0; r < this.k; r++) this.centroids[r] = this.randomCentroid(); for (var i = !0; i;) { i = this.assign(); for (var o = 0; o < this.k; o++) { for (var s = new Array(c), a = 0, u = 0; u < c; u++) s[u] = 0; for (var l = 0; l < n; l++) { var c = this.dataset[l].length; if (o === this.assignments[l]) { for (u = 0; u < c; u++) s[u] += this.dataset[l][u]; a++ } } if (a > 0) { for (u = 0; u < c; u++) s[u] /= a; this.centroids[o] = s } else this.centroids[o] = this.randomCentroid(), i = !0 } } return this.getClusters() }, e.prototype.randomCentroid = function () { var t, e, n = this.dataset.length - 1; do { e = Math.round(Math.random() * n), t = this.dataset[e] } while (this.centroids.indexOf(t) >= 0); return t }, e.prototype.assign = function () { for (var t, e = !1, n = this.dataset.length, r = 0; r < n; r++) (t = this.argmin(this.dataset[r], this.centroids, this.distance)) != this.assignments[r] && (this.assignments[r] = t, e = !0); return e }, e.prototype.getClusters = function () { for (var t, e = new Array(this.k), n = 0; n < this.assignments.length; n++) void 0 === e[t = this.assignments[n]] && (e[t] = []), e[t].push(n); return e }, e.prototype.argmin = function (t, e, n) { for (var r, i = Number.MAX_VALUE, o = 0, s = e.length, a = 0; a < s; a++) (r = n(t, e[a])) < i && (i = r, o = a); return o }, e.prototype.distance = function (t, e) { for (var n = 0, r = Math.min(t.length, e.length); r--;) { var i = t[r] - e[r]; n += i * i } return Math.sqrt(n) }, t.exports && (t.exports = e) })), Os = Bt((function (t) { function e(t, e, n) { this._queue = [], this._priorities = [], this._sorting = "desc", this._init(t, e, n) } e.prototype.insert = function (t, e) { for (var n = this._queue.length, r = n; r--;) { var i = this._priorities[r]; "desc" === this._sorting ? e > i && (n = r) : e < i && (n = r) } this._insertAt(t, e, n) }, e.prototype.remove = function (t) { for (var e = this._queue.length; e--;) { if (t === this._queue[e]) { this._queue.splice(e, 1), this._priorities.splice(e, 1); break } } }, e.prototype.forEach = function (t) { this._queue.forEach(t) }, e.prototype.getElements = function () { return this._queue }, e.prototype.getElementPriority = function (t) { return this._priorities[t] }, e.prototype.getPriorities = function () { return this._priorities }, e.prototype.getElementsWithPriorities = function () { for (var t = [], e = 0, n = this._queue.length; e < n; e++) t.push([this._queue[e], this._priorities[e]]); return t }, e.prototype._init = function (t, e, n) { if (t && e) { if (this._queue = [], this._priorities = [], t.length !== e.length) throw new Error("Arrays must have the same length"); for (var r = 0; r < t.length; r++) this.insert(t[r], e[r]) } n && (this._sorting = n) }, e.prototype._insertAt = function (t, e, n) { this._queue.length === n ? (this._queue.push(t), this._priorities.push(e)) : (this._queue.splice(n, 0, t), this._priorities.splice(n, 0, e)) }, t.exports && (t.exports = e) })), Rs = Bt((function (t) { if (t.exports) var e = Os; function n(t, e, n, r) { this.epsilon = 1, this.minPts = 1, this.distance = this._euclideanDistance, this._reachability = [], this._processed = [], this._coreDistance = 0, this._orderedList = [], this._init(t, e, n, r) } n.prototype.run = function (t, n, r, i) { this._init(t, n, r, i); for (var o = 0, s = this.dataset.length; o < s; o++) if (1 !== this._processed[o]) { this._processed[o] = 1, this.clusters.push([o]); var a = this.clusters.length - 1; this._orderedList.push(o); var u = new e(null, null, "asc"), l = this._regionQuery(o); void 0 !== this._distanceToCore(o) && (this._updateQueue(o, l, u), this._expandCluster(a, u)) } return this.clusters }, n.prototype.getReachabilityPlot = function () { for (var t = [], e = 0, n = this._orderedList.length; e < n; e++) { var r = this._orderedList[e], i = this._reachability[r]; t.push([r, i]) } return t }, n.prototype._init = function (t, e, n, r) { if (t) { if (!(t instanceof Array)) throw Error("Dataset must be of type array, " + typeof t + " given"); this.dataset = t, this.clusters = [], this._reachability = new Array(this.dataset.length), this._processed = new Array(this.dataset.length), this._coreDistance = 0, this._orderedList = [] } e && (this.epsilon = e), n && (this.minPts = n), r && (this.distance = r) }, n.prototype._updateQueue = function (t, e, n) { var r = this; this._coreDistance = this._distanceToCore(t), e.forEach((function (e) { if (void 0 === r._processed[e]) { var i = r.distance(r.dataset[t], r.dataset[e]), o = Math.max(r._coreDistance, i); void 0 === r._reachability[e] ? (r._reachability[e] = o, n.insert(e, o)) : o < r._reachability[e] && (r._reachability[e] = o, n.remove(e), n.insert(e, o)) } })) }, n.prototype._expandCluster = function (t, e) { for (var n = e.getElements(), r = 0, i = n.length; r < i; r++) { var o = n[r]; if (void 0 === this._processed[o]) { var s = this._regionQuery(o); this._processed[o] = 1, this.clusters[t].push(o), this._orderedList.push(o), void 0 !== this._distanceToCore(o) && (this._updateQueue(o, s, e), this._expandCluster(t, e)) } } }, n.prototype._distanceToCore = function (t) { for (var e = this.epsilon, n = 0; n < e; n++) { if (this._regionQuery(t, n).length >= this.minPts) return n } }, n.prototype._regionQuery = function (t, e) { e = e || this.epsilon; for (var n = [], r = 0, i = this.dataset.length; r < i; r++) this.distance(this.dataset[t], this.dataset[r]) < e && n.push(r); return n }, n.prototype._euclideanDistance = function (t, e) { for (var n = 0, r = Math.min(t.length, e.length); r--;) n += (t[r] - e[r]) * (t[r] - e[r]); return Math.sqrt(n) }, t.exports && (t.exports = n) })), Ts = Bt((function (t) { t.exports && (t.exports = {DBSCAN: Ms, KMEANS: Ls, OPTICS: Rs, PriorityQueue: Os}) })); var As = function (t, e, n) { for (var r = t.length, i = 0, o = 0; o < r; o++) { var s = (t[o] || 0) - (e[o] || 0); i += s * s } return n ? Math.sqrt(i) : i }, Ds = As, Fs = function (t, e, n) { var r = Math.abs(t - e); return n ? r : r * r }, ks = As, Gs = function (t, e) { for (var n = {}, r = [], i = e << 2, o = t.length, s = t[0].length > 0; r.length < e && i-- > 0;) { var a = t[Math.floor(Math.random() * o)], u = s ? a.join("_") : "" + a; n[u] || (n[u] = !0, r.push(a)) } if (r.length < e) throw new Error("Error initializating clusters"); return r }, qs = function (t, e) { var n = t[0].length ? Ds : Fs, r = [], i = t.length, o = t[0].length > 0, s = t[Math.floor(Math.random() * i)]; o && s.join("_"); for (r.push(s); r.length < e;) { for (var a = [], u = r.length, l = 0, c = [], h = 0; h < i; h++) { for (var p = 1 / 0, f = 0; f < u; f++) { var g = n(t[h], r[f]); g <= p && (p = g) } a[h] = p } for (var d = 0; d < i; d++) l += a[d]; for (var y = 0; y < i; y++) c[y] = {i: y, v: t[y], pr: a[y] / l, cs: 0}; c.sort((function (t, e) { return t.pr - e.pr })), c[0].cs = c[0].pr; for (var v = 1; v < i; v++) c[v].cs = c[v - 1].cs + c[v].pr; for (var _ = Math.random(), m = 0; m < i - 1 && c[m++].cs < _;) ; r.push(c[m - 1].v) } return r }; function Bs(t, e, n) { n = n || []; for (var r = 0; r < t; r++) n[r] = e; return n } var zs = function (t, e, n, r) { var i = [], o = [], s = [], a = [], u = !1, l = r || 1e4, c = t.length, h = t[0].length, p = h > 0, f = []; if (n) i = "kmrand" == n ? Gs(t, e) : "kmpp" == n ? qs(t, e) : n; else for (var g = {}; i.length < e;) { var d = Math.floor(Math.random() * c); g[d] || (g[d] = !0, i.push(t[d])) } do { Bs(e, 0, f); for (var y = 0; y < c; y++) { for (var v = 1 / 0, _ = 0, m = 0; m < e; m++) { (a = p ? ks(t[y], i[m]) : Math.abs(t[y] - i[m])) <= v && (v = a, _ = m) } s[y] = _, f[_]++ } for (var x = [], E = (o = [], 0); E < e; E++) x[E] = p ? Bs(h, 0, x[E]) : 0, o[E] = i[E]; if (p) { for (var b = 0; b < e; b++) i[b] = []; for (var w = 0; w < c; w++) for (var I = x[s[w]], N = t[w], S = 0; S < h; S++) I[S] += N[S]; u = !0; for (var C = 0; C < e; C++) { for (var P = i[C], M = x[C], L = o[C], O = f[C], R = 0; R < h; R++) P[R] = M[R] / O || 0; if (u) for (var T = 0; T < h; T++) if (L[T] != P[T]) { u = !1; break } } } else { for (var A = 0; A < c; A++) { x[s[A]] += t[A] } for (var D = 0; D < e; D++) i[D] = x[D] / f[D] || 0; u = !0; for (var F = 0; F < e; F++) if (o[F] != i[F]) { u = !1; break } } u = u || --l <= 0 } while (!u); return {it: 1e4 - l, k: e, idxs: s, centroids: i} }; function js(t, e) { return b(Bi(t[0], t[1])) === b(Bi(e[0], e[1])) } function Us(t, e) { if (t.geometry && t.geometry.type) return t.geometry.type; if (t.type) return t.type; throw new Error("Invalid GeoJSON object for " + e) } function Vs(t) { for (var e = t, n = []; e.parent;) n.unshift(e), e = e.parent; return n } var Xs = { search: function (t, e, n, r) { t.cleanDirty(); var i = (r = r || {}).heuristic || Xs.heuristics.manhattan, o = r.closest || !1, s = new Ws((function (t) { return t.f })), a = e; for (e.h = i(e, n), s.push(e); s.size() > 0;) { var u = s.pop(); if (u === n) return Vs(u); u.closed = !0; for (var l = t.neighbors(u), c = 0, h = l.length; c < h; ++c) { var p = l[c]; if (!p.closed && !p.isWall()) { var f = u.g + p.getCost(u), g = p.visited; (!g || f < p.g) && (p.visited = !0, p.parent = u, p.h = p.h || i(p, n), p.g = f, p.f = p.g + p.h, t.markDirty(p), o && (p.h < a.h || p.h === a.h && p.g < a.g) && (a = p), g ? s.rescoreElement(p) : s.push(p)) } } } return o ? Vs(a) : [] }, heuristics: { manhattan: function (t, e) { return Math.abs(e.x - t.x) + Math.abs(e.y - t.y) }, diagonal: function (t, e) { var n = Math.sqrt(2), r = Math.abs(e.x - t.x), i = Math.abs(e.y - t.y); return 1 * (r + i) + (n - 2) * Math.min(r, i) } }, cleanNode: function (t) { t.f = 0, t.g = 0, t.h = 0, t.visited = !1, t.closed = !1, t.parent = null } }; function Ys(t, e) { e = e || {}, this.nodes = [], this.diagonal = !!e.diagonal, this.grid = []; for (var n = 0; n < t.length; n++) { this.grid[n] = []; for (var r = 0, i = t[n]; r < i.length; r++) { var o = new Hs(n, r, i[r]); this.grid[n][r] = o, this.nodes.push(o) } } this.init() } function Hs(t, e, n) { this.x = t, this.y = e, this.weight = n } function Ws(t) { this.content = [], this.scoreFunction = t } function Js(t, e) { for (var n = 0; n < e.features.length; n++) if (ye(t, e.features[n])) return !0; return !1 } function Zs(t) { return function () { return t } } function Ks(t) { return t[0] } function Qs(t) { return t[1] } function $s() { this._ = null } function ta(t) { t.U = t.C = t.L = t.R = t.P = t.N = null } function ea(t, e) { var n = e, r = e.R, i = n.U; i ? i.L === n ? i.L = r : i.R = r : t._ = r, r.U = i, n.U = r, n.R = r.L, n.R && (n.R.U = n), r.L = n } function na(t, e) { var n = e, r = e.L, i = n.U; i ? i.L === n ? i.L = r : i.R = r : t._ = r, r.U = i, n.U = r, n.L = r.R, n.L && (n.L.U = n), r.R = n } function ra(t) { for (; t.L;) t = t.L; return t } function ia(t, e, n, r) { var i = [null, null], o = Pa.push(i) - 1; return i.left = t, i.right = e, n && sa(i, t, e, n), r && sa(i, e, t, r), Sa[t.index].halfedges.push(o), Sa[e.index].halfedges.push(o), i } function oa(t, e, n) { var r = [e, n]; return r.left = t, r } function sa(t, e, n, r) { t[0] || t[1] ? t.left === n ? t[1] = r : t[0] = r : (t[0] = r, t.left = e, t.right = n) } function aa(t, e, n, r, i) { var o, s = t[0], a = t[1], u = s[0], l = s[1], c = 0, h = 1, p = a[0] - u, f = a[1] - l; if (o = e - u, p || !(o > 0)) { if (o /= p, p < 0) { if (o < c) return; o < h && (h = o) } else if (p > 0) { if (o > h) return; o > c && (c = o) } if (o = r - u, p || !(o < 0)) { if (o /= p, p < 0) { if (o > h) return; o > c && (c = o) } else if (p > 0) { if (o < c) return; o < h && (h = o) } if (o = n - l, f || !(o > 0)) { if (o /= f, f < 0) { if (o < c) return; o < h && (h = o) } else if (f > 0) { if (o > h) return; o > c && (c = o) } if (o = i - l, f || !(o < 0)) { if (o /= f, f < 0) { if (o > h) return; o > c && (c = o) } else if (f > 0) { if (o < c) return; o < h && (h = o) } return !(c > 0 || h < 1) || (c > 0 && (t[0] = [u + c * p, l + c * f]), h < 1 && (t[1] = [u + h * p, l + h * f]), !0) } } } } } function ua(t, e, n, r, i) { var o = t[1]; if (o) return !0; var s, a, u = t[0], l = t.left, c = t.right, h = l[0], p = l[1], f = c[0], g = c[1], d = (h + f) / 2, y = (p + g) / 2; if (g === p) { if (d < e || d >= r) return; if (h > f) { if (u) { if (u[1] >= i) return } else u = [d, n]; o = [d, i] } else { if (u) { if (u[1] < n) return } else u = [d, i]; o = [d, n] } } else if (a = y - (s = (h - f) / (g - p)) * d, s < -1 || s > 1) if (h > f) { if (u) { if (u[1] >= i) return } else u = [(n - a) / s, n]; o = [(i - a) / s, i] } else { if (u) { if (u[1] < n) return } else u = [(i - a) / s, i]; o = [(n - a) / s, n] } else if (p < g) { if (u) { if (u[0] >= r) return } else u = [e, s * e + a]; o = [r, s * r + a] } else { if (u) { if (u[0] < e) return } else u = [r, s * r + a]; o = [e, s * e + a] } return t[0] = u, t[1] = o, !0 } function la(t, e) { var n = t.site, r = e.left, i = e.right; return n === i && (i = r, r = n), i ? Math.atan2(i[1] - r[1], i[0] - r[0]) : (n === r ? (r = e[1], i = e[0]) : (r = e[0], i = e[1]), Math.atan2(r[0] - i[0], i[1] - r[1])) } function ca(t, e) { return e[+(e.left !== t.site)] } function ha(t, e) { return e[+(e.left === t.site)] } Ys.prototype.init = function () { this.dirtyNodes = []; for (var t = 0; t < this.nodes.length; t++) Xs.cleanNode(this.nodes[t]) }, Ys.prototype.cleanDirty = function () { for (var t = 0; t < this.dirtyNodes.length; t++) Xs.cleanNode(this.dirtyNodes[t]); this.dirtyNodes = [] }, Ys.prototype.markDirty = function (t) { this.dirtyNodes.push(t) }, Ys.prototype.neighbors = function (t) { var e = [], n = t.x, r = t.y, i = this.grid; return i[n - 1] && i[n - 1][r] && e.push(i[n - 1][r]), i[n + 1] && i[n + 1][r] && e.push(i[n + 1][r]), i[n] && i[n][r - 1] && e.push(i[n][r - 1]), i[n] && i[n][r + 1] && e.push(i[n][r + 1]), this.diagonal && (i[n - 1] && i[n - 1][r - 1] && e.push(i[n - 1][r - 1]), i[n + 1] && i[n + 1][r - 1] && e.push(i[n + 1][r - 1]), i[n - 1] && i[n - 1][r + 1] && e.push(i[n - 1][r + 1]), i[n + 1] && i[n + 1][r + 1] && e.push(i[n + 1][r + 1])), e }, Ys.prototype.toString = function () { for (var t, e, n, r, i = [], o = this.grid, s = 0, a = o.length; s < a; s++) { for (t = [], n = 0, r = (e = o[s]).length; n < r; n++) t.push(e[n].weight); i.push(t.join(" ")) } return i.join("\n") }, Hs.prototype.toString = function () { return "[" + this.x + " " + this.y + "]" }, Hs.prototype.getCost = function (t) { return t && t.x !== this.x && t.y !== this.y ? 1.41421 * this.weight : this.weight }, Hs.prototype.isWall = function () { return 0 === this.weight }, Ws.prototype = { push: function (t) { this.content.push(t), this.sinkDown(this.content.length - 1) }, pop: function () { var t = this.content[0], e = this.content.pop(); return this.content.length > 0 && (this.content[0] = e, this.bubbleUp(0)), t }, remove: function (t) { var e = this.content.indexOf(t), n = this.content.pop(); e !== this.content.length - 1 && (this.content[e] = n, this.scoreFunction(n) < this.scoreFunction(t) ? this.sinkDown(e) : this.bubbleUp(e)) }, size: function () { return this.content.length }, rescoreElement: function (t) { this.sinkDown(this.content.indexOf(t)) }, sinkDown: function (t) { for (var e = this.content[t]; t > 0;) { var n = (t + 1 >> 1) - 1, r = this.content[n]; if (!(this.scoreFunction(e) < this.scoreFunction(r))) break; this.content[n] = e, this.content[t] = r, t = n } }, bubbleUp: function (t) { for (var e = this.content.length, n = this.content[t], r = this.scoreFunction(n); ;) { var i, o = t + 1 << 1, s = o - 1, a = null; if (s < e) { var u = this.content[s]; (i = this.scoreFunction(u)) < r && (a = s) } if (o < e) { var l = this.content[o]; this.scoreFunction(l) < (null === a ? r : i) && (a = o) } if (null === a) break; this.content[t] = this.content[a], this.content[a] = n, t = a } } }, $s.prototype = { constructor: $s, insert: function (t, e) { var n, r, i; if (t) { if (e.P = t, e.N = t.N, t.N && (t.N.P = e), t.N = e, t.R) { for (t = t.R; t.L;) t = t.L; t.L = e } else t.R = e; n = t } else this._ ? (t = ra(this._), e.P = null, e.N = t, t.P = t.L = e, n = t) : (e.P = e.N = null, this._ = e, n = null); for (e.L = e.R = null, e.U = n, e.C = !0, t = e; n && n.C;) n === (r = n.U).L ? (i = r.R) && i.C ? (n.C = i.C = !1, r.C = !0, t = r) : (t === n.R && (ea(this, n), n = (t = n).U), n.C = !1, r.C = !0, na(this, r)) : (i = r.L) && i.C ? (n.C = i.C = !1, r.C = !0, t = r) : (t === n.L && (na(this, n), n = (t = n).U), n.C = !1, r.C = !0, ea(this, r)), n = t.U; this._.C = !1 }, remove: function (t) { t.N && (t.N.P = t.P), t.P && (t.P.N = t.N), t.N = t.P = null; var e, n, r, i = t.U, o = t.L, s = t.R; if (n = o ? s ? ra(s) : o : s, i ? i.L === t ? i.L = n : i.R = n : this._ = n, o && s ? (r = n.C, n.C = t.C, n.L = o, o.U = n, n !== s ? (i = n.U, n.U = t.U, t = n.R, i.L = t, n.R = s, s.U = n) : (n.U = i, i = n, t = n.R)) : (r = t.C, t = n), t && (t.U = i), !r) if (t && t.C) t.C = !1; else { do { if (t === this._) break; if (t === i.L) { if ((e = i.R).C && (e.C = !1, i.C = !0, ea(this, i), e = i.R), e.L && e.L.C || e.R && e.R.C) { e.R && e.R.C || (e.L.C = !1, e.C = !0, na(this, e), e = i.R), e.C = i.C, i.C = e.R.C = !1, ea(this, i), t = this._; break } } else if ((e = i.L).C && (e.C = !1, i.C = !0, na(this, i), e = i.L), e.L && e.L.C || e.R && e.R.C) { e.L && e.L.C || (e.R.C = !1, e.C = !0, ea(this, e), e = i.L), e.C = i.C, i.C = e.L.C = !1, na(this, i), t = this._; break } e.C = !0, t = i, i = i.U } while (!t.C); t && (t.C = !1) } } }; var pa, fa = []; function ga() { ta(this), this.x = this.y = this.arc = this.site = this.cy = null } function da(t) { var e = t.P, n = t.N; if (e && n) { var r = e.site, i = t.site, o = n.site; if (r !== o) { var s = i[0], a = i[1], u = r[0] - s, l = r[1] - a, c = o[0] - s, h = o[1] - a, p = 2 * (u * h - l * c); if (!(p >= -La)) { var f = u * u + l * l, g = c * c + h * h, d = (h * f - l * g) / p, y = (u * g - c * f) / p, v = fa.pop() || new ga; v.arc = t, v.site = i, v.x = d + s, v.y = (v.cy = y + a) + Math.sqrt(d * d + y * y), t.circle = v; for (var _ = null, m = Ca._; m;) if (v.y < m.y || v.y === m.y && v.x <= m.x) { if (!m.L) { _ = m.P; break } m = m.L } else { if (!m.R) { _ = m; break } m = m.R } Ca.insert(_, v), _ || (pa = v) } } } } function ya(t) { var e = t.circle; e && (e.P || (pa = e.N), Ca.remove(e), fa.push(e), ta(e), t.circle = null) } var va = []; function _a() { ta(this), this.edge = this.site = this.circle = null } function ma(t) { var e = va.pop() || new _a; return e.site = t, e } function xa(t) { ya(t), Na.remove(t), va.push(t), ta(t) } function Ea(t) { var e = t.circle, n = e.x, r = e.cy, i = [n, r], o = t.P, s = t.N, a = [t]; xa(t); for (var u = o; u.circle && Math.abs(n - u.circle.x) < Ma && Math.abs(r - u.circle.cy) < Ma;) o = u.P, a.unshift(u), xa(u), u = o; a.unshift(u), ya(u); for (var l = s; l.circle && Math.abs(n - l.circle.x) < Ma && Math.abs(r - l.circle.cy) < Ma;) s = l.N, a.push(l), xa(l), l = s; a.push(l), ya(l); var c, h = a.length; for (c = 1; c < h; ++c) l = a[c], u = a[c - 1], sa(l.edge, u.site, l.site, i); u = a[0], (l = a[h - 1]).edge = ia(u.site, l.site, null, i), da(u), da(l) } function ba(t) { for (var e, n, r, i, o = t[0], s = t[1], a = Na._; a;) if ((r = wa(a, s) - o) > Ma) a = a.L; else { if (!((i = o - Ia(a, s)) > Ma)) { r > -Ma ? (e = a.P, n = a) : i > -Ma ? (e = a, n = a.N) : e = n = a; break } if (!a.R) { e = a; break } a = a.R } !function (t) { Sa[t.index] = {site: t, halfedges: []} }(t); var u = ma(t); if (Na.insert(e, u), e || n) { if (e === n) return ya(e), n = ma(e.site), Na.insert(u, n), u.edge = n.edge = ia(e.site, u.site), da(e), void da(n); if (n) { ya(e), ya(n); var l = e.site, c = l[0], h = l[1], p = t[0] - c, f = t[1] - h, g = n.site, d = g[0] - c, y = g[1] - h, v = 2 * (p * y - f * d), _ = p * p + f * f, m = d * d + y * y, x = [(y * _ - f * m) / v + c, (p * m - d * _) / v + h]; sa(n.edge, l, g, x), u.edge = ia(l, t, null, x), n.edge = ia(t, g, null, x), da(e), da(n) } else u.edge = ia(e.site, u.site) } } function wa(t, e) { var n = t.site, r = n[0], i = n[1], o = i - e; if (!o) return r; var s = t.P; if (!s) return -1 / 0; var a = (n = s.site)[0], u = n[1], l = u - e; if (!l) return a; var c = a - r, h = 1 / o - 1 / l, p = c / l; return h ? (-p + Math.sqrt(p * p - 2 * h * (c * c / (-2 * l) - u + l / 2 + i - o / 2))) / h + r : (r + a) / 2 } function Ia(t, e) { var n = t.N; if (n) return wa(n, e); var r = t.site; return r[1] === e ? r[0] : 1 / 0 } var Na, Sa, Ca, Pa, Ma = 1e-6, La = 1e-12; function Oa(t, e) { return e[1] - t[1] || e[0] - t[0] } function Ra(t, e) { var n, r, i, o = t.sort(Oa).pop(); for (Pa = [], Sa = new Array(t.length), Na = new $s, Ca = new $s; ;) if (i = pa, o && (!i || o[1] < i.y || o[1] === i.y && o[0] < i.x)) o[0] === n && o[1] === r || (ba(o), n = o[0], r = o[1]), o = t.pop(); else { if (!i) break; Ea(i.arc) } if (function () { for (var t, e, n, r, i = 0, o = Sa.length; i < o; ++i) if ((t = Sa[i]) && (r = (e = t.halfedges).length)) { var s = new Array(r), a = new Array(r); for (n = 0; n < r; ++n) s[n] = n, a[n] = la(t, Pa[e[n]]); for (s.sort((function (t, e) { return a[e] - a[t] })), n = 0; n < r; ++n) a[n] = e[s[n]]; for (n = 0; n < r; ++n) e[n] = a[n] } }(), e) { var s = +e[0][0], a = +e[0][1], u = +e[1][0], l = +e[1][1]; !function (t, e, n, r) { for (var i, o = Pa.length; o--;) ua(i = Pa[o], t, e, n, r) && aa(i, t, e, n, r) && (Math.abs(i[0][0] - i[1][0]) > Ma || Math.abs(i[0][1] - i[1][1]) > Ma) || delete Pa[o] }(s, a, u, l), function (t, e, n, r) { var i, o, s, a, u, l, c, h, p, f, g, d, y = Sa.length, v = !0; for (i = 0; i < y; ++i) if (o = Sa[i]) { for (s = o.site, a = (u = o.halfedges).length; a--;) Pa[u[a]] || u.splice(a, 1); for (a = 0, l = u.length; a < l;) g = (f = ha(o, Pa[u[a]]))[0], d = f[1], h = (c = ca(o, Pa[u[++a % l]]))[0], p = c[1], (Math.abs(g - h) > Ma || Math.abs(d - p) > Ma) && (u.splice(a, 0, Pa.push(oa(s, f, Math.abs(g - t) < Ma && r - d > Ma ? [t, Math.abs(h - t) < Ma ? p : r] : Math.abs(d - r) < Ma && n - g > Ma ? [Math.abs(p - r) < Ma ? h : n, r] : Math.abs(g - n) < Ma && d - e > Ma ? [n, Math.abs(h - n) < Ma ? p : e] : Math.abs(d - e) < Ma && g - t > Ma ? [Math.abs(p - e) < Ma ? h : t, e] : null)) - 1), ++l); l && (v = !1) } if (v) { var _, m, x, E = 1 / 0; for (i = 0, v = null; i < y; ++i) (o = Sa[i]) && (x = (_ = (s = o.site)[0] - t) * _ + (m = s[1] - e) * m) < E && (E = x, v = o); if (v) { var b = [t, e], w = [t, r], I = [n, r], N = [n, e]; v.halfedges.push(Pa.push(oa(s = v.site, b, w)) - 1, Pa.push(oa(s, w, I)) - 1, Pa.push(oa(s, I, N)) - 1, Pa.push(oa(s, N, b)) - 1) } } for (i = 0; i < y; ++i) (o = Sa[i]) && (o.halfedges.length || delete Sa[i]) }(s, a, u, l) } this.edges = Pa, this.cells = Sa, Na = Ca = Pa = Sa = null } function Ta(t) { return (t = t.slice()).push(t[0]), l([t]) } function Aa(t, e, n, r) { var i = (r = r || {}).steps || 64, o = r.units || "kilometers", s = r.angle || 0, a = r.pivot || t, u = r.properties || t.properties || {}; if (!t) throw new Error("center is required"); if (!e) throw new Error("xSemiAxis is required"); if (!n) throw new Error("ySemiAxis is required"); if (!P(r)) throw new Error("options must be an object"); if (!C(i)) throw new Error("steps must be a number"); if (!C(s)) throw new Error("angle must be a number"); var c = K(t); if ("degrees" === o) var h = I(s); else e = ji(t, e, 90, {units: o}), n = ji(t, n, 0, {units: o}), e = K(e)[0] - c[0], n = K(n)[1] - c[1]; for (var p = [], f = 0; f < i; f += 1) { var g = -360 * f / i, d = e * n / Math.sqrt(Math.pow(n, 2) + Math.pow(e, 2) * Math.pow(Da(g), 2)), y = e * n / Math.sqrt(Math.pow(e, 2) + Math.pow(n, 2) / Math.pow(Da(g), 2)); if (g < -90 && g >= -270 && (d = -d), g < -180 && g >= -360 && (y = -y), "degrees" === o) { var v = d * Math.cos(h) + y * Math.sin(h), _ = y * Math.cos(h) - d * Math.sin(h); d = v, y = _ } p.push([d + c[0], y + c[1]]) } return p.push(p[0]), "degrees" === o ? l([p], u) : $o(l([p], u), s, {pivot: a}) } function Da(t) { var e = t * Math.PI / 180; return Math.tan(e) } function Fa(t, e) { void 0 === e && (e = {}); var n = 0, r = 0, i = 0; return q(t, (function (t, o, s) { var a = e.weight ? null == s ? void 0 : s[e.weight] : void 0; if (!C(a = null == a ? 1 : a)) throw new Error("weight value must be a number for feature index " + o); (a = Number(a)) > 0 && R(t, (function (t) { n += t[0] * a, r += t[1] * a, i += a })) })), a([n / i, r / i], e.properties, e) } function ka(t, e, n, r, i) { var o = r.tolerance || .001, s = 0, u = 0, l = 0, c = 0; if (F(n, (function (e) { var n, r = null === (n = e.properties) || void 0 === n ? void 0 : n.weight, i = null == r ? 1 : r; if (!C(i = Number(i))) throw new Error("weight value must be a number"); if (i > 0) { c += 1; var o = i * me(e, t); 0 === o && (o = 1); var a = i / o; s += e.geometry.coordinates[0] * a, u += e.geometry.coordinates[1] * a, l += a } })), c < 1) throw new Error("no features to measure"); var h = s / l, p = u / l; return 1 === c || 0 === i || Math.abs(h - e[0]) < o && Math.abs(p - e[1]) < o ? a([h, p], {medianCandidates: r.medianCandidates}) : (r.medianCandidates.push([h, p]), ka([h, p], t, n, r, i - 1)) } function Ga(t, e) { return {x: t[0] - e[0], y: t[1] - e[1]} } function qa(t, e) { var n = 0, r = 0; R(t, (function (i, o, s, a, u) { u > n && (n = u, r = o, e.push([])); var l = o - r, c = t.coordinates[u][l + 1], h = i[0], p = i[1], f = c[0], g = c[1]; e[u].push([.75 * h + .25 * f, .75 * p + .25 * g]), e[u].push([.25 * h + .75 * f, .25 * p + .75 * g]) }), !0), e.forEach((function (t) { t.push(t[0]) })) } function Ba(t, e) { var n = 0, r = 0, i = 0; R(t, (function (o, s, a, u, l) { u > i && (i = u, r = s, e.push([ [] ])), l > n && (n = l, r = s, e[u].push([])); var c = s - r, h = t.coordinates[u][l][c + 1], p = o[0], f = o[1], g = h[0], d = h[1]; e[u][l].push([.75 * p + .25 * g, .75 * f + .25 * d]), e[u][l].push([.25 * p + .75 * g, .25 * f + .75 * d]) }), !0), e.forEach((function (t) { t.forEach((function (t) { t.push(t[0]) })) })) } function za(t, e, n) { void 0 === n && (n = 2); var r = K(t), i = K(e), o = r[0] - i[0], s = r[1] - i[1]; return 1 === n ? Math.abs(o) + Math.abs(s) : Math.pow(Math.pow(o, n) + Math.pow(s, n), 1 / n) } function ja(t, e) { var n = (e = e || {}).threshold || 1e4, r = e.p || 2, i = e.binary || !1, o = e.alpha || -1, s = e.standardization || !1, a = []; F(t, (function (t) { a.push(En(t)) })); for (var u = [], l = 0; l < a.length; l++) u[l] = []; for (l = 0; l < a.length; l++) for (var c = l; c < a.length; c++) { l === c && (u[l][c] = 0); var h = za(a[l], a[c], r); u[l][c] = h, u[c][l] = h } for (l = 0; l < a.length; l++) for (c = 0; c < a.length; c++) { 0 !== (h = u[l][c]) && (u[l][c] = i ? h <= n ? 1 : 0 : h <= n ? Math.pow(h, o) : 0) } if (s) for (l = 0; l < a.length; l++) { var p = u[l].reduce((function (t, e) { return t + e }), 0); for (c = 0; c < a.length; c++) u[l][c] = u[l][c] / p } return u } function Ua(t) { for (var e = 0, n = 0, r = t; n < r.length; n++) { e += r[n] } return e / t.length } function Va(t, e) { return void 0 === e && (e = {}), Ya(t, "mercator", e) } function Xa(t, e) { return void 0 === e && (e = {}), Ya(t, "wgs84", e) } function Ya(t, e, n) { void 0 === n && (n = {}); var r = (n = n || {}).mutate; if (!t) throw new Error("geojson is required"); return Array.isArray(t) && C(t[0]) ? t = "mercator" === e ? Ha(t) : Wa(t) : (!0 !== r && (t = Ie(t)), R(t, (function (t) { var n = "mercator" === e ? Ha(t) : Wa(t); t[0] = n[0], t[1] = n[1] }))), t } function Ha(t) { var e = Math.PI / 180, n = 6378137, r = 20037508.342789244, i = [n * (Math.abs(t[0]) <= 180 ? t[0] : t[0] - 360 * function (t) { return t < 0 ? -1 : t > 0 ? 1 : 0 }(t[0])) * e, n * Math.log(Math.tan(.25 * Math.PI + .5 * t[1] * e))]; return i[0] > r && (i[0] = r), i[0] < -r && (i[0] = -r), i[1] > r && (i[1] = r), i[1] < -r && (i[1] = -r), i } function Wa(t) { var e = 180 / Math.PI, n = 6378137; return [t[0] * e / n, (.5 * Math.PI - 2 * Math.atan(Math.exp(-t[1] / n))) * e] } Ra.prototype = { constructor: Ra, polygons: function () { var t = this.edges; return this.cells.map((function (e) { var n = e.halfedges.map((function (n) { return ca(e, t[n]) })); return n.data = e.site.data, n })) }, triangles: function () { var t = [], e = this.edges; return this.cells.forEach((function (n, r) { if (o = (i = n.halfedges).length) for (var i, o, s, a, u, l, c = n.site, h = -1, p = e[i[o - 1]], f = p.left === c ? p.right : p.left; ++h < o;) s = f, f = (p = e[i[h]]).left === c ? p.right : p.left, s && f && r < s.index && r < f.index && (u = s, l = f, ((a = c)[0] - l[0]) * (u[1] - a[1]) - (a[0] - u[0]) * (l[1] - a[1]) < 0) && t.push([c.data, s.data, f.data]) })), t }, links: function () { return this.edges.filter((function (t) { return t.right })).map((function (t) { return {source: t.left.data, target: t.right.data} })) }, find: function (t, e, n) { for (var r, i, o = this, s = o._found || 0, a = o.cells.length; !(i = o.cells[s]);) if (++s >= a) return null; var u = t - i.site[0], l = e - i.site[1], c = u * u + l * l; do { i = o.cells[r = s], s = null, i.halfedges.forEach((function (n) { var r = o.edges[n], a = r.left; if (a !== i.site && a || (a = r.right)) { var u = t - a[0], l = e - a[1], h = u * u + l * l; h < c && (c = h, s = a.index) } })) } while (null !== s); return o._found = r, null == n || c <= n * n ? i.site : null } }; var Ja = Object.freeze({__proto__: null, toMercator: Va, toWgs84: Xa}), Za = function () { for (var t = 0, e = 0, n = arguments.length; e < n; e++) t += arguments[e].length; var r = Array(t), i = 0; for (e = 0; e < n; e++) for (var o = arguments[e], s = 0, a = o.length; s < a; s++, i++) r[i] = o[s]; return r }; function Ka(t) { return Array.isArray(t) ? nu(t) : t && t.bbox ? nu(t.bbox) : [360 * eu(), 180 * eu()] } function Qa(t, e) { void 0 === e && (e = {}), null == t && (t = 1); for (var n = [], r = 0; r < t; r++) n.push(a(Ka(e.bbox))); return f(n) } function $a(t, e) { void 0 === e && (e = {}), null == t && (t = 1), C(e.num_vertices) && void 0 !== e.num_vertices || (e.num_vertices = 10), C(e.max_radial_length) && void 0 !== e.max_radial_length || (e.max_radial_length = 10); for (var n = [], r = function (t) { var r, i = [], o = Za(Array(e.num_vertices + 1)).map(Math.random); o.forEach((function (t, e, n) { n[e] = e > 0 ? t + n[e - 1] : t })), o.forEach((function (t) { t = 2 * t * Math.PI / o[o.length - 1]; var n = Math.random(); i.push([n * (e.max_radial_length || 10) * Math.sin(t), n * (e.max_radial_length || 10) * Math.cos(t)]) })), i[i.length - 1] = i[0], i = i.map((r = Ka(e.bbox), function (t) { return [t[0] + r[0], t[1] + r[1]] })), n.push(l([i])) }, i = 0; i < t; i++) r(); return f(n) } function tu(t, e) { if (void 0 === e && (e = {}), !P(e = e || {})) throw new Error("options is invalid"); var n = e.bbox, r = e.num_vertices, i = e.max_length, o = e.max_rotation; null == t && (t = 1), (!C(r) || void 0 === r || r < 2) && (r = 10), C(i) && void 0 !== i || (i = 1e-4), C(o) && void 0 !== o || (o = Math.PI / 8); for (var s = [], a = 0; a < t; a++) { for (var u = [Ka(n)], l = 0; l < r - 1; l++) { var c = (0 === l ? 2 * Math.random() * Math.PI : Math.tan((u[l][1] - u[l - 1][1]) / (u[l][0] - u[l - 1][0]))) + (Math.random() - .5) * o * 2, p = Math.random() * i; u.push([u[l][0] + p * Math.cos(c), u[l][1] + p * Math.sin(c)]) } s.push(h(u)) } return f(s) } function eu() { return Math.random() - .5 } function nu(t) { return [Math.random() * (t[2] - t[0]) + t[0], Math.random() * (t[3] - t[1]) + t[1]] } var ru = Object.freeze({ __proto__: null, randomPosition: Ka, randomPoint: Qa, randomPolygon: $a, randomLineString: tu }); function iu(t, e) { if (!t) throw new Error("geojson is required"); if ("FeatureCollection" !== t.type) throw new Error("geojson must be a FeatureCollection"); if (null == e) throw new Error("filter is required"); var n = []; return F(t, (function (t) { uu(t.properties, e) && n.push(t) })), f(n) } function ou(t, e, n) { if (!t) throw new Error("geojson is required"); if ("FeatureCollection" !== t.type) throw new Error("geojson must be a FeatureCollection"); if (null == e) throw new Error("property is required"); for (var r = au(t, e), i = Object.keys(r), o = 0; o < i.length; o++) { for (var s = i[o], a = r[s], u = [], l = 0; l < a.length; l++) u.push(t.features[a[l]]); n(f(u), s, o) } } function su(t, e, n, r) { var i = r; return ou(t, e, (function (t, e, o) { i = 0 === o && void 0 === r ? t : n(i, t, e, o) })), i } function au(t, e) { var n = {}; return F(t, (function (t, r) { var i = t.properties || {}; if (Object.prototype.hasOwnProperty.call(i, String(e))) { var o = i[e]; Object.prototype.hasOwnProperty.call(n, o) ? n[o].push(r) : n[o] = [r] } })), n } function uu(t, e) { if (void 0 === t) return !1; var n = typeof e; if ("number" === n || "string" === n) return Object.prototype.hasOwnProperty.call(t, e); if (Array.isArray(e)) { for (var r = 0; r < e.length; r++) if (!uu(t, e[r])) return !1; return !0 } return lu(t, e) } function lu(t, e) { for (var n = Object.keys(e), r = 0; r < n.length; r++) { var i = n[r]; if (t[i] !== e[i]) return !1 } return !0 } function cu(t, e) { if (!e) return {}; if (!e.length) return {}; for (var n = {}, r = 0; r < e.length; r++) { var i = e[r]; Object.prototype.hasOwnProperty.call(t, i) && (n[i] = t[i]) } return n } var hu = Object.freeze({ __proto__: null, getCluster: iu, clusterEach: ou, clusterReduce: su, createBins: au, applyFilter: uu, propertiesContainsFilter: lu, filterProperties: cu }), pu = function (t, e) { this.next = null, this.key = t, this.data = e, this.left = null, this.right = null }; /** * splaytree v3.1.0 * Fast Splay tree for Node and browser * * @author Alexander Milevski * @license MIT * @preserve */ function fu(t, e) { return t > e ? 1 : t < e ? -1 : 0 } function gu(t, e, n) { for (var r = new pu(null, null), i = r, o = r; ;) { var s = n(t, e.key); if (s < 0) { if (null === e.left) break; if (n(t, e.left.key) < 0) { var a = e.left; if (e.left = a.right, a.right = e, null === (e = a).left) break } o.left = e, o = e, e = e.left } else { if (!(s > 0)) break; if (null === e.right) break; if (n(t, e.right.key) > 0) { a = e.right; if (e.right = a.left, a.left = e, null === (e = a).right) break } i.right = e, i = e, e = e.right } } return i.right = e.left, o.left = e.right, e.left = r.right, e.right = r.left, e } function du(t, e, n, r) { var i = new pu(t, e); if (null === n) return i.left = i.right = null, i; var o = r(t, (n = gu(t, n, r)).key); return o < 0 ? (i.left = n.left, i.right = n, n.left = null) : o >= 0 && (i.right = n.right, i.left = n, n.right = null), i } function yu(t, e, n) { var r = null, i = null; if (e) { var o = n((e = gu(t, e, n)).key, t); 0 === o ? (r = e.left, i = e.right) : o < 0 ? (i = e.right, e.right = null, r = e) : (r = e.left, e.left = null, i = e) } return {left: r, right: i} } function vu(t, e, n, r, i) { if (t) { r(e + (n ? "└── " : "├── ") + i(t) + "\n"); var o = e + (n ? " " : "│ "); t.left && vu(t.left, o, !1, r, i), t.right && vu(t.right, o, !0, r, i) } } var _u = function () { function t(t) { void 0 === t && (t = fu), this._root = null, this._size = 0, this._comparator = t } return t.prototype.insert = function (t, e) { return this._size++, this._root = du(t, e, this._root, this._comparator) }, t.prototype.add = function (t, e) { var n = new pu(t, e); null === this._root && (n.left = n.right = null, this._size++, this._root = n); var r = this._comparator, i = gu(t, this._root, r), o = r(t, i.key); return 0 === o ? this._root = i : (o < 0 ? (n.left = i.left, n.right = i, i.left = null) : o > 0 && (n.right = i.right, n.left = i, i.right = null), this._size++, this._root = n), this._root }, t.prototype.remove = function (t) { this._root = this._remove(t, this._root, this._comparator) }, t.prototype._remove = function (t, e, n) { var r; return null === e ? null : 0 === n(t, (e = gu(t, e, n)).key) ? (null === e.left ? r = e.right : (r = gu(t, e.left, n)).right = e.right, this._size--, r) : e }, t.prototype.pop = function () { var t = this._root; if (t) { for (; t.left;) t = t.left; return this._root = gu(t.key, this._root, this._comparator), this._root = this._remove(t.key, this._root, this._comparator), { key: t.key, data: t.data } } return null }, t.prototype.findStatic = function (t) { for (var e = this._root, n = this._comparator; e;) { var r = n(t, e.key); if (0 === r) return e; e = r < 0 ? e.left : e.right } return null }, t.prototype.find = function (t) { return this._root && (this._root = gu(t, this._root, this._comparator), 0 !== this._comparator(t, this._root.key)) ? null : this._root }, t.prototype.contains = function (t) { for (var e = this._root, n = this._comparator; e;) { var r = n(t, e.key); if (0 === r) return !0; e = r < 0 ? e.left : e.right } return !1 }, t.prototype.forEach = function (t, e) { for (var n = this._root, r = [], i = !1; !i;) null !== n ? (r.push(n), n = n.left) : 0 !== r.length ? (n = r.pop(), t.call(e, n), n = n.right) : i = !0; return this }, t.prototype.range = function (t, e, n, r) { for (var i = [], o = this._comparator, s = this._root; 0 !== i.length || s;) if (s) i.push(s), s = s.left; else { if (o((s = i.pop()).key, e) > 0) break; if (o(s.key, t) >= 0 && n.call(r, s)) return this; s = s.right } return this }, t.prototype.keys = function () { var t = []; return this.forEach((function (e) { var n = e.key; return t.push(n) })), t }, t.prototype.values = function () { var t = []; return this.forEach((function (e) { var n = e.data; return t.push(n) })), t }, t.prototype.min = function () { return this._root ? this.minNode(this._root).key : null }, t.prototype.max = function () { return this._root ? this.maxNode(this._root).key : null }, t.prototype.minNode = function (t) { if (void 0 === t && (t = this._root), t) for (; t.left;) t = t.left; return t }, t.prototype.maxNode = function (t) { if (void 0 === t && (t = this._root), t) for (; t.right;) t = t.right; return t }, t.prototype.at = function (t) { for (var e = this._root, n = !1, r = 0, i = []; !n;) if (e) i.push(e), e = e.left; else if (i.length > 0) { if (e = i.pop(), r === t) return e; r++, e = e.right } else n = !0; return null }, t.prototype.next = function (t) { var e = this._root, n = null; if (t.right) { for (n = t.right; n.left;) n = n.left; return n } for (var r = this._comparator; e;) { var i = r(t.key, e.key); if (0 === i) break; i < 0 ? (n = e, e = e.left) : e = e.right } return n }, t.prototype.prev = function (t) { var e = this._root, n = null; if (null !== t.left) { for (n = t.left; n.right;) n = n.right; return n } for (var r = this._comparator; e;) { var i = r(t.key, e.key); if (0 === i) break; i < 0 ? e = e.left : (n = e, e = e.right) } return n }, t.prototype.clear = function () { return this._root = null, this._size = 0, this }, t.prototype.toList = function () { return function (t) { var e = t, n = [], r = !1, i = new pu(null, null), o = i; for (; !r;) e ? (n.push(e), e = e.left) : n.length > 0 ? e = (e = o = o.next = n.pop()).right : r = !0; return o.next = null, i.next }(this._root) }, t.prototype.load = function (t, e, n) { void 0 === e && (e = []), void 0 === n && (n = !1); var r = t.length, i = this._comparator; if (n && Eu(t, e, 0, r - 1, i), null === this._root) this._root = mu(t, e, 0, r), this._size = r; else { var o = function (t, e, n) { var r = new pu(null, null), i = r, o = t, s = e; for (; null !== o && null !== s;) n(o.key, s.key) < 0 ? (i.next = o, o = o.next) : (i.next = s, s = s.next), i = i.next; null !== o ? i.next = o : null !== s && (i.next = s); return r.next }(this.toList(), function (t, e) { for (var n = new pu(null, null), r = n, i = 0; i < t.length; i++) r = r.next = new pu(t[i], e[i]); return r.next = null, n.next }(t, e), i); r = this._size + r, this._root = xu({head: o}, 0, r) } return this }, t.prototype.isEmpty = function () { return null === this._root }, Object.defineProperty(t.prototype, "size", { get: function () { return this._size }, enumerable: !0, configurable: !0 }), Object.defineProperty(t.prototype, "root", { get: function () { return this._root }, enumerable: !0, configurable: !0 }), t.prototype.toString = function (t) { void 0 === t && (t = function (t) { return String(t.key) }); var e = []; return vu(this._root, "", !0, (function (t) { return e.push(t) }), t), e.join("") }, t.prototype.update = function (t, e, n) { var r = this._comparator, i = yu(t, this._root, r), o = i.left, s = i.right; r(t, e) < 0 ? s = du(e, n, s, r) : o = du(e, n, o, r), this._root = function (t, e, n) { return null === e ? t : (null === t || ((e = gu(t.key, e, n)).left = t), e) }(o, s, r) }, t.prototype.split = function (t) { return yu(t, this._root, this._comparator) }, t }(); function mu(t, e, n, r) { var i = r - n; if (i > 0) { var o = n + Math.floor(i / 2), s = t[o], a = e[o], u = new pu(s, a); return u.left = mu(t, e, n, o), u.right = mu(t, e, o + 1, r), u } return null } function xu(t, e, n) { var r = n - e; if (r > 0) { var i = e + Math.floor(r / 2), o = xu(t, e, i), s = t.head; return s.left = o, t.head = t.head.next, s.right = xu(t, i + 1, n), s } return null } function Eu(t, e, n, r, i) { if (!(n >= r)) { for (var o = t[n + r >> 1], s = n - 1, a = r + 1; ;) { do { s++ } while (i(t[s], o) < 0); do { a-- } while (i(t[a], o) > 0); if (s >= a) break; var u = t[s]; t[s] = t[a], t[a] = u, u = e[s], e[s] = e[a], e[a] = u } Eu(t, e, n, a, i), Eu(t, e, a + 1, r, i) } } function bu(t, e) { if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") } function wu(t, e) { for (var n = 0; n < e.length; n++) { var r = e[n]; r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) } } function Iu(t, e, n) { return e && wu(t.prototype, e), n && wu(t, n), t } var Nu = function (t, e) { return t.ll.x <= e.x && e.x <= t.ur.x && t.ll.y <= e.y && e.y <= t.ur.y }, Su = function (t, e) { if (e.ur.x < t.ll.x || t.ur.x < e.ll.x || e.ur.y < t.ll.y || t.ur.y < e.ll.y) return null; var n = t.ll.x < e.ll.x ? e.ll.x : t.ll.x, r = t.ur.x < e.ur.x ? t.ur.x : e.ur.x; return {ll: {x: n, y: t.ll.y < e.ll.y ? e.ll.y : t.ll.y}, ur: {x: r, y: t.ur.y < e.ur.y ? t.ur.y : e.ur.y}} }, Cu = Number.EPSILON; void 0 === Cu && (Cu = Math.pow(2, -52)); var Pu = Cu * Cu, Mu = function (t, e) { if (-Cu < t && t < Cu && -Cu < e && e < Cu) return 0; var n = t - e; return n * n < Pu * t * e ? 0 : t < e ? -1 : 1 }, Lu = function () { function t() { bu(this, t), this.reset() } return Iu(t, [{ key: "reset", value: function () { this.xRounder = new Ou, this.yRounder = new Ou } }, { key: "round", value: function (t, e) { return {x: this.xRounder.round(t), y: this.yRounder.round(e)} } }]), t }(), Ou = function () { function t() { bu(this, t), this.tree = new _u, this.round(0) } return Iu(t, [{ key: "round", value: function (t) { var e = this.tree.add(t), n = this.tree.prev(e); if (null !== n && 0 === Mu(e.key, n.key)) return this.tree.remove(t), n.key; var r = this.tree.next(e); return null !== r && 0 === Mu(e.key, r.key) ? (this.tree.remove(t), r.key) : t } }]), t }(), Ru = new Lu, Tu = function (t, e) { return t.x * e.y - t.y * e.x }, Au = function (t, e) { return t.x * e.x + t.y * e.y }, Du = function (t, e, n) { var r = {x: e.x - t.x, y: e.y - t.y}, i = {x: n.x - t.x, y: n.y - t.y}, o = Tu(r, i); return Mu(o, 0) }, Fu = function (t) { return Math.sqrt(Au(t, t)) }, ku = function (t, e, n) { var r = {x: e.x - t.x, y: e.y - t.y}, i = {x: n.x - t.x, y: n.y - t.y}; return Au(i, r) / Fu(i) / Fu(r) }, Gu = function (t, e, n) { return 0 === e.y ? null : {x: t.x + e.x / e.y * (n - t.y), y: n} }, qu = function (t, e, n) { return 0 === e.x ? null : {x: n, y: t.y + e.y / e.x * (n - t.x)} }, Bu = function () { function t(e, n) { bu(this, t), void 0 === e.events ? e.events = [this] : e.events.push(this), this.point = e, this.isLeft = n } return Iu(t, null, [{ key: "compare", value: function (e, n) { var r = t.comparePoints(e.point, n.point); return 0 !== r ? r : (e.point !== n.point && e.link(n), e.isLeft !== n.isLeft ? e.isLeft ? 1 : -1 : ju.compare(e.segment, n.segment)) } }, { key: "comparePoints", value: function (t, e) { return t.x < e.x ? -1 : t.x > e.x ? 1 : t.y < e.y ? -1 : t.y > e.y ? 1 : 0 } }]), Iu(t, [{ key: "link", value: function (t) { if (t.point === this.point) throw new Error("Tried to link already linked events"); for (var e = t.point.events, n = 0, r = e.length; n < r; n++) { var i = e[n]; this.point.events.push(i), i.point = this.point } this.checkForConsuming() } }, { key: "checkForConsuming", value: function () { for (var t = this.point.events.length, e = 0; e < t; e++) { var n = this.point.events[e]; if (void 0 === n.segment.consumedBy) for (var r = e + 1; r < t; r++) { var i = this.point.events[r]; void 0 === i.consumedBy && (n.otherSE.point.events === i.otherSE.point.events && n.segment.consume(i.segment)) } } } }, { key: "getAvailableLinkedEvents", value: function () { for (var t = [], e = 0, n = this.point.events.length; e < n; e++) { var r = this.point.events[e]; r !== this && !r.segment.ringOut && r.segment.isInResult() && t.push(r) } return t } }, { key: "getLeftmostComparator", value: function (t) { var e = this, n = new Map, r = function (r) { var i, o, s, a, u, l = r.otherSE; n.set(r, { sine: (i = e.point, o = t.point, s = l.point, a = { x: o.x - i.x, y: o.y - i.y }, u = {x: s.x - i.x, y: s.y - i.y}, Tu(u, a) / Fu(u) / Fu(a)), cosine: ku(e.point, t.point, l.point) }) }; return function (t, e) { n.has(t) || r(t), n.has(e) || r(e); var i = n.get(t), o = i.sine, s = i.cosine, a = n.get(e), u = a.sine, l = a.cosine; return o >= 0 && u >= 0 ? s < l ? 1 : s > l ? -1 : 0 : o < 0 && u < 0 ? s < l ? -1 : s > l ? 1 : 0 : u < o ? -1 : u > o ? 1 : 0 } } }]), t }(), zu = 0, ju = function () { function t(e, n, r, i) { bu(this, t), this.id = ++zu, this.leftSE = e, e.segment = this, e.otherSE = n, this.rightSE = n, n.segment = this, n.otherSE = e, this.rings = r, this.windings = i } return Iu(t, null, [{ key: "compare", value: function (t, e) { var n = t.leftSE.point.x, r = e.leftSE.point.x, i = t.rightSE.point.x, o = e.rightSE.point.x; if (o < n) return 1; if (i < r) return -1; var s = t.leftSE.point.y, a = e.leftSE.point.y, u = t.rightSE.point.y, l = e.rightSE.point.y; if (n < r) { if (a < s && a < u) return 1; if (a > s && a > u) return -1; var c = t.comparePoint(e.leftSE.point); if (c < 0) return 1; if (c > 0) return -1; var h = e.comparePoint(t.rightSE.point); return 0 !== h ? h : -1 } if (n > r) { if (s < a && s < l) return -1; if (s > a && s > l) return 1; var p = e.comparePoint(t.leftSE.point); if (0 !== p) return p; var f = t.comparePoint(e.rightSE.point); return f < 0 ? 1 : f > 0 ? -1 : 1 } if (s < a) return -1; if (s > a) return 1; if (i < o) { var g = e.comparePoint(t.rightSE.point); if (0 !== g) return g } if (i > o) { var d = t.comparePoint(e.rightSE.point); if (d < 0) return 1; if (d > 0) return -1 } if (i !== o) { var y = u - s, v = i - n, _ = l - a, m = o - r; if (y > v && _ < m) return 1; if (y < v && _ > m) return -1 } return i > o ? 1 : i < o || u < l ? -1 : u > l ? 1 : t.id < e.id ? -1 : t.id > e.id ? 1 : 0 } }]), Iu(t, [{ key: "replaceRightSE", value: function (t) { this.rightSE = t, this.rightSE.segment = this, this.rightSE.otherSE = this.leftSE, this.leftSE.otherSE = this.rightSE } }, { key: "bbox", value: function () { var t = this.leftSE.point.y, e = this.rightSE.point.y; return {ll: {x: this.leftSE.point.x, y: t < e ? t : e}, ur: {x: this.rightSE.point.x, y: t > e ? t : e}} } }, { key: "vector", value: function () { return {x: this.rightSE.point.x - this.leftSE.point.x, y: this.rightSE.point.y - this.leftSE.point.y} } }, { key: "isAnEndpoint", value: function (t) { return t.x === this.leftSE.point.x && t.y === this.leftSE.point.y || t.x === this.rightSE.point.x && t.y === this.rightSE.point.y } }, { key: "comparePoint", value: function (t) { if (this.isAnEndpoint(t)) return 0; var e = this.leftSE.point, n = this.rightSE.point, r = this.vector(); if (e.x === n.x) return t.x === e.x ? 0 : t.x < e.x ? 1 : -1; var i = (t.y - e.y) / r.y, o = e.x + i * r.x; if (t.x === o) return 0; var s = (t.x - e.x) / r.x, a = e.y + s * r.y; return t.y === a ? 0 : t.y < a ? -1 : 1 } }, { key: "getIntersection", value: function (t) { var e = this.bbox(), n = t.bbox(), r = Su(e, n); if (null === r) return null; var i = this.leftSE.point, o = this.rightSE.point, s = t.leftSE.point, a = t.rightSE.point, u = Nu(e, s) && 0 === this.comparePoint(s), l = Nu(n, i) && 0 === t.comparePoint(i), c = Nu(e, a) && 0 === this.comparePoint(a), h = Nu(n, o) && 0 === t.comparePoint(o); if (l && u) return h && !c ? o : !h && c ? a : null; if (l) return c && i.x === a.x && i.y === a.y ? null : i; if (u) return h && o.x === s.x && o.y === s.y ? null : s; if (h && c) return null; if (h) return o; if (c) return a; var p = function (t, e, n, r) { if (0 === e.x) return qu(n, r, t.x); if (0 === r.x) return qu(t, e, n.x); if (0 === e.y) return Gu(n, r, t.y); if (0 === r.y) return Gu(t, e, n.y); var i = Tu(e, r); if (0 == i) return null; var o = {x: n.x - t.x, y: n.y - t.y}, s = Tu(o, e) / i, a = Tu(o, r) / i; return {x: (t.x + a * e.x + (n.x + s * r.x)) / 2, y: (t.y + a * e.y + (n.y + s * r.y)) / 2} }(i, this.vector(), s, t.vector()); return null === p ? null : Nu(r, p) ? Ru.round(p.x, p.y) : null } }, { key: "split", value: function (e) { var n = [], r = void 0 !== e.events, i = new Bu(e, !0), o = new Bu(e, !1), s = this.rightSE; this.replaceRightSE(o), n.push(o), n.push(i); var a = new t(i, s, this.rings.slice(), this.windings.slice()); return Bu.comparePoints(a.leftSE.point, a.rightSE.point) > 0 && a.swapEvents(), Bu.comparePoints(this.leftSE.point, this.rightSE.point) > 0 && this.swapEvents(), r && (i.checkForConsuming(), o.checkForConsuming()), n } }, { key: "swapEvents", value: function () { var t = this.rightSE; this.rightSE = this.leftSE, this.leftSE = t, this.leftSE.isLeft = !0, this.rightSE.isLeft = !1; for (var e = 0, n = this.windings.length; e < n; e++) this.windings[e] *= -1 } }, { key: "consume", value: function (e) { for (var n = this, r = e; n.consumedBy;) n = n.consumedBy; for (; r.consumedBy;) r = r.consumedBy; var i = t.compare(n, r); if (0 !== i) { if (i > 0) { var o = n; n = r, r = o } if (n.prev === r) { var s = n; n = r, r = s } for (var a = 0, u = r.rings.length; a < u; a++) { var l = r.rings[a], c = r.windings[a], h = n.rings.indexOf(l); -1 === h ? (n.rings.push(l), n.windings.push(c)) : n.windings[h] += c } r.rings = null, r.windings = null, r.consumedBy = n, r.leftSE.consumedBy = n.leftSE, r.rightSE.consumedBy = n.rightSE } } }, { key: "prevInResult", value: function () { return void 0 !== this._prevInResult || (this.prev ? this.prev.isInResult() ? this._prevInResult = this.prev : this._prevInResult = this.prev.prevInResult() : this._prevInResult = null), this._prevInResult } }, { key: "beforeState", value: function () { if (void 0 !== this._beforeState) return this._beforeState; if (this.prev) { var t = this.prev.consumedBy || this.prev; this._beforeState = t.afterState() } else this._beforeState = {rings: [], windings: [], multiPolys: []}; return this._beforeState } }, { key: "afterState", value: function () { if (void 0 !== this._afterState) return this._afterState; var t = this.beforeState(); this._afterState = {rings: t.rings.slice(0), windings: t.windings.slice(0), multiPolys: []}; for (var e = this._afterState.rings, n = this._afterState.windings, r = this._afterState.multiPolys, i = 0, o = this.rings.length; i < o; i++) { var s = this.rings[i], a = this.windings[i], u = e.indexOf(s); -1 === u ? (e.push(s), n.push(a)) : n[u] += a } for (var l = [], c = [], h = 0, p = e.length; h < p; h++) if (0 !== n[h]) { var f = e[h], g = f.poly; if (-1 === c.indexOf(g)) if (f.isExterior) l.push(g); else { -1 === c.indexOf(g) && c.push(g); var d = l.indexOf(f.poly); -1 !== d && l.splice(d, 1) } } for (var y = 0, v = l.length; y < v; y++) { var _ = l[y].multiPoly; -1 === r.indexOf(_) && r.push(_) } return this._afterState } }, { key: "isInResult", value: function () { if (this.consumedBy) return !1; if (void 0 !== this._isInResult) return this._isInResult; var t = this.beforeState().multiPolys, e = this.afterState().multiPolys; switch (Qu.type) { case "union": var n = 0 === t.length, r = 0 === e.length; this._isInResult = n !== r; break; case "intersection": var i, o; t.length < e.length ? (i = t.length, o = e.length) : (i = e.length, o = t.length), this._isInResult = o === Qu.numMultiPolys && i < o; break; case "xor": var s = Math.abs(t.length - e.length); this._isInResult = s % 2 == 1; break; case "difference": var a = function (t) { return 1 === t.length && t[0].isSubject }; this._isInResult = a(t) !== a(e); break; default: throw new Error("Unrecognized operation type found ".concat(Qu.type)) } return this._isInResult } }], [{ key: "fromRing", value: function (e, n, r) { var i, o, s, a = Bu.comparePoints(e, n); if (a < 0) i = e, o = n, s = 1; else { if (!(a > 0)) throw new Error("Tried to create degenerate segment at [".concat(e.x, ", ").concat(e.y, "]")); i = n, o = e, s = -1 } return new t(new Bu(i, !0), new Bu(o, !1), [r], [s]) } }]), t }(), Uu = function () { function t(e, n, r) { if (bu(this, t), !Array.isArray(e) || 0 === e.length) throw new Error("Input geometry is not a valid Polygon or MultiPolygon"); if (this.poly = n, this.isExterior = r, this.segments = [], "number" != typeof e[0][0] || "number" != typeof e[0][1]) throw new Error("Input geometry is not a valid Polygon or MultiPolygon"); var i = Ru.round(e[0][0], e[0][1]); this.bbox = {ll: {x: i.x, y: i.y}, ur: {x: i.x, y: i.y}}; for (var o = i, s = 1, a = e.length; s < a; s++) { if ("number" != typeof e[s][0] || "number" != typeof e[s][1]) throw new Error("Input geometry is not a valid Polygon or MultiPolygon"); var u = Ru.round(e[s][0], e[s][1]); u.x === o.x && u.y === o.y || (this.segments.push(ju.fromRing(o, u, this)), u.x < this.bbox.ll.x && (this.bbox.ll.x = u.x), u.y < this.bbox.ll.y && (this.bbox.ll.y = u.y), u.x > this.bbox.ur.x && (this.bbox.ur.x = u.x), u.y > this.bbox.ur.y && (this.bbox.ur.y = u.y), o = u) } i.x === o.x && i.y === o.y || this.segments.push(ju.fromRing(o, i, this)) } return Iu(t, [{ key: "getSweepEvents", value: function () { for (var t = [], e = 0, n = this.segments.length; e < n; e++) { var r = this.segments[e]; t.push(r.leftSE), t.push(r.rightSE) } return t } }]), t }(), Vu = function () { function t(e, n) { if (bu(this, t), !Array.isArray(e)) throw new Error("Input geometry is not a valid Polygon or MultiPolygon"); this.exteriorRing = new Uu(e[0], this, !0), this.bbox = { ll: { x: this.exteriorRing.bbox.ll.x, y: this.exteriorRing.bbox.ll.y }, ur: {x: this.exteriorRing.bbox.ur.x, y: this.exteriorRing.bbox.ur.y} }, this.interiorRings = []; for (var r = 1, i = e.length; r < i; r++) { var o = new Uu(e[r], this, !1); o.bbox.ll.x < this.bbox.ll.x && (this.bbox.ll.x = o.bbox.ll.x), o.bbox.ll.y < this.bbox.ll.y && (this.bbox.ll.y = o.bbox.ll.y), o.bbox.ur.x > this.bbox.ur.x && (this.bbox.ur.x = o.bbox.ur.x), o.bbox.ur.y > this.bbox.ur.y && (this.bbox.ur.y = o.bbox.ur.y), this.interiorRings.push(o) } this.multiPoly = n } return Iu(t, [{ key: "getSweepEvents", value: function () { for (var t = this.exteriorRing.getSweepEvents(), e = 0, n = this.interiorRings.length; e < n; e++) for (var r = this.interiorRings[e].getSweepEvents(), i = 0, o = r.length; i < o; i++) t.push(r[i]); return t } }]), t }(), Xu = function () { function t(e, n) { if (bu(this, t), !Array.isArray(e)) throw new Error("Input geometry is not a valid Polygon or MultiPolygon"); try { "number" == typeof e[0][0][0] && (e = [e]) } catch (t) { } this.polys = [], this.bbox = { ll: {x: Number.POSITIVE_INFINITY, y: Number.POSITIVE_INFINITY}, ur: {x: Number.NEGATIVE_INFINITY, y: Number.NEGATIVE_INFINITY} }; for (var r = 0, i = e.length; r < i; r++) { var o = new Vu(e[r], this); o.bbox.ll.x < this.bbox.ll.x && (this.bbox.ll.x = o.bbox.ll.x), o.bbox.ll.y < this.bbox.ll.y && (this.bbox.ll.y = o.bbox.ll.y), o.bbox.ur.x > this.bbox.ur.x && (this.bbox.ur.x = o.bbox.ur.x), o.bbox.ur.y > this.bbox.ur.y && (this.bbox.ur.y = o.bbox.ur.y), this.polys.push(o) } this.isSubject = n } return Iu(t, [{ key: "getSweepEvents", value: function () { for (var t = [], e = 0, n = this.polys.length; e < n; e++) for (var r = this.polys[e].getSweepEvents(), i = 0, o = r.length; i < o; i++) t.push(r[i]); return t } }]), t }(), Yu = function () { function t(e) { bu(this, t), this.events = e; for (var n = 0, r = e.length; n < r; n++) e[n].segment.ringOut = this; this.poly = null } return Iu(t, null, [{ key: "factory", value: function (e) { for (var n = [], r = 0, i = e.length; r < i; r++) { var o = e[r]; if (o.isInResult() && !o.ringOut) { for (var s = null, a = o.leftSE, u = o.rightSE, l = [a], c = a.point, h = []; s = a, a = u, l.push(a), a.point !== c;) for (; ;) { var p = a.getAvailableLinkedEvents(); if (0 === p.length) { var f = l[0].point, g = l[l.length - 1].point; throw new Error("Unable to complete output ring starting at [".concat(f.x, ",") + " ".concat(f.y, "]. Last matching segment found ends at") + " [".concat(g.x, ", ").concat(g.y, "].")) } if (1 === p.length) { u = p[0].otherSE; break } for (var d = null, y = 0, v = h.length; y < v; y++) if (h[y].point === a.point) { d = y; break } if (null === d) { h.push({index: l.length, point: a.point}); var _ = a.getLeftmostComparator(s); u = p.sort(_)[0].otherSE; break } var m = h.splice(d)[0], x = l.splice(m.index); x.unshift(x[0].otherSE), n.push(new t(x.reverse())) } n.push(new t(l)) } } return n } }]), Iu(t, [{ key: "getGeom", value: function () { for (var t = this.events[0].point, e = [t], n = 1, r = this.events.length - 1; n < r; n++) { var i = this.events[n].point, o = this.events[n + 1].point; 0 !== Du(i, t, o) && (e.push(i), t = i) } if (1 === e.length) return null; var s = e[0], a = e[1]; 0 === Du(s, t, a) && e.shift(), e.push(e[0]); for (var u = this.isExteriorRing() ? 1 : -1, l = this.isExteriorRing() ? 0 : e.length - 1, c = this.isExteriorRing() ? e.length : -1, h = [], p = l; p != c; p += u) h.push([e[p].x, e[p].y]); return h } }, { key: "isExteriorRing", value: function () { if (void 0 === this._isExteriorRing) { var t = this.enclosingRing(); this._isExteriorRing = !t || !t.isExteriorRing() } return this._isExteriorRing } }, { key: "enclosingRing", value: function () { return void 0 === this._enclosingRing && (this._enclosingRing = this._calcEnclosingRing()), this._enclosingRing } }, { key: "_calcEnclosingRing", value: function () { for (var t = this.events[0], e = 1, n = this.events.length; e < n; e++) { var r = this.events[e]; Bu.compare(t, r) > 0 && (t = r) } for (var i = t.segment.prevInResult(), o = i ? i.prevInResult() : null; ;) { if (!i) return null; if (!o) return i.ringOut; if (o.ringOut !== i.ringOut) return o.ringOut.enclosingRing() !== i.ringOut ? i.ringOut : i.ringOut.enclosingRing(); i = o.prevInResult(), o = i ? i.prevInResult() : null } } }]), t }(), Hu = function () { function t(e) { bu(this, t), this.exteriorRing = e, e.poly = this, this.interiorRings = [] } return Iu(t, [{ key: "addInterior", value: function (t) { this.interiorRings.push(t), t.poly = this } }, { key: "getGeom", value: function () { var t = [this.exteriorRing.getGeom()]; if (null === t[0]) return null; for (var e = 0, n = this.interiorRings.length; e < n; e++) { var r = this.interiorRings[e].getGeom(); null !== r && t.push(r) } return t } }]), t }(), Wu = function () { function t(e) { bu(this, t), this.rings = e, this.polys = this._composePolys(e) } return Iu(t, [{ key: "getGeom", value: function () { for (var t = [], e = 0, n = this.polys.length; e < n; e++) { var r = this.polys[e].getGeom(); null !== r && t.push(r) } return t } }, { key: "_composePolys", value: function (t) { for (var e = [], n = 0, r = t.length; n < r; n++) { var i = t[n]; if (!i.poly) if (i.isExteriorRing()) e.push(new Hu(i)); else { var o = i.enclosingRing(); o.poly || e.push(new Hu(o)), o.poly.addInterior(i) } } return e } }]), t }(), Ju = function () { function t(e) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ju.compare; bu(this, t), this.queue = e, this.tree = new _u(n), this.segments = [] } return Iu(t, [{ key: "process", value: function (t) { var e = t.segment, n = []; if (t.consumedBy) return t.isLeft ? this.queue.remove(t.otherSE) : this.tree.remove(e), n; var r = t.isLeft ? this.tree.insert(e) : this.tree.find(e); if (!r) throw new Error("Unable to find segment #".concat(e.id, " ") + "[".concat(e.leftSE.point.x, ", ").concat(e.leftSE.point.y, "] -> ") + "[".concat(e.rightSE.point.x, ", ").concat(e.rightSE.point.y, "] ") + "in SweepLine tree. Please submit a bug report."); for (var i = r, o = r, s = void 0, a = void 0; void 0 === s;) null === (i = this.tree.prev(i)) ? s = null : void 0 === i.key.consumedBy && (s = i.key); for (; void 0 === a;) null === (o = this.tree.next(o)) ? a = null : void 0 === o.key.consumedBy && (a = o.key); if (t.isLeft) { var u = null; if (s) { var l = s.getIntersection(e); if (null !== l && (e.isAnEndpoint(l) || (u = l), !s.isAnEndpoint(l))) for (var c = this._splitSafely(s, l), h = 0, p = c.length; h < p; h++) n.push(c[h]) } var f = null; if (a) { var g = a.getIntersection(e); if (null !== g && (e.isAnEndpoint(g) || (f = g), !a.isAnEndpoint(g))) for (var d = this._splitSafely(a, g), y = 0, v = d.length; y < v; y++) n.push(d[y]) } if (null !== u || null !== f) { var _ = null; if (null === u) _ = f; else if (null === f) _ = u; else { _ = Bu.comparePoints(u, f) <= 0 ? u : f } this.queue.remove(e.rightSE), n.push(e.rightSE); for (var m = e.split(_), x = 0, E = m.length; x < E; x++) n.push(m[x]) } n.length > 0 ? (this.tree.remove(e), n.push(t)) : (this.segments.push(e), e.prev = s) } else { if (s && a) { var b = s.getIntersection(a); if (null !== b) { if (!s.isAnEndpoint(b)) for (var w = this._splitSafely(s, b), I = 0, N = w.length; I < N; I++) n.push(w[I]); if (!a.isAnEndpoint(b)) for (var S = this._splitSafely(a, b), C = 0, P = S.length; C < P; C++) n.push(S[C]) } } this.tree.remove(e) } return n } }, { key: "_splitSafely", value: function (t, e) { this.tree.remove(t); var n = t.rightSE; this.queue.remove(n); var r = t.split(e); return r.push(n), void 0 === t.consumedBy && this.tree.insert(t), r } }]), t }(), Zu = "undefined" != typeof process && process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE || 1e6, Ku = "undefined" != typeof process && process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS || 1e6, Qu = new (function () { function t() { bu(this, t) } return Iu(t, [{ key: "run", value: function (t, e, n) { Qu.type = t, Ru.reset(); for (var r = [new Xu(e, !0)], i = 0, o = n.length; i < o; i++) r.push(new Xu(n[i], !1)); if (Qu.numMultiPolys = r.length, "difference" === Qu.type) for (var s = r[0], a = 1; a < r.length;) null !== Su(r[a].bbox, s.bbox) ? a++ : r.splice(a, 1); if ("intersection" === Qu.type) for (var u = 0, l = r.length; u < l; u++) for (var c = r[u], h = u + 1, p = r.length; h < p; h++) if (null === Su(c.bbox, r[h].bbox)) return []; for (var f = new _u(Bu.compare), g = 0, d = r.length; g < d; g++) for (var y = r[g].getSweepEvents(), v = 0, _ = y.length; v < _; v++) if (f.insert(y[v]), f.size > Zu) throw new Error("Infinite loop when putting segment endpoints in a priority queue (queue size too big). Please file a bug report."); for (var m = new Ju(f), x = f.size, E = f.pop(); E;) { var b = E.key; if (f.size === x) { var w = b.segment; throw new Error("Unable to pop() ".concat(b.isLeft ? "left" : "right", " SweepEvent ") + "[".concat(b.point.x, ", ").concat(b.point.y, "] from segment #").concat(w.id, " ") + "[".concat(w.leftSE.point.x, ", ").concat(w.leftSE.point.y, "] -> ") + "[".concat(w.rightSE.point.x, ", ").concat(w.rightSE.point.y, "] from queue. ") + "Please file a bug report.") } if (f.size > Zu) throw new Error("Infinite loop when passing sweep line over endpoints (queue size too big). Please file a bug report."); if (m.segments.length > Ku) throw new Error("Infinite loop when passing sweep line over endpoints (too many sweep line segments). Please file a bug report."); for (var I = m.process(b), N = 0, S = I.length; N < S; N++) { var C = I[N]; void 0 === C.consumedBy && f.insert(C) } x = f.size, E = f.pop() } Ru.reset(); var P = Yu.factory(m.segments); return new Wu(P).getGeom() } }]), t }()), $u = { union: function (t) { for (var e = arguments.length, n = new Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++) n[r - 1] = arguments[r]; return Qu.run("union", t, n) }, intersection: function (t) { for (var e = arguments.length, n = new Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++) n[r - 1] = arguments[r]; return Qu.run("intersection", t, n) }, xor: function (t) { for (var e = arguments.length, n = new Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++) n[r - 1] = arguments[r]; return Qu.run("xor", t, n) }, difference: function (t) { for (var e = arguments.length, n = new Array(e > 1 ? e - 1 : 0), r = 1; r < e; r++) n[r - 1] = arguments[r]; return Qu.run("difference", t, n) } }; "fill" in Array.prototype || Object.defineProperty(Array.prototype, "fill", { configurable: !0, value: function (t) { if (null == this) throw new TypeError(this + " is not an object"); var e = Object(this), n = Math.max(Math.min(e.length, 9007199254740991), 0) || 0, r = 1 in arguments && parseInt(Number(arguments[1]), 10) || 0; r = r < 0 ? Math.max(n + r, 0) : Math.min(r, n); var i = 2 in arguments && void 0 !== arguments[2] ? parseInt(Number(arguments[2]), 10) || 0 : n; for (i = i < 0 ? Math.max(n + arguments[2], 0) : Math.min(i, n); r < i;) e[r] = t, ++r; return e }, writable: !0 }), Number.isFinite = Number.isFinite || function (t) { return "number" == typeof t && isFinite(t) }, Number.isInteger = Number.isInteger || function (t) { return "number" == typeof t && isFinite(t) && Math.floor(t) === t }, Number.parseFloat = Number.parseFloat || parseFloat, Number.isNaN = Number.isNaN || function (t) { return t != t }, Math.trunc = Math.trunc || function (t) { return t < 0 ? Math.ceil(t) : Math.floor(t) }; var tl = function () { }; tl.prototype.interfaces_ = function () { return [] }, tl.prototype.getClass = function () { return tl }, tl.prototype.equalsWithTolerance = function (t, e, n) { return Math.abs(t - e) <= n }; var el = function (t) { function e(e) { t.call(this, e), this.name = "IllegalArgumentException", this.message = e, this.stack = (new t).stack } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e }(Error), nl = function () { }, rl = {MAX_VALUE: {configurable: !0}}; nl.isNaN = function (t) { return Number.isNaN(t) }, nl.doubleToLongBits = function (t) { return t }, nl.longBitsToDouble = function (t) { return t }, nl.isInfinite = function (t) { return !Number.isFinite(t) }, rl.MAX_VALUE.get = function () { return Number.MAX_VALUE }, Object.defineProperties(nl, rl); var il = function () { }, ol = function () { }, sl = function () { }; function al() { } var ul = function t() { if (this.x = null, this.y = null, this.z = null, 0 === arguments.length) this.x = 0, this.y = 0, this.z = t.NULL_ORDINATE; else if (1 === arguments.length) { var e = arguments[0]; this.x = e.x, this.y = e.y, this.z = e.z } else 2 === arguments.length ? (this.x = arguments[0], this.y = arguments[1], this.z = t.NULL_ORDINATE) : 3 === arguments.length && (this.x = arguments[0], this.y = arguments[1], this.z = arguments[2]) }, ll = { DimensionalComparator: {configurable: !0}, serialVersionUID: {configurable: !0}, NULL_ORDINATE: {configurable: !0}, X: {configurable: !0}, Y: {configurable: !0}, Z: {configurable: !0} }; ul.prototype.setOrdinate = function (t, e) { switch (t) { case ul.X: this.x = e; break; case ul.Y: this.y = e; break; case ul.Z: this.z = e; break; default: throw new el("Invalid ordinate index: " + t) } }, ul.prototype.equals2D = function () { if (1 === arguments.length) { var t = arguments[0]; return this.x === t.x && this.y === t.y } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return !!tl.equalsWithTolerance(this.x, e.x, n) && !!tl.equalsWithTolerance(this.y, e.y, n) } }, ul.prototype.getOrdinate = function (t) { switch (t) { case ul.X: return this.x; case ul.Y: return this.y; case ul.Z: return this.z } throw new el("Invalid ordinate index: " + t) }, ul.prototype.equals3D = function (t) { return this.x === t.x && this.y === t.y && (this.z === t.z || nl.isNaN(this.z)) && nl.isNaN(t.z) }, ul.prototype.equals = function (t) { return t instanceof ul && this.equals2D(t) }, ul.prototype.equalInZ = function (t, e) { return tl.equalsWithTolerance(this.z, t.z, e) }, ul.prototype.compareTo = function (t) { var e = t; return this.x < e.x ? -1 : this.x > e.x ? 1 : this.y < e.y ? -1 : this.y > e.y ? 1 : 0 }, ul.prototype.clone = function () { }, ul.prototype.copy = function () { return new ul(this) }, ul.prototype.toString = function () { return "(" + this.x + ", " + this.y + ", " + this.z + ")" }, ul.prototype.distance3D = function (t) { var e = this.x - t.x, n = this.y - t.y, r = this.z - t.z; return Math.sqrt(e * e + n * n + r * r) }, ul.prototype.distance = function (t) { var e = this.x - t.x, n = this.y - t.y; return Math.sqrt(e * e + n * n) }, ul.prototype.hashCode = function () { var t = 17; return t = 37 * (t = 37 * t + ul.hashCode(this.x)) + ul.hashCode(this.y) }, ul.prototype.setCoordinate = function (t) { this.x = t.x, this.y = t.y, this.z = t.z }, ul.prototype.interfaces_ = function () { return [il, ol, al] }, ul.prototype.getClass = function () { return ul }, ul.hashCode = function () { if (1 === arguments.length) { var t = arguments[0], e = nl.doubleToLongBits(t); return Math.trunc((e ^ e) >>> 32) } }, ll.DimensionalComparator.get = function () { return cl }, ll.serialVersionUID.get = function () { return 0x5cbf2c235c7e5800 }, ll.NULL_ORDINATE.get = function () { return nl.NaN }, ll.X.get = function () { return 0 }, ll.Y.get = function () { return 1 }, ll.Z.get = function () { return 2 }, Object.defineProperties(ul, ll); var cl = function (t) { if (this._dimensionsToTest = 2, 0 === arguments.length) ; else if (1 === arguments.length) { var e = arguments[0]; if (2 !== e && 3 !== e) throw new el("only 2 or 3 dimensions may be specified"); this._dimensionsToTest = e } }; cl.prototype.compare = function (t, e) { var n = t, r = e, i = cl.compare(n.x, r.x); if (0 !== i) return i; var o = cl.compare(n.y, r.y); return 0 !== o ? o : this._dimensionsToTest <= 2 ? 0 : cl.compare(n.z, r.z) }, cl.prototype.interfaces_ = function () { return [sl] }, cl.prototype.getClass = function () { return cl }, cl.compare = function (t, e) { return t < e ? -1 : t > e ? 1 : nl.isNaN(t) ? nl.isNaN(e) ? 0 : -1 : nl.isNaN(e) ? 1 : 0 }; var hl = function () { }; hl.prototype.create = function () { }, hl.prototype.interfaces_ = function () { return [] }, hl.prototype.getClass = function () { return hl }; var pl = function () { }, fl = { INTERIOR: {configurable: !0}, BOUNDARY: {configurable: !0}, EXTERIOR: {configurable: !0}, NONE: {configurable: !0} }; pl.prototype.interfaces_ = function () { return [] }, pl.prototype.getClass = function () { return pl }, pl.toLocationSymbol = function (t) { switch (t) { case pl.EXTERIOR: return "e"; case pl.BOUNDARY: return "b"; case pl.INTERIOR: return "i"; case pl.NONE: return "-" } throw new el("Unknown location value: " + t) }, fl.INTERIOR.get = function () { return 0 }, fl.BOUNDARY.get = function () { return 1 }, fl.EXTERIOR.get = function () { return 2 }, fl.NONE.get = function () { return -1 }, Object.defineProperties(pl, fl); var gl = function (t, e) { return t.interfaces_ && t.interfaces_().indexOf(e) > -1 }, dl = function () { }, yl = {LOG_10: {configurable: !0}}; dl.prototype.interfaces_ = function () { return [] }, dl.prototype.getClass = function () { return dl }, dl.log10 = function (t) { var e = Math.log(t); return nl.isInfinite(e) || nl.isNaN(e) ? e : e / dl.LOG_10 }, dl.min = function (t, e, n, r) { var i = t; return e < i && (i = e), n < i && (i = n), r < i && (i = r), i }, dl.clamp = function () { if ("number" == typeof arguments[2] && "number" == typeof arguments[0] && "number" == typeof arguments[1]) { var t = arguments[0], e = arguments[1], n = arguments[2]; return t < e ? e : t > n ? n : t } if (Number.isInteger(arguments[2]) && Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) { var r = arguments[0], i = arguments[1], o = arguments[2]; return r < i ? i : r > o ? o : r } }, dl.wrap = function (t, e) { return t < 0 ? e - -t % e : t % e }, dl.max = function () { if (3 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2], r = t; return e > r && (r = e), n > r && (r = n), r } if (4 === arguments.length) { var i = arguments[0], o = arguments[1], s = arguments[2], a = arguments[3], u = i; return o > u && (u = o), s > u && (u = s), a > u && (u = a), u } }, dl.average = function (t, e) { return (t + e) / 2 }, yl.LOG_10.get = function () { return Math.log(10) }, Object.defineProperties(dl, yl); var vl = function (t) { this.str = t }; vl.prototype.append = function (t) { this.str += t }, vl.prototype.setCharAt = function (t, e) { this.str = this.str.substr(0, t) + e + this.str.substr(t + 1) }, vl.prototype.toString = function (t) { return this.str }; var _l = function (t) { this.value = t }; _l.prototype.intValue = function () { return this.value }, _l.prototype.compareTo = function (t) { return this.value < t ? -1 : this.value > t ? 1 : 0 }, _l.isNaN = function (t) { return Number.isNaN(t) }; var ml = function () { }; ml.isWhitespace = function (t) { return t <= 32 && t >= 0 || 127 === t }, ml.toUpperCase = function (t) { return t.toUpperCase() }; var xl = function t() { if (this._hi = 0, this._lo = 0, 0 === arguments.length) this.init(0); else if (1 === arguments.length) { if ("number" == typeof arguments[0]) { var e = arguments[0]; this.init(e) } else if (arguments[0] instanceof t) { var n = arguments[0]; this.init(n) } else if ("string" == typeof arguments[0]) { var r = arguments[0]; t.call(this, t.parse(r)) } } else if (2 === arguments.length) { var i = arguments[0], o = arguments[1]; this.init(i, o) } }, El = { PI: {configurable: !0}, TWO_PI: {configurable: !0}, PI_2: {configurable: !0}, E: {configurable: !0}, NaN: {configurable: !0}, EPS: {configurable: !0}, SPLIT: {configurable: !0}, MAX_PRINT_DIGITS: {configurable: !0}, TEN: {configurable: !0}, ONE: {configurable: !0}, SCI_NOT_EXPONENT_CHAR: {configurable: !0}, SCI_NOT_ZERO: {configurable: !0} }; xl.prototype.le = function (t) { return (this._hi < t._hi || this._hi === t._hi) && this._lo <= t._lo }, xl.prototype.extractSignificantDigits = function (t, e) { var n = this.abs(), r = xl.magnitude(n._hi), i = xl.TEN.pow(r); (n = n.divide(i)).gt(xl.TEN) ? (n = n.divide(xl.TEN), r += 1) : n.lt(xl.ONE) && (n = n.multiply(xl.TEN), r -= 1); for (var o = r + 1, s = new vl, a = xl.MAX_PRINT_DIGITS - 1, u = 0; u <= a; u++) { t && u === o && s.append("."); var l = Math.trunc(n._hi); if (l < 0) break; var c = !1, h = 0; l > 9 ? (c = !0, h = "9") : h = "0" + l, s.append(h), n = n.subtract(xl.valueOf(l)).multiply(xl.TEN), c && n.selfAdd(xl.TEN); var p = !0, f = xl.magnitude(n._hi); if (f < 0 && Math.abs(f) >= a - u && (p = !1), !p) break } return e[0] = r, s.toString() }, xl.prototype.sqr = function () { return this.multiply(this) }, xl.prototype.doubleValue = function () { return this._hi + this._lo }, xl.prototype.subtract = function () { if (arguments[0] instanceof xl) { var t = arguments[0]; return this.add(t.negate()) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.add(-e) } }, xl.prototype.equals = function () { if (1 === arguments.length) { var t = arguments[0]; return this._hi === t._hi && this._lo === t._lo } }, xl.prototype.isZero = function () { return 0 === this._hi && 0 === this._lo }, xl.prototype.selfSubtract = function () { if (arguments[0] instanceof xl) { var t = arguments[0]; return this.isNaN() ? this : this.selfAdd(-t._hi, -t._lo) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.isNaN() ? this : this.selfAdd(-e, 0) } }, xl.prototype.getSpecialNumberString = function () { return this.isZero() ? "0.0" : this.isNaN() ? "NaN " : null }, xl.prototype.min = function (t) { return this.le(t) ? this : t }, xl.prototype.selfDivide = function () { if (1 === arguments.length) { if (arguments[0] instanceof xl) { var t = arguments[0]; return this.selfDivide(t._hi, t._lo) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.selfDivide(e, 0) } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1], i = null, o = null, s = null, a = null, u = null, l = null, c = null, h = null; return u = this._hi / n, h = (i = (l = xl.SPLIT * u) - (i = l - u)) * (s = (h = xl.SPLIT * n) - (s = h - n)) - (c = u * n) + i * (a = n - s) + (o = u - i) * s + o * a, h = u + (l = (this._hi - c - h + this._lo - u * r) / n), this._hi = h, this._lo = u - h + l, this } }, xl.prototype.dump = function () { return "DD<" + this._hi + ", " + this._lo + ">" }, xl.prototype.divide = function () { if (arguments[0] instanceof xl) { var t = arguments[0], e = null, n = null, r = null, i = null, o = null, s = null, a = null, u = null; n = (o = this._hi / t._hi) - (e = (s = xl.SPLIT * o) - (e = s - o)), u = e * (r = (u = xl.SPLIT * t._hi) - (r = u - t._hi)) - (a = o * t._hi) + e * (i = t._hi - r) + n * r + n * i; var l = u = o + (s = (this._hi - a - u + this._lo - o * t._lo) / t._hi), c = o - u + s; return new xl(l, c) } if ("number" == typeof arguments[0]) { var h = arguments[0]; return nl.isNaN(h) ? xl.createNaN() : xl.copy(this).selfDivide(h, 0) } }, xl.prototype.ge = function (t) { return (this._hi > t._hi || this._hi === t._hi) && this._lo >= t._lo }, xl.prototype.pow = function (t) { if (0 === t) return xl.valueOf(1); var e = new xl(this), n = xl.valueOf(1), r = Math.abs(t); if (r > 1) for (; r > 0;) r % 2 == 1 && n.selfMultiply(e), (r /= 2) > 0 && (e = e.sqr()); else n = e; return t < 0 ? n.reciprocal() : n }, xl.prototype.ceil = function () { if (this.isNaN()) return xl.NaN; var t = Math.ceil(this._hi), e = 0; return t === this._hi && (e = Math.ceil(this._lo)), new xl(t, e) }, xl.prototype.compareTo = function (t) { var e = t; return this._hi < e._hi ? -1 : this._hi > e._hi ? 1 : this._lo < e._lo ? -1 : this._lo > e._lo ? 1 : 0 }, xl.prototype.rint = function () { return this.isNaN() ? this : this.add(.5).floor() }, xl.prototype.setValue = function () { if (arguments[0] instanceof xl) { var t = arguments[0]; return this.init(t), this } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.init(e), this } }, xl.prototype.max = function (t) { return this.ge(t) ? this : t }, xl.prototype.sqrt = function () { if (this.isZero()) return xl.valueOf(0); if (this.isNegative()) return xl.NaN; var t = 1 / Math.sqrt(this._hi), e = this._hi * t, n = xl.valueOf(e), r = this.subtract(n.sqr())._hi * (.5 * t); return n.add(r) }, xl.prototype.selfAdd = function () { if (1 === arguments.length) { if (arguments[0] instanceof xl) { var t = arguments[0]; return this.selfAdd(t._hi, t._lo) } if ("number" == typeof arguments[0]) { var e = arguments[0], n = null, r = null, i = null, o = null, s = null, a = null; return o = (i = this._hi + e) - (s = i - this._hi), r = (a = (o = e - s + (this._hi - o)) + this._lo) + (i - (n = i + a)), this._hi = n + r, this._lo = r + (n - this._hi), this } } else if (2 === arguments.length) { var u = arguments[0], l = arguments[1], c = null, h = null, p = null, f = null, g = null, d = null, y = null; f = this._hi + u, h = this._lo + l, g = f - (d = f - this._hi), p = h - (y = h - this._lo); var v = (c = f + (d = (g = u - d + (this._hi - g)) + h)) + (d = (p = l - y + (this._lo - p)) + (d + (f - c))), _ = d + (c - v); return this._hi = v, this._lo = _, this } }, xl.prototype.selfMultiply = function () { if (1 === arguments.length) { if (arguments[0] instanceof xl) { var t = arguments[0]; return this.selfMultiply(t._hi, t._lo) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return this.selfMultiply(e, 0) } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1], i = null, o = null, s = null, a = null, u = null, l = null; i = (u = xl.SPLIT * this._hi) - this._hi, l = xl.SPLIT * n, i = u - i, o = this._hi - i, s = l - n; var c = (u = this._hi * n) + (l = i * (s = l - s) - u + i * (a = n - s) + o * s + o * a + (this._hi * r + this._lo * n)), h = l + (i = u - c); return this._hi = c, this._lo = h, this } }, xl.prototype.selfSqr = function () { return this.selfMultiply(this) }, xl.prototype.floor = function () { if (this.isNaN()) return xl.NaN; var t = Math.floor(this._hi), e = 0; return t === this._hi && (e = Math.floor(this._lo)), new xl(t, e) }, xl.prototype.negate = function () { return this.isNaN() ? this : new xl(-this._hi, -this._lo) }, xl.prototype.clone = function () { }, xl.prototype.multiply = function () { if (arguments[0] instanceof xl) { var t = arguments[0]; return t.isNaN() ? xl.createNaN() : xl.copy(this).selfMultiply(t) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return nl.isNaN(e) ? xl.createNaN() : xl.copy(this).selfMultiply(e, 0) } }, xl.prototype.isNaN = function () { return nl.isNaN(this._hi) }, xl.prototype.intValue = function () { return Math.trunc(this._hi) }, xl.prototype.toString = function () { var t = xl.magnitude(this._hi); return t >= -3 && t <= 20 ? this.toStandardNotation() : this.toSciNotation() }, xl.prototype.toStandardNotation = function () { var t = this.getSpecialNumberString(); if (null !== t) return t; var e = new Array(1).fill(null), n = this.extractSignificantDigits(!0, e), r = e[0] + 1, i = n; if ("." === n.charAt(0)) i = "0" + n; else if (r < 0) i = "0." + xl.stringOfChar("0", -r) + n; else if (-1 === n.indexOf(".")) { var o = r - n.length; i = n + xl.stringOfChar("0", o) + ".0" } return this.isNegative() ? "-" + i : i }, xl.prototype.reciprocal = function () { var t, e, n, r, i = null, o = null, s = null, a = null; t = (n = 1 / this._hi) - (i = (s = xl.SPLIT * n) - (i = s - n)), o = (a = xl.SPLIT * this._hi) - this._hi; var u = n + (s = (1 - (r = n * this._hi) - (a = i * (o = a - o) - r + i * (e = this._hi - o) + t * o + t * e) - n * this._lo) / this._hi); return new xl(u, n - u + s) }, xl.prototype.toSciNotation = function () { if (this.isZero()) return xl.SCI_NOT_ZERO; var t = this.getSpecialNumberString(); if (null !== t) return t; var e = new Array(1).fill(null), n = this.extractSignificantDigits(!1, e), r = xl.SCI_NOT_EXPONENT_CHAR + e[0]; if ("0" === n.charAt(0)) throw new Error("Found leading zero: " + n); var i = ""; n.length > 1 && (i = n.substring(1)); var o = n.charAt(0) + "." + i; return this.isNegative() ? "-" + o + r : o + r }, xl.prototype.abs = function () { return this.isNaN() ? xl.NaN : this.isNegative() ? this.negate() : new xl(this) }, xl.prototype.isPositive = function () { return (this._hi > 0 || 0 === this._hi) && this._lo > 0 }, xl.prototype.lt = function (t) { return (this._hi < t._hi || this._hi === t._hi) && this._lo < t._lo }, xl.prototype.add = function () { if (arguments[0] instanceof xl) { var t = arguments[0]; return xl.copy(this).selfAdd(t) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return xl.copy(this).selfAdd(e) } }, xl.prototype.init = function () { if (1 === arguments.length) { if ("number" == typeof arguments[0]) { var t = arguments[0]; this._hi = t, this._lo = 0 } else if (arguments[0] instanceof xl) { var e = arguments[0]; this._hi = e._hi, this._lo = e._lo } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; this._hi = n, this._lo = r } }, xl.prototype.gt = function (t) { return (this._hi > t._hi || this._hi === t._hi) && this._lo > t._lo }, xl.prototype.isNegative = function () { return (this._hi < 0 || 0 === this._hi) && this._lo < 0 }, xl.prototype.trunc = function () { return this.isNaN() ? xl.NaN : this.isPositive() ? this.floor() : this.ceil() }, xl.prototype.signum = function () { return this._hi > 0 ? 1 : this._hi < 0 ? -1 : this._lo > 0 ? 1 : this._lo < 0 ? -1 : 0 }, xl.prototype.interfaces_ = function () { return [al, il, ol] }, xl.prototype.getClass = function () { return xl }, xl.sqr = function (t) { return xl.valueOf(t).selfMultiply(t) }, xl.valueOf = function () { if ("string" == typeof arguments[0]) { var t = arguments[0]; return xl.parse(t) } if ("number" == typeof arguments[0]) { var e = arguments[0]; return new xl(e) } }, xl.sqrt = function (t) { return xl.valueOf(t).sqrt() }, xl.parse = function (t) { for (var e = 0, n = t.length; ml.isWhitespace(t.charAt(e));) e++; var r = !1; if (e < n) { var i = t.charAt(e); "-" !== i && "+" !== i || (e++, "-" === i && (r = !0)) } for (var o = new xl, s = 0, a = 0, u = 0; !(e >= n);) { var l = t.charAt(e); if (e++, ml.isDigit(l)) { var c = l - "0"; o.selfMultiply(xl.TEN), o.selfAdd(c), s++ } else { if ("." !== l) { if ("e" === l || "E" === l) { var h = t.substring(e); try { u = _l.parseInt(h) } catch (e) { throw e instanceof Error ? new Error("Invalid exponent " + h + " in string " + t) : e } break } throw new Error("Unexpected character '" + l + "' at position " + e + " in string " + t) } a = s } } var p = o, f = s - a - u; if (0 === f) p = o; else if (f > 0) { var g = xl.TEN.pow(f); p = o.divide(g) } else if (f < 0) { var d = xl.TEN.pow(-f); p = o.multiply(d) } return r ? p.negate() : p }, xl.createNaN = function () { return new xl(nl.NaN, nl.NaN) }, xl.copy = function (t) { return new xl(t) }, xl.magnitude = function (t) { var e = Math.abs(t), n = Math.log(e) / Math.log(10), r = Math.trunc(Math.floor(n)); return 10 * Math.pow(10, r) <= e && (r += 1), r }, xl.stringOfChar = function (t, e) { for (var n = new vl, r = 0; r < e; r++) n.append(t); return n.toString() }, El.PI.get = function () { return new xl(3.141592653589793, 12246467991473532e-32) }, El.TWO_PI.get = function () { return new xl(6.283185307179586, 24492935982947064e-32) }, El.PI_2.get = function () { return new xl(1.5707963267948966, 6123233995736766e-32) }, El.E.get = function () { return new xl(2.718281828459045, 14456468917292502e-32) }, El.NaN.get = function () { return new xl(nl.NaN, nl.NaN) }, El.EPS.get = function () { return 123259516440783e-46 }, El.SPLIT.get = function () { return 134217729 }, El.MAX_PRINT_DIGITS.get = function () { return 32 }, El.TEN.get = function () { return xl.valueOf(10) }, El.ONE.get = function () { return xl.valueOf(1) }, El.SCI_NOT_EXPONENT_CHAR.get = function () { return "E" }, El.SCI_NOT_ZERO.get = function () { return "0.0E0" }, Object.defineProperties(xl, El); var bl = function () { }, wl = {DP_SAFE_EPSILON: {configurable: !0}}; bl.prototype.interfaces_ = function () { return [] }, bl.prototype.getClass = function () { return bl }, bl.orientationIndex = function (t, e, n) { var r = bl.orientationIndexFilter(t, e, n); if (r <= 1) return r; var i = xl.valueOf(e.x).selfAdd(-t.x), o = xl.valueOf(e.y).selfAdd(-t.y), s = xl.valueOf(n.x).selfAdd(-e.x), a = xl.valueOf(n.y).selfAdd(-e.y); return i.selfMultiply(a).selfSubtract(o.selfMultiply(s)).signum() }, bl.signOfDet2x2 = function (t, e, n, r) { return t.multiply(r).selfSubtract(e.multiply(n)).signum() }, bl.intersection = function (t, e, n, r) { var i = xl.valueOf(r.y).selfSubtract(n.y).selfMultiply(xl.valueOf(e.x).selfSubtract(t.x)), o = xl.valueOf(r.x).selfSubtract(n.x).selfMultiply(xl.valueOf(e.y).selfSubtract(t.y)), s = i.subtract(o), a = xl.valueOf(r.x).selfSubtract(n.x).selfMultiply(xl.valueOf(t.y).selfSubtract(n.y)), u = xl.valueOf(r.y).selfSubtract(n.y).selfMultiply(xl.valueOf(t.x).selfSubtract(n.x)), l = a.subtract(u).selfDivide(s).doubleValue(), c = xl.valueOf(t.x).selfAdd(xl.valueOf(e.x).selfSubtract(t.x).selfMultiply(l)).doubleValue(), h = xl.valueOf(e.x).selfSubtract(t.x).selfMultiply(xl.valueOf(t.y).selfSubtract(n.y)), p = xl.valueOf(e.y).selfSubtract(t.y).selfMultiply(xl.valueOf(t.x).selfSubtract(n.x)), f = h.subtract(p).selfDivide(s).doubleValue(), g = xl.valueOf(n.y).selfAdd(xl.valueOf(r.y).selfSubtract(n.y).selfMultiply(f)).doubleValue(); return new ul(c, g) }, bl.orientationIndexFilter = function (t, e, n) { var r = null, i = (t.x - n.x) * (e.y - n.y), o = (t.y - n.y) * (e.x - n.x), s = i - o; if (i > 0) { if (o <= 0) return bl.signum(s); r = i + o } else { if (!(i < 0)) return bl.signum(s); if (o >= 0) return bl.signum(s); r = -i - o } var a = bl.DP_SAFE_EPSILON * r; return s >= a || -s >= a ? bl.signum(s) : 2 }, bl.signum = function (t) { return t > 0 ? 1 : t < 0 ? -1 : 0 }, wl.DP_SAFE_EPSILON.get = function () { return 1e-15 }, Object.defineProperties(bl, wl); var Il = function () { }, Nl = {X: {configurable: !0}, Y: {configurable: !0}, Z: {configurable: !0}, M: {configurable: !0}}; Nl.X.get = function () { return 0 }, Nl.Y.get = function () { return 1 }, Nl.Z.get = function () { return 2 }, Nl.M.get = function () { return 3 }, Il.prototype.setOrdinate = function (t, e, n) { }, Il.prototype.size = function () { }, Il.prototype.getOrdinate = function (t, e) { }, Il.prototype.getCoordinate = function () { }, Il.prototype.getCoordinateCopy = function (t) { }, Il.prototype.getDimension = function () { }, Il.prototype.getX = function (t) { }, Il.prototype.clone = function () { }, Il.prototype.expandEnvelope = function (t) { }, Il.prototype.copy = function () { }, Il.prototype.getY = function (t) { }, Il.prototype.toCoordinateArray = function () { }, Il.prototype.interfaces_ = function () { return [ol] }, Il.prototype.getClass = function () { return Il }, Object.defineProperties(Il, Nl); var Sl = function () { }, Cl = function (t) { function e() { t.call(this, "Projective point not representable on the Cartesian plane.") } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(Sl), Pl = function () { }; Pl.arraycopy = function (t, e, n, r, i) { for (var o = 0, s = e; s < e + i; s++) n[r + o] = t[s], o++ }, Pl.getProperty = function (t) { return {"line.separator": "\n"}[t] }; var Ml = function t() { if (this.x = null, this.y = null, this.w = null, 0 === arguments.length) this.x = 0, this.y = 0, this.w = 1; else if (1 === arguments.length) { var e = arguments[0]; this.x = e.x, this.y = e.y, this.w = 1 } else if (2 === arguments.length) { if ("number" == typeof arguments[0] && "number" == typeof arguments[1]) { var n = arguments[0], r = arguments[1]; this.x = n, this.y = r, this.w = 1 } else if (arguments[0] instanceof t && arguments[1] instanceof t) { var i = arguments[0], o = arguments[1]; this.x = i.y * o.w - o.y * i.w, this.y = o.x * i.w - i.x * o.w, this.w = i.x * o.y - o.x * i.y } else if (arguments[0] instanceof ul && arguments[1] instanceof ul) { var s = arguments[0], a = arguments[1]; this.x = s.y - a.y, this.y = a.x - s.x, this.w = s.x * a.y - a.x * s.y } } else if (3 === arguments.length) { var u = arguments[0], l = arguments[1], c = arguments[2]; this.x = u, this.y = l, this.w = c } else if (4 === arguments.length) { var h = arguments[0], p = arguments[1], f = arguments[2], g = arguments[3], d = h.y - p.y, y = p.x - h.x, v = h.x * p.y - p.x * h.y, _ = f.y - g.y, m = g.x - f.x, x = f.x * g.y - g.x * f.y; this.x = y * x - m * v, this.y = _ * v - d * x, this.w = d * m - _ * y } }; Ml.prototype.getY = function () { var t = this.y / this.w; if (nl.isNaN(t) || nl.isInfinite(t)) throw new Cl; return t }, Ml.prototype.getX = function () { var t = this.x / this.w; if (nl.isNaN(t) || nl.isInfinite(t)) throw new Cl; return t }, Ml.prototype.getCoordinate = function () { var t = new ul; return t.x = this.getX(), t.y = this.getY(), t }, Ml.prototype.interfaces_ = function () { return [] }, Ml.prototype.getClass = function () { return Ml }, Ml.intersection = function (t, e, n, r) { var i = t.y - e.y, o = e.x - t.x, s = t.x * e.y - e.x * t.y, a = n.y - r.y, u = r.x - n.x, l = n.x * r.y - r.x * n.y, c = i * u - a * o, h = (o * l - u * s) / c, p = (a * s - i * l) / c; if (nl.isNaN(h) || nl.isInfinite(h) || nl.isNaN(p) || nl.isInfinite(p)) throw new Cl; return new ul(h, p) }; var Ll = function t() { if (this._minx = null, this._maxx = null, this._miny = null, this._maxy = null, 0 === arguments.length) this.init(); else if (1 === arguments.length) { if (arguments[0] instanceof ul) { var e = arguments[0]; this.init(e.x, e.x, e.y, e.y) } else if (arguments[0] instanceof t) { var n = arguments[0]; this.init(n) } } else if (2 === arguments.length) { var r = arguments[0], i = arguments[1]; this.init(r.x, i.x, r.y, i.y) } else if (4 === arguments.length) { var o = arguments[0], s = arguments[1], a = arguments[2], u = arguments[3]; this.init(o, s, a, u) } }, Ol = {serialVersionUID: {configurable: !0}}; Ll.prototype.getArea = function () { return this.getWidth() * this.getHeight() }, Ll.prototype.equals = function (t) { if (!(t instanceof Ll)) return !1; var e = t; return this.isNull() ? e.isNull() : this._maxx === e.getMaxX() && this._maxy === e.getMaxY() && this._minx === e.getMinX() && this._miny === e.getMinY() }, Ll.prototype.intersection = function (t) { if (this.isNull() || t.isNull() || !this.intersects(t)) return new Ll; var e = this._minx > t._minx ? this._minx : t._minx, n = this._miny > t._miny ? this._miny : t._miny, r = this._maxx < t._maxx ? this._maxx : t._maxx, i = this._maxy < t._maxy ? this._maxy : t._maxy; return new Ll(e, r, n, i) }, Ll.prototype.isNull = function () { return this._maxx < this._minx }, Ll.prototype.getMaxX = function () { return this._maxx }, Ll.prototype.covers = function () { if (1 === arguments.length) { if (arguments[0] instanceof ul) { var t = arguments[0]; return this.covers(t.x, t.y) } if (arguments[0] instanceof Ll) { var e = arguments[0]; return !this.isNull() && !e.isNull() && (e.getMinX() >= this._minx && e.getMaxX() <= this._maxx && e.getMinY() >= this._miny && e.getMaxY() <= this._maxy) } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; return !this.isNull() && (n >= this._minx && n <= this._maxx && r >= this._miny && r <= this._maxy) } }, Ll.prototype.intersects = function () { if (1 === arguments.length) { if (arguments[0] instanceof Ll) { var t = arguments[0]; return !this.isNull() && !t.isNull() && !(t._minx > this._maxx || t._maxx < this._minx || t._miny > this._maxy || t._maxy < this._miny) } if (arguments[0] instanceof ul) { var e = arguments[0]; return this.intersects(e.x, e.y) } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; return !this.isNull() && !(n > this._maxx || n < this._minx || r > this._maxy || r < this._miny) } }, Ll.prototype.getMinY = function () { return this._miny }, Ll.prototype.getMinX = function () { return this._minx }, Ll.prototype.expandToInclude = function () { if (1 === arguments.length) { if (arguments[0] instanceof ul) { var t = arguments[0]; this.expandToInclude(t.x, t.y) } else if (arguments[0] instanceof Ll) { var e = arguments[0]; if (e.isNull()) return null; this.isNull() ? (this._minx = e.getMinX(), this._maxx = e.getMaxX(), this._miny = e.getMinY(), this._maxy = e.getMaxY()) : (e._minx < this._minx && (this._minx = e._minx), e._maxx > this._maxx && (this._maxx = e._maxx), e._miny < this._miny && (this._miny = e._miny), e._maxy > this._maxy && (this._maxy = e._maxy)) } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; this.isNull() ? (this._minx = n, this._maxx = n, this._miny = r, this._maxy = r) : (n < this._minx && (this._minx = n), n > this._maxx && (this._maxx = n), r < this._miny && (this._miny = r), r > this._maxy && (this._maxy = r)) } }, Ll.prototype.minExtent = function () { if (this.isNull()) return 0; var t = this.getWidth(), e = this.getHeight(); return t < e ? t : e }, Ll.prototype.getWidth = function () { return this.isNull() ? 0 : this._maxx - this._minx }, Ll.prototype.compareTo = function (t) { var e = t; return this.isNull() ? e.isNull() ? 0 : -1 : e.isNull() ? 1 : this._minx < e._minx ? -1 : this._minx > e._minx ? 1 : this._miny < e._miny ? -1 : this._miny > e._miny ? 1 : this._maxx < e._maxx ? -1 : this._maxx > e._maxx ? 1 : this._maxy < e._maxy ? -1 : this._maxy > e._maxy ? 1 : 0 }, Ll.prototype.translate = function (t, e) { if (this.isNull()) return null; this.init(this.getMinX() + t, this.getMaxX() + t, this.getMinY() + e, this.getMaxY() + e) }, Ll.prototype.toString = function () { return "Env[" + this._minx + " : " + this._maxx + ", " + this._miny + " : " + this._maxy + "]" }, Ll.prototype.setToNull = function () { this._minx = 0, this._maxx = -1, this._miny = 0, this._maxy = -1 }, Ll.prototype.getHeight = function () { return this.isNull() ? 0 : this._maxy - this._miny }, Ll.prototype.maxExtent = function () { if (this.isNull()) return 0; var t = this.getWidth(), e = this.getHeight(); return t > e ? t : e }, Ll.prototype.expandBy = function () { if (1 === arguments.length) { var t = arguments[0]; this.expandBy(t, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (this.isNull()) return null; this._minx -= e, this._maxx += e, this._miny -= n, this._maxy += n, (this._minx > this._maxx || this._miny > this._maxy) && this.setToNull() } }, Ll.prototype.contains = function () { if (1 === arguments.length) { if (arguments[0] instanceof Ll) { var t = arguments[0]; return this.covers(t) } if (arguments[0] instanceof ul) { var e = arguments[0]; return this.covers(e) } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; return this.covers(n, r) } }, Ll.prototype.centre = function () { return this.isNull() ? null : new ul((this.getMinX() + this.getMaxX()) / 2, (this.getMinY() + this.getMaxY()) / 2) }, Ll.prototype.init = function () { if (0 === arguments.length) this.setToNull(); else if (1 === arguments.length) { if (arguments[0] instanceof ul) { var t = arguments[0]; this.init(t.x, t.x, t.y, t.y) } else if (arguments[0] instanceof Ll) { var e = arguments[0]; this._minx = e._minx, this._maxx = e._maxx, this._miny = e._miny, this._maxy = e._maxy } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; this.init(n.x, r.x, n.y, r.y) } else if (4 === arguments.length) { var i = arguments[0], o = arguments[1], s = arguments[2], a = arguments[3]; i < o ? (this._minx = i, this._maxx = o) : (this._minx = o, this._maxx = i), s < a ? (this._miny = s, this._maxy = a) : (this._miny = a, this._maxy = s) } }, Ll.prototype.getMaxY = function () { return this._maxy }, Ll.prototype.distance = function (t) { if (this.intersects(t)) return 0; var e = 0; this._maxx < t._minx ? e = t._minx - this._maxx : this._minx > t._maxx && (e = this._minx - t._maxx); var n = 0; return this._maxy < t._miny ? n = t._miny - this._maxy : this._miny > t._maxy && (n = this._miny - t._maxy), 0 === e ? n : 0 === n ? e : Math.sqrt(e * e + n * n) }, Ll.prototype.hashCode = function () { var t = 17; return t = 37 * (t = 37 * (t = 37 * (t = 37 * t + ul.hashCode(this._minx)) + ul.hashCode(this._maxx)) + ul.hashCode(this._miny)) + ul.hashCode(this._maxy) }, Ll.prototype.interfaces_ = function () { return [il, al] }, Ll.prototype.getClass = function () { return Ll }, Ll.intersects = function () { if (3 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2]; return n.x >= (t.x < e.x ? t.x : e.x) && n.x <= (t.x > e.x ? t.x : e.x) && n.y >= (t.y < e.y ? t.y : e.y) && n.y <= (t.y > e.y ? t.y : e.y) } if (4 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2], s = arguments[3], a = Math.min(o.x, s.x), u = Math.max(o.x, s.x), l = Math.min(r.x, i.x), c = Math.max(r.x, i.x); return !(l > u) && (!(c < a) && (a = Math.min(o.y, s.y), u = Math.max(o.y, s.y), l = Math.min(r.y, i.y), c = Math.max(r.y, i.y), !(l > u) && !(c < a))) } }, Ol.serialVersionUID.get = function () { return 0x51845cd552189800 }, Object.defineProperties(Ll, Ol); var Rl = { typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/, emptyTypeStr: /^\s*(\w+)\s*EMPTY\s*$/, spaces: /\s+/, parenComma: /\)\s*,\s*\(/, doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, trimParens: /^\s*\(?(.*?)\)?\s*$/ }, Tl = function (t) { this.geometryFactory = t || new _h }; Tl.prototype.read = function (t) { var e, n, r; t = t.replace(/[\n\r]/g, " "); var i = Rl.typeStr.exec(t); if (-1 !== t.search("EMPTY") && ((i = Rl.emptyTypeStr.exec(t))[2] = void 0), i && (n = i[1].toLowerCase(), r = i[2], Dl[n] && (e = Dl[n].apply(this, [r]))), void 0 === e) throw new Error("Could not parse WKT " + t); return e }, Tl.prototype.write = function (t) { return this.extractGeometry(t) }, Tl.prototype.extractGeometry = function (t) { var e = t.getGeometryType().toLowerCase(); if (!Al[e]) return null; var n = e.toUpperCase(); return t.isEmpty() ? n + " EMPTY" : n + "(" + Al[e].apply(this, [t]) + ")" }; var Al = { coordinate: function (t) { return t.x + " " + t.y }, point: function (t) { return Al.coordinate.call(this, t._coordinates._coordinates[0]) }, multipoint: function (t) { for (var e = [], n = 0, r = t._geometries.length; n < r; ++n) e.push("(" + Al.point.apply(this, [t._geometries[n]]) + ")"); return e.join(",") }, linestring: function (t) { for (var e = [], n = 0, r = t._points._coordinates.length; n < r; ++n) e.push(Al.coordinate.apply(this, [t._points._coordinates[n]])); return e.join(",") }, linearring: function (t) { for (var e = [], n = 0, r = t._points._coordinates.length; n < r; ++n) e.push(Al.coordinate.apply(this, [t._points._coordinates[n]])); return e.join(",") }, multilinestring: function (t) { for (var e = [], n = 0, r = t._geometries.length; n < r; ++n) e.push("(" + Al.linestring.apply(this, [t._geometries[n]]) + ")"); return e.join(",") }, polygon: function (t) { var e = []; e.push("(" + Al.linestring.apply(this, [t._shell]) + ")"); for (var n = 0, r = t._holes.length; n < r; ++n) e.push("(" + Al.linestring.apply(this, [t._holes[n]]) + ")"); return e.join(",") }, multipolygon: function (t) { for (var e = [], n = 0, r = t._geometries.length; n < r; ++n) e.push("(" + Al.polygon.apply(this, [t._geometries[n]]) + ")"); return e.join(",") }, geometrycollection: function (t) { for (var e = [], n = 0, r = t._geometries.length; n < r; ++n) e.push(this.extractGeometry(t._geometries[n])); return e.join(",") } }, Dl = { point: function (t) { if (void 0 === t) return this.geometryFactory.createPoint(); var e = t.trim().split(Rl.spaces); return this.geometryFactory.createPoint(new ul(Number.parseFloat(e[0]), Number.parseFloat(e[1]))) }, multipoint: function (t) { var e; if (void 0 === t) return this.geometryFactory.createMultiPoint(); for (var n = t.trim().split(","), r = [], i = 0, o = n.length; i < o; ++i) e = n[i].replace(Rl.trimParens, "$1"), r.push(Dl.point.apply(this, [e])); return this.geometryFactory.createMultiPoint(r) }, linestring: function (t) { if (void 0 === t) return this.geometryFactory.createLineString(); for (var e, n = t.trim().split(","), r = [], i = 0, o = n.length; i < o; ++i) e = n[i].trim().split(Rl.spaces), r.push(new ul(Number.parseFloat(e[0]), Number.parseFloat(e[1]))); return this.geometryFactory.createLineString(r) }, linearring: function (t) { if (void 0 === t) return this.geometryFactory.createLinearRing(); for (var e, n = t.trim().split(","), r = [], i = 0, o = n.length; i < o; ++i) e = n[i].trim().split(Rl.spaces), r.push(new ul(Number.parseFloat(e[0]), Number.parseFloat(e[1]))); return this.geometryFactory.createLinearRing(r) }, multilinestring: function (t) { var e; if (void 0 === t) return this.geometryFactory.createMultiLineString(); for (var n = t.trim().split(Rl.parenComma), r = [], i = 0, o = n.length; i < o; ++i) e = n[i].replace(Rl.trimParens, "$1"), r.push(Dl.linestring.apply(this, [e])); return this.geometryFactory.createMultiLineString(r) }, polygon: function (t) { var e, n, r; if (void 0 === t) return this.geometryFactory.createPolygon(); for (var i, o = t.trim().split(Rl.parenComma), s = [], a = 0, u = o.length; a < u; ++a) e = o[a].replace(Rl.trimParens, "$1"), n = Dl.linestring.apply(this, [e]), r = this.geometryFactory.createLinearRing(n._points), 0 === a ? i = r : s.push(r); return this.geometryFactory.createPolygon(i, s) }, multipolygon: function (t) { var e; if (void 0 === t) return this.geometryFactory.createMultiPolygon(); for (var n = t.trim().split(Rl.doubleParenComma), r = [], i = 0, o = n.length; i < o; ++i) e = n[i].replace(Rl.trimParens, "$1"), r.push(Dl.polygon.apply(this, [e])); return this.geometryFactory.createMultiPolygon(r) }, geometrycollection: function (t) { if (void 0 === t) return this.geometryFactory.createGeometryCollection(); for (var e = (t = t.replace(/,\s*([A-Za-z])/g, "|$1")).trim().split("|"), n = [], r = 0, i = e.length; r < i; ++r) n.push(this.read(e[r])); return this.geometryFactory.createGeometryCollection(n) } }, Fl = function (t) { this.parser = new Tl(t) }; Fl.prototype.write = function (t) { return this.parser.write(t) }, Fl.toLineString = function (t, e) { if (2 !== arguments.length) throw new Error("Not implemented"); return "LINESTRING ( " + t.x + " " + t.y + ", " + e.x + " " + e.y + " )" }; var kl = function (t) { function e(e) { t.call(this, e), this.name = "RuntimeException", this.message = e, this.stack = (new t).stack } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e }(Error), Gl = function (t) { function e() { if (t.call(this), 0 === arguments.length) t.call(this); else if (1 === arguments.length) { var e = arguments[0]; t.call(this, e) } } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(kl), ql = function () { }; ql.prototype.interfaces_ = function () { return [] }, ql.prototype.getClass = function () { return ql }, ql.shouldNeverReachHere = function () { if (0 === arguments.length) ql.shouldNeverReachHere(null); else if (1 === arguments.length) { var t = arguments[0]; throw new Gl("Should never reach here" + (null !== t ? ": " + t : "")) } }, ql.isTrue = function () { var t; if (1 === arguments.length) ql.isTrue(arguments[0], null); else if (2 === arguments.length && (t = arguments[1], !arguments[0])) throw null === t ? new Gl : new Gl(t) }, ql.equals = function () { var t, e, n; if (2 === arguments.length) ql.equals(t = arguments[0], e = arguments[1], null); else if (3 === arguments.length && (t = arguments[0], n = arguments[2], !(e = arguments[1]).equals(t))) throw new Gl("Expected " + t + " but encountered " + e + (null !== n ? ": " + n : "")) }; var Bl = function () { this._result = null, this._inputLines = Array(2).fill().map((function () { return Array(2) })), this._intPt = new Array(2).fill(null), this._intLineIndex = null, this._isProper = null, this._pa = null, this._pb = null, this._precisionModel = null, this._intPt[0] = new ul, this._intPt[1] = new ul, this._pa = this._intPt[0], this._pb = this._intPt[1], this._result = 0 }, zl = { DONT_INTERSECT: {configurable: !0}, DO_INTERSECT: {configurable: !0}, COLLINEAR: {configurable: !0}, NO_INTERSECTION: {configurable: !0}, POINT_INTERSECTION: {configurable: !0}, COLLINEAR_INTERSECTION: {configurable: !0} }; Bl.prototype.getIndexAlongSegment = function (t, e) { return this.computeIntLineIndex(), this._intLineIndex[t][e] }, Bl.prototype.getTopologySummary = function () { var t = new vl; return this.isEndPoint() && t.append(" endpoint"), this._isProper && t.append(" proper"), this.isCollinear() && t.append(" collinear"), t.toString() }, Bl.prototype.computeIntersection = function (t, e, n, r) { this._inputLines[0][0] = t, this._inputLines[0][1] = e, this._inputLines[1][0] = n, this._inputLines[1][1] = r, this._result = this.computeIntersect(t, e, n, r) }, Bl.prototype.getIntersectionNum = function () { return this._result }, Bl.prototype.computeIntLineIndex = function () { if (0 === arguments.length) null === this._intLineIndex && (this._intLineIndex = Array(2).fill().map((function () { return Array(2) })), this.computeIntLineIndex(0), this.computeIntLineIndex(1)); else if (1 === arguments.length) { var t = arguments[0], e = this.getEdgeDistance(t, 0), n = this.getEdgeDistance(t, 1); e > n ? (this._intLineIndex[t][0] = 0, this._intLineIndex[t][1] = 1) : (this._intLineIndex[t][0] = 1, this._intLineIndex[t][1] = 0) } }, Bl.prototype.isProper = function () { return this.hasIntersection() && this._isProper }, Bl.prototype.setPrecisionModel = function (t) { this._precisionModel = t }, Bl.prototype.isInteriorIntersection = function () { var t = this; if (0 === arguments.length) return !!this.isInteriorIntersection(0) || !!this.isInteriorIntersection(1); if (1 === arguments.length) { for (var e = arguments[0], n = 0; n < this._result; n++) if (!t._intPt[n].equals2D(t._inputLines[e][0]) && !t._intPt[n].equals2D(t._inputLines[e][1])) return !0; return !1 } }, Bl.prototype.getIntersection = function (t) { return this._intPt[t] }, Bl.prototype.isEndPoint = function () { return this.hasIntersection() && !this._isProper }, Bl.prototype.hasIntersection = function () { return this._result !== Bl.NO_INTERSECTION }, Bl.prototype.getEdgeDistance = function (t, e) { return Bl.computeEdgeDistance(this._intPt[e], this._inputLines[t][0], this._inputLines[t][1]) }, Bl.prototype.isCollinear = function () { return this._result === Bl.COLLINEAR_INTERSECTION }, Bl.prototype.toString = function () { return Fl.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + " - " + Fl.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary() }, Bl.prototype.getEndpoint = function (t, e) { return this._inputLines[t][e] }, Bl.prototype.isIntersection = function (t) { for (var e = 0; e < this._result; e++) if (this._intPt[e].equals2D(t)) return !0; return !1 }, Bl.prototype.getIntersectionAlongSegment = function (t, e) { return this.computeIntLineIndex(), this._intPt[this._intLineIndex[t][e]] }, Bl.prototype.interfaces_ = function () { return [] }, Bl.prototype.getClass = function () { return Bl }, Bl.computeEdgeDistance = function (t, e, n) { var r = Math.abs(n.x - e.x), i = Math.abs(n.y - e.y), o = -1; if (t.equals(e)) o = 0; else if (t.equals(n)) o = r > i ? r : i; else { var s = Math.abs(t.x - e.x), a = Math.abs(t.y - e.y); 0 !== (o = r > i ? s : a) || t.equals(e) || (o = Math.max(s, a)) } return ql.isTrue(!(0 === o && !t.equals(e)), "Bad distance calculation"), o }, Bl.nonRobustComputeEdgeDistance = function (t, e, n) { var r = t.x - e.x, i = t.y - e.y, o = Math.sqrt(r * r + i * i); return ql.isTrue(!(0 === o && !t.equals(e)), "Invalid distance calculation"), o }, zl.DONT_INTERSECT.get = function () { return 0 }, zl.DO_INTERSECT.get = function () { return 1 }, zl.COLLINEAR.get = function () { return 2 }, zl.NO_INTERSECTION.get = function () { return 0 }, zl.POINT_INTERSECTION.get = function () { return 1 }, zl.COLLINEAR_INTERSECTION.get = function () { return 2 }, Object.defineProperties(Bl, zl); var jl = function (t) { function e() { t.apply(this, arguments) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.isInSegmentEnvelopes = function (t) { var e = new Ll(this._inputLines[0][0], this._inputLines[0][1]), n = new Ll(this._inputLines[1][0], this._inputLines[1][1]); return e.contains(t) && n.contains(t) }, e.prototype.computeIntersection = function () { if (3 !== arguments.length) return t.prototype.computeIntersection.apply(this, arguments); var e = arguments[0], n = arguments[1], r = arguments[2]; if (this._isProper = !1, Ll.intersects(n, r, e) && 0 === Xl.orientationIndex(n, r, e) && 0 === Xl.orientationIndex(r, n, e)) return this._isProper = !0, (e.equals(n) || e.equals(r)) && (this._isProper = !1), this._result = t.POINT_INTERSECTION, null; this._result = t.NO_INTERSECTION }, e.prototype.normalizeToMinimum = function (t, e, n, r, i) { i.x = this.smallestInAbsValue(t.x, e.x, n.x, r.x), i.y = this.smallestInAbsValue(t.y, e.y, n.y, r.y), t.x -= i.x, t.y -= i.y, e.x -= i.x, e.y -= i.y, n.x -= i.x, n.y -= i.y, r.x -= i.x, r.y -= i.y }, e.prototype.safeHCoordinateIntersection = function (t, n, r, i) { var o = null; try { o = Ml.intersection(t, n, r, i) } catch (s) { if (!(s instanceof Cl)) throw s; o = e.nearestEndpoint(t, n, r, i) } return o }, e.prototype.intersection = function (t, n, r, i) { var o = this.intersectionWithNormalization(t, n, r, i); return this.isInSegmentEnvelopes(o) || (o = new ul(e.nearestEndpoint(t, n, r, i))), null !== this._precisionModel && this._precisionModel.makePrecise(o), o }, e.prototype.smallestInAbsValue = function (t, e, n, r) { var i = t, o = Math.abs(i); return Math.abs(e) < o && (i = e, o = Math.abs(e)), Math.abs(n) < o && (i = n, o = Math.abs(n)), Math.abs(r) < o && (i = r), i }, e.prototype.checkDD = function (t, e, n, r, i) { var o = bl.intersection(t, e, n, r), s = this.isInSegmentEnvelopes(o); Pl.out.println("DD in env = " + s + " --------------------- " + o), i.distance(o) > 1e-4 && Pl.out.println("Distance = " + i.distance(o)) }, e.prototype.intersectionWithNormalization = function (t, e, n, r) { var i = new ul(t), o = new ul(e), s = new ul(n), a = new ul(r), u = new ul; this.normalizeToEnvCentre(i, o, s, a, u); var l = this.safeHCoordinateIntersection(i, o, s, a); return l.x += u.x, l.y += u.y, l }, e.prototype.computeCollinearIntersection = function (e, n, r, i) { var o = Ll.intersects(e, n, r), s = Ll.intersects(e, n, i), a = Ll.intersects(r, i, e), u = Ll.intersects(r, i, n); return o && s ? (this._intPt[0] = r, this._intPt[1] = i, t.COLLINEAR_INTERSECTION) : a && u ? (this._intPt[0] = e, this._intPt[1] = n, t.COLLINEAR_INTERSECTION) : o && a ? (this._intPt[0] = r, this._intPt[1] = e, !r.equals(e) || s || u ? t.COLLINEAR_INTERSECTION : t.POINT_INTERSECTION) : o && u ? (this._intPt[0] = r, this._intPt[1] = n, !r.equals(n) || s || a ? t.COLLINEAR_INTERSECTION : t.POINT_INTERSECTION) : s && a ? (this._intPt[0] = i, this._intPt[1] = e, !i.equals(e) || o || u ? t.COLLINEAR_INTERSECTION : t.POINT_INTERSECTION) : s && u ? (this._intPt[0] = i, this._intPt[1] = n, !i.equals(n) || o || a ? t.COLLINEAR_INTERSECTION : t.POINT_INTERSECTION) : t.NO_INTERSECTION }, e.prototype.normalizeToEnvCentre = function (t, e, n, r, i) { var o = t.x < e.x ? t.x : e.x, s = t.y < e.y ? t.y : e.y, a = t.x > e.x ? t.x : e.x, u = t.y > e.y ? t.y : e.y, l = n.x < r.x ? n.x : r.x, c = n.y < r.y ? n.y : r.y, h = n.x > r.x ? n.x : r.x, p = n.y > r.y ? n.y : r.y, f = ((o > l ? o : l) + (a < h ? a : h)) / 2, g = ((s > c ? s : c) + (u < p ? u : p)) / 2; i.x = f, i.y = g, t.x -= i.x, t.y -= i.y, e.x -= i.x, e.y -= i.y, n.x -= i.x, n.y -= i.y, r.x -= i.x, r.y -= i.y }, e.prototype.computeIntersect = function (e, n, r, i) { if (this._isProper = !1, !Ll.intersects(e, n, r, i)) return t.NO_INTERSECTION; var o = Xl.orientationIndex(e, n, r), s = Xl.orientationIndex(e, n, i); if (o > 0 && s > 0 || o < 0 && s < 0) return t.NO_INTERSECTION; var a = Xl.orientationIndex(r, i, e), u = Xl.orientationIndex(r, i, n); return a > 0 && u > 0 || a < 0 && u < 0 ? t.NO_INTERSECTION : 0 === o && 0 === s && 0 === a && 0 === u ? this.computeCollinearIntersection(e, n, r, i) : (0 === o || 0 === s || 0 === a || 0 === u ? (this._isProper = !1, e.equals2D(r) || e.equals2D(i) ? this._intPt[0] = e : n.equals2D(r) || n.equals2D(i) ? this._intPt[0] = n : 0 === o ? this._intPt[0] = new ul(r) : 0 === s ? this._intPt[0] = new ul(i) : 0 === a ? this._intPt[0] = new ul(e) : 0 === u && (this._intPt[0] = new ul(n))) : (this._isProper = !0, this._intPt[0] = this.intersection(e, n, r, i)), t.POINT_INTERSECTION) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e.nearestEndpoint = function (t, e, n, r) { var i = t, o = Xl.distancePointLine(t, n, r), s = Xl.distancePointLine(e, n, r); return s < o && (o = s, i = e), (s = Xl.distancePointLine(n, t, e)) < o && (o = s, i = n), (s = Xl.distancePointLine(r, t, e)) < o && (o = s, i = r), i }, e }(Bl), Ul = function () { }; Ul.prototype.interfaces_ = function () { return [] }, Ul.prototype.getClass = function () { return Ul }, Ul.orientationIndex = function (t, e, n) { var r = e.x - t.x, i = e.y - t.y, o = n.x - e.x, s = n.y - e.y; return Ul.signOfDet2x2(r, i, o, s) }, Ul.signOfDet2x2 = function (t, e, n, r) { var i = null, o = null, s = null; if (i = 1, 0 === t || 0 === r) return 0 === e || 0 === n ? 0 : e > 0 ? n > 0 ? -i : i : n > 0 ? i : -i; if (0 === e || 0 === n) return r > 0 ? t > 0 ? i : -i : t > 0 ? -i : i; if (e > 0 ? r > 0 ? e <= r || (i = -i, o = t, t = n, n = o, o = e, e = r, r = o) : e <= -r ? (i = -i, n = -n, r = -r) : (o = t, t = -n, n = o, o = e, e = -r, r = o) : r > 0 ? -e <= r ? (i = -i, t = -t, e = -e) : (o = -t, t = n, n = o, o = -e, e = r, r = o) : e >= r ? (t = -t, e = -e, n = -n, r = -r) : (i = -i, o = -t, t = -n, n = o, o = -e, e = -r, r = o), t > 0) { if (!(n > 0)) return i; if (!(t <= n)) return i } else { if (n > 0) return -i; if (!(t >= n)) return -i; i = -i, t = -t, n = -n } for (; ;) { if ((r -= (s = Math.floor(n / t)) * e) < 0) return -i; if (r > e) return i; if (t > (n -= s * t) + n) { if (e < r + r) return i } else { if (e > r + r) return -i; n = t - n, r = e - r, i = -i } if (0 === r) return 0 === n ? 0 : -i; if (0 === n) return i; if ((e -= (s = Math.floor(t / n)) * r) < 0) return i; if (e > r) return -i; if (n > (t -= s * n) + t) { if (r < e + e) return -i } else { if (r > e + e) return i; t = n - t, e = r - e, i = -i } if (0 === e) return 0 === t ? 0 : i; if (0 === t) return -i } }; var Vl = function () { this._p = null, this._crossingCount = 0, this._isPointOnSegment = !1; var t = arguments[0]; this._p = t }; Vl.prototype.countSegment = function (t, e) { if (t.x < this._p.x && e.x < this._p.x) return null; if (this._p.x === e.x && this._p.y === e.y) return this._isPointOnSegment = !0, null; if (t.y === this._p.y && e.y === this._p.y) { var n = t.x, r = e.x; return n > r && (n = e.x, r = t.x), this._p.x >= n && this._p.x <= r && (this._isPointOnSegment = !0), null } if (t.y > this._p.y && e.y <= this._p.y || e.y > this._p.y && t.y <= this._p.y) { var i = t.x - this._p.x, o = t.y - this._p.y, s = e.x - this._p.x, a = e.y - this._p.y, u = Ul.signOfDet2x2(i, o, s, a); if (0 === u) return this._isPointOnSegment = !0, null; a < o && (u = -u), u > 0 && this._crossingCount++ } }, Vl.prototype.isPointInPolygon = function () { return this.getLocation() !== pl.EXTERIOR }, Vl.prototype.getLocation = function () { return this._isPointOnSegment ? pl.BOUNDARY : this._crossingCount % 2 == 1 ? pl.INTERIOR : pl.EXTERIOR }, Vl.prototype.isOnSegment = function () { return this._isPointOnSegment }, Vl.prototype.interfaces_ = function () { return [] }, Vl.prototype.getClass = function () { return Vl }, Vl.locatePointInRing = function () { if (arguments[0] instanceof ul && gl(arguments[1], Il)) { for (var t = arguments[0], e = arguments[1], n = new Vl(t), r = new ul, i = new ul, o = 1; o < e.size(); o++) if (e.getCoordinate(o, r), e.getCoordinate(o - 1, i), n.countSegment(r, i), n.isOnSegment()) return n.getLocation(); return n.getLocation() } if (arguments[0] instanceof ul && arguments[1] instanceof Array) { for (var s = arguments[0], a = arguments[1], u = new Vl(s), l = 1; l < a.length; l++) { var c = a[l], h = a[l - 1]; if (u.countSegment(c, h), u.isOnSegment()) return u.getLocation() } return u.getLocation() } }; var Xl = function () { }, Yl = { CLOCKWISE: {configurable: !0}, RIGHT: {configurable: !0}, COUNTERCLOCKWISE: {configurable: !0}, LEFT: {configurable: !0}, COLLINEAR: {configurable: !0}, STRAIGHT: {configurable: !0} }; Xl.prototype.interfaces_ = function () { return [] }, Xl.prototype.getClass = function () { return Xl }, Xl.orientationIndex = function (t, e, n) { return bl.orientationIndex(t, e, n) }, Xl.signedArea = function () { if (arguments[0] instanceof Array) { var t = arguments[0]; if (t.length < 3) return 0; for (var e = 0, n = t[0].x, r = 1; r < t.length - 1; r++) { var i = t[r].x - n, o = t[r + 1].y, s = t[r - 1].y; e += i * (s - o) } return e / 2 } if (gl(arguments[0], Il)) { var a = arguments[0], u = a.size(); if (u < 3) return 0; var l = new ul, c = new ul, h = new ul; a.getCoordinate(0, c), a.getCoordinate(1, h); var p = c.x; h.x -= p; for (var f = 0, g = 1; g < u - 1; g++) l.y = c.y, c.x = h.x, c.y = h.y, a.getCoordinate(g + 1, h), h.x -= p, f += c.x * (l.y - h.y); return f / 2 } }, Xl.distanceLineLine = function (t, e, n, r) { if (t.equals(e)) return Xl.distancePointLine(t, n, r); if (n.equals(r)) return Xl.distancePointLine(r, t, e); var i = !1; if (Ll.intersects(t, e, n, r)) { var o = (e.x - t.x) * (r.y - n.y) - (e.y - t.y) * (r.x - n.x); if (0 === o) i = !0; else { var s = (t.y - n.y) * (r.x - n.x) - (t.x - n.x) * (r.y - n.y), a = ((t.y - n.y) * (e.x - t.x) - (t.x - n.x) * (e.y - t.y)) / o, u = s / o; (u < 0 || u > 1 || a < 0 || a > 1) && (i = !0) } } else i = !0; return i ? dl.min(Xl.distancePointLine(t, n, r), Xl.distancePointLine(e, n, r), Xl.distancePointLine(n, t, e), Xl.distancePointLine(r, t, e)) : 0 }, Xl.isPointInRing = function (t, e) { return Xl.locatePointInRing(t, e) !== pl.EXTERIOR }, Xl.computeLength = function (t) { var e = t.size(); if (e <= 1) return 0; var n = 0, r = new ul; t.getCoordinate(0, r); for (var i = r.x, o = r.y, s = 1; s < e; s++) { t.getCoordinate(s, r); var a = r.x, u = r.y, l = a - i, c = u - o; n += Math.sqrt(l * l + c * c), i = a, o = u } return n }, Xl.isCCW = function (t) { var e = t.length - 1; if (e < 3) throw new el("Ring has fewer than 4 points, so orientation cannot be determined"); for (var n = t[0], r = 0, i = 1; i <= e; i++) { var o = t[i]; o.y > n.y && (n = o, r = i) } var s = r; do { (s -= 1) < 0 && (s = e) } while (t[s].equals2D(n) && s !== r); var a = r; do { a = (a + 1) % e } while (t[a].equals2D(n) && a !== r); var u = t[s], l = t[a]; if (u.equals2D(n) || l.equals2D(n) || u.equals2D(l)) return !1; var c = Xl.computeOrientation(u, n, l), h = !1; return h = 0 === c ? u.x > l.x : c > 0, h }, Xl.locatePointInRing = function (t, e) { return Vl.locatePointInRing(t, e) }, Xl.distancePointLinePerpendicular = function (t, e, n) { var r = (n.x - e.x) * (n.x - e.x) + (n.y - e.y) * (n.y - e.y), i = ((e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y)) / r; return Math.abs(i) * Math.sqrt(r) }, Xl.computeOrientation = function (t, e, n) { return Xl.orientationIndex(t, e, n) }, Xl.distancePointLine = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; if (0 === e.length) throw new el("Line array must contain at least one vertex"); for (var n = t.distance(e[0]), r = 0; r < e.length - 1; r++) { var i = Xl.distancePointLine(t, e[r], e[r + 1]); i < n && (n = i) } return n } if (3 === arguments.length) { var o = arguments[0], s = arguments[1], a = arguments[2]; if (s.x === a.x && s.y === a.y) return o.distance(s); var u = (a.x - s.x) * (a.x - s.x) + (a.y - s.y) * (a.y - s.y), l = ((o.x - s.x) * (a.x - s.x) + (o.y - s.y) * (a.y - s.y)) / u; if (l <= 0) return o.distance(s); if (l >= 1) return o.distance(a); var c = ((s.y - o.y) * (a.x - s.x) - (s.x - o.x) * (a.y - s.y)) / u; return Math.abs(c) * Math.sqrt(u) } }, Xl.isOnLine = function (t, e) { for (var n = new jl, r = 1; r < e.length; r++) { var i = e[r - 1], o = e[r]; if (n.computeIntersection(t, i, o), n.hasIntersection()) return !0 } return !1 }, Yl.CLOCKWISE.get = function () { return -1 }, Yl.RIGHT.get = function () { return Xl.CLOCKWISE }, Yl.COUNTERCLOCKWISE.get = function () { return 1 }, Yl.LEFT.get = function () { return Xl.COUNTERCLOCKWISE }, Yl.COLLINEAR.get = function () { return 0 }, Yl.STRAIGHT.get = function () { return Xl.COLLINEAR }, Object.defineProperties(Xl, Yl); var Hl = function () { }; Hl.prototype.filter = function (t) { }, Hl.prototype.interfaces_ = function () { return [] }, Hl.prototype.getClass = function () { return Hl }; var Wl = function () { var t = arguments[0]; this._envelope = null, this._factory = null, this._SRID = null, this._userData = null, this._factory = t, this._SRID = t.getSRID() }, Jl = { serialVersionUID: {configurable: !0}, SORTINDEX_POINT: {configurable: !0}, SORTINDEX_MULTIPOINT: {configurable: !0}, SORTINDEX_LINESTRING: {configurable: !0}, SORTINDEX_LINEARRING: {configurable: !0}, SORTINDEX_MULTILINESTRING: {configurable: !0}, SORTINDEX_POLYGON: {configurable: !0}, SORTINDEX_MULTIPOLYGON: {configurable: !0}, SORTINDEX_GEOMETRYCOLLECTION: {configurable: !0}, geometryChangedFilter: {configurable: !0} }; Wl.prototype.isGeometryCollection = function () { return this.getSortIndex() === Wl.SORTINDEX_GEOMETRYCOLLECTION }, Wl.prototype.getFactory = function () { return this._factory }, Wl.prototype.getGeometryN = function (t) { return this }, Wl.prototype.getArea = function () { return 0 }, Wl.prototype.isRectangle = function () { return !1 }, Wl.prototype.equals = function () { if (arguments[0] instanceof Wl) { var t = arguments[0]; return null !== t && this.equalsTopo(t) } if (arguments[0] instanceof Object) { var e = arguments[0]; if (!(e instanceof Wl)) return !1; var n = e; return this.equalsExact(n) } }, Wl.prototype.equalsExact = function (t) { return this === t || this.equalsExact(t, 0) }, Wl.prototype.geometryChanged = function () { this.apply(Wl.geometryChangedFilter) }, Wl.prototype.geometryChangedAction = function () { this._envelope = null }, Wl.prototype.equalsNorm = function (t) { return null !== t && this.norm().equalsExact(t.norm()) }, Wl.prototype.getLength = function () { return 0 }, Wl.prototype.getNumGeometries = function () { return 1 }, Wl.prototype.compareTo = function () { if (1 === arguments.length) { var t = arguments[0], e = t; return this.getSortIndex() !== e.getSortIndex() ? this.getSortIndex() - e.getSortIndex() : this.isEmpty() && e.isEmpty() ? 0 : this.isEmpty() ? -1 : e.isEmpty() ? 1 : this.compareToSameClass(t) } if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; return this.getSortIndex() !== n.getSortIndex() ? this.getSortIndex() - n.getSortIndex() : this.isEmpty() && n.isEmpty() ? 0 : this.isEmpty() ? -1 : n.isEmpty() ? 1 : this.compareToSameClass(n, r) } }, Wl.prototype.getUserData = function () { return this._userData }, Wl.prototype.getSRID = function () { return this._SRID }, Wl.prototype.getEnvelope = function () { return this.getFactory().toGeometry(this.getEnvelopeInternal()) }, Wl.prototype.checkNotGeometryCollection = function (t) { if (t.getSortIndex() === Wl.SORTINDEX_GEOMETRYCOLLECTION) throw new el("This method does not support GeometryCollection arguments") }, Wl.prototype.equal = function (t, e, n) { return 0 === n ? t.equals(e) : t.distance(e) <= n }, Wl.prototype.norm = function () { var t = this.copy(); return t.normalize(), t }, Wl.prototype.getPrecisionModel = function () { return this._factory.getPrecisionModel() }, Wl.prototype.getEnvelopeInternal = function () { return null === this._envelope && (this._envelope = this.computeEnvelopeInternal()), new Ll(this._envelope) }, Wl.prototype.setSRID = function (t) { this._SRID = t }, Wl.prototype.setUserData = function (t) { this._userData = t }, Wl.prototype.compare = function (t, e) { for (var n = t.iterator(), r = e.iterator(); n.hasNext() && r.hasNext();) { var i = n.next(), o = r.next(), s = i.compareTo(o); if (0 !== s) return s } return n.hasNext() ? 1 : r.hasNext() ? -1 : 0 }, Wl.prototype.hashCode = function () { return this.getEnvelopeInternal().hashCode() }, Wl.prototype.isGeometryCollectionOrDerived = function () { return this.getSortIndex() === Wl.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === Wl.SORTINDEX_MULTIPOINT || this.getSortIndex() === Wl.SORTINDEX_MULTILINESTRING || this.getSortIndex() === Wl.SORTINDEX_MULTIPOLYGON }, Wl.prototype.interfaces_ = function () { return [ol, il, al] }, Wl.prototype.getClass = function () { return Wl }, Wl.hasNonEmptyElements = function (t) { for (var e = 0; e < t.length; e++) if (!t[e].isEmpty()) return !0; return !1 }, Wl.hasNullElements = function (t) { for (var e = 0; e < t.length; e++) if (null === t[e]) return !0; return !1 }, Jl.serialVersionUID.get = function () { return 0x799ea46522854c00 }, Jl.SORTINDEX_POINT.get = function () { return 0 }, Jl.SORTINDEX_MULTIPOINT.get = function () { return 1 }, Jl.SORTINDEX_LINESTRING.get = function () { return 2 }, Jl.SORTINDEX_LINEARRING.get = function () { return 3 }, Jl.SORTINDEX_MULTILINESTRING.get = function () { return 4 }, Jl.SORTINDEX_POLYGON.get = function () { return 5 }, Jl.SORTINDEX_MULTIPOLYGON.get = function () { return 6 }, Jl.SORTINDEX_GEOMETRYCOLLECTION.get = function () { return 7 }, Jl.geometryChangedFilter.get = function () { return Zl }, Object.defineProperties(Wl, Jl); var Zl = function () { }; Zl.interfaces_ = function () { return [Hl] }, Zl.filter = function (t) { t.geometryChangedAction() }; var Kl = function () { }; Kl.prototype.filter = function (t) { }, Kl.prototype.interfaces_ = function () { return [] }, Kl.prototype.getClass = function () { return Kl }; var Ql = function () { }, $l = { Mod2BoundaryNodeRule: {configurable: !0}, EndPointBoundaryNodeRule: {configurable: !0}, MultiValentEndPointBoundaryNodeRule: {configurable: !0}, MonoValentEndPointBoundaryNodeRule: {configurable: !0}, MOD2_BOUNDARY_RULE: {configurable: !0}, ENDPOINT_BOUNDARY_RULE: {configurable: !0}, MULTIVALENT_ENDPOINT_BOUNDARY_RULE: {configurable: !0}, MONOVALENT_ENDPOINT_BOUNDARY_RULE: {configurable: !0}, OGC_SFS_BOUNDARY_RULE: {configurable: !0} }; Ql.prototype.isInBoundary = function (t) { }, Ql.prototype.interfaces_ = function () { return [] }, Ql.prototype.getClass = function () { return Ql }, $l.Mod2BoundaryNodeRule.get = function () { return tc }, $l.EndPointBoundaryNodeRule.get = function () { return ec }, $l.MultiValentEndPointBoundaryNodeRule.get = function () { return nc }, $l.MonoValentEndPointBoundaryNodeRule.get = function () { return rc }, $l.MOD2_BOUNDARY_RULE.get = function () { return new tc }, $l.ENDPOINT_BOUNDARY_RULE.get = function () { return new ec }, $l.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new nc }, $l.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new rc }, $l.OGC_SFS_BOUNDARY_RULE.get = function () { return Ql.MOD2_BOUNDARY_RULE }, Object.defineProperties(Ql, $l); var tc = function () { }; tc.prototype.isInBoundary = function (t) { return t % 2 == 1 }, tc.prototype.interfaces_ = function () { return [Ql] }, tc.prototype.getClass = function () { return tc }; var ec = function () { }; ec.prototype.isInBoundary = function (t) { return t > 0 }, ec.prototype.interfaces_ = function () { return [Ql] }, ec.prototype.getClass = function () { return ec }; var nc = function () { }; nc.prototype.isInBoundary = function (t) { return t > 1 }, nc.prototype.interfaces_ = function () { return [Ql] }, nc.prototype.getClass = function () { return nc }; var rc = function () { }; rc.prototype.isInBoundary = function (t) { return 1 === t }, rc.prototype.interfaces_ = function () { return [Ql] }, rc.prototype.getClass = function () { return rc }; var ic = function () { }; function oc(t) { this.message = t || "" } ic.prototype.add = function () { }, ic.prototype.addAll = function () { }, ic.prototype.isEmpty = function () { }, ic.prototype.iterator = function () { }, ic.prototype.size = function () { }, ic.prototype.toArray = function () { }, ic.prototype.remove = function () { }, oc.prototype = new Error, oc.prototype.name = "IndexOutOfBoundsException"; var sc = function () { }; sc.prototype.hasNext = function () { }, sc.prototype.next = function () { }, sc.prototype.remove = function () { }; var ac = function (t) { function e() { t.apply(this, arguments) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.get = function () { }, e.prototype.set = function () { }, e.prototype.isEmpty = function () { }, e }(ic); function uc(t) { this.message = t || "" } uc.prototype = new Error, uc.prototype.name = "NoSuchElementException"; var lc = function (t) { function e() { t.call(this), this.array_ = [], arguments[0] instanceof ic && this.addAll(arguments[0]) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.ensureCapacity = function () { }, e.prototype.interfaces_ = function () { return [t, ic] }, e.prototype.add = function (t) { return 1 === arguments.length ? this.array_.push(t) : this.array_.splice(arguments[0], arguments[1]), !0 }, e.prototype.clear = function () { this.array_ = [] }, e.prototype.addAll = function (t) { for (var e = t.iterator(); e.hasNext();) this.add(e.next()); return !0 }, e.prototype.set = function (t, e) { var n = this.array_[t]; return this.array_[t] = e, n }, e.prototype.iterator = function () { return new cc(this) }, e.prototype.get = function (t) { if (t < 0 || t >= this.size()) throw new oc; return this.array_[t] }, e.prototype.isEmpty = function () { return 0 === this.array_.length }, e.prototype.size = function () { return this.array_.length }, e.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; e < n; e++) t.push(this.array_[e]); return t }, e.prototype.remove = function (t) { for (var e = !1, n = 0, r = this.array_.length; n < r; n++) if (this.array_[n] === t) { this.array_.splice(n, 1), e = !0; break } return e }, e }(ac), cc = function (t) { function e(e) { t.call(this), this.arrayList_ = e, this.position_ = 0 } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.next = function () { if (this.position_ === this.arrayList_.size()) throw new uc; return this.arrayList_.get(this.position_++) }, e.prototype.hasNext = function () { return this.position_ < this.arrayList_.size() }, e.prototype.set = function (t) { return this.arrayList_.set(this.position_ - 1, t) }, e.prototype.remove = function () { this.arrayList_.remove(this.arrayList_.get(this.position_)) }, e }(sc), hc = function (t) { function e() { if (t.call(this), 0 === arguments.length) ; else if (1 === arguments.length) { var e = arguments[0]; this.ensureCapacity(e.length), this.add(e, !0) } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; this.ensureCapacity(n.length), this.add(n, r) } } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {coordArrayType: {configurable: !0}}; return n.coordArrayType.get = function () { return new Array(0).fill(null) }, e.prototype.getCoordinate = function (t) { return this.get(t) }, e.prototype.addAll = function () { var e = this; if (2 === arguments.length) { for (var n = arguments[0], r = arguments[1], i = !1, o = n.iterator(); o.hasNext();) e.add(o.next(), r), i = !0; return i } return t.prototype.addAll.apply(this, arguments) }, e.prototype.clone = function () { for (var e = t.prototype.clone.call(this), n = 0; n < this.size(); n++) e.add(n, this.get(n).copy()); return e }, e.prototype.toCoordinateArray = function () { return this.toArray(e.coordArrayType) }, e.prototype.add = function () { var e = this; if (1 === arguments.length) { var n = arguments[0]; t.prototype.add.call(this, n) } else if (2 === arguments.length) { if (arguments[0] instanceof Array && "boolean" == typeof arguments[1]) { var r = arguments[0], i = arguments[1]; return this.add(r, i, !0), !0 } if (arguments[0] instanceof ul && "boolean" == typeof arguments[1]) { var o = arguments[0], s = arguments[1]; if (!s && this.size() >= 1) { var a = this.get(this.size() - 1); if (a.equals2D(o)) return null } t.prototype.add.call(this, o) } else if (arguments[0] instanceof Object && "boolean" == typeof arguments[1]) { var u = arguments[0], l = arguments[1]; return this.add(u, l), !0 } } else if (3 === arguments.length) { if ("boolean" == typeof arguments[2] && arguments[0] instanceof Array && "boolean" == typeof arguments[1]) { var c = arguments[0], h = arguments[1], p = arguments[2]; if (p) for (var f = 0; f < c.length; f++) e.add(c[f], h); else for (var g = c.length - 1; g >= 0; g--) e.add(c[g], h); return !0 } if ("boolean" == typeof arguments[2] && Number.isInteger(arguments[0]) && arguments[1] instanceof ul) { var d = arguments[0], y = arguments[1], v = arguments[2]; if (!v) { var _ = this.size(); if (_ > 0) { if (d > 0) { var m = this.get(d - 1); if (m.equals2D(y)) return null } if (d < _) { var x = this.get(d); if (x.equals2D(y)) return null } } } t.prototype.add.call(this, d, y) } } else if (4 === arguments.length) { var E = arguments[0], b = arguments[1], w = arguments[2], I = arguments[3], N = 1; w > I && (N = -1); for (var S = w; S !== I; S += N) e.add(E[S], b); return !0 } }, e.prototype.closeRing = function () { this.size() > 0 && this.add(new ul(this.get(0)), !1) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, Object.defineProperties(e, n), e }(lc), pc = function () { }, fc = { ForwardComparator: {configurable: !0}, BidirectionalComparator: {configurable: !0}, coordArrayType: {configurable: !0} }; fc.ForwardComparator.get = function () { return gc }, fc.BidirectionalComparator.get = function () { return dc }, fc.coordArrayType.get = function () { return new Array(0).fill(null) }, pc.prototype.interfaces_ = function () { return [] }, pc.prototype.getClass = function () { return pc }, pc.isRing = function (t) { return !(t.length < 4) && !!t[0].equals2D(t[t.length - 1]) }, pc.ptNotInList = function (t, e) { for (var n = 0; n < t.length; n++) { var r = t[n]; if (pc.indexOf(r, e) < 0) return r } return null }, pc.scroll = function (t, e) { var n = pc.indexOf(e, t); if (n < 0) return null; var r = new Array(t.length).fill(null); Pl.arraycopy(t, n, r, 0, t.length - n), Pl.arraycopy(t, 0, r, t.length - n, n), Pl.arraycopy(r, 0, t, 0, t.length) }, pc.equals = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; if (t === e) return !0; if (null === t || null === e) return !1; if (t.length !== e.length) return !1; for (var n = 0; n < t.length; n++) if (!t[n].equals(e[n])) return !1; return !0 } if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2]; if (r === i) return !0; if (null === r || null === i) return !1; if (r.length !== i.length) return !1; for (var s = 0; s < r.length; s++) if (0 !== o.compare(r[s], i[s])) return !1; return !0 } }, pc.intersection = function (t, e) { for (var n = new hc, r = 0; r < t.length; r++) e.intersects(t[r]) && n.add(t[r], !0); return n.toCoordinateArray() }, pc.hasRepeatedPoints = function (t) { for (var e = 1; e < t.length; e++) if (t[e - 1].equals(t[e])) return !0; return !1 }, pc.removeRepeatedPoints = function (t) { return pc.hasRepeatedPoints(t) ? new hc(t, !1).toCoordinateArray() : t }, pc.reverse = function (t) { for (var e = t.length - 1, n = Math.trunc(e / 2), r = 0; r <= n; r++) { var i = t[r]; t[r] = t[e - r], t[e - r] = i } }, pc.removeNull = function (t) { for (var e = 0, n = 0; n < t.length; n++) null !== t[n] && e++; var r = new Array(e).fill(null); if (0 === e) return r; for (var i = 0, o = 0; o < t.length; o++) null !== t[o] && (r[i++] = t[o]); return r }, pc.copyDeep = function () { if (1 === arguments.length) { for (var t = arguments[0], e = new Array(t.length).fill(null), n = 0; n < t.length; n++) e[n] = new ul(t[n]); return e } if (5 === arguments.length) for (var r = arguments[0], i = arguments[1], o = arguments[2], s = arguments[3], a = arguments[4], u = 0; u < a; u++) o[s + u] = new ul(r[i + u]) }, pc.isEqualReversed = function (t, e) { for (var n = 0; n < t.length; n++) { var r = t[n], i = e[t.length - n - 1]; if (0 !== r.compareTo(i)) return !1 } return !0 }, pc.envelope = function (t) { for (var e = new Ll, n = 0; n < t.length; n++) e.expandToInclude(t[n]); return e }, pc.toCoordinateArray = function (t) { return t.toArray(pc.coordArrayType) }, pc.atLeastNCoordinatesOrNothing = function (t, e) { return e.length >= t ? e : [] }, pc.indexOf = function (t, e) { for (var n = 0; n < e.length; n++) if (t.equals(e[n])) return n; return -1 }, pc.increasingDirection = function (t) { for (var e = 0; e < Math.trunc(t.length / 2); e++) { var n = t.length - 1 - e, r = t[e].compareTo(t[n]); if (0 !== r) return r } return 1 }, pc.compare = function (t, e) { for (var n = 0; n < t.length && n < e.length;) { var r = t[n].compareTo(e[n]); if (0 !== r) return r; n++ } return n < e.length ? -1 : n < t.length ? 1 : 0 }, pc.minCoordinate = function (t) { for (var e = null, n = 0; n < t.length; n++) (null === e || e.compareTo(t[n]) > 0) && (e = t[n]); return e }, pc.extract = function (t, e, n) { e = dl.clamp(e, 0, t.length); var r = (n = dl.clamp(n, -1, t.length)) - e + 1; n < 0 && (r = 0), e >= t.length && (r = 0), n < e && (r = 0); var i = new Array(r).fill(null); if (0 === r) return i; for (var o = 0, s = e; s <= n; s++) i[o++] = t[s]; return i }, Object.defineProperties(pc, fc); var gc = function () { }; gc.prototype.compare = function (t, e) { return pc.compare(t, e) }, gc.prototype.interfaces_ = function () { return [sl] }, gc.prototype.getClass = function () { return gc }; var dc = function () { }; dc.prototype.compare = function (t, e) { var n = t, r = e; if (n.length < r.length) return -1; if (n.length > r.length) return 1; if (0 === n.length) return 0; var i = pc.compare(n, r); return pc.isEqualReversed(n, r) ? 0 : i }, dc.prototype.OLDcompare = function (t, e) { var n = t, r = e; if (n.length < r.length) return -1; if (n.length > r.length) return 1; if (0 === n.length) return 0; for (var i = pc.increasingDirection(n), o = pc.increasingDirection(r), s = i > 0 ? 0 : n.length - 1, a = o > 0 ? 0 : n.length - 1, u = 0; u < n.length; u++) { var l = n[s].compareTo(r[a]); if (0 !== l) return l; s += i, a += o } return 0 }, dc.prototype.interfaces_ = function () { return [sl] }, dc.prototype.getClass = function () { return dc }; var yc = function () { }; yc.prototype.get = function () { }, yc.prototype.put = function () { }, yc.prototype.size = function () { }, yc.prototype.values = function () { }, yc.prototype.entrySet = function () { }; var vc = function (t) { function e() { t.apply(this, arguments) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e }(yc); function _c(t) { this.message = t || "" } function mc() { } _c.prototype = new Error, _c.prototype.name = "OperationNotSupported", mc.prototype = new ic, mc.prototype.contains = function () { }; var xc = function (t) { function e() { t.call(this), this.array_ = [], arguments[0] instanceof ic && this.addAll(arguments[0]) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.contains = function (t) { for (var e = 0, n = this.array_.length; e < n; e++) { if (this.array_[e] === t) return !0 } return !1 }, e.prototype.add = function (t) { return !this.contains(t) && (this.array_.push(t), !0) }, e.prototype.addAll = function (t) { for (var e = t.iterator(); e.hasNext();) this.add(e.next()); return !0 }, e.prototype.remove = function (t) { throw new Error }, e.prototype.size = function () { return this.array_.length }, e.prototype.isEmpty = function () { return 0 === this.array_.length }, e.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; e < n; e++) t.push(this.array_[e]); return t }, e.prototype.iterator = function () { return new Ec(this) }, e }(mc), Ec = function (t) { function e(e) { t.call(this), this.hashSet_ = e, this.position_ = 0 } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.next = function () { if (this.position_ === this.hashSet_.size()) throw new uc; return this.hashSet_.array_[this.position_++] }, e.prototype.hasNext = function () { return this.position_ < this.hashSet_.size() }, e.prototype.remove = function () { throw new _c }, e }(sc); function bc(t) { return null === t ? 0 : t.color } function wc(t) { return null === t ? null : t.parent } function Ic(t, e) { null !== t && (t.color = e) } function Nc(t) { return null === t ? null : t.left } function Sc(t) { return null === t ? null : t.right } function Cc() { this.root_ = null, this.size_ = 0 } Cc.prototype = new vc, Cc.prototype.get = function (t) { for (var e = this.root_; null !== e;) { var n = t.compareTo(e.key); if (n < 0) e = e.left; else { if (!(n > 0)) return e.value; e = e.right } } return null }, Cc.prototype.put = function (t, e) { if (null === this.root_) return this.root_ = { key: t, value: e, left: null, right: null, parent: null, color: 0, getValue: function () { return this.value }, getKey: function () { return this.key } }, this.size_ = 1, null; var n, r, i = this.root_; do { if (n = i, (r = t.compareTo(i.key)) < 0) i = i.left; else { if (!(r > 0)) { var o = i.value; return i.value = e, o } i = i.right } } while (null !== i); var s = { key: t, left: null, right: null, value: e, parent: n, color: 0, getValue: function () { return this.value }, getKey: function () { return this.key } }; return r < 0 ? n.left = s : n.right = s, this.fixAfterInsertion(s), this.size_++, null }, Cc.prototype.fixAfterInsertion = function (t) { var e = this; for (t.color = 1; null != t && t !== this.root_ && 1 === t.parent.color;) if (wc(t) === Nc(wc(wc(t)))) { var n = Sc(wc(wc(t))); 1 === bc(n) ? (Ic(wc(t), 0), Ic(n, 0), Ic(wc(wc(t)), 1), t = wc(wc(t))) : (t === Sc(wc(t)) && (t = wc(t), e.rotateLeft(t)), Ic(wc(t), 0), Ic(wc(wc(t)), 1), e.rotateRight(wc(wc(t)))) } else { var r = Nc(wc(wc(t))); 1 === bc(r) ? (Ic(wc(t), 0), Ic(r, 0), Ic(wc(wc(t)), 1), t = wc(wc(t))) : (t === Nc(wc(t)) && (t = wc(t), e.rotateRight(t)), Ic(wc(t), 0), Ic(wc(wc(t)), 1), e.rotateLeft(wc(wc(t)))) } this.root_.color = 0 }, Cc.prototype.values = function () { var t = new lc, e = this.getFirstEntry(); if (null !== e) for (t.add(e.value); null !== (e = Cc.successor(e));) t.add(e.value); return t }, Cc.prototype.entrySet = function () { var t = new xc, e = this.getFirstEntry(); if (null !== e) for (t.add(e); null !== (e = Cc.successor(e));) t.add(e); return t }, Cc.prototype.rotateLeft = function (t) { if (null != t) { var e = t.right; t.right = e.left, null != e.left && (e.left.parent = t), e.parent = t.parent, null === t.parent ? this.root_ = e : t.parent.left === t ? t.parent.left = e : t.parent.right = e, e.left = t, t.parent = e } }, Cc.prototype.rotateRight = function (t) { if (null != t) { var e = t.left; t.left = e.right, null != e.right && (e.right.parent = t), e.parent = t.parent, null === t.parent ? this.root_ = e : t.parent.right === t ? t.parent.right = e : t.parent.left = e, e.right = t, t.parent = e } }, Cc.prototype.getFirstEntry = function () { var t = this.root_; if (null != t) for (; null != t.left;) t = t.left; return t }, Cc.successor = function (t) { if (null === t) return null; if (null !== t.right) { for (var e = t.right; null !== e.left;) e = e.left; return e } for (var n = t.parent, r = t; null !== n && r === n.right;) r = n, n = n.parent; return n }, Cc.prototype.size = function () { return this.size_ }; var Pc = function () { }; function Mc() { } function Lc() { this.array_ = [], arguments[0] instanceof ic && this.addAll(arguments[0]) } Pc.prototype.interfaces_ = function () { return [] }, Pc.prototype.getClass = function () { return Pc }, Mc.prototype = new mc, Lc.prototype = new Mc, Lc.prototype.contains = function (t) { for (var e = 0, n = this.array_.length; e < n; e++) { if (0 === this.array_[e].compareTo(t)) return !0 } return !1 }, Lc.prototype.add = function (t) { if (this.contains(t)) return !1; for (var e = 0, n = this.array_.length; e < n; e++) { if (1 === this.array_[e].compareTo(t)) return this.array_.splice(e, 0, t), !0 } return this.array_.push(t), !0 }, Lc.prototype.addAll = function (t) { for (var e = t.iterator(); e.hasNext();) this.add(e.next()); return !0 }, Lc.prototype.remove = function (t) { throw new _c }, Lc.prototype.size = function () { return this.array_.length }, Lc.prototype.isEmpty = function () { return 0 === this.array_.length }, Lc.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; e < n; e++) t.push(this.array_[e]); return t }, Lc.prototype.iterator = function () { return new Oc(this) }; var Oc = function (t) { this.treeSet_ = t, this.position_ = 0 }; Oc.prototype.next = function () { if (this.position_ === this.treeSet_.size()) throw new uc; return this.treeSet_.array_[this.position_++] }, Oc.prototype.hasNext = function () { return this.position_ < this.treeSet_.size() }, Oc.prototype.remove = function () { throw new _c }; var Rc = function () { }; Rc.sort = function () { var t, e, n, r, i = arguments[0]; if (1 === arguments.length) r = function (t, e) { return t.compareTo(e) }, i.sort(r); else if (2 === arguments.length) n = arguments[1], r = function (t, e) { return n.compare(t, e) }, i.sort(r); else if (3 === arguments.length) { (e = i.slice(arguments[1], arguments[2])).sort(); var o = i.slice(0, arguments[1]).concat(e, i.slice(arguments[2], i.length)); for (i.splice(0, i.length), t = 0; t < o.length; t++) i.push(o[t]) } else if (4 === arguments.length) for (e = i.slice(arguments[1], arguments[2]), n = arguments[3], r = function (t, e) { return n.compare(t, e) }, e.sort(r), o = i.slice(0, arguments[1]).concat(e, i.slice(arguments[2], i.length)), i.splice(0, i.length), t = 0; t < o.length; t++) i.push(o[t]) }, Rc.asList = function (t) { for (var e = new lc, n = 0, r = t.length; n < r; n++) e.add(t[n]); return e }; var Tc = function () { }, Ac = { P: {configurable: !0}, L: {configurable: !0}, A: {configurable: !0}, FALSE: {configurable: !0}, TRUE: {configurable: !0}, DONTCARE: {configurable: !0}, SYM_FALSE: {configurable: !0}, SYM_TRUE: {configurable: !0}, SYM_DONTCARE: {configurable: !0}, SYM_P: {configurable: !0}, SYM_L: {configurable: !0}, SYM_A: {configurable: !0} }; Ac.P.get = function () { return 0 }, Ac.L.get = function () { return 1 }, Ac.A.get = function () { return 2 }, Ac.FALSE.get = function () { return -1 }, Ac.TRUE.get = function () { return -2 }, Ac.DONTCARE.get = function () { return -3 }, Ac.SYM_FALSE.get = function () { return "F" }, Ac.SYM_TRUE.get = function () { return "T" }, Ac.SYM_DONTCARE.get = function () { return "*" }, Ac.SYM_P.get = function () { return "0" }, Ac.SYM_L.get = function () { return "1" }, Ac.SYM_A.get = function () { return "2" }, Tc.prototype.interfaces_ = function () { return [] }, Tc.prototype.getClass = function () { return Tc }, Tc.toDimensionSymbol = function (t) { switch (t) { case Tc.FALSE: return Tc.SYM_FALSE; case Tc.TRUE: return Tc.SYM_TRUE; case Tc.DONTCARE: return Tc.SYM_DONTCARE; case Tc.P: return Tc.SYM_P; case Tc.L: return Tc.SYM_L; case Tc.A: return Tc.SYM_A } throw new el("Unknown dimension value: " + t) }, Tc.toDimensionValue = function (t) { switch (ml.toUpperCase(t)) { case Tc.SYM_FALSE: return Tc.FALSE; case Tc.SYM_TRUE: return Tc.TRUE; case Tc.SYM_DONTCARE: return Tc.DONTCARE; case Tc.SYM_P: return Tc.P; case Tc.SYM_L: return Tc.L; case Tc.SYM_A: return Tc.A } throw new el("Unknown dimension symbol: " + t) }, Object.defineProperties(Tc, Ac); var Dc = function () { }; Dc.prototype.filter = function (t) { }, Dc.prototype.interfaces_ = function () { return [] }, Dc.prototype.getClass = function () { return Dc }; var Fc = function () { }; Fc.prototype.filter = function (t, e) { }, Fc.prototype.isDone = function () { }, Fc.prototype.isGeometryChanged = function () { }, Fc.prototype.interfaces_ = function () { return [] }, Fc.prototype.getClass = function () { return Fc }; var kc = function (t) { function e(e, n) { if (t.call(this, n), this._geometries = e || [], t.hasNullElements(this._geometries)) throw new el("geometries must not contain null elements") } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {serialVersionUID: {configurable: !0}}; return e.prototype.computeEnvelopeInternal = function () { for (var t = new Ll, e = 0; e < this._geometries.length; e++) t.expandToInclude(this._geometries[e].getEnvelopeInternal()); return t }, e.prototype.getGeometryN = function (t) { return this._geometries[t] }, e.prototype.getSortIndex = function () { return t.SORTINDEX_GEOMETRYCOLLECTION }, e.prototype.getCoordinates = function () { for (var t = new Array(this.getNumPoints()).fill(null), e = -1, n = 0; n < this._geometries.length; n++) for (var r = this._geometries[n].getCoordinates(), i = 0; i < r.length; i++) t[++e] = r[i]; return t }, e.prototype.getArea = function () { for (var t = 0, e = 0; e < this._geometries.length; e++) t += this._geometries[e].getArea(); return t }, e.prototype.equalsExact = function () { var e = this; if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; if (!this.isEquivalentClass(n)) return !1; var i = n; if (this._geometries.length !== i._geometries.length) return !1; for (var o = 0; o < this._geometries.length; o++) if (!e._geometries[o].equalsExact(i._geometries[o], r)) return !1; return !0 } return t.prototype.equalsExact.apply(this, arguments) }, e.prototype.normalize = function () { for (var t = 0; t < this._geometries.length; t++) this._geometries[t].normalize(); Rc.sort(this._geometries) }, e.prototype.getCoordinate = function () { return this.isEmpty() ? null : this._geometries[0].getCoordinate() }, e.prototype.getBoundaryDimension = function () { for (var t = Tc.FALSE, e = 0; e < this._geometries.length; e++) t = Math.max(t, this._geometries[e].getBoundaryDimension()); return t }, e.prototype.getDimension = function () { for (var t = Tc.FALSE, e = 0; e < this._geometries.length; e++) t = Math.max(t, this._geometries[e].getDimension()); return t }, e.prototype.getLength = function () { for (var t = 0, e = 0; e < this._geometries.length; e++) t += this._geometries[e].getLength(); return t }, e.prototype.getNumPoints = function () { for (var t = 0, e = 0; e < this._geometries.length; e++) t += this._geometries[e].getNumPoints(); return t }, e.prototype.getNumGeometries = function () { return this._geometries.length }, e.prototype.reverse = function () { for (var t = this._geometries.length, e = new Array(t).fill(null), n = 0; n < this._geometries.length; n++) e[n] = this._geometries[n].reverse(); return this.getFactory().createGeometryCollection(e) }, e.prototype.compareToSameClass = function () { var t = this; if (1 === arguments.length) { var e = arguments[0], n = new Lc(Rc.asList(this._geometries)), r = new Lc(Rc.asList(e._geometries)); return this.compare(n, r) } if (2 === arguments.length) { for (var i = arguments[0], o = arguments[1], s = i, a = this.getNumGeometries(), u = s.getNumGeometries(), l = 0; l < a && l < u;) { var c = t.getGeometryN(l), h = s.getGeometryN(l), p = c.compareToSameClass(h, o); if (0 !== p) return p; l++ } return l < a ? 1 : l < u ? -1 : 0 } }, e.prototype.apply = function () { var t = this; if (gl(arguments[0], Kl)) for (var e = arguments[0], n = 0; n < this._geometries.length; n++) t._geometries[n].apply(e); else if (gl(arguments[0], Fc)) { var r = arguments[0]; if (0 === this._geometries.length) return null; for (var i = 0; i < this._geometries.length && (t._geometries[i].apply(r), !r.isDone()); i++) ; r.isGeometryChanged() && this.geometryChanged() } else if (gl(arguments[0], Dc)) { var o = arguments[0]; o.filter(this); for (var s = 0; s < this._geometries.length; s++) t._geometries[s].apply(o) } else if (gl(arguments[0], Hl)) { var a = arguments[0]; a.filter(this); for (var u = 0; u < this._geometries.length; u++) t._geometries[u].apply(a) } }, e.prototype.getBoundary = function () { return this.checkNotGeometryCollection(this), ql.shouldNeverReachHere(), null }, e.prototype.clone = function () { var e = t.prototype.clone.call(this); e._geometries = new Array(this._geometries.length).fill(null); for (var n = 0; n < this._geometries.length; n++) e._geometries[n] = this._geometries[n].clone(); return e }, e.prototype.getGeometryType = function () { return "GeometryCollection" }, e.prototype.copy = function () { for (var t = new Array(this._geometries.length).fill(null), n = 0; n < t.length; n++) t[n] = this._geometries[n].copy(); return new e(t, this._factory) }, e.prototype.isEmpty = function () { for (var t = 0; t < this._geometries.length; t++) if (!this._geometries[t].isEmpty()) return !1; return !0 }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, n.serialVersionUID.get = function () { return -0x4f07bcb1f857d800 }, Object.defineProperties(e, n), e }(Wl), Gc = function (t) { function e() { t.apply(this, arguments) } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {serialVersionUID: {configurable: !0}}; return e.prototype.getSortIndex = function () { return Wl.SORTINDEX_MULTILINESTRING }, e.prototype.equalsExact = function () { if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return !!this.isEquivalentClass(e) && t.prototype.equalsExact.call(this, e, n) } return t.prototype.equalsExact.apply(this, arguments) }, e.prototype.getBoundaryDimension = function () { return this.isClosed() ? Tc.FALSE : 0 }, e.prototype.isClosed = function () { if (this.isEmpty()) return !1; for (var t = 0; t < this._geometries.length; t++) if (!this._geometries[t].isClosed()) return !1; return !0 }, e.prototype.getDimension = function () { return 1 }, e.prototype.reverse = function () { for (var t = this._geometries.length, e = new Array(t).fill(null), n = 0; n < this._geometries.length; n++) e[t - 1 - n] = this._geometries[n].reverse(); return this.getFactory().createMultiLineString(e) }, e.prototype.getBoundary = function () { return new qc(this).getBoundary() }, e.prototype.getGeometryType = function () { return "MultiLineString" }, e.prototype.copy = function () { for (var t = new Array(this._geometries.length).fill(null), n = 0; n < t.length; n++) t[n] = this._geometries[n].copy(); return new e(t, this._factory) }, e.prototype.interfaces_ = function () { return [Pc] }, e.prototype.getClass = function () { return e }, n.serialVersionUID.get = function () { return 0x7155d2ab4afa8000 }, Object.defineProperties(e, n), e }(kc), qc = function () { if (this._geom = null, this._geomFact = null, this._bnRule = null, this._endpointMap = null, 1 === arguments.length) { var t = arguments[0], e = Ql.MOD2_BOUNDARY_RULE; this._geom = t, this._geomFact = t.getFactory(), this._bnRule = e } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; this._geom = n, this._geomFact = n.getFactory(), this._bnRule = r } }; qc.prototype.boundaryMultiLineString = function (t) { if (this._geom.isEmpty()) return this.getEmptyMultiPoint(); var e = this.computeBoundaryCoordinates(t); return 1 === e.length ? this._geomFact.createPoint(e[0]) : this._geomFact.createMultiPointFromCoords(e) }, qc.prototype.getBoundary = function () { return this._geom instanceof Zc ? this.boundaryLineString(this._geom) : this._geom instanceof Gc ? this.boundaryMultiLineString(this._geom) : this._geom.getBoundary() }, qc.prototype.boundaryLineString = function (t) { return this._geom.isEmpty() ? this.getEmptyMultiPoint() : t.isClosed() ? this._bnRule.isInBoundary(2) ? t.getStartPoint() : this._geomFact.createMultiPoint() : this._geomFact.createMultiPoint([t.getStartPoint(), t.getEndPoint()]) }, qc.prototype.getEmptyMultiPoint = function () { return this._geomFact.createMultiPoint() }, qc.prototype.computeBoundaryCoordinates = function (t) { var e = this, n = new lc; this._endpointMap = new Cc; for (var r = 0; r < t.getNumGeometries(); r++) { var i = t.getGeometryN(r); 0 !== i.getNumPoints() && (e.addEndpoint(i.getCoordinateN(0)), e.addEndpoint(i.getCoordinateN(i.getNumPoints() - 1))) } for (var o = this._endpointMap.entrySet().iterator(); o.hasNext();) { var s = o.next(), a = s.getValue().count; e._bnRule.isInBoundary(a) && n.add(s.getKey()) } return pc.toCoordinateArray(n) }, qc.prototype.addEndpoint = function (t) { var e = this._endpointMap.get(t); null === e && (e = new Bc, this._endpointMap.put(t, e)), e.count++ }, qc.prototype.interfaces_ = function () { return [] }, qc.prototype.getClass = function () { return qc }, qc.getBoundary = function () { if (1 === arguments.length) { var t = arguments[0], e = new qc(t); return e.getBoundary() } if (2 === arguments.length) { var n = arguments[0], r = arguments[1], i = new qc(n, r); return i.getBoundary() } }; var Bc = function () { this.count = null }; function zc() { } function jc() { } Bc.prototype.interfaces_ = function () { return [] }, Bc.prototype.getClass = function () { return Bc }; var Uc = function () { }; function Vc() { } function Xc() { } function Yc() { } var Hc = function () { }, Wc = {NEWLINE: {configurable: !0}, SIMPLE_ORDINATE_FORMAT: {configurable: !0}}; Hc.prototype.interfaces_ = function () { return [] }, Hc.prototype.getClass = function () { return Hc }, Hc.chars = function (t, e) { for (var n = new Array(e).fill(null), r = 0; r < e; r++) n[r] = t; return String(n) }, Hc.getStackTrace = function () { if (1 === arguments.length) { var t = arguments[0], e = new Vc, n = new zc(e); return t.printStackTrace(n), e.toString() } if (2 === arguments.length) { for (var r = arguments[0], i = arguments[1], o = "", s = new jc(Hc.getStackTrace(r)), a = new Yc(s), u = 0; u < i; u++) try { o += a.readLine() + Hc.NEWLINE } catch (t) { if (!(t instanceof Xc)) throw t; ql.shouldNeverReachHere() } return o } }, Hc.split = function (t, e) { for (var n = e.length, r = new lc, i = "" + t, o = i.indexOf(e); o >= 0;) { var s = i.substring(0, o); r.add(s), o = (i = i.substring(o + n)).indexOf(e) } i.length > 0 && r.add(i); for (var a = new Array(r.size()).fill(null), u = 0; u < a.length; u++) a[u] = r.get(u); return a }, Hc.toString = function () { if (1 === arguments.length) { var t = arguments[0]; return Hc.SIMPLE_ORDINATE_FORMAT.format(t) } }, Hc.spaces = function (t) { return Hc.chars(" ", t) }, Wc.NEWLINE.get = function () { return Pl.getProperty("line.separator") }, Wc.SIMPLE_ORDINATE_FORMAT.get = function () { return new Uc("0.#") }, Object.defineProperties(Hc, Wc); var Jc = function () { }; Jc.prototype.interfaces_ = function () { return [] }, Jc.prototype.getClass = function () { return Jc }, Jc.copyCoord = function (t, e, n, r) { for (var i = Math.min(t.getDimension(), n.getDimension()), o = 0; o < i; o++) n.setOrdinate(r, o, t.getOrdinate(e, o)) }, Jc.isRing = function (t) { var e = t.size(); return 0 === e || !(e <= 3) && (t.getOrdinate(0, Il.X) === t.getOrdinate(e - 1, Il.X) && t.getOrdinate(0, Il.Y) === t.getOrdinate(e - 1, Il.Y)) }, Jc.isEqual = function (t, e) { var n = t.size(); if (n !== e.size()) return !1; for (var r = Math.min(t.getDimension(), e.getDimension()), i = 0; i < n; i++) for (var o = 0; o < r; o++) { var s = t.getOrdinate(i, o), a = e.getOrdinate(i, o); if (t.getOrdinate(i, o) !== e.getOrdinate(i, o) && (!nl.isNaN(s) || !nl.isNaN(a))) return !1 } return !0 }, Jc.extend = function (t, e, n) { var r = t.create(n, e.getDimension()), i = e.size(); if (Jc.copy(e, 0, r, 0, i), i > 0) for (var o = i; o < n; o++) Jc.copy(e, i - 1, r, o, 1); return r }, Jc.reverse = function (t) { for (var e = t.size() - 1, n = Math.trunc(e / 2), r = 0; r <= n; r++) Jc.swap(t, r, e - r) }, Jc.swap = function (t, e, n) { if (e === n) return null; for (var r = 0; r < t.getDimension(); r++) { var i = t.getOrdinate(e, r); t.setOrdinate(e, r, t.getOrdinate(n, r)), t.setOrdinate(n, r, i) } }, Jc.copy = function (t, e, n, r, i) { for (var o = 0; o < i; o++) Jc.copyCoord(t, e + o, n, r + o) }, Jc.toString = function () { if (1 === arguments.length) { var t = arguments[0], e = t.size(); if (0 === e) return "()"; var n = t.getDimension(), r = new vl; r.append("("); for (var i = 0; i < e; i++) { i > 0 && r.append(" "); for (var o = 0; o < n; o++) o > 0 && r.append(","), r.append(Hc.toString(t.getOrdinate(i, o))) } return r.append(")"), r.toString() } }, Jc.ensureValidRing = function (t, e) { var n = e.size(); return 0 === n ? e : n <= 3 ? Jc.createClosedRing(t, e, 4) : e.getOrdinate(0, Il.X) === e.getOrdinate(n - 1, Il.X) && e.getOrdinate(0, Il.Y) === e.getOrdinate(n - 1, Il.Y) ? e : Jc.createClosedRing(t, e, n + 1) }, Jc.createClosedRing = function (t, e, n) { var r = t.create(n, e.getDimension()), i = e.size(); Jc.copy(e, 0, r, 0, i); for (var o = i; o < n; o++) Jc.copy(e, 0, r, o, 1); return r }; var Zc = function (t) { function e(e, n) { t.call(this, n), this._points = null, this.init(e) } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {serialVersionUID: {configurable: !0}}; return e.prototype.computeEnvelopeInternal = function () { return this.isEmpty() ? new Ll : this._points.expandEnvelope(new Ll) }, e.prototype.isRing = function () { return this.isClosed() && this.isSimple() }, e.prototype.getSortIndex = function () { return t.SORTINDEX_LINESTRING }, e.prototype.getCoordinates = function () { return this._points.toCoordinateArray() }, e.prototype.equalsExact = function () { var e = this; if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; if (!this.isEquivalentClass(n)) return !1; var i = n; if (this._points.size() !== i._points.size()) return !1; for (var o = 0; o < this._points.size(); o++) if (!e.equal(e._points.getCoordinate(o), i._points.getCoordinate(o), r)) return !1; return !0 } return t.prototype.equalsExact.apply(this, arguments) }, e.prototype.normalize = function () { for (var t = this, e = 0; e < Math.trunc(this._points.size() / 2); e++) { var n = t._points.size() - 1 - e; if (!t._points.getCoordinate(e).equals(t._points.getCoordinate(n))) return t._points.getCoordinate(e).compareTo(t._points.getCoordinate(n)) > 0 && Jc.reverse(t._points), null } }, e.prototype.getCoordinate = function () { return this.isEmpty() ? null : this._points.getCoordinate(0) }, e.prototype.getBoundaryDimension = function () { return this.isClosed() ? Tc.FALSE : 0 }, e.prototype.isClosed = function () { return !this.isEmpty() && this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1)) }, e.prototype.getEndPoint = function () { return this.isEmpty() ? null : this.getPointN(this.getNumPoints() - 1) }, e.prototype.getDimension = function () { return 1 }, e.prototype.getLength = function () { return Xl.computeLength(this._points) }, e.prototype.getNumPoints = function () { return this._points.size() }, e.prototype.reverse = function () { var t = this._points.copy(); return Jc.reverse(t), this.getFactory().createLineString(t) }, e.prototype.compareToSameClass = function () { var t = this; if (1 === arguments.length) { for (var e = arguments[0], n = e, r = 0, i = 0; r < this._points.size() && i < n._points.size();) { var o = t._points.getCoordinate(r).compareTo(n._points.getCoordinate(i)); if (0 !== o) return o; r++, i++ } return r < this._points.size() ? 1 : i < n._points.size() ? -1 : 0 } if (2 === arguments.length) { var s = arguments[0], a = arguments[1], u = s; return a.compare(this._points, u._points) } }, e.prototype.apply = function () { var t = this; if (gl(arguments[0], Kl)) for (var e = arguments[0], n = 0; n < this._points.size(); n++) e.filter(t._points.getCoordinate(n)); else if (gl(arguments[0], Fc)) { var r = arguments[0]; if (0 === this._points.size()) return null; for (var i = 0; i < this._points.size() && (r.filter(t._points, i), !r.isDone()); i++) ; r.isGeometryChanged() && this.geometryChanged() } else if (gl(arguments[0], Dc)) { var o = arguments[0]; o.filter(this) } else if (gl(arguments[0], Hl)) { var s = arguments[0]; s.filter(this) } }, e.prototype.getBoundary = function () { return new qc(this).getBoundary() }, e.prototype.isEquivalentClass = function (t) { return t instanceof e }, e.prototype.clone = function () { var e = t.prototype.clone.call(this); return e._points = this._points.clone(), e }, e.prototype.getCoordinateN = function (t) { return this._points.getCoordinate(t) }, e.prototype.getGeometryType = function () { return "LineString" }, e.prototype.copy = function () { return new e(this._points.copy(), this._factory) }, e.prototype.getCoordinateSequence = function () { return this._points }, e.prototype.isEmpty = function () { return 0 === this._points.size() }, e.prototype.init = function (t) { if (null === t && (t = this.getFactory().getCoordinateSequenceFactory().create([])), 1 === t.size()) throw new el("Invalid number of points in LineString (found " + t.size() + " - must be 0 or >= 2)"); this._points = t }, e.prototype.isCoordinate = function (t) { for (var e = 0; e < this._points.size(); e++) if (this._points.getCoordinate(e).equals(t)) return !0; return !1 }, e.prototype.getStartPoint = function () { return this.isEmpty() ? null : this.getPointN(0) }, e.prototype.getPointN = function (t) { return this.getFactory().createPoint(this._points.getCoordinate(t)) }, e.prototype.interfaces_ = function () { return [Pc] }, e.prototype.getClass = function () { return e }, n.serialVersionUID.get = function () { return 0x2b2b51ba435c8e00 }, Object.defineProperties(e, n), e }(Wl), Kc = function () { }; Kc.prototype.interfaces_ = function () { return [] }, Kc.prototype.getClass = function () { return Kc }; var Qc = function (t) { function e(e, n) { t.call(this, n), this._coordinates = e || null, this.init(this._coordinates) } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {serialVersionUID: {configurable: !0}}; return e.prototype.computeEnvelopeInternal = function () { if (this.isEmpty()) return new Ll; var t = new Ll; return t.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0)), t }, e.prototype.getSortIndex = function () { return t.SORTINDEX_POINT }, e.prototype.getCoordinates = function () { return this.isEmpty() ? [] : [this.getCoordinate()] }, e.prototype.equalsExact = function () { if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return !!this.isEquivalentClass(e) && (!(!this.isEmpty() || !e.isEmpty()) || this.isEmpty() === e.isEmpty() && this.equal(e.getCoordinate(), this.getCoordinate(), n)) } return t.prototype.equalsExact.apply(this, arguments) }, e.prototype.normalize = function () { }, e.prototype.getCoordinate = function () { return 0 !== this._coordinates.size() ? this._coordinates.getCoordinate(0) : null }, e.prototype.getBoundaryDimension = function () { return Tc.FALSE }, e.prototype.getDimension = function () { return 0 }, e.prototype.getNumPoints = function () { return this.isEmpty() ? 0 : 1 }, e.prototype.reverse = function () { return this.copy() }, e.prototype.getX = function () { if (null === this.getCoordinate()) throw new Error("getX called on empty Point"); return this.getCoordinate().x }, e.prototype.compareToSameClass = function () { if (1 === arguments.length) { var t = arguments[0], e = t; return this.getCoordinate().compareTo(e.getCoordinate()) } if (2 === arguments.length) { var n = arguments[0], r = arguments[1], i = n; return r.compare(this._coordinates, i._coordinates) } }, e.prototype.apply = function () { if (gl(arguments[0], Kl)) { var t = arguments[0]; if (this.isEmpty()) return null; t.filter(this.getCoordinate()) } else if (gl(arguments[0], Fc)) { var e = arguments[0]; if (this.isEmpty()) return null; e.filter(this._coordinates, 0), e.isGeometryChanged() && this.geometryChanged() } else if (gl(arguments[0], Dc)) { var n = arguments[0]; n.filter(this) } else if (gl(arguments[0], Hl)) { var r = arguments[0]; r.filter(this) } }, e.prototype.getBoundary = function () { return this.getFactory().createGeometryCollection(null) }, e.prototype.clone = function () { var e = t.prototype.clone.call(this); return e._coordinates = this._coordinates.clone(), e }, e.prototype.getGeometryType = function () { return "Point" }, e.prototype.copy = function () { return new e(this._coordinates.copy(), this._factory) }, e.prototype.getCoordinateSequence = function () { return this._coordinates }, e.prototype.getY = function () { if (null === this.getCoordinate()) throw new Error("getY called on empty Point"); return this.getCoordinate().y }, e.prototype.isEmpty = function () { return 0 === this._coordinates.size() }, e.prototype.init = function (t) { null === t && (t = this.getFactory().getCoordinateSequenceFactory().create([])), ql.isTrue(t.size() <= 1), this._coordinates = t }, e.prototype.isSimple = function () { return !0 }, e.prototype.interfaces_ = function () { return [Kc] }, e.prototype.getClass = function () { return e }, n.serialVersionUID.get = function () { return 0x44077bad161cbc00 }, Object.defineProperties(e, n), e }(Wl), $c = function () { }; $c.prototype.interfaces_ = function () { return [] }, $c.prototype.getClass = function () { return $c }; var th = function (t) { function e(e, n, r) { if (t.call(this, r), this._shell = null, this._holes = null, null === e && (e = this.getFactory().createLinearRing()), null === n && (n = []), t.hasNullElements(n)) throw new el("holes must not contain null elements"); if (e.isEmpty() && t.hasNonEmptyElements(n)) throw new el("shell is empty but holes are not"); this._shell = e, this._holes = n } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {serialVersionUID: {configurable: !0}}; return e.prototype.computeEnvelopeInternal = function () { return this._shell.getEnvelopeInternal() }, e.prototype.getSortIndex = function () { return t.SORTINDEX_POLYGON }, e.prototype.getCoordinates = function () { if (this.isEmpty()) return []; for (var t = new Array(this.getNumPoints()).fill(null), e = -1, n = this._shell.getCoordinates(), r = 0; r < n.length; r++) t[++e] = n[r]; for (var i = 0; i < this._holes.length; i++) for (var o = this._holes[i].getCoordinates(), s = 0; s < o.length; s++) t[++e] = o[s]; return t }, e.prototype.getArea = function () { var t = 0; t += Math.abs(Xl.signedArea(this._shell.getCoordinateSequence())); for (var e = 0; e < this._holes.length; e++) t -= Math.abs(Xl.signedArea(this._holes[e].getCoordinateSequence())); return t }, e.prototype.isRectangle = function () { if (0 !== this.getNumInteriorRing()) return !1; if (null === this._shell) return !1; if (5 !== this._shell.getNumPoints()) return !1; for (var t = this._shell.getCoordinateSequence(), e = this.getEnvelopeInternal(), n = 0; n < 5; n++) { var r = t.getX(n); if (r !== e.getMinX() && r !== e.getMaxX()) return !1; var i = t.getY(n); if (i !== e.getMinY() && i !== e.getMaxY()) return !1 } for (var o = t.getX(0), s = t.getY(0), a = 1; a <= 4; a++) { var u = t.getX(a), l = t.getY(a); if (u !== o === (l !== s)) return !1; o = u, s = l } return !0 }, e.prototype.equalsExact = function () { var e = this; if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; if (!this.isEquivalentClass(n)) return !1; var i = n, o = this._shell, s = i._shell; if (!o.equalsExact(s, r)) return !1; if (this._holes.length !== i._holes.length) return !1; for (var a = 0; a < this._holes.length; a++) if (!e._holes[a].equalsExact(i._holes[a], r)) return !1; return !0 } return t.prototype.equalsExact.apply(this, arguments) }, e.prototype.normalize = function () { var t = this; if (0 === arguments.length) { this.normalize(this._shell, !0); for (var e = 0; e < this._holes.length; e++) t.normalize(t._holes[e], !1); Rc.sort(this._holes) } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; if (n.isEmpty()) return null; var i = new Array(n.getCoordinates().length - 1).fill(null); Pl.arraycopy(n.getCoordinates(), 0, i, 0, i.length); var o = pc.minCoordinate(n.getCoordinates()); pc.scroll(i, o), Pl.arraycopy(i, 0, n.getCoordinates(), 0, i.length), n.getCoordinates()[i.length] = i[0], Xl.isCCW(n.getCoordinates()) === r && pc.reverse(n.getCoordinates()) } }, e.prototype.getCoordinate = function () { return this._shell.getCoordinate() }, e.prototype.getNumInteriorRing = function () { return this._holes.length }, e.prototype.getBoundaryDimension = function () { return 1 }, e.prototype.getDimension = function () { return 2 }, e.prototype.getLength = function () { var t = 0; t += this._shell.getLength(); for (var e = 0; e < this._holes.length; e++) t += this._holes[e].getLength(); return t }, e.prototype.getNumPoints = function () { for (var t = this._shell.getNumPoints(), e = 0; e < this._holes.length; e++) t += this._holes[e].getNumPoints(); return t }, e.prototype.reverse = function () { var t = this.copy(); t._shell = this._shell.copy().reverse(), t._holes = new Array(this._holes.length).fill(null); for (var e = 0; e < this._holes.length; e++) t._holes[e] = this._holes[e].copy().reverse(); return t }, e.prototype.convexHull = function () { return this.getExteriorRing().convexHull() }, e.prototype.compareToSameClass = function () { var t = this; if (1 === arguments.length) { var e = arguments[0], n = this._shell, r = e._shell; return n.compareToSameClass(r) } if (2 === arguments.length) { var i = arguments[0], o = arguments[1], s = i, a = this._shell, u = s._shell, l = a.compareToSameClass(u, o); if (0 !== l) return l; for (var c = this.getNumInteriorRing(), h = s.getNumInteriorRing(), p = 0; p < c && p < h;) { var f = t.getInteriorRingN(p), g = s.getInteriorRingN(p), d = f.compareToSameClass(g, o); if (0 !== d) return d; p++ } return p < c ? 1 : p < h ? -1 : 0 } }, e.prototype.apply = function (t) { var e = this; if (gl(t, Kl)) { this._shell.apply(t); for (var n = 0; n < this._holes.length; n++) e._holes[n].apply(t) } else if (gl(t, Fc)) { if (this._shell.apply(t), !t.isDone()) for (var r = 0; r < this._holes.length && (e._holes[r].apply(t), !t.isDone()); r++) ; t.isGeometryChanged() && this.geometryChanged() } else if (gl(t, Dc)) t.filter(this); else if (gl(t, Hl)) { t.filter(this), this._shell.apply(t); for (var i = 0; i < this._holes.length; i++) e._holes[i].apply(t) } }, e.prototype.getBoundary = function () { if (this.isEmpty()) return this.getFactory().createMultiLineString(); var t = new Array(this._holes.length + 1).fill(null); t[0] = this._shell; for (var e = 0; e < this._holes.length; e++) t[e + 1] = this._holes[e]; return t.length <= 1 ? this.getFactory().createLinearRing(t[0].getCoordinateSequence()) : this.getFactory().createMultiLineString(t) }, e.prototype.clone = function () { var e = t.prototype.clone.call(this); e._shell = this._shell.clone(), e._holes = new Array(this._holes.length).fill(null); for (var n = 0; n < this._holes.length; n++) e._holes[n] = this._holes[n].clone(); return e }, e.prototype.getGeometryType = function () { return "Polygon" }, e.prototype.copy = function () { for (var t = this._shell.copy(), n = new Array(this._holes.length).fill(null), r = 0; r < n.length; r++) n[r] = this._holes[r].copy(); return new e(t, n, this._factory) }, e.prototype.getExteriorRing = function () { return this._shell }, e.prototype.isEmpty = function () { return this._shell.isEmpty() }, e.prototype.getInteriorRingN = function (t) { return this._holes[t] }, e.prototype.interfaces_ = function () { return [$c] }, e.prototype.getClass = function () { return e }, n.serialVersionUID.get = function () { return -0x307ffefd8dc97200 }, Object.defineProperties(e, n), e }(Wl), eh = function (t) { function e() { t.apply(this, arguments) } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {serialVersionUID: {configurable: !0}}; return e.prototype.getSortIndex = function () { return Wl.SORTINDEX_MULTIPOINT }, e.prototype.isValid = function () { return !0 }, e.prototype.equalsExact = function () { if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return !!this.isEquivalentClass(e) && t.prototype.equalsExact.call(this, e, n) } return t.prototype.equalsExact.apply(this, arguments) }, e.prototype.getCoordinate = function () { if (1 === arguments.length) { var e = arguments[0]; return this._geometries[e].getCoordinate() } return t.prototype.getCoordinate.apply(this, arguments) }, e.prototype.getBoundaryDimension = function () { return Tc.FALSE }, e.prototype.getDimension = function () { return 0 }, e.prototype.getBoundary = function () { return this.getFactory().createGeometryCollection(null) }, e.prototype.getGeometryType = function () { return "MultiPoint" }, e.prototype.copy = function () { for (var t = new Array(this._geometries.length).fill(null), n = 0; n < t.length; n++) t[n] = this._geometries[n].copy(); return new e(t, this._factory) }, e.prototype.interfaces_ = function () { return [Kc] }, e.prototype.getClass = function () { return e }, n.serialVersionUID.get = function () { return -0x6fb1ed4162e0fc00 }, Object.defineProperties(e, n), e }(kc), nh = function (t) { function e(e, n) { e instanceof ul && n instanceof _h && (e = n.getCoordinateSequenceFactory().create(e)), t.call(this, e, n), this.validateConstruction() } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {MINIMUM_VALID_SIZE: {configurable: !0}, serialVersionUID: {configurable: !0}}; return e.prototype.getSortIndex = function () { return Wl.SORTINDEX_LINEARRING }, e.prototype.getBoundaryDimension = function () { return Tc.FALSE }, e.prototype.isClosed = function () { return !!this.isEmpty() || t.prototype.isClosed.call(this) }, e.prototype.reverse = function () { var t = this._points.copy(); return Jc.reverse(t), this.getFactory().createLinearRing(t) }, e.prototype.validateConstruction = function () { if (!this.isEmpty() && !t.prototype.isClosed.call(this)) throw new el("Points of LinearRing do not form a closed linestring"); if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < e.MINIMUM_VALID_SIZE) throw new el("Invalid number of points in LinearRing (found " + this.getCoordinateSequence().size() + " - must be 0 or >= 4)") }, e.prototype.getGeometryType = function () { return "LinearRing" }, e.prototype.copy = function () { return new e(this._points.copy(), this._factory) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, n.MINIMUM_VALID_SIZE.get = function () { return 4 }, n.serialVersionUID.get = function () { return -0x3b229e262367a600 }, Object.defineProperties(e, n), e }(Zc), rh = function (t) { function e() { t.apply(this, arguments) } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {serialVersionUID: {configurable: !0}}; return e.prototype.getSortIndex = function () { return Wl.SORTINDEX_MULTIPOLYGON }, e.prototype.equalsExact = function () { if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return !!this.isEquivalentClass(e) && t.prototype.equalsExact.call(this, e, n) } return t.prototype.equalsExact.apply(this, arguments) }, e.prototype.getBoundaryDimension = function () { return 1 }, e.prototype.getDimension = function () { return 2 }, e.prototype.reverse = function () { for (var t = this._geometries.length, e = new Array(t).fill(null), n = 0; n < this._geometries.length; n++) e[n] = this._geometries[n].reverse(); return this.getFactory().createMultiPolygon(e) }, e.prototype.getBoundary = function () { if (this.isEmpty()) return this.getFactory().createMultiLineString(); for (var t = new lc, e = 0; e < this._geometries.length; e++) for (var n = this._geometries[e].getBoundary(), r = 0; r < n.getNumGeometries(); r++) t.add(n.getGeometryN(r)); var i = new Array(t.size()).fill(null); return this.getFactory().createMultiLineString(t.toArray(i)) }, e.prototype.getGeometryType = function () { return "MultiPolygon" }, e.prototype.copy = function () { for (var t = new Array(this._geometries.length).fill(null), n = 0; n < t.length; n++) t[n] = this._geometries[n].copy(); return new e(t, this._factory) }, e.prototype.interfaces_ = function () { return [$c] }, e.prototype.getClass = function () { return e }, n.serialVersionUID.get = function () { return -0x7a5aa1369171980 }, Object.defineProperties(e, n), e }(kc), ih = function (t) { this._factory = t || null, this._isUserDataCopied = !1 }, oh = { NoOpGeometryOperation: {configurable: !0}, CoordinateOperation: {configurable: !0}, CoordinateSequenceOperation: {configurable: !0} }; ih.prototype.setCopyUserData = function (t) { this._isUserDataCopied = t }, ih.prototype.edit = function (t, e) { if (null === t) return null; var n = this.editInternal(t, e); return this._isUserDataCopied && n.setUserData(t.getUserData()), n }, ih.prototype.editInternal = function (t, e) { return null === this._factory && (this._factory = t.getFactory()), t instanceof kc ? this.editGeometryCollection(t, e) : t instanceof th ? this.editPolygon(t, e) : t instanceof Qc || t instanceof Zc ? e.edit(t, this._factory) : (ql.shouldNeverReachHere("Unsupported Geometry class: " + t.getClass().getName()), null) }, ih.prototype.editGeometryCollection = function (t, e) { for (var n = e.edit(t, this._factory), r = new lc, i = 0; i < n.getNumGeometries(); i++) { var o = this.edit(n.getGeometryN(i), e); null === o || o.isEmpty() || r.add(o) } return n.getClass() === eh ? this._factory.createMultiPoint(r.toArray([])) : n.getClass() === Gc ? this._factory.createMultiLineString(r.toArray([])) : n.getClass() === rh ? this._factory.createMultiPolygon(r.toArray([])) : this._factory.createGeometryCollection(r.toArray([])) }, ih.prototype.editPolygon = function (t, e) { var n = e.edit(t, this._factory); if (null === n && (n = this._factory.createPolygon(null)), n.isEmpty()) return n; var r = this.edit(n.getExteriorRing(), e); if (null === r || r.isEmpty()) return this._factory.createPolygon(); for (var i = new lc, o = 0; o < n.getNumInteriorRing(); o++) { var s = this.edit(n.getInteriorRingN(o), e); null === s || s.isEmpty() || i.add(s) } return this._factory.createPolygon(r, i.toArray([])) }, ih.prototype.interfaces_ = function () { return [] }, ih.prototype.getClass = function () { return ih }, ih.GeometryEditorOperation = function () { }, oh.NoOpGeometryOperation.get = function () { return sh }, oh.CoordinateOperation.get = function () { return ah }, oh.CoordinateSequenceOperation.get = function () { return uh }, Object.defineProperties(ih, oh); var sh = function () { }; sh.prototype.edit = function (t, e) { return t }, sh.prototype.interfaces_ = function () { return [ih.GeometryEditorOperation] }, sh.prototype.getClass = function () { return sh }; var ah = function () { }; ah.prototype.edit = function (t, e) { var n = this.editCoordinates(t.getCoordinates(), t); return null === n ? t : t instanceof nh ? e.createLinearRing(n) : t instanceof Zc ? e.createLineString(n) : t instanceof Qc ? n.length > 0 ? e.createPoint(n[0]) : e.createPoint() : t }, ah.prototype.interfaces_ = function () { return [ih.GeometryEditorOperation] }, ah.prototype.getClass = function () { return ah }; var uh = function () { }; uh.prototype.edit = function (t, e) { return t instanceof nh ? e.createLinearRing(this.edit(t.getCoordinateSequence(), t)) : t instanceof Zc ? e.createLineString(this.edit(t.getCoordinateSequence(), t)) : t instanceof Qc ? e.createPoint(this.edit(t.getCoordinateSequence(), t)) : t }, uh.prototype.interfaces_ = function () { return [ih.GeometryEditorOperation] }, uh.prototype.getClass = function () { return uh }; var lh = function () { var t = this; if (this._dimension = 3, this._coordinates = null, 1 === arguments.length) { if (arguments[0] instanceof Array) this._coordinates = arguments[0], this._dimension = 3; else if (Number.isInteger(arguments[0])) { var e = arguments[0]; this._coordinates = new Array(e).fill(null); for (var n = 0; n < e; n++) t._coordinates[n] = new ul } else if (gl(arguments[0], Il)) { var r = arguments[0]; if (null === r) return this._coordinates = new Array(0).fill(null), null; this._dimension = r.getDimension(), this._coordinates = new Array(r.size()).fill(null); for (var i = 0; i < this._coordinates.length; i++) t._coordinates[i] = r.getCoordinateCopy(i) } } else if (2 === arguments.length) if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) { var o = arguments[0], s = arguments[1]; this._coordinates = o, this._dimension = s, null === o && (this._coordinates = new Array(0).fill(null)) } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) { var a = arguments[0], u = arguments[1]; this._coordinates = new Array(a).fill(null), this._dimension = u; for (var l = 0; l < a; l++) t._coordinates[l] = new ul } }, ch = {serialVersionUID: {configurable: !0}}; lh.prototype.setOrdinate = function (t, e, n) { switch (e) { case Il.X: this._coordinates[t].x = n; break; case Il.Y: this._coordinates[t].y = n; break; case Il.Z: this._coordinates[t].z = n; break; default: throw new el("invalid ordinateIndex") } }, lh.prototype.size = function () { return this._coordinates.length }, lh.prototype.getOrdinate = function (t, e) { switch (e) { case Il.X: return this._coordinates[t].x; case Il.Y: return this._coordinates[t].y; case Il.Z: return this._coordinates[t].z } return nl.NaN }, lh.prototype.getCoordinate = function () { if (1 === arguments.length) { var t = arguments[0]; return this._coordinates[t] } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; n.x = this._coordinates[e].x, n.y = this._coordinates[e].y, n.z = this._coordinates[e].z } }, lh.prototype.getCoordinateCopy = function (t) { return new ul(this._coordinates[t]) }, lh.prototype.getDimension = function () { return this._dimension }, lh.prototype.getX = function (t) { return this._coordinates[t].x }, lh.prototype.clone = function () { for (var t = new Array(this.size()).fill(null), e = 0; e < this._coordinates.length; e++) t[e] = this._coordinates[e].clone(); return new lh(t, this._dimension) }, lh.prototype.expandEnvelope = function (t) { for (var e = 0; e < this._coordinates.length; e++) t.expandToInclude(this._coordinates[e]); return t }, lh.prototype.copy = function () { for (var t = new Array(this.size()).fill(null), e = 0; e < this._coordinates.length; e++) t[e] = this._coordinates[e].copy(); return new lh(t, this._dimension) }, lh.prototype.toString = function () { if (this._coordinates.length > 0) { var t = new vl(17 * this._coordinates.length); t.append("("), t.append(this._coordinates[0]); for (var e = 1; e < this._coordinates.length; e++) t.append(", "), t.append(this._coordinates[e]); return t.append(")"), t.toString() } return "()" }, lh.prototype.getY = function (t) { return this._coordinates[t].y }, lh.prototype.toCoordinateArray = function () { return this._coordinates }, lh.prototype.interfaces_ = function () { return [Il, al] }, lh.prototype.getClass = function () { return lh }, ch.serialVersionUID.get = function () { return -0xcb44a778db18e00 }, Object.defineProperties(lh, ch); var hh = function () { }, ph = {serialVersionUID: {configurable: !0}, instanceObject: {configurable: !0}}; hh.prototype.readResolve = function () { return hh.instance() }, hh.prototype.create = function () { if (1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; return new lh(t) } if (gl(arguments[0], Il)) { var e = arguments[0]; return new lh(e) } } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; return r > 3 && (r = 3), r < 2 ? new lh(n) : new lh(n, r) } }, hh.prototype.interfaces_ = function () { return [hl, al] }, hh.prototype.getClass = function () { return hh }, hh.instance = function () { return hh.instanceObject }, ph.serialVersionUID.get = function () { return -0x38e49fa6cf6f2e00 }, ph.instanceObject.get = function () { return new hh }, Object.defineProperties(hh, ph); var fh = function (t) { function e() { t.call(this), this.map_ = new Map } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.get = function (t) { return this.map_.get(t) || null }, e.prototype.put = function (t, e) { return this.map_.set(t, e), e }, e.prototype.values = function () { for (var t = new lc, e = this.map_.values(), n = e.next(); !n.done;) t.add(n.value), n = e.next(); return t }, e.prototype.entrySet = function () { var t = new xc; return this.map_.entries().forEach((function (e) { return t.add(e) })), t }, e.prototype.size = function () { return this.map_.size() }, e }(yc), gh = function t() { if (this._modelType = null, this._scale = null, 0 === arguments.length) this._modelType = t.FLOATING; else if (1 === arguments.length) if (arguments[0] instanceof yh) { var e = arguments[0]; this._modelType = e, e === t.FIXED && this.setScale(1) } else if ("number" == typeof arguments[0]) { var n = arguments[0]; this._modelType = t.FIXED, this.setScale(n) } else if (arguments[0] instanceof t) { var r = arguments[0]; this._modelType = r._modelType, this._scale = r._scale } }, dh = {serialVersionUID: {configurable: !0}, maximumPreciseValue: {configurable: !0}}; gh.prototype.equals = function (t) { if (!(t instanceof gh)) return !1; var e = t; return this._modelType === e._modelType && this._scale === e._scale }, gh.prototype.compareTo = function (t) { var e = t, n = this.getMaximumSignificantDigits(), r = e.getMaximumSignificantDigits(); return new _l(n).compareTo(new _l(r)) }, gh.prototype.getScale = function () { return this._scale }, gh.prototype.isFloating = function () { return this._modelType === gh.FLOATING || this._modelType === gh.FLOATING_SINGLE }, gh.prototype.getType = function () { return this._modelType }, gh.prototype.toString = function () { var t = "UNKNOWN"; return this._modelType === gh.FLOATING ? t = "Floating" : this._modelType === gh.FLOATING_SINGLE ? t = "Floating-Single" : this._modelType === gh.FIXED && (t = "Fixed (Scale=" + this.getScale() + ")"), t }, gh.prototype.makePrecise = function () { if ("number" == typeof arguments[0]) { var t = arguments[0]; if (nl.isNaN(t)) return t; if (this._modelType === gh.FLOATING_SINGLE) { return t } return this._modelType === gh.FIXED ? Math.round(t * this._scale) / this._scale : t } if (arguments[0] instanceof ul) { var e = arguments[0]; if (this._modelType === gh.FLOATING) return null; e.x = this.makePrecise(e.x), e.y = this.makePrecise(e.y) } }, gh.prototype.getMaximumSignificantDigits = function () { var t = 16; return this._modelType === gh.FLOATING ? t = 16 : this._modelType === gh.FLOATING_SINGLE ? t = 6 : this._modelType === gh.FIXED && (t = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)))), t }, gh.prototype.setScale = function (t) { this._scale = Math.abs(t) }, gh.prototype.interfaces_ = function () { return [al, il] }, gh.prototype.getClass = function () { return gh }, gh.mostPrecise = function (t, e) { return t.compareTo(e) >= 0 ? t : e }, dh.serialVersionUID.get = function () { return 0x6bee6404e9a25c00 }, dh.maximumPreciseValue.get = function () { return 9007199254740992 }, Object.defineProperties(gh, dh); var yh = function t(e) { this._name = e || null, t.nameToTypeMap.put(e, this) }, vh = {serialVersionUID: {configurable: !0}, nameToTypeMap: {configurable: !0}}; yh.prototype.readResolve = function () { return yh.nameToTypeMap.get(this._name) }, yh.prototype.toString = function () { return this._name }, yh.prototype.interfaces_ = function () { return [al] }, yh.prototype.getClass = function () { return yh }, vh.serialVersionUID.get = function () { return -552860263173159e4 }, vh.nameToTypeMap.get = function () { return new fh }, Object.defineProperties(yh, vh), gh.Type = yh, gh.FIXED = new yh("FIXED"), gh.FLOATING = new yh("FLOATING"), gh.FLOATING_SINGLE = new yh("FLOATING SINGLE"); var _h = function t() { this._precisionModel = new gh, this._SRID = 0, this._coordinateSequenceFactory = t.getDefaultCoordinateSequenceFactory(), 0 === arguments.length || (1 === arguments.length ? gl(arguments[0], hl) ? this._coordinateSequenceFactory = arguments[0] : arguments[0] instanceof gh && (this._precisionModel = arguments[0]) : 2 === arguments.length ? (this._precisionModel = arguments[0], this._SRID = arguments[1]) : 3 === arguments.length && (this._precisionModel = arguments[0], this._SRID = arguments[1], this._coordinateSequenceFactory = arguments[2])) }, mh = {serialVersionUID: {configurable: !0}}; _h.prototype.toGeometry = function (t) { return t.isNull() ? this.createPoint(null) : t.getMinX() === t.getMaxX() && t.getMinY() === t.getMaxY() ? this.createPoint(new ul(t.getMinX(), t.getMinY())) : t.getMinX() === t.getMaxX() || t.getMinY() === t.getMaxY() ? this.createLineString([new ul(t.getMinX(), t.getMinY()), new ul(t.getMaxX(), t.getMaxY())]) : this.createPolygon(this.createLinearRing([new ul(t.getMinX(), t.getMinY()), new ul(t.getMinX(), t.getMaxY()), new ul(t.getMaxX(), t.getMaxY()), new ul(t.getMaxX(), t.getMinY()), new ul(t.getMinX(), t.getMinY())]), null) }, _h.prototype.createLineString = function (t) { return t ? t instanceof Array ? new Zc(this.getCoordinateSequenceFactory().create(t), this) : gl(t, Il) ? new Zc(t, this) : void 0 : new Zc(this.getCoordinateSequenceFactory().create([]), this) }, _h.prototype.createMultiLineString = function () { if (0 === arguments.length) return new Gc(null, this); if (1 === arguments.length) { var t = arguments[0]; return new Gc(t, this) } }, _h.prototype.buildGeometry = function (t) { for (var e = null, n = !1, r = !1, i = t.iterator(); i.hasNext();) { var o = i.next(), s = o.getClass(); null === e && (e = s), s !== e && (n = !0), o.isGeometryCollectionOrDerived() && (r = !0) } if (null === e) return this.createGeometryCollection(); if (n || r) return this.createGeometryCollection(_h.toGeometryArray(t)); var a = t.iterator().next(); if (t.size() > 1) { if (a instanceof th) return this.createMultiPolygon(_h.toPolygonArray(t)); if (a instanceof Zc) return this.createMultiLineString(_h.toLineStringArray(t)); if (a instanceof Qc) return this.createMultiPoint(_h.toPointArray(t)); ql.shouldNeverReachHere("Unhandled class: " + a.getClass().getName()) } return a }, _h.prototype.createMultiPointFromCoords = function (t) { return this.createMultiPoint(null !== t ? this.getCoordinateSequenceFactory().create(t) : null) }, _h.prototype.createPoint = function () { if (0 === arguments.length) return this.createPoint(this.getCoordinateSequenceFactory().create([])); if (1 === arguments.length) { if (arguments[0] instanceof ul) { var t = arguments[0]; return this.createPoint(null !== t ? this.getCoordinateSequenceFactory().create([t]) : null) } if (gl(arguments[0], Il)) { var e = arguments[0]; return new Qc(e, this) } } }, _h.prototype.getCoordinateSequenceFactory = function () { return this._coordinateSequenceFactory }, _h.prototype.createPolygon = function () { if (0 === arguments.length) return new th(null, null, this); if (1 === arguments.length) { if (gl(arguments[0], Il)) { var t = arguments[0]; return this.createPolygon(this.createLinearRing(t)) } if (arguments[0] instanceof Array) { var e = arguments[0]; return this.createPolygon(this.createLinearRing(e)) } if (arguments[0] instanceof nh) { var n = arguments[0]; return this.createPolygon(n, null) } } else if (2 === arguments.length) { var r = arguments[0], i = arguments[1]; return new th(r, i, this) } }, _h.prototype.getSRID = function () { return this._SRID }, _h.prototype.createGeometryCollection = function () { if (0 === arguments.length) return new kc(null, this); if (1 === arguments.length) { var t = arguments[0]; return new kc(t, this) } }, _h.prototype.createGeometry = function (t) { return new ih(this).edit(t, { edit: function () { if (2 === arguments.length) { var t = arguments[0]; return this._coordinateSequenceFactory.create(t) } } }) }, _h.prototype.getPrecisionModel = function () { return this._precisionModel }, _h.prototype.createLinearRing = function () { if (0 === arguments.length) return this.createLinearRing(this.getCoordinateSequenceFactory().create([])); if (1 === arguments.length) { if (arguments[0] instanceof Array) { var t = arguments[0]; return this.createLinearRing(null !== t ? this.getCoordinateSequenceFactory().create(t) : null) } if (gl(arguments[0], Il)) { var e = arguments[0]; return new nh(e, this) } } }, _h.prototype.createMultiPolygon = function () { if (0 === arguments.length) return new rh(null, this); if (1 === arguments.length) { var t = arguments[0]; return new rh(t, this) } }, _h.prototype.createMultiPoint = function () { var t = this; if (0 === arguments.length) return new eh(null, this); if (1 === arguments.length) { if (arguments[0] instanceof Array) { var e = arguments[0]; return new eh(e, this) } if (arguments[0] instanceof Array) { var n = arguments[0]; return this.createMultiPoint(null !== n ? this.getCoordinateSequenceFactory().create(n) : null) } if (gl(arguments[0], Il)) { var r = arguments[0]; if (null === r) return this.createMultiPoint(new Array(0).fill(null)); for (var i = new Array(r.size()).fill(null), o = 0; o < r.size(); o++) { var s = t.getCoordinateSequenceFactory().create(1, r.getDimension()); Jc.copy(r, o, s, 0, 1), i[o] = t.createPoint(s) } return this.createMultiPoint(i) } } }, _h.prototype.interfaces_ = function () { return [al] }, _h.prototype.getClass = function () { return _h }, _h.toMultiPolygonArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.toGeometryArray = function (t) { if (null === t) return null; var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.getDefaultCoordinateSequenceFactory = function () { return hh.instance() }, _h.toMultiLineStringArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.toLineStringArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.toMultiPointArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.toLinearRingArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.toPointArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.toPolygonArray = function (t) { var e = new Array(t.size()).fill(null); return t.toArray(e) }, _h.createPointFromInternalCoord = function (t, e) { return e.getPrecisionModel().makePrecise(t), e.getFactory().createPoint(t) }, mh.serialVersionUID.get = function () { return -0x5ea75f2051eeb400 }, Object.defineProperties(_h, mh); var xh = ["Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon"], Eh = function (t) { this.geometryFactory = t || new _h }; Eh.prototype.read = function (t) { var e, n = (e = "string" == typeof t ? JSON.parse(t) : t).type; if (!bh[n]) throw new Error("Unknown GeoJSON type: " + e.type); return -1 !== xh.indexOf(n) ? bh[n].apply(this, [e.coordinates]) : "GeometryCollection" === n ? bh[n].apply(this, [e.geometries]) : bh[n].apply(this, [e]) }, Eh.prototype.write = function (t) { var e = t.getGeometryType(); if (!wh[e]) throw new Error("Geometry is not supported"); return wh[e].apply(this, [t]) }; var bh = { Feature: function (t) { var e = {}; for (var n in t) e[n] = t[n]; if (t.geometry) { var r = t.geometry.type; if (!bh[r]) throw new Error("Unknown GeoJSON type: " + t.type); e.geometry = this.read(t.geometry) } return t.bbox && (e.bbox = bh.bbox.apply(this, [t.bbox])), e }, FeatureCollection: function (t) { var e = {}; if (t.features) { e.features = []; for (var n = 0; n < t.features.length; ++n) e.features.push(this.read(t.features[n])) } return t.bbox && (e.bbox = this.parse.bbox.apply(this, [t.bbox])), e }, coordinates: function (t) { for (var e = [], n = 0; n < t.length; ++n) { var r = t[n]; e.push(new ul(r[0], r[1])) } return e }, bbox: function (t) { return this.geometryFactory.createLinearRing([new ul(t[0], t[1]), new ul(t[2], t[1]), new ul(t[2], t[3]), new ul(t[0], t[3]), new ul(t[0], t[1])]) }, Point: function (t) { var e = new ul(t[0], t[1]); return this.geometryFactory.createPoint(e) }, MultiPoint: function (t) { for (var e = [], n = 0; n < t.length; ++n) e.push(bh.Point.apply(this, [t[n]])); return this.geometryFactory.createMultiPoint(e) }, LineString: function (t) { var e = bh.coordinates.apply(this, [t]); return this.geometryFactory.createLineString(e) }, MultiLineString: function (t) { for (var e = [], n = 0; n < t.length; ++n) e.push(bh.LineString.apply(this, [t[n]])); return this.geometryFactory.createMultiLineString(e) }, Polygon: function (t) { for (var e = bh.coordinates.apply(this, [t[0]]), n = this.geometryFactory.createLinearRing(e), r = [], i = 1; i < t.length; ++i) { var o = t[i], s = bh.coordinates.apply(this, [o]), a = this.geometryFactory.createLinearRing(s); r.push(a) } return this.geometryFactory.createPolygon(n, r) }, MultiPolygon: function (t) { for (var e = [], n = 0; n < t.length; ++n) { var r = t[n]; e.push(bh.Polygon.apply(this, [r])) } return this.geometryFactory.createMultiPolygon(e) }, GeometryCollection: function (t) { for (var e = [], n = 0; n < t.length; ++n) { var r = t[n]; e.push(this.read(r)) } return this.geometryFactory.createGeometryCollection(e) } }, wh = { coordinate: function (t) { return [t.x, t.y] }, Point: function (t) { return {type: "Point", coordinates: wh.coordinate.apply(this, [t.getCoordinate()])} }, MultiPoint: function (t) { for (var e = [], n = 0; n < t._geometries.length; ++n) { var r = t._geometries[n], i = wh.Point.apply(this, [r]); e.push(i.coordinates) } return {type: "MultiPoint", coordinates: e} }, LineString: function (t) { for (var e = [], n = t.getCoordinates(), r = 0; r < n.length; ++r) { var i = n[r]; e.push(wh.coordinate.apply(this, [i])) } return {type: "LineString", coordinates: e} }, MultiLineString: function (t) { for (var e = [], n = 0; n < t._geometries.length; ++n) { var r = t._geometries[n], i = wh.LineString.apply(this, [r]); e.push(i.coordinates) } return {type: "MultiLineString", coordinates: e} }, Polygon: function (t) { var e = [], n = wh.LineString.apply(this, [t._shell]); e.push(n.coordinates); for (var r = 0; r < t._holes.length; ++r) { var i = t._holes[r], o = wh.LineString.apply(this, [i]); e.push(o.coordinates) } return {type: "Polygon", coordinates: e} }, MultiPolygon: function (t) { for (var e = [], n = 0; n < t._geometries.length; ++n) { var r = t._geometries[n], i = wh.Polygon.apply(this, [r]); e.push(i.coordinates) } return {type: "MultiPolygon", coordinates: e} }, GeometryCollection: function (t) { for (var e = [], n = 0; n < t._geometries.length; ++n) { var r = t._geometries[n], i = r.getGeometryType(); e.push(wh[i].apply(this, [r])) } return {type: "GeometryCollection", geometries: e} } }, Ih = function (t) { this.geometryFactory = t || new _h, this.precisionModel = this.geometryFactory.getPrecisionModel(), this.parser = new Eh(this.geometryFactory) }; Ih.prototype.read = function (t) { var e = this.parser.read(t); return this.precisionModel.getType() === gh.FIXED && this.reducePrecision(e), e }, Ih.prototype.reducePrecision = function (t) { var e, n; if (t.coordinate) this.precisionModel.makePrecise(t.coordinate); else if (t.points) for (e = 0, n = t.points.length; e < n; e++) this.precisionModel.makePrecise(t.points[e]); else if (t.geometries) for (e = 0, n = t.geometries.length; e < n; e++) this.reducePrecision(t.geometries[e]) }; var Nh = function () { this.parser = new Eh(this.geometryFactory) }; Nh.prototype.write = function (t) { return this.parser.write(t) }; var Sh = function () { }, Ch = {ON: {configurable: !0}, LEFT: {configurable: !0}, RIGHT: {configurable: !0}}; function Ph(t) { this.message = t || "" } function Mh() { this.array_ = [] } Sh.prototype.interfaces_ = function () { return [] }, Sh.prototype.getClass = function () { return Sh }, Sh.opposite = function (t) { return t === Sh.LEFT ? Sh.RIGHT : t === Sh.RIGHT ? Sh.LEFT : t }, Ch.ON.get = function () { return 0 }, Ch.LEFT.get = function () { return 1 }, Ch.RIGHT.get = function () { return 2 }, Object.defineProperties(Sh, Ch), Ph.prototype = new Error, Ph.prototype.name = "EmptyStackException", Mh.prototype = new ac, Mh.prototype.add = function (t) { return this.array_.push(t), !0 }, Mh.prototype.get = function (t) { if (t < 0 || t >= this.size()) throw new Error; return this.array_[t] }, Mh.prototype.push = function (t) { return this.array_.push(t), t }, Mh.prototype.pop = function (t) { if (0 === this.array_.length) throw new Ph; return this.array_.pop() }, Mh.prototype.peek = function () { if (0 === this.array_.length) throw new Ph; return this.array_[this.array_.length - 1] }, Mh.prototype.empty = function () { return 0 === this.array_.length }, Mh.prototype.isEmpty = function () { return this.empty() }, Mh.prototype.search = function (t) { return this.array_.indexOf(t) }, Mh.prototype.size = function () { return this.array_.length }, Mh.prototype.toArray = function () { for (var t = [], e = 0, n = this.array_.length; e < n; e++) t.push(this.array_[e]); return t }; var Lh = function () { this._minIndex = -1, this._minCoord = null, this._minDe = null, this._orientedDe = null }; Lh.prototype.getCoordinate = function () { return this._minCoord }, Lh.prototype.getRightmostSide = function (t, e) { var n = this.getRightmostSideOfSegment(t, e); return n < 0 && (n = this.getRightmostSideOfSegment(t, e - 1)), n < 0 && (this._minCoord = null, this.checkForRightmostCoordinate(t)), n }, Lh.prototype.findRightmostEdgeAtVertex = function () { var t = this._minDe.getEdge().getCoordinates(); ql.isTrue(this._minIndex > 0 && this._minIndex < t.length, "rightmost point expected to be interior vertex of edge"); var e = t[this._minIndex - 1], n = t[this._minIndex + 1], r = Xl.computeOrientation(this._minCoord, n, e), i = !1; (e.y < this._minCoord.y && n.y < this._minCoord.y && r === Xl.COUNTERCLOCKWISE || e.y > this._minCoord.y && n.y > this._minCoord.y && r === Xl.CLOCKWISE) && (i = !0), i && (this._minIndex = this._minIndex - 1) }, Lh.prototype.getRightmostSideOfSegment = function (t, e) { var n = t.getEdge().getCoordinates(); if (e < 0 || e + 1 >= n.length) return -1; if (n[e].y === n[e + 1].y) return -1; var r = Sh.LEFT; return n[e].y < n[e + 1].y && (r = Sh.RIGHT), r }, Lh.prototype.getEdge = function () { return this._orientedDe }, Lh.prototype.checkForRightmostCoordinate = function (t) { for (var e = this, n = t.getEdge().getCoordinates(), r = 0; r < n.length - 1; r++) (null === e._minCoord || n[r].x > e._minCoord.x) && (e._minDe = t, e._minIndex = r, e._minCoord = n[r]) }, Lh.prototype.findRightmostEdgeAtNode = function () { var t = this._minDe.getNode().getEdges(); this._minDe = t.getRightmostEdge(), this._minDe.isForward() || (this._minDe = this._minDe.getSym(), this._minIndex = this._minDe.getEdge().getCoordinates().length - 1) }, Lh.prototype.findEdge = function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); n.isForward() && this.checkForRightmostCoordinate(n) } ql.isTrue(0 !== this._minIndex || this._minCoord.equals(this._minDe.getCoordinate()), "inconsistency in rightmost processing"), 0 === this._minIndex ? this.findRightmostEdgeAtNode() : this.findRightmostEdgeAtVertex(), this._orientedDe = this._minDe, this.getRightmostSide(this._minDe, this._minIndex) === Sh.LEFT && (this._orientedDe = this._minDe.getSym()) }, Lh.prototype.interfaces_ = function () { return [] }, Lh.prototype.getClass = function () { return Lh }; var Oh = function (t) { function e(n, r) { t.call(this, e.msgWithCoord(n, r)), this.pt = r ? new ul(r) : null, this.name = "TopologyException" } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.getCoordinate = function () { return this.pt }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e.msgWithCoord = function (t, e) { return e ? t : t + " [ " + e + " ]" }, e }(kl), Rh = function () { this.array_ = [] }; Rh.prototype.addLast = function (t) { this.array_.push(t) }, Rh.prototype.removeFirst = function () { return this.array_.shift() }, Rh.prototype.isEmpty = function () { return 0 === this.array_.length }; var Th = function () { this._finder = null, this._dirEdgeList = new lc, this._nodes = new lc, this._rightMostCoord = null, this._env = null, this._finder = new Lh }; Th.prototype.clearVisitedEdges = function () { for (var t = this._dirEdgeList.iterator(); t.hasNext();) { t.next().setVisited(!1) } }, Th.prototype.getRightmostCoordinate = function () { return this._rightMostCoord }, Th.prototype.computeNodeDepth = function (t) { for (var e = null, n = t.getEdges().iterator(); n.hasNext();) { var r = n.next(); if (r.isVisited() || r.getSym().isVisited()) { e = r; break } } if (null === e) throw new Oh("unable to find edge to compute depths at " + t.getCoordinate()); t.getEdges().computeDepths(e); for (var i = t.getEdges().iterator(); i.hasNext();) { var o = i.next(); o.setVisited(!0), this.copySymDepths(o) } }, Th.prototype.computeDepth = function (t) { this.clearVisitedEdges(); var e = this._finder.getEdge(); e.setEdgeDepths(Sh.RIGHT, t), this.copySymDepths(e), this.computeDepths(e) }, Th.prototype.create = function (t) { this.addReachable(t), this._finder.findEdge(this._dirEdgeList), this._rightMostCoord = this._finder.getCoordinate() }, Th.prototype.findResultEdges = function () { for (var t = this._dirEdgeList.iterator(); t.hasNext();) { var e = t.next(); e.getDepth(Sh.RIGHT) >= 1 && e.getDepth(Sh.LEFT) <= 0 && !e.isInteriorAreaEdge() && e.setInResult(!0) } }, Th.prototype.computeDepths = function (t) { var e = new xc, n = new Rh, r = t.getNode(); for (n.addLast(r), e.add(r), t.setVisited(!0); !n.isEmpty();) { var i = n.removeFirst(); e.add(i), this.computeNodeDepth(i); for (var o = i.getEdges().iterator(); o.hasNext();) { var s = o.next().getSym(); if (!s.isVisited()) { var a = s.getNode(); e.contains(a) || (n.addLast(a), e.add(a)) } } } }, Th.prototype.compareTo = function (t) { var e = t; return this._rightMostCoord.x < e._rightMostCoord.x ? -1 : this._rightMostCoord.x > e._rightMostCoord.x ? 1 : 0 }, Th.prototype.getEnvelope = function () { if (null === this._env) { for (var t = new Ll, e = this._dirEdgeList.iterator(); e.hasNext();) for (var n = e.next().getEdge().getCoordinates(), r = 0; r < n.length - 1; r++) t.expandToInclude(n[r]); this._env = t } return this._env }, Th.prototype.addReachable = function (t) { var e = new Mh; for (e.add(t); !e.empty();) { var n = e.pop(); this.add(n, e) } }, Th.prototype.copySymDepths = function (t) { var e = t.getSym(); e.setDepth(Sh.LEFT, t.getDepth(Sh.RIGHT)), e.setDepth(Sh.RIGHT, t.getDepth(Sh.LEFT)) }, Th.prototype.add = function (t, e) { t.setVisited(!0), this._nodes.add(t); for (var n = t.getEdges().iterator(); n.hasNext();) { var r = n.next(); this._dirEdgeList.add(r); var i = r.getSym().getNode(); i.isVisited() || e.push(i) } }, Th.prototype.getNodes = function () { return this._nodes }, Th.prototype.getDirectedEdges = function () { return this._dirEdgeList }, Th.prototype.interfaces_ = function () { return [il] }, Th.prototype.getClass = function () { return Th }; var Ah = function t() { var e = this; if (this.location = null, 1 === arguments.length) { if (arguments[0] instanceof Array) { var n = arguments[0]; this.init(n.length) } else if (Number.isInteger(arguments[0])) { var r = arguments[0]; this.init(1), this.location[Sh.ON] = r } else if (arguments[0] instanceof t) { var i = arguments[0]; if (this.init(i.location.length), null !== i) for (var o = 0; o < this.location.length; o++) e.location[o] = i.location[o] } } else if (3 === arguments.length) { var s = arguments[0], a = arguments[1], u = arguments[2]; this.init(3), this.location[Sh.ON] = s, this.location[Sh.LEFT] = a, this.location[Sh.RIGHT] = u } }; Ah.prototype.setAllLocations = function (t) { for (var e = 0; e < this.location.length; e++) this.location[e] = t }, Ah.prototype.isNull = function () { for (var t = 0; t < this.location.length; t++) if (this.location[t] !== pl.NONE) return !1; return !0 }, Ah.prototype.setAllLocationsIfNull = function (t) { for (var e = 0; e < this.location.length; e++) this.location[e] === pl.NONE && (this.location[e] = t) }, Ah.prototype.isLine = function () { return 1 === this.location.length }, Ah.prototype.merge = function (t) { if (t.location.length > this.location.length) { var e = new Array(3).fill(null); e[Sh.ON] = this.location[Sh.ON], e[Sh.LEFT] = pl.NONE, e[Sh.RIGHT] = pl.NONE, this.location = e } for (var n = 0; n < this.location.length; n++) this.location[n] === pl.NONE && n < t.location.length && (this.location[n] = t.location[n]) }, Ah.prototype.getLocations = function () { return this.location }, Ah.prototype.flip = function () { if (this.location.length <= 1) return null; var t = this.location[Sh.LEFT]; this.location[Sh.LEFT] = this.location[Sh.RIGHT], this.location[Sh.RIGHT] = t }, Ah.prototype.toString = function () { var t = new vl; return this.location.length > 1 && t.append(pl.toLocationSymbol(this.location[Sh.LEFT])), t.append(pl.toLocationSymbol(this.location[Sh.ON])), this.location.length > 1 && t.append(pl.toLocationSymbol(this.location[Sh.RIGHT])), t.toString() }, Ah.prototype.setLocations = function (t, e, n) { this.location[Sh.ON] = t, this.location[Sh.LEFT] = e, this.location[Sh.RIGHT] = n }, Ah.prototype.get = function (t) { return t < this.location.length ? this.location[t] : pl.NONE }, Ah.prototype.isArea = function () { return this.location.length > 1 }, Ah.prototype.isAnyNull = function () { for (var t = 0; t < this.location.length; t++) if (this.location[t] === pl.NONE) return !0; return !1 }, Ah.prototype.setLocation = function () { if (1 === arguments.length) { var t = arguments[0]; this.setLocation(Sh.ON, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.location[e] = n } }, Ah.prototype.init = function (t) { this.location = new Array(t).fill(null), this.setAllLocations(pl.NONE) }, Ah.prototype.isEqualOnSide = function (t, e) { return this.location[e] === t.location[e] }, Ah.prototype.allPositionsEqual = function (t) { for (var e = 0; e < this.location.length; e++) if (this.location[e] !== t) return !1; return !0 }, Ah.prototype.interfaces_ = function () { return [] }, Ah.prototype.getClass = function () { return Ah }; var Dh = function t() { if (this.elt = new Array(2).fill(null), 1 === arguments.length) { if (Number.isInteger(arguments[0])) { var e = arguments[0]; this.elt[0] = new Ah(e), this.elt[1] = new Ah(e) } else if (arguments[0] instanceof t) { var n = arguments[0]; this.elt[0] = new Ah(n.elt[0]), this.elt[1] = new Ah(n.elt[1]) } } else if (2 === arguments.length) { var r = arguments[0], i = arguments[1]; this.elt[0] = new Ah(pl.NONE), this.elt[1] = new Ah(pl.NONE), this.elt[r].setLocation(i) } else if (3 === arguments.length) { var o = arguments[0], s = arguments[1], a = arguments[2]; this.elt[0] = new Ah(o, s, a), this.elt[1] = new Ah(o, s, a) } else if (4 === arguments.length) { var u = arguments[0], l = arguments[1], c = arguments[2], h = arguments[3]; this.elt[0] = new Ah(pl.NONE, pl.NONE, pl.NONE), this.elt[1] = new Ah(pl.NONE, pl.NONE, pl.NONE), this.elt[u].setLocations(l, c, h) } }; Dh.prototype.getGeometryCount = function () { var t = 0; return this.elt[0].isNull() || t++, this.elt[1].isNull() || t++, t }, Dh.prototype.setAllLocations = function (t, e) { this.elt[t].setAllLocations(e) }, Dh.prototype.isNull = function (t) { return this.elt[t].isNull() }, Dh.prototype.setAllLocationsIfNull = function () { if (1 === arguments.length) { var t = arguments[0]; this.setAllLocationsIfNull(0, t), this.setAllLocationsIfNull(1, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.elt[e].setAllLocationsIfNull(n) } }, Dh.prototype.isLine = function (t) { return this.elt[t].isLine() }, Dh.prototype.merge = function (t) { for (var e = this, n = 0; n < 2; n++) null === e.elt[n] && null !== t.elt[n] ? e.elt[n] = new Ah(t.elt[n]) : e.elt[n].merge(t.elt[n]) }, Dh.prototype.flip = function () { this.elt[0].flip(), this.elt[1].flip() }, Dh.prototype.getLocation = function () { if (1 === arguments.length) { var t = arguments[0]; return this.elt[t].get(Sh.ON) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return this.elt[e].get(n) } }, Dh.prototype.toString = function () { var t = new vl; return null !== this.elt[0] && (t.append("A:"), t.append(this.elt[0].toString())), null !== this.elt[1] && (t.append(" B:"), t.append(this.elt[1].toString())), t.toString() }, Dh.prototype.isArea = function () { if (0 === arguments.length) return this.elt[0].isArea() || this.elt[1].isArea(); if (1 === arguments.length) { var t = arguments[0]; return this.elt[t].isArea() } }, Dh.prototype.isAnyNull = function (t) { return this.elt[t].isAnyNull() }, Dh.prototype.setLocation = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.elt[t].setLocation(Sh.ON, e) } else if (3 === arguments.length) { var n = arguments[0], r = arguments[1], i = arguments[2]; this.elt[n].setLocation(r, i) } }, Dh.prototype.isEqualOnSide = function (t, e) { return this.elt[0].isEqualOnSide(t.elt[0], e) && this.elt[1].isEqualOnSide(t.elt[1], e) }, Dh.prototype.allPositionsEqual = function (t, e) { return this.elt[t].allPositionsEqual(e) }, Dh.prototype.toLine = function (t) { this.elt[t].isArea() && (this.elt[t] = new Ah(this.elt[t].location[0])) }, Dh.prototype.interfaces_ = function () { return [] }, Dh.prototype.getClass = function () { return Dh }, Dh.toLineLabel = function (t) { for (var e = new Dh(pl.NONE), n = 0; n < 2; n++) e.setLocation(n, t.getLocation(n)); return e }; var Fh = function () { this._startDe = null, this._maxNodeDegree = -1, this._edges = new lc, this._pts = new lc, this._label = new Dh(pl.NONE), this._ring = null, this._isHole = null, this._shell = null, this._holes = new lc, this._geometryFactory = null; var t = arguments[0], e = arguments[1]; this._geometryFactory = e, this.computePoints(t), this.computeRing() }; Fh.prototype.computeRing = function () { if (null !== this._ring) return null; for (var t = new Array(this._pts.size()).fill(null), e = 0; e < this._pts.size(); e++) t[e] = this._pts.get(e); this._ring = this._geometryFactory.createLinearRing(t), this._isHole = Xl.isCCW(this._ring.getCoordinates()) }, Fh.prototype.isIsolated = function () { return 1 === this._label.getGeometryCount() }, Fh.prototype.computePoints = function (t) { var e = this; this._startDe = t; var n = t, r = !0; do { if (null === n) throw new Oh("Found null DirectedEdge"); if (n.getEdgeRing() === e) throw new Oh("Directed Edge visited twice during ring-building at " + n.getCoordinate()); e._edges.add(n); var i = n.getLabel(); ql.isTrue(i.isArea()), e.mergeLabel(i), e.addPoints(n.getEdge(), n.isForward(), r), r = !1, e.setEdgeRing(n, e), n = e.getNext(n) } while (n !== this._startDe) }, Fh.prototype.getLinearRing = function () { return this._ring }, Fh.prototype.getCoordinate = function (t) { return this._pts.get(t) }, Fh.prototype.computeMaxNodeDegree = function () { var t = this; this._maxNodeDegree = 0; var e = this._startDe; do { var n = e.getNode().getEdges().getOutgoingDegree(t); n > t._maxNodeDegree && (t._maxNodeDegree = n), e = t.getNext(e) } while (e !== this._startDe); this._maxNodeDegree *= 2 }, Fh.prototype.addPoints = function (t, e, n) { var r = t.getCoordinates(); if (e) { var i = 1; n && (i = 0); for (var o = i; o < r.length; o++) this._pts.add(r[o]) } else { var s = r.length - 2; n && (s = r.length - 1); for (var a = s; a >= 0; a--) this._pts.add(r[a]) } }, Fh.prototype.isHole = function () { return this._isHole }, Fh.prototype.setInResult = function () { var t = this._startDe; do { t.getEdge().setInResult(!0), t = t.getNext() } while (t !== this._startDe) }, Fh.prototype.containsPoint = function (t) { var e = this.getLinearRing(); if (!e.getEnvelopeInternal().contains(t)) return !1; if (!Xl.isPointInRing(t, e.getCoordinates())) return !1; for (var n = this._holes.iterator(); n.hasNext();) { if (n.next().containsPoint(t)) return !1 } return !0 }, Fh.prototype.addHole = function (t) { this._holes.add(t) }, Fh.prototype.isShell = function () { return null === this._shell }, Fh.prototype.getLabel = function () { return this._label }, Fh.prototype.getEdges = function () { return this._edges }, Fh.prototype.getMaxNodeDegree = function () { return this._maxNodeDegree < 0 && this.computeMaxNodeDegree(), this._maxNodeDegree }, Fh.prototype.getShell = function () { return this._shell }, Fh.prototype.mergeLabel = function () { if (1 === arguments.length) { var t = arguments[0]; this.mergeLabel(t, 0), this.mergeLabel(t, 1) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1], r = e.getLocation(n, Sh.RIGHT); if (r === pl.NONE) return null; if (this._label.getLocation(n) === pl.NONE) return this._label.setLocation(n, r), null } }, Fh.prototype.setShell = function (t) { this._shell = t, null !== t && t.addHole(this) }, Fh.prototype.toPolygon = function (t) { for (var e = new Array(this._holes.size()).fill(null), n = 0; n < this._holes.size(); n++) e[n] = this._holes.get(n).getLinearRing(); return t.createPolygon(this.getLinearRing(), e) }, Fh.prototype.interfaces_ = function () { return [] }, Fh.prototype.getClass = function () { return Fh }; var kh = function (t) { function e() { var e = arguments[0], n = arguments[1]; t.call(this, e, n) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.setEdgeRing = function (t, e) { t.setMinEdgeRing(e) }, e.prototype.getNext = function (t) { return t.getNextMin() }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(Fh), Gh = function (t) { function e() { var e = arguments[0], n = arguments[1]; t.call(this, e, n) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.buildMinimalRings = function () { var t = new lc, e = this._startDe; do { if (null === e.getMinEdgeRing()) { var n = new kh(e, this._geometryFactory); t.add(n) } e = e.getNext() } while (e !== this._startDe); return t }, e.prototype.setEdgeRing = function (t, e) { t.setEdgeRing(e) }, e.prototype.linkDirectedEdgesForMinimalEdgeRings = function () { var t = this._startDe; do { t.getNode().getEdges().linkMinimalDirectedEdges(this), t = t.getNext() } while (t !== this._startDe) }, e.prototype.getNext = function (t) { return t.getNext() }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(Fh), qh = function () { if (this._label = null, this._isInResult = !1, this._isCovered = !1, this._isCoveredSet = !1, this._isVisited = !1, 0 === arguments.length) ; else if (1 === arguments.length) { var t = arguments[0]; this._label = t } }; qh.prototype.setVisited = function (t) { this._isVisited = t }, qh.prototype.setInResult = function (t) { this._isInResult = t }, qh.prototype.isCovered = function () { return this._isCovered }, qh.prototype.isCoveredSet = function () { return this._isCoveredSet }, qh.prototype.setLabel = function (t) { this._label = t }, qh.prototype.getLabel = function () { return this._label }, qh.prototype.setCovered = function (t) { this._isCovered = t, this._isCoveredSet = !0 }, qh.prototype.updateIM = function (t) { ql.isTrue(this._label.getGeometryCount() >= 2, "found partial label"), this.computeIM(t) }, qh.prototype.isInResult = function () { return this._isInResult }, qh.prototype.isVisited = function () { return this._isVisited }, qh.prototype.interfaces_ = function () { return [] }, qh.prototype.getClass = function () { return qh }; var Bh = function (t) { function e() { t.call(this), this._coord = null, this._edges = null; var e = arguments[0], n = arguments[1]; this._coord = e, this._edges = n, this._label = new Dh(0, pl.NONE) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.isIncidentEdgeInResult = function () { for (var t = this.getEdges().getEdges().iterator(); t.hasNext();) { if (t.next().getEdge().isInResult()) return !0 } return !1 }, e.prototype.isIsolated = function () { return 1 === this._label.getGeometryCount() }, e.prototype.getCoordinate = function () { return this._coord }, e.prototype.print = function (t) { t.println("node " + this._coord + " lbl: " + this._label) }, e.prototype.computeIM = function (t) { }, e.prototype.computeMergedLocation = function (t, e) { var n = pl.NONE; if (n = this._label.getLocation(e), !t.isNull(e)) { var r = t.getLocation(e); n !== pl.BOUNDARY && (n = r) } return n }, e.prototype.setLabel = function () { if (2 !== arguments.length) return t.prototype.setLabel.apply(this, arguments); var e = arguments[0], n = arguments[1]; null === this._label ? this._label = new Dh(e, n) : this._label.setLocation(e, n) }, e.prototype.getEdges = function () { return this._edges }, e.prototype.mergeLabel = function () { var t = this; if (arguments[0] instanceof e) { var n = arguments[0]; this.mergeLabel(n._label) } else if (arguments[0] instanceof Dh) for (var r = arguments[0], i = 0; i < 2; i++) { var o = t.computeMergedLocation(r, i), s = t._label.getLocation(i); s === pl.NONE && t._label.setLocation(i, o) } }, e.prototype.add = function (t) { this._edges.insert(t), t.setNode(this) }, e.prototype.setLabelBoundary = function (t) { if (null === this._label) return null; var e = pl.NONE; null !== this._label && (e = this._label.getLocation(t)); var n = null; switch (e) { case pl.BOUNDARY: n = pl.INTERIOR; break; case pl.INTERIOR: default: n = pl.BOUNDARY } this._label.setLocation(t, n) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(qh), zh = function () { this.nodeMap = new Cc, this.nodeFact = null; var t = arguments[0]; this.nodeFact = t }; zh.prototype.find = function (t) { return this.nodeMap.get(t) }, zh.prototype.addNode = function () { if (arguments[0] instanceof ul) { var t = arguments[0], e = this.nodeMap.get(t); return null === e && (e = this.nodeFact.createNode(t), this.nodeMap.put(t, e)), e } if (arguments[0] instanceof Bh) { var n = arguments[0], r = this.nodeMap.get(n.getCoordinate()); return null === r ? (this.nodeMap.put(n.getCoordinate(), n), n) : (r.mergeLabel(n), r) } }, zh.prototype.print = function (t) { for (var e = this.iterator(); e.hasNext();) { e.next().print(t) } }, zh.prototype.iterator = function () { return this.nodeMap.values().iterator() }, zh.prototype.values = function () { return this.nodeMap.values() }, zh.prototype.getBoundaryNodes = function (t) { for (var e = new lc, n = this.iterator(); n.hasNext();) { var r = n.next(); r.getLabel().getLocation(t) === pl.BOUNDARY && e.add(r) } return e }, zh.prototype.add = function (t) { var e = t.getCoordinate(); this.addNode(e).add(t) }, zh.prototype.interfaces_ = function () { return [] }, zh.prototype.getClass = function () { return zh }; var jh = function () { }, Uh = {NE: {configurable: !0}, NW: {configurable: !0}, SW: {configurable: !0}, SE: {configurable: !0}}; jh.prototype.interfaces_ = function () { return [] }, jh.prototype.getClass = function () { return jh }, jh.isNorthern = function (t) { return t === jh.NE || t === jh.NW }, jh.isOpposite = function (t, e) { return t !== e && 2 === (t - e + 4) % 4 }, jh.commonHalfPlane = function (t, e) { if (t === e) return t; if (2 === (t - e + 4) % 4) return -1; var n = t < e ? t : e; return 0 === n && 3 === (t > e ? t : e) ? 3 : n }, jh.isInHalfPlane = function (t, e) { return e === jh.SE ? t === jh.SE || t === jh.SW : t === e || t === e + 1 }, jh.quadrant = function () { if ("number" == typeof arguments[0] && "number" == typeof arguments[1]) { var t = arguments[0], e = arguments[1]; if (0 === t && 0 === e) throw new el("Cannot compute the quadrant for point ( " + t + ", " + e + " )"); return t >= 0 ? e >= 0 ? jh.NE : jh.SE : e >= 0 ? jh.NW : jh.SW } if (arguments[0] instanceof ul && arguments[1] instanceof ul) { var n = arguments[0], r = arguments[1]; if (r.x === n.x && r.y === n.y) throw new el("Cannot compute the quadrant for two identical points " + n); return r.x >= n.x ? r.y >= n.y ? jh.NE : jh.SE : r.y >= n.y ? jh.NW : jh.SW } }, Uh.NE.get = function () { return 0 }, Uh.NW.get = function () { return 1 }, Uh.SW.get = function () { return 2 }, Uh.SE.get = function () { return 3 }, Object.defineProperties(jh, Uh); var Vh = function () { if (this._edge = null, this._label = null, this._node = null, this._p0 = null, this._p1 = null, this._dx = null, this._dy = null, this._quadrant = null, 1 === arguments.length) { var t = arguments[0]; this._edge = t } else if (3 === arguments.length) { var e = arguments[0], n = arguments[1], r = arguments[2], i = null; this._edge = e, this.init(n, r), this._label = i } else if (4 === arguments.length) { var o = arguments[0], s = arguments[1], a = arguments[2], u = arguments[3]; this._edge = o, this.init(s, a), this._label = u } }; Vh.prototype.compareDirection = function (t) { return this._dx === t._dx && this._dy === t._dy ? 0 : this._quadrant > t._quadrant ? 1 : this._quadrant < t._quadrant ? -1 : Xl.computeOrientation(t._p0, t._p1, this._p1) }, Vh.prototype.getDy = function () { return this._dy }, Vh.prototype.getCoordinate = function () { return this._p0 }, Vh.prototype.setNode = function (t) { this._node = t }, Vh.prototype.print = function (t) { var e = Math.atan2(this._dy, this._dx), n = this.getClass().getName(), r = n.lastIndexOf("."), i = n.substring(r + 1); t.print(" " + i + ": " + this._p0 + " - " + this._p1 + " " + this._quadrant + ":" + e + " " + this._label) }, Vh.prototype.compareTo = function (t) { var e = t; return this.compareDirection(e) }, Vh.prototype.getDirectedCoordinate = function () { return this._p1 }, Vh.prototype.getDx = function () { return this._dx }, Vh.prototype.getLabel = function () { return this._label }, Vh.prototype.getEdge = function () { return this._edge }, Vh.prototype.getQuadrant = function () { return this._quadrant }, Vh.prototype.getNode = function () { return this._node }, Vh.prototype.toString = function () { var t = Math.atan2(this._dy, this._dx), e = this.getClass().getName(), n = e.lastIndexOf("."); return " " + e.substring(n + 1) + ": " + this._p0 + " - " + this._p1 + " " + this._quadrant + ":" + t + " " + this._label }, Vh.prototype.computeLabel = function (t) { }, Vh.prototype.init = function (t, e) { this._p0 = t, this._p1 = e, this._dx = e.x - t.x, this._dy = e.y - t.y, this._quadrant = jh.quadrant(this._dx, this._dy), ql.isTrue(!(0 === this._dx && 0 === this._dy), "EdgeEnd with identical endpoints found") }, Vh.prototype.interfaces_ = function () { return [il] }, Vh.prototype.getClass = function () { return Vh }; var Xh = function (t) { function e() { var e = arguments[0], n = arguments[1]; if (t.call(this, e), this._isForward = null, this._isInResult = !1, this._isVisited = !1, this._sym = null, this._next = null, this._nextMin = null, this._edgeRing = null, this._minEdgeRing = null, this._depth = [0, -999, -999], this._isForward = n, n) this.init(e.getCoordinate(0), e.getCoordinate(1)); else { var r = e.getNumPoints() - 1; this.init(e.getCoordinate(r), e.getCoordinate(r - 1)) } this.computeDirectedLabel() } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.getNextMin = function () { return this._nextMin }, e.prototype.getDepth = function (t) { return this._depth[t] }, e.prototype.setVisited = function (t) { this._isVisited = t }, e.prototype.computeDirectedLabel = function () { this._label = new Dh(this._edge.getLabel()), this._isForward || this._label.flip() }, e.prototype.getNext = function () { return this._next }, e.prototype.setDepth = function (t, e) { if (-999 !== this._depth[t] && this._depth[t] !== e) throw new Oh("assigned depths do not match", this.getCoordinate()); this._depth[t] = e }, e.prototype.isInteriorAreaEdge = function () { for (var t = this, e = !0, n = 0; n < 2; n++) t._label.isArea(n) && t._label.getLocation(n, Sh.LEFT) === pl.INTERIOR && t._label.getLocation(n, Sh.RIGHT) === pl.INTERIOR || (e = !1); return e }, e.prototype.setNextMin = function (t) { this._nextMin = t }, e.prototype.print = function (e) { t.prototype.print.call(this, e), e.print(" " + this._depth[Sh.LEFT] + "/" + this._depth[Sh.RIGHT]), e.print(" (" + this.getDepthDelta() + ")"), this._isInResult && e.print(" inResult") }, e.prototype.setMinEdgeRing = function (t) { this._minEdgeRing = t }, e.prototype.isLineEdge = function () { var t = this._label.isLine(0) || this._label.isLine(1), e = !this._label.isArea(0) || this._label.allPositionsEqual(0, pl.EXTERIOR), n = !this._label.isArea(1) || this._label.allPositionsEqual(1, pl.EXTERIOR); return t && e && n }, e.prototype.setEdgeRing = function (t) { this._edgeRing = t }, e.prototype.getMinEdgeRing = function () { return this._minEdgeRing }, e.prototype.getDepthDelta = function () { var t = this._edge.getDepthDelta(); return this._isForward || (t = -t), t }, e.prototype.setInResult = function (t) { this._isInResult = t }, e.prototype.getSym = function () { return this._sym }, e.prototype.isForward = function () { return this._isForward }, e.prototype.getEdge = function () { return this._edge }, e.prototype.printEdge = function (t) { this.print(t), t.print(" "), this._isForward ? this._edge.print(t) : this._edge.printReverse(t) }, e.prototype.setSym = function (t) { this._sym = t }, e.prototype.setVisitedEdge = function (t) { this.setVisited(t), this._sym.setVisited(t) }, e.prototype.setEdgeDepths = function (t, e) { var n = this.getEdge().getDepthDelta(); this._isForward || (n = -n); var r = 1; t === Sh.LEFT && (r = -1); var i = Sh.opposite(t), o = e + n * r; this.setDepth(t, e), this.setDepth(i, o) }, e.prototype.getEdgeRing = function () { return this._edgeRing }, e.prototype.isInResult = function () { return this._isInResult }, e.prototype.setNext = function (t) { this._next = t }, e.prototype.isVisited = function () { return this._isVisited }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e.depthFactor = function (t, e) { return t === pl.EXTERIOR && e === pl.INTERIOR ? 1 : t === pl.INTERIOR && e === pl.EXTERIOR ? -1 : 0 }, e }(Vh), Yh = function () { }; Yh.prototype.createNode = function (t) { return new Bh(t, null) }, Yh.prototype.interfaces_ = function () { return [] }, Yh.prototype.getClass = function () { return Yh }; var Hh = function () { if (this._edges = new lc, this._nodes = null, this._edgeEndList = new lc, 0 === arguments.length) this._nodes = new zh(new Yh); else if (1 === arguments.length) { var t = arguments[0]; this._nodes = new zh(t) } }; Hh.prototype.printEdges = function (t) { t.println("Edges:"); for (var e = 0; e < this._edges.size(); e++) { t.println("edge " + e + ":"); var n = this._edges.get(e); n.print(t), n.eiList.print(t) } }, Hh.prototype.find = function (t) { return this._nodes.find(t) }, Hh.prototype.addNode = function () { if (arguments[0] instanceof Bh) { var t = arguments[0]; return this._nodes.addNode(t) } if (arguments[0] instanceof ul) { var e = arguments[0]; return this._nodes.addNode(e) } }, Hh.prototype.getNodeIterator = function () { return this._nodes.iterator() }, Hh.prototype.linkResultDirectedEdges = function () { for (var t = this._nodes.iterator(); t.hasNext();) { t.next().getEdges().linkResultDirectedEdges() } }, Hh.prototype.debugPrintln = function (t) { Pl.out.println(t) }, Hh.prototype.isBoundaryNode = function (t, e) { var n = this._nodes.find(e); if (null === n) return !1; var r = n.getLabel(); return null !== r && r.getLocation(t) === pl.BOUNDARY }, Hh.prototype.linkAllDirectedEdges = function () { for (var t = this._nodes.iterator(); t.hasNext();) { t.next().getEdges().linkAllDirectedEdges() } }, Hh.prototype.matchInSameDirection = function (t, e, n, r) { return !!t.equals(n) && (Xl.computeOrientation(t, e, r) === Xl.COLLINEAR && jh.quadrant(t, e) === jh.quadrant(n, r)) }, Hh.prototype.getEdgeEnds = function () { return this._edgeEndList }, Hh.prototype.debugPrint = function (t) { Pl.out.print(t) }, Hh.prototype.getEdgeIterator = function () { return this._edges.iterator() }, Hh.prototype.findEdgeInSameDirection = function (t, e) { for (var n = this, r = 0; r < this._edges.size(); r++) { var i = n._edges.get(r), o = i.getCoordinates(); if (n.matchInSameDirection(t, e, o[0], o[1])) return i; if (n.matchInSameDirection(t, e, o[o.length - 1], o[o.length - 2])) return i } return null }, Hh.prototype.insertEdge = function (t) { this._edges.add(t) }, Hh.prototype.findEdgeEnd = function (t) { for (var e = this.getEdgeEnds().iterator(); e.hasNext();) { var n = e.next(); if (n.getEdge() === t) return n } return null }, Hh.prototype.addEdges = function (t) { for (var e = this, n = t.iterator(); n.hasNext();) { var r = n.next(); e._edges.add(r); var i = new Xh(r, !0), o = new Xh(r, !1); i.setSym(o), o.setSym(i), e.add(i), e.add(o) } }, Hh.prototype.add = function (t) { this._nodes.add(t), this._edgeEndList.add(t) }, Hh.prototype.getNodes = function () { return this._nodes.values() }, Hh.prototype.findEdge = function (t, e) { for (var n = 0; n < this._edges.size(); n++) { var r = this._edges.get(n), i = r.getCoordinates(); if (t.equals(i[0]) && e.equals(i[1])) return r } return null }, Hh.prototype.interfaces_ = function () { return [] }, Hh.prototype.getClass = function () { return Hh }, Hh.linkResultDirectedEdges = function (t) { for (var e = t.iterator(); e.hasNext();) { e.next().getEdges().linkResultDirectedEdges() } }; var Wh = function () { this._geometryFactory = null, this._shellList = new lc; var t = arguments[0]; this._geometryFactory = t }; Wh.prototype.sortShellsAndHoles = function (t, e, n) { for (var r = t.iterator(); r.hasNext();) { var i = r.next(); i.isHole() ? n.add(i) : e.add(i) } }, Wh.prototype.computePolygons = function (t) { for (var e = new lc, n = t.iterator(); n.hasNext();) { var r = n.next().toPolygon(this._geometryFactory); e.add(r) } return e }, Wh.prototype.placeFreeHoles = function (t, e) { for (var n = e.iterator(); n.hasNext();) { var r = n.next(); if (null === r.getShell()) { var i = this.findEdgeRingContaining(r, t); if (null === i) throw new Oh("unable to assign hole to a shell", r.getCoordinate(0)); r.setShell(i) } } }, Wh.prototype.buildMinimalEdgeRings = function (t, e, n) { for (var r = new lc, i = t.iterator(); i.hasNext();) { var o = i.next(); if (o.getMaxNodeDegree() > 2) { o.linkDirectedEdgesForMinimalEdgeRings(); var s = o.buildMinimalRings(), a = this.findShell(s); null !== a ? (this.placePolygonHoles(a, s), e.add(a)) : n.addAll(s) } else r.add(o) } return r }, Wh.prototype.containsPoint = function (t) { for (var e = this._shellList.iterator(); e.hasNext();) { if (e.next().containsPoint(t)) return !0 } return !1 }, Wh.prototype.buildMaximalEdgeRings = function (t) { for (var e = new lc, n = t.iterator(); n.hasNext();) { var r = n.next(); if (r.isInResult() && r.getLabel().isArea() && null === r.getEdgeRing()) { var i = new Gh(r, this._geometryFactory); e.add(i), i.setInResult() } } return e }, Wh.prototype.placePolygonHoles = function (t, e) { for (var n = e.iterator(); n.hasNext();) { var r = n.next(); r.isHole() && r.setShell(t) } }, Wh.prototype.getPolygons = function () { return this.computePolygons(this._shellList) }, Wh.prototype.findEdgeRingContaining = function (t, e) { for (var n = t.getLinearRing(), r = n.getEnvelopeInternal(), i = n.getCoordinateN(0), o = null, s = null, a = e.iterator(); a.hasNext();) { var u = a.next(), l = u.getLinearRing(), c = l.getEnvelopeInternal(); null !== o && (s = o.getLinearRing().getEnvelopeInternal()); var h = !1; c.contains(r) && Xl.isPointInRing(i, l.getCoordinates()) && (h = !0), h && (null === o || s.contains(c)) && (o = u) } return o }, Wh.prototype.findShell = function (t) { for (var e = 0, n = null, r = t.iterator(); r.hasNext();) { var i = r.next(); i.isHole() || (n = i, e++) } return ql.isTrue(e <= 1, "found two shells in MinimalEdgeRing list"), n }, Wh.prototype.add = function () { if (1 === arguments.length) { var t = arguments[0]; this.add(t.getEdgeEnds(), t.getNodes()) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; Hh.linkResultDirectedEdges(n); var r = this.buildMaximalEdgeRings(e), i = new lc, o = this.buildMinimalEdgeRings(r, this._shellList, i); this.sortShellsAndHoles(o, this._shellList, i), this.placeFreeHoles(this._shellList, i) } }, Wh.prototype.interfaces_ = function () { return [] }, Wh.prototype.getClass = function () { return Wh }; var Jh = function () { }; Jh.prototype.getBounds = function () { }, Jh.prototype.interfaces_ = function () { return [] }, Jh.prototype.getClass = function () { return Jh }; var Zh = function () { this._bounds = null, this._item = null; var t = arguments[0], e = arguments[1]; this._bounds = t, this._item = e }; Zh.prototype.getItem = function () { return this._item }, Zh.prototype.getBounds = function () { return this._bounds }, Zh.prototype.interfaces_ = function () { return [Jh, al] }, Zh.prototype.getClass = function () { return Zh }; var Kh = function () { this._size = null, this._items = null, this._size = 0, this._items = new lc, this._items.add(null) }; Kh.prototype.poll = function () { if (this.isEmpty()) return null; var t = this._items.get(1); return this._items.set(1, this._items.get(this._size)), this._size -= 1, this.reorder(1), t }, Kh.prototype.size = function () { return this._size }, Kh.prototype.reorder = function (t) { for (var e = this, n = null, r = this._items.get(t); 2 * t <= this._size && ((n = 2 * t) !== e._size && e._items.get(n + 1).compareTo(e._items.get(n)) < 0 && n++, e._items.get(n).compareTo(r) < 0); t = n) e._items.set(t, e._items.get(n)); this._items.set(t, r) }, Kh.prototype.clear = function () { this._size = 0, this._items.clear() }, Kh.prototype.isEmpty = function () { return 0 === this._size }, Kh.prototype.add = function (t) { this._items.add(null), this._size += 1; var e = this._size; for (this._items.set(0, t); t.compareTo(this._items.get(Math.trunc(e / 2))) < 0; e /= 2) this._items.set(e, this._items.get(Math.trunc(e / 2))); this._items.set(e, t) }, Kh.prototype.interfaces_ = function () { return [] }, Kh.prototype.getClass = function () { return Kh }; var Qh = function () { }; Qh.prototype.visitItem = function (t) { }, Qh.prototype.interfaces_ = function () { return [] }, Qh.prototype.getClass = function () { return Qh }; var $h = function () { }; $h.prototype.insert = function (t, e) { }, $h.prototype.remove = function (t, e) { }, $h.prototype.query = function () { }, $h.prototype.interfaces_ = function () { return [] }, $h.prototype.getClass = function () { return $h }; var tp = function () { if (this._childBoundables = new lc, this._bounds = null, this._level = null, 0 === arguments.length) ; else if (1 === arguments.length) { var t = arguments[0]; this._level = t } }, ep = {serialVersionUID: {configurable: !0}}; tp.prototype.getLevel = function () { return this._level }, tp.prototype.size = function () { return this._childBoundables.size() }, tp.prototype.getChildBoundables = function () { return this._childBoundables }, tp.prototype.addChildBoundable = function (t) { ql.isTrue(null === this._bounds), this._childBoundables.add(t) }, tp.prototype.isEmpty = function () { return this._childBoundables.isEmpty() }, tp.prototype.getBounds = function () { return null === this._bounds && (this._bounds = this.computeBounds()), this._bounds }, tp.prototype.interfaces_ = function () { return [Jh, al] }, tp.prototype.getClass = function () { return tp }, ep.serialVersionUID.get = function () { return 0x5a1e55ec41369800 }, Object.defineProperties(tp, ep); var np = function () { }; np.reverseOrder = function () { return { compare: function (t, e) { return e.compareTo(t) } } }, np.min = function (t) { return np.sort(t), t.get(0) }, np.sort = function (t, e) { var n = t.toArray(); e ? Rc.sort(n, e) : Rc.sort(n); for (var r = t.iterator(), i = 0, o = n.length; i < o; i++) r.next(), r.set(n[i]) }, np.singletonList = function (t) { var e = new lc; return e.add(t), e }; var rp = function () { this._boundable1 = null, this._boundable2 = null, this._distance = null, this._itemDistance = null; var t = arguments[0], e = arguments[1], n = arguments[2]; this._boundable1 = t, this._boundable2 = e, this._itemDistance = n, this._distance = this.distance() }; rp.prototype.expandToQueue = function (t, e) { var n = rp.isComposite(this._boundable1), r = rp.isComposite(this._boundable2); if (n && r) return rp.area(this._boundable1) > rp.area(this._boundable2) ? (this.expand(this._boundable1, this._boundable2, t, e), null) : (this.expand(this._boundable2, this._boundable1, t, e), null); if (n) return this.expand(this._boundable1, this._boundable2, t, e), null; if (r) return this.expand(this._boundable2, this._boundable1, t, e), null; throw new el("neither boundable is composite") }, rp.prototype.isLeaves = function () { return !(rp.isComposite(this._boundable1) || rp.isComposite(this._boundable2)) }, rp.prototype.compareTo = function (t) { var e = t; return this._distance < e._distance ? -1 : this._distance > e._distance ? 1 : 0 }, rp.prototype.expand = function (t, e, n, r) { for (var i = t.getChildBoundables().iterator(); i.hasNext();) { var o = i.next(), s = new rp(o, e, this._itemDistance); s.getDistance() < r && n.add(s) } }, rp.prototype.getBoundable = function (t) { return 0 === t ? this._boundable1 : this._boundable2 }, rp.prototype.getDistance = function () { return this._distance }, rp.prototype.distance = function () { return this.isLeaves() ? this._itemDistance.distance(this._boundable1, this._boundable2) : this._boundable1.getBounds().distance(this._boundable2.getBounds()) }, rp.prototype.interfaces_ = function () { return [il] }, rp.prototype.getClass = function () { return rp }, rp.area = function (t) { return t.getBounds().getArea() }, rp.isComposite = function (t) { return t instanceof tp }; var ip = function t() { if (this._root = null, this._built = !1, this._itemBoundables = new lc, this._nodeCapacity = null, 0 === arguments.length) { var e = t.DEFAULT_NODE_CAPACITY; this._nodeCapacity = e } else if (1 === arguments.length) { var n = arguments[0]; ql.isTrue(n > 1, "Node capacity must be greater than 1"), this._nodeCapacity = n } }, op = { IntersectsOp: {configurable: !0}, serialVersionUID: {configurable: !0}, DEFAULT_NODE_CAPACITY: {configurable: !0} }; ip.prototype.getNodeCapacity = function () { return this._nodeCapacity }, ip.prototype.lastNode = function (t) { return t.get(t.size() - 1) }, ip.prototype.size = function () { var t = this; if (0 === arguments.length) return this.isEmpty() ? 0 : (this.build(), this.size(this._root)); if (1 === arguments.length) { for (var e = arguments[0], n = 0, r = e.getChildBoundables().iterator(); r.hasNext();) { var i = r.next(); i instanceof tp ? n += t.size(i) : i instanceof Zh && (n += 1) } return n } }, ip.prototype.removeItem = function (t, e) { for (var n = null, r = t.getChildBoundables().iterator(); r.hasNext();) { var i = r.next(); i instanceof Zh && i.getItem() === e && (n = i) } return null !== n && (t.getChildBoundables().remove(n), !0) }, ip.prototype.itemsTree = function () { var t = this; if (0 === arguments.length) { this.build(); var e = this.itemsTree(this._root); return null === e ? new lc : e } if (1 === arguments.length) { for (var n = arguments[0], r = new lc, i = n.getChildBoundables().iterator(); i.hasNext();) { var o = i.next(); if (o instanceof tp) { var s = t.itemsTree(o); null !== s && r.add(s) } else o instanceof Zh ? r.add(o.getItem()) : ql.shouldNeverReachHere() } return r.size() <= 0 ? null : r } }, ip.prototype.insert = function (t, e) { ql.isTrue(!this._built, "Cannot insert items into an STR packed R-tree after it has been built."), this._itemBoundables.add(new Zh(t, e)) }, ip.prototype.boundablesAtLevel = function () { var t = this; if (1 === arguments.length) { var e = arguments[0], n = new lc; return this.boundablesAtLevel(e, this._root, n), n } if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2]; if (ql.isTrue(r > -2), i.getLevel() === r) return o.add(i), null; for (var s = i.getChildBoundables().iterator(); s.hasNext();) { var a = s.next(); a instanceof tp ? t.boundablesAtLevel(r, a, o) : (ql.isTrue(a instanceof Zh), -1 === r && o.add(a)) } return null } }, ip.prototype.query = function () { var t = this; if (1 === arguments.length) { var e = arguments[0]; this.build(); var n = new lc; return this.isEmpty() || this.getIntersectsOp().intersects(this._root.getBounds(), e) && this.query(e, this._root, n), n } if (2 === arguments.length) { var r = arguments[0], i = arguments[1]; if (this.build(), this.isEmpty()) return null; this.getIntersectsOp().intersects(this._root.getBounds(), r) && this.query(r, this._root, i) } else if (3 === arguments.length) if (gl(arguments[2], Qh) && arguments[0] instanceof Object && arguments[1] instanceof tp) for (var o = arguments[0], s = arguments[1], a = arguments[2], u = s.getChildBoundables(), l = 0; l < u.size(); l++) { var c = u.get(l); t.getIntersectsOp().intersects(c.getBounds(), o) && (c instanceof tp ? t.query(o, c, a) : c instanceof Zh ? a.visitItem(c.getItem()) : ql.shouldNeverReachHere()) } else if (gl(arguments[2], ac) && arguments[0] instanceof Object && arguments[1] instanceof tp) for (var h = arguments[0], p = arguments[1], f = arguments[2], g = p.getChildBoundables(), d = 0; d < g.size(); d++) { var y = g.get(d); t.getIntersectsOp().intersects(y.getBounds(), h) && (y instanceof tp ? t.query(h, y, f) : y instanceof Zh ? f.add(y.getItem()) : ql.shouldNeverReachHere()) } }, ip.prototype.build = function () { if (this._built) return null; this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1), this._itemBoundables = null, this._built = !0 }, ip.prototype.getRoot = function () { return this.build(), this._root }, ip.prototype.remove = function () { var t = this; if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return this.build(), !!this.getIntersectsOp().intersects(this._root.getBounds(), e) && this.remove(e, this._root, n) } if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2], s = this.removeItem(i, o); if (s) return !0; for (var a = null, u = i.getChildBoundables().iterator(); u.hasNext();) { var l = u.next(); if (t.getIntersectsOp().intersects(l.getBounds(), r) && (l instanceof tp && (s = t.remove(r, l, o)))) { a = l; break } } return null !== a && a.getChildBoundables().isEmpty() && i.getChildBoundables().remove(a), s } }, ip.prototype.createHigherLevels = function (t, e) { ql.isTrue(!t.isEmpty()); var n = this.createParentBoundables(t, e + 1); return 1 === n.size() ? n.get(0) : this.createHigherLevels(n, e + 1) }, ip.prototype.depth = function () { var t = this; if (0 === arguments.length) return this.isEmpty() ? 0 : (this.build(), this.depth(this._root)); if (1 === arguments.length) { for (var e = arguments[0], n = 0, r = e.getChildBoundables().iterator(); r.hasNext();) { var i = r.next(); if (i instanceof tp) { var o = t.depth(i); o > n && (n = o) } } return n + 1 } }, ip.prototype.createParentBoundables = function (t, e) { var n = this; ql.isTrue(!t.isEmpty()); var r = new lc; r.add(this.createNode(e)); var i = new lc(t); np.sort(i, this.getComparator()); for (var o = i.iterator(); o.hasNext();) { var s = o.next(); n.lastNode(r).getChildBoundables().size() === n.getNodeCapacity() && r.add(n.createNode(e)), n.lastNode(r).addChildBoundable(s) } return r }, ip.prototype.isEmpty = function () { return this._built ? this._root.isEmpty() : this._itemBoundables.isEmpty() }, ip.prototype.interfaces_ = function () { return [al] }, ip.prototype.getClass = function () { return ip }, ip.compareDoubles = function (t, e) { return t > e ? 1 : t < e ? -1 : 0 }, op.IntersectsOp.get = function () { return sp }, op.serialVersionUID.get = function () { return -0x35ef64c82d4c5400 }, op.DEFAULT_NODE_CAPACITY.get = function () { return 10 }, Object.defineProperties(ip, op); var sp = function () { }, ap = function () { }; ap.prototype.distance = function (t, e) { }, ap.prototype.interfaces_ = function () { return [] }, ap.prototype.getClass = function () { return ap }; var up = function (t) { function e(n) { n = n || e.DEFAULT_NODE_CAPACITY, t.call(this, n) } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = { STRtreeNode: {configurable: !0}, serialVersionUID: {configurable: !0}, xComparator: {configurable: !0}, yComparator: {configurable: !0}, intersectsOp: {configurable: !0}, DEFAULT_NODE_CAPACITY: {configurable: !0} }; return e.prototype.createParentBoundablesFromVerticalSlices = function (t, e) { ql.isTrue(t.length > 0); for (var n = new lc, r = 0; r < t.length; r++) n.addAll(this.createParentBoundablesFromVerticalSlice(t[r], e)); return n }, e.prototype.createNode = function (t) { return new lp(t) }, e.prototype.size = function () { return 0 === arguments.length ? t.prototype.size.call(this) : t.prototype.size.apply(this, arguments) }, e.prototype.insert = function () { if (2 !== arguments.length) return t.prototype.insert.apply(this, arguments); var e = arguments[0], n = arguments[1]; if (e.isNull()) return null; t.prototype.insert.call(this, e, n) }, e.prototype.getIntersectsOp = function () { return e.intersectsOp }, e.prototype.verticalSlices = function (t, e) { for (var n = Math.trunc(Math.ceil(t.size() / e)), r = new Array(e).fill(null), i = t.iterator(), o = 0; o < e; o++) { r[o] = new lc; for (var s = 0; i.hasNext() && s < n;) { var a = i.next(); r[o].add(a), s++ } } return r }, e.prototype.query = function () { if (1 === arguments.length) { var e = arguments[0]; return t.prototype.query.call(this, e) } if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; t.prototype.query.call(this, n, r) } else if (3 === arguments.length) if (gl(arguments[2], Qh) && arguments[0] instanceof Object && arguments[1] instanceof tp) { var i = arguments[0], o = arguments[1], s = arguments[2]; t.prototype.query.call(this, i, o, s) } else if (gl(arguments[2], ac) && arguments[0] instanceof Object && arguments[1] instanceof tp) { var a = arguments[0], u = arguments[1], l = arguments[2]; t.prototype.query.call(this, a, u, l) } }, e.prototype.getComparator = function () { return e.yComparator }, e.prototype.createParentBoundablesFromVerticalSlice = function (e, n) { return t.prototype.createParentBoundables.call(this, e, n) }, e.prototype.remove = function () { if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return t.prototype.remove.call(this, e, n) } return t.prototype.remove.apply(this, arguments) }, e.prototype.depth = function () { return 0 === arguments.length ? t.prototype.depth.call(this) : t.prototype.depth.apply(this, arguments) }, e.prototype.createParentBoundables = function (t, n) { ql.isTrue(!t.isEmpty()); var r = Math.trunc(Math.ceil(t.size() / this.getNodeCapacity())), i = new lc(t); np.sort(i, e.xComparator); var o = this.verticalSlices(i, Math.trunc(Math.ceil(Math.sqrt(r)))); return this.createParentBoundablesFromVerticalSlices(o, n) }, e.prototype.nearestNeighbour = function () { if (1 === arguments.length) { if (gl(arguments[0], ap)) { var t = arguments[0], n = new rp(this.getRoot(), this.getRoot(), t); return this.nearestNeighbour(n) } if (arguments[0] instanceof rp) { var r = arguments[0]; return this.nearestNeighbour(r, nl.POSITIVE_INFINITY) } } else if (2 === arguments.length) { if (arguments[0] instanceof e && gl(arguments[1], ap)) { var i = arguments[0], o = arguments[1], s = new rp(this.getRoot(), i.getRoot(), o); return this.nearestNeighbour(s) } if (arguments[0] instanceof rp && "number" == typeof arguments[1]) { var a = arguments[0], u = arguments[1], l = u, c = null, h = new Kh; for (h.add(a); !h.isEmpty() && l > 0;) { var p = h.poll(), f = p.getDistance(); if (f >= l) break; p.isLeaves() ? (l = f, c = p) : p.expandToQueue(h, l) } return [c.getBoundable(0).getItem(), c.getBoundable(1).getItem()] } } else if (3 === arguments.length) { var g = arguments[0], d = arguments[1], y = arguments[2], v = new Zh(g, d), _ = new rp(this.getRoot(), v, y); return this.nearestNeighbour(_)[0] } }, e.prototype.interfaces_ = function () { return [$h, al] }, e.prototype.getClass = function () { return e }, e.centreX = function (t) { return e.avg(t.getMinX(), t.getMaxX()) }, e.avg = function (t, e) { return (t + e) / 2 }, e.centreY = function (t) { return e.avg(t.getMinY(), t.getMaxY()) }, n.STRtreeNode.get = function () { return lp }, n.serialVersionUID.get = function () { return 0x39920f7d5f261e0 }, n.xComparator.get = function () { return { interfaces_: function () { return [sl] }, compare: function (n, r) { return t.compareDoubles(e.centreX(n.getBounds()), e.centreX(r.getBounds())) } } }, n.yComparator.get = function () { return { interfaces_: function () { return [sl] }, compare: function (n, r) { return t.compareDoubles(e.centreY(n.getBounds()), e.centreY(r.getBounds())) } } }, n.intersectsOp.get = function () { return { interfaces_: function () { return [t.IntersectsOp] }, intersects: function (t, e) { return t.intersects(e) } } }, n.DEFAULT_NODE_CAPACITY.get = function () { return 10 }, Object.defineProperties(e, n), e }(ip), lp = function (t) { function e() { var e = arguments[0]; t.call(this, e) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.computeBounds = function () { for (var t = null, e = this.getChildBoundables().iterator(); e.hasNext();) { var n = e.next(); null === t ? t = new Ll(n.getBounds()) : t.expandToInclude(n.getBounds()) } return t }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(tp), cp = function () { }; cp.prototype.interfaces_ = function () { return [] }, cp.prototype.getClass = function () { return cp }, cp.relativeSign = function (t, e) { return t < e ? -1 : t > e ? 1 : 0 }, cp.compare = function (t, e, n) { if (e.equals2D(n)) return 0; var r = cp.relativeSign(e.x, n.x), i = cp.relativeSign(e.y, n.y); switch (t) { case 0: return cp.compareValue(r, i); case 1: return cp.compareValue(i, r); case 2: return cp.compareValue(i, -r); case 3: return cp.compareValue(-r, i); case 4: return cp.compareValue(-r, -i); case 5: return cp.compareValue(-i, -r); case 6: return cp.compareValue(-i, r); case 7: return cp.compareValue(r, -i) } return ql.shouldNeverReachHere("invalid octant value"), 0 }, cp.compareValue = function (t, e) { return t < 0 ? -1 : t > 0 ? 1 : e < 0 ? -1 : e > 0 ? 1 : 0 }; var hp = function () { this._segString = null, this.coord = null, this.segmentIndex = null, this._segmentOctant = null, this._isInterior = null; var t = arguments[0], e = arguments[1], n = arguments[2], r = arguments[3]; this._segString = t, this.coord = new ul(e), this.segmentIndex = n, this._segmentOctant = r, this._isInterior = !e.equals2D(t.getCoordinate(n)) }; hp.prototype.getCoordinate = function () { return this.coord }, hp.prototype.print = function (t) { t.print(this.coord), t.print(" seg # = " + this.segmentIndex) }, hp.prototype.compareTo = function (t) { var e = t; return this.segmentIndex < e.segmentIndex ? -1 : this.segmentIndex > e.segmentIndex ? 1 : this.coord.equals2D(e.coord) ? 0 : cp.compare(this._segmentOctant, this.coord, e.coord) }, hp.prototype.isEndPoint = function (t) { return 0 === this.segmentIndex && !this._isInterior || this.segmentIndex === t }, hp.prototype.isInterior = function () { return this._isInterior }, hp.prototype.interfaces_ = function () { return [il] }, hp.prototype.getClass = function () { return hp }; var pp = function () { this._nodeMap = new Cc, this._edge = null; var t = arguments[0]; this._edge = t }; pp.prototype.getSplitCoordinates = function () { var t = new hc; this.addEndpoints(); for (var e = this.iterator(), n = e.next(); e.hasNext();) { var r = e.next(); this.addEdgeCoordinates(n, r, t), n = r } return t.toCoordinateArray() }, pp.prototype.addCollapsedNodes = function () { var t = new lc; this.findCollapsesFromInsertedNodes(t), this.findCollapsesFromExistingVertices(t); for (var e = t.iterator(); e.hasNext();) { var n = e.next().intValue(); this.add(this._edge.getCoordinate(n), n) } }, pp.prototype.print = function (t) { t.println("Intersections:"); for (var e = this.iterator(); e.hasNext();) { e.next().print(t) } }, pp.prototype.findCollapsesFromExistingVertices = function (t) { for (var e = 0; e < this._edge.size() - 2; e++) { var n = this._edge.getCoordinate(e), r = this._edge.getCoordinate(e + 2); n.equals2D(r) && t.add(new _l(e + 1)) } }, pp.prototype.addEdgeCoordinates = function (t, e, n) { var r = this._edge.getCoordinate(e.segmentIndex), i = e.isInterior() || !e.coord.equals2D(r); n.add(new ul(t.coord), !1); for (var o = t.segmentIndex + 1; o <= e.segmentIndex; o++) n.add(this._edge.getCoordinate(o)); i && n.add(new ul(e.coord)) }, pp.prototype.iterator = function () { return this._nodeMap.values().iterator() }, pp.prototype.addSplitEdges = function (t) { this.addEndpoints(), this.addCollapsedNodes(); for (var e = this.iterator(), n = e.next(); e.hasNext();) { var r = e.next(), i = this.createSplitEdge(n, r); t.add(i), n = r } }, pp.prototype.findCollapseIndex = function (t, e, n) { if (!t.coord.equals2D(e.coord)) return !1; var r = e.segmentIndex - t.segmentIndex; return e.isInterior() || r--, 1 === r && (n[0] = t.segmentIndex + 1, !0) }, pp.prototype.findCollapsesFromInsertedNodes = function (t) { for (var e = new Array(1).fill(null), n = this.iterator(), r = n.next(); n.hasNext();) { var i = n.next(); this.findCollapseIndex(r, i, e) && t.add(new _l(e[0])), r = i } }, pp.prototype.getEdge = function () { return this._edge }, pp.prototype.addEndpoints = function () { var t = this._edge.size() - 1; this.add(this._edge.getCoordinate(0), 0), this.add(this._edge.getCoordinate(t), t) }, pp.prototype.createSplitEdge = function (t, e) { var n = e.segmentIndex - t.segmentIndex + 2, r = this._edge.getCoordinate(e.segmentIndex), i = e.isInterior() || !e.coord.equals2D(r); i || n--; var o = new Array(n).fill(null), s = 0; o[s++] = new ul(t.coord); for (var a = t.segmentIndex + 1; a <= e.segmentIndex; a++) o[s++] = this._edge.getCoordinate(a); return i && (o[s] = new ul(e.coord)), new yp(o, this._edge.getData()) }, pp.prototype.add = function (t, e) { var n = new hp(this._edge, t, e, this._edge.getSegmentOctant(e)), r = this._nodeMap.get(n); return null !== r ? (ql.isTrue(r.coord.equals2D(t), "Found equal nodes with different coordinates"), r) : (this._nodeMap.put(n, n), n) }, pp.prototype.checkSplitEdgesCorrectness = function (t) { var e = this._edge.getCoordinates(), n = t.get(0).getCoordinate(0); if (!n.equals2D(e[0])) throw new kl("bad split edge start point at " + n); var r = t.get(t.size() - 1).getCoordinates(), i = r[r.length - 1]; if (!i.equals2D(e[e.length - 1])) throw new kl("bad split edge end point at " + i) }, pp.prototype.interfaces_ = function () { return [] }, pp.prototype.getClass = function () { return pp }; var fp = function () { }; fp.prototype.interfaces_ = function () { return [] }, fp.prototype.getClass = function () { return fp }, fp.octant = function () { if ("number" == typeof arguments[0] && "number" == typeof arguments[1]) { var t = arguments[0], e = arguments[1]; if (0 === t && 0 === e) throw new el("Cannot compute the octant for point ( " + t + ", " + e + " )"); var n = Math.abs(t), r = Math.abs(e); return t >= 0 ? e >= 0 ? n >= r ? 0 : 1 : n >= r ? 7 : 6 : e >= 0 ? n >= r ? 3 : 2 : n >= r ? 4 : 5 } if (arguments[0] instanceof ul && arguments[1] instanceof ul) { var i = arguments[0], o = arguments[1], s = o.x - i.x, a = o.y - i.y; if (0 === s && 0 === a) throw new el("Cannot compute the octant for two identical points " + i); return fp.octant(s, a) } }; var gp = function () { }; gp.prototype.getCoordinates = function () { }, gp.prototype.size = function () { }, gp.prototype.getCoordinate = function (t) { }, gp.prototype.isClosed = function () { }, gp.prototype.setData = function (t) { }, gp.prototype.getData = function () { }, gp.prototype.interfaces_ = function () { return [] }, gp.prototype.getClass = function () { return gp }; var dp = function () { }; dp.prototype.addIntersection = function (t, e) { }, dp.prototype.interfaces_ = function () { return [gp] }, dp.prototype.getClass = function () { return dp }; var yp = function () { this._nodeList = new pp(this), this._pts = null, this._data = null; var t = arguments[0], e = arguments[1]; this._pts = t, this._data = e }; yp.prototype.getCoordinates = function () { return this._pts }, yp.prototype.size = function () { return this._pts.length }, yp.prototype.getCoordinate = function (t) { return this._pts[t] }, yp.prototype.isClosed = function () { return this._pts[0].equals(this._pts[this._pts.length - 1]) }, yp.prototype.getSegmentOctant = function (t) { return t === this._pts.length - 1 ? -1 : this.safeOctant(this.getCoordinate(t), this.getCoordinate(t + 1)) }, yp.prototype.setData = function (t) { this._data = t }, yp.prototype.safeOctant = function (t, e) { return t.equals2D(e) ? 0 : fp.octant(t, e) }, yp.prototype.getData = function () { return this._data }, yp.prototype.addIntersection = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; this.addIntersectionNode(t, e) } else if (4 === arguments.length) { var n = arguments[0], r = arguments[1], i = arguments[3], o = new ul(n.getIntersection(i)); this.addIntersection(o, r) } }, yp.prototype.toString = function () { return Fl.toLineString(new lh(this._pts)) }, yp.prototype.getNodeList = function () { return this._nodeList }, yp.prototype.addIntersectionNode = function (t, e) { var n = e, r = n + 1; if (r < this._pts.length) { var i = this._pts[r]; t.equals2D(i) && (n = r) } return this._nodeList.add(t, n) }, yp.prototype.addIntersections = function (t, e, n) { for (var r = 0; r < t.getIntersectionNum(); r++) this.addIntersection(t, e, n, r) }, yp.prototype.interfaces_ = function () { return [dp] }, yp.prototype.getClass = function () { return yp }, yp.getNodedSubstrings = function () { if (1 === arguments.length) { var t = arguments[0], e = new lc; return yp.getNodedSubstrings(t, e), e } if (2 === arguments.length) for (var n = arguments[0], r = arguments[1], i = n.iterator(); i.hasNext();) { var o = i.next(); o.getNodeList().addSplitEdges(r) } }; var vp = function () { if (this.p0 = null, this.p1 = null, 0 === arguments.length) this.p0 = new ul, this.p1 = new ul; else if (1 === arguments.length) { var t = arguments[0]; this.p0 = new ul(t.p0), this.p1 = new ul(t.p1) } else if (2 === arguments.length) this.p0 = arguments[0], this.p1 = arguments[1]; else if (4 === arguments.length) { var e = arguments[0], n = arguments[1], r = arguments[2], i = arguments[3]; this.p0 = new ul(e, n), this.p1 = new ul(r, i) } }, _p = {serialVersionUID: {configurable: !0}}; vp.prototype.minX = function () { return Math.min(this.p0.x, this.p1.x) }, vp.prototype.orientationIndex = function () { if (arguments[0] instanceof vp) { var t = arguments[0], e = Xl.orientationIndex(this.p0, this.p1, t.p0), n = Xl.orientationIndex(this.p0, this.p1, t.p1); return e >= 0 && n >= 0 || e <= 0 && n <= 0 ? Math.max(e, n) : 0 } if (arguments[0] instanceof ul) { var r = arguments[0]; return Xl.orientationIndex(this.p0, this.p1, r) } }, vp.prototype.toGeometry = function (t) { return t.createLineString([this.p0, this.p1]) }, vp.prototype.isVertical = function () { return this.p0.x === this.p1.x }, vp.prototype.equals = function (t) { if (!(t instanceof vp)) return !1; var e = t; return this.p0.equals(e.p0) && this.p1.equals(e.p1) }, vp.prototype.intersection = function (t) { var e = new jl; return e.computeIntersection(this.p0, this.p1, t.p0, t.p1), e.hasIntersection() ? e.getIntersection(0) : null }, vp.prototype.project = function () { if (arguments[0] instanceof ul) { var t = arguments[0]; if (t.equals(this.p0) || t.equals(this.p1)) return new ul(t); var e = this.projectionFactor(t), n = new ul; return n.x = this.p0.x + e * (this.p1.x - this.p0.x), n.y = this.p0.y + e * (this.p1.y - this.p0.y), n } if (arguments[0] instanceof vp) { var r = arguments[0], i = this.projectionFactor(r.p0), o = this.projectionFactor(r.p1); if (i >= 1 && o >= 1) return null; if (i <= 0 && o <= 0) return null; var s = this.project(r.p0); i < 0 && (s = this.p0), i > 1 && (s = this.p1); var a = this.project(r.p1); return o < 0 && (a = this.p0), o > 1 && (a = this.p1), new vp(s, a) } }, vp.prototype.normalize = function () { this.p1.compareTo(this.p0) < 0 && this.reverse() }, vp.prototype.angle = function () { return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x) }, vp.prototype.getCoordinate = function (t) { return 0 === t ? this.p0 : this.p1 }, vp.prototype.distancePerpendicular = function (t) { return Xl.distancePointLinePerpendicular(t, this.p0, this.p1) }, vp.prototype.minY = function () { return Math.min(this.p0.y, this.p1.y) }, vp.prototype.midPoint = function () { return vp.midPoint(this.p0, this.p1) }, vp.prototype.projectionFactor = function (t) { if (t.equals(this.p0)) return 0; if (t.equals(this.p1)) return 1; var e = this.p1.x - this.p0.x, n = this.p1.y - this.p0.y, r = e * e + n * n; return r <= 0 ? nl.NaN : ((t.x - this.p0.x) * e + (t.y - this.p0.y) * n) / r }, vp.prototype.closestPoints = function (t) { var e = this.intersection(t); if (null !== e) return [e, e]; var n = new Array(2).fill(null), r = nl.MAX_VALUE, i = null, o = this.closestPoint(t.p0); r = o.distance(t.p0), n[0] = o, n[1] = t.p0; var s = this.closestPoint(t.p1); (i = s.distance(t.p1)) < r && (r = i, n[0] = s, n[1] = t.p1); var a = t.closestPoint(this.p0); (i = a.distance(this.p0)) < r && (r = i, n[0] = this.p0, n[1] = a); var u = t.closestPoint(this.p1); return (i = u.distance(this.p1)) < r && (r = i, n[0] = this.p1, n[1] = u), n }, vp.prototype.closestPoint = function (t) { var e = this.projectionFactor(t); return e > 0 && e < 1 ? this.project(t) : this.p0.distance(t) < this.p1.distance(t) ? this.p0 : this.p1 }, vp.prototype.maxX = function () { return Math.max(this.p0.x, this.p1.x) }, vp.prototype.getLength = function () { return this.p0.distance(this.p1) }, vp.prototype.compareTo = function (t) { var e = t, n = this.p0.compareTo(e.p0); return 0 !== n ? n : this.p1.compareTo(e.p1) }, vp.prototype.reverse = function () { var t = this.p0; this.p0 = this.p1, this.p1 = t }, vp.prototype.equalsTopo = function (t) { return this.p0.equals(t.p0) && (this.p1.equals(t.p1) || this.p0.equals(t.p1)) && this.p1.equals(t.p0) }, vp.prototype.lineIntersection = function (t) { try { return Ml.intersection(this.p0, this.p1, t.p0, t.p1) } catch (t) { if (!(t instanceof Cl)) throw t } return null }, vp.prototype.maxY = function () { return Math.max(this.p0.y, this.p1.y) }, vp.prototype.pointAlongOffset = function (t, e) { var n = this.p0.x + t * (this.p1.x - this.p0.x), r = this.p0.y + t * (this.p1.y - this.p0.y), i = this.p1.x - this.p0.x, o = this.p1.y - this.p0.y, s = Math.sqrt(i * i + o * o), a = 0, u = 0; if (0 !== e) { if (s <= 0) throw new Error("Cannot compute offset from zero-length line segment"); a = e * i / s, u = e * o / s } return new ul(n - u, r + a) }, vp.prototype.setCoordinates = function () { if (1 === arguments.length) { var t = arguments[0]; this.setCoordinates(t.p0, t.p1) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this.p0.x = e.x, this.p0.y = e.y, this.p1.x = n.x, this.p1.y = n.y } }, vp.prototype.segmentFraction = function (t) { var e = this.projectionFactor(t); return e < 0 ? e = 0 : (e > 1 || nl.isNaN(e)) && (e = 1), e }, vp.prototype.toString = function () { return "LINESTRING( " + this.p0.x + " " + this.p0.y + ", " + this.p1.x + " " + this.p1.y + ")" }, vp.prototype.isHorizontal = function () { return this.p0.y === this.p1.y }, vp.prototype.distance = function () { if (arguments[0] instanceof vp) { var t = arguments[0]; return Xl.distanceLineLine(this.p0, this.p1, t.p0, t.p1) } if (arguments[0] instanceof ul) { var e = arguments[0]; return Xl.distancePointLine(e, this.p0, this.p1) } }, vp.prototype.pointAlong = function (t) { var e = new ul; return e.x = this.p0.x + t * (this.p1.x - this.p0.x), e.y = this.p0.y + t * (this.p1.y - this.p0.y), e }, vp.prototype.hashCode = function () { var t = nl.doubleToLongBits(this.p0.x); t ^= 31 * nl.doubleToLongBits(this.p0.y); var e = Math.trunc(t) ^ Math.trunc(t >> 32), n = nl.doubleToLongBits(this.p1.x); return n ^= 31 * nl.doubleToLongBits(this.p1.y), e ^ (Math.trunc(n) ^ Math.trunc(n >> 32)) }, vp.prototype.interfaces_ = function () { return [il, al] }, vp.prototype.getClass = function () { return vp }, vp.midPoint = function (t, e) { return new ul((t.x + e.x) / 2, (t.y + e.y) / 2) }, _p.serialVersionUID.get = function () { return 0x2d2172135f411c00 }, Object.defineProperties(vp, _p); var mp = function () { this.tempEnv1 = new Ll, this.tempEnv2 = new Ll, this._overlapSeg1 = new vp, this._overlapSeg2 = new vp }; mp.prototype.overlap = function () { if (2 === arguments.length) ; else if (4 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2], r = arguments[3]; t.getLineSegment(e, this._overlapSeg1), n.getLineSegment(r, this._overlapSeg2), this.overlap(this._overlapSeg1, this._overlapSeg2) } }, mp.prototype.interfaces_ = function () { return [] }, mp.prototype.getClass = function () { return mp }; var xp = function () { this._pts = null, this._start = null, this._end = null, this._env = null, this._context = null, this._id = null; var t = arguments[0], e = arguments[1], n = arguments[2], r = arguments[3]; this._pts = t, this._start = e, this._end = n, this._context = r }; xp.prototype.getLineSegment = function (t, e) { e.p0 = this._pts[t], e.p1 = this._pts[t + 1] }, xp.prototype.computeSelect = function (t, e, n, r) { var i = this._pts[e], o = this._pts[n]; if (r.tempEnv1.init(i, o), n - e == 1) return r.select(this, e), null; if (!t.intersects(r.tempEnv1)) return null; var s = Math.trunc((e + n) / 2); e < s && this.computeSelect(t, e, s, r), s < n && this.computeSelect(t, s, n, r) }, xp.prototype.getCoordinates = function () { for (var t = new Array(this._end - this._start + 1).fill(null), e = 0, n = this._start; n <= this._end; n++) t[e++] = this._pts[n]; return t }, xp.prototype.computeOverlaps = function (t, e) { this.computeOverlapsInternal(this._start, this._end, t, t._start, t._end, e) }, xp.prototype.setId = function (t) { this._id = t }, xp.prototype.select = function (t, e) { this.computeSelect(t, this._start, this._end, e) }, xp.prototype.getEnvelope = function () { if (null === this._env) { var t = this._pts[this._start], e = this._pts[this._end]; this._env = new Ll(t, e) } return this._env }, xp.prototype.getEndIndex = function () { return this._end }, xp.prototype.getStartIndex = function () { return this._start }, xp.prototype.getContext = function () { return this._context }, xp.prototype.getId = function () { return this._id }, xp.prototype.computeOverlapsInternal = function (t, e, n, r, i, o) { var s = this._pts[t], a = this._pts[e], u = n._pts[r], l = n._pts[i]; if (e - t == 1 && i - r == 1) return o.overlap(this, t, n, r), null; if (o.tempEnv1.init(s, a), o.tempEnv2.init(u, l), !o.tempEnv1.intersects(o.tempEnv2)) return null; var c = Math.trunc((t + e) / 2), h = Math.trunc((r + i) / 2); t < c && (r < h && this.computeOverlapsInternal(t, c, n, r, h, o), h < i && this.computeOverlapsInternal(t, c, n, h, i, o)), c < e && (r < h && this.computeOverlapsInternal(c, e, n, r, h, o), h < i && this.computeOverlapsInternal(c, e, n, h, i, o)) }, xp.prototype.interfaces_ = function () { return [] }, xp.prototype.getClass = function () { return xp }; var Ep = function () { }; Ep.prototype.interfaces_ = function () { return [] }, Ep.prototype.getClass = function () { return Ep }, Ep.getChainStartIndices = function (t) { var e = 0, n = new lc; n.add(new _l(e)); do { var r = Ep.findChainEnd(t, e); n.add(new _l(r)), e = r } while (e < t.length - 1); return Ep.toIntArray(n) }, Ep.findChainEnd = function (t, e) { for (var n = e; n < t.length - 1 && t[n].equals2D(t[n + 1]);) n++; if (n >= t.length - 1) return t.length - 1; for (var r = jh.quadrant(t[n], t[n + 1]), i = e + 1; i < t.length;) { if (!t[i - 1].equals2D(t[i])) if (jh.quadrant(t[i - 1], t[i]) !== r) break; i++ } return i - 1 }, Ep.getChains = function () { if (1 === arguments.length) { var t = arguments[0]; return Ep.getChains(t, null) } if (2 === arguments.length) { for (var e = arguments[0], n = arguments[1], r = new lc, i = Ep.getChainStartIndices(e), o = 0; o < i.length - 1; o++) { var s = new xp(e, i[o], i[o + 1], n); r.add(s) } return r } }, Ep.toIntArray = function (t) { for (var e = new Array(t.size()).fill(null), n = 0; n < e.length; n++) e[n] = t.get(n).intValue(); return e }; var bp = function () { }; bp.prototype.computeNodes = function (t) { }, bp.prototype.getNodedSubstrings = function () { }, bp.prototype.interfaces_ = function () { return [] }, bp.prototype.getClass = function () { return bp }; var wp = function () { if (this._segInt = null, 0 === arguments.length) ; else if (1 === arguments.length) { var t = arguments[0]; this.setSegmentIntersector(t) } }; wp.prototype.setSegmentIntersector = function (t) { this._segInt = t }, wp.prototype.interfaces_ = function () { return [bp] }, wp.prototype.getClass = function () { return wp }; var Ip = function (t) { function e(e) { e ? t.call(this, e) : t.call(this), this._monoChains = new lc, this._index = new up, this._idCounter = 0, this._nodedSegStrings = null, this._nOverlaps = 0 } t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e; var n = {SegmentOverlapAction: {configurable: !0}}; return e.prototype.getMonotoneChains = function () { return this._monoChains }, e.prototype.getNodedSubstrings = function () { return yp.getNodedSubstrings(this._nodedSegStrings) }, e.prototype.getIndex = function () { return this._index }, e.prototype.add = function (t) { for (var e = this, n = Ep.getChains(t.getCoordinates(), t).iterator(); n.hasNext();) { var r = n.next(); r.setId(e._idCounter++), e._index.insert(r.getEnvelope(), r), e._monoChains.add(r) } }, e.prototype.computeNodes = function (t) { this._nodedSegStrings = t; for (var e = t.iterator(); e.hasNext();) this.add(e.next()); this.intersectChains() }, e.prototype.intersectChains = function () { for (var t = this, e = new Np(this._segInt), n = this._monoChains.iterator(); n.hasNext();) for (var r = n.next(), i = t._index.query(r.getEnvelope()).iterator(); i.hasNext();) { var o = i.next(); if (o.getId() > r.getId() && (r.computeOverlaps(o, e), t._nOverlaps++), t._segInt.isDone()) return null } }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, n.SegmentOverlapAction.get = function () { return Np }, Object.defineProperties(e, n), e }(wp), Np = function (t) { function e() { t.call(this), this._si = null; var e = arguments[0]; this._si = e } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.overlap = function () { if (4 !== arguments.length) return t.prototype.overlap.apply(this, arguments); var e = arguments[0], n = arguments[1], r = arguments[2], i = arguments[3], o = e.getContext(), s = r.getContext(); this._si.processIntersections(o, n, s, i) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(mp), Sp = function t() { if (this._quadrantSegments = t.DEFAULT_QUADRANT_SEGMENTS, this._endCapStyle = t.CAP_ROUND, this._joinStyle = t.JOIN_ROUND, this._mitreLimit = t.DEFAULT_MITRE_LIMIT, this._isSingleSided = !1, this._simplifyFactor = t.DEFAULT_SIMPLIFY_FACTOR, 0 === arguments.length) ; else if (1 === arguments.length) { var e = arguments[0]; this.setQuadrantSegments(e) } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1]; this.setQuadrantSegments(n), this.setEndCapStyle(r) } else if (4 === arguments.length) { var i = arguments[0], o = arguments[1], s = arguments[2], a = arguments[3]; this.setQuadrantSegments(i), this.setEndCapStyle(o), this.setJoinStyle(s), this.setMitreLimit(a) } }, Cp = { CAP_ROUND: {configurable: !0}, CAP_FLAT: {configurable: !0}, CAP_SQUARE: {configurable: !0}, JOIN_ROUND: {configurable: !0}, JOIN_MITRE: {configurable: !0}, JOIN_BEVEL: {configurable: !0}, DEFAULT_QUADRANT_SEGMENTS: {configurable: !0}, DEFAULT_MITRE_LIMIT: {configurable: !0}, DEFAULT_SIMPLIFY_FACTOR: {configurable: !0} }; Sp.prototype.getEndCapStyle = function () { return this._endCapStyle }, Sp.prototype.isSingleSided = function () { return this._isSingleSided }, Sp.prototype.setQuadrantSegments = function (t) { this._quadrantSegments = t, 0 === this._quadrantSegments && (this._joinStyle = Sp.JOIN_BEVEL), this._quadrantSegments < 0 && (this._joinStyle = Sp.JOIN_MITRE, this._mitreLimit = Math.abs(this._quadrantSegments)), t <= 0 && (this._quadrantSegments = 1), this._joinStyle !== Sp.JOIN_ROUND && (this._quadrantSegments = Sp.DEFAULT_QUADRANT_SEGMENTS) }, Sp.prototype.getJoinStyle = function () { return this._joinStyle }, Sp.prototype.setJoinStyle = function (t) { this._joinStyle = t }, Sp.prototype.setSimplifyFactor = function (t) { this._simplifyFactor = t < 0 ? 0 : t }, Sp.prototype.getSimplifyFactor = function () { return this._simplifyFactor }, Sp.prototype.getQuadrantSegments = function () { return this._quadrantSegments }, Sp.prototype.setEndCapStyle = function (t) { this._endCapStyle = t }, Sp.prototype.getMitreLimit = function () { return this._mitreLimit }, Sp.prototype.setMitreLimit = function (t) { this._mitreLimit = t }, Sp.prototype.setSingleSided = function (t) { this._isSingleSided = t }, Sp.prototype.interfaces_ = function () { return [] }, Sp.prototype.getClass = function () { return Sp }, Sp.bufferDistanceError = function (t) { var e = Math.PI / 2 / t; return 1 - Math.cos(e / 2) }, Cp.CAP_ROUND.get = function () { return 1 }, Cp.CAP_FLAT.get = function () { return 2 }, Cp.CAP_SQUARE.get = function () { return 3 }, Cp.JOIN_ROUND.get = function () { return 1 }, Cp.JOIN_MITRE.get = function () { return 2 }, Cp.JOIN_BEVEL.get = function () { return 3 }, Cp.DEFAULT_QUADRANT_SEGMENTS.get = function () { return 8 }, Cp.DEFAULT_MITRE_LIMIT.get = function () { return 5 }, Cp.DEFAULT_SIMPLIFY_FACTOR.get = function () { return .01 }, Object.defineProperties(Sp, Cp); var Pp = function (t) { this._distanceTol = null, this._isDeleted = null, this._angleOrientation = Xl.COUNTERCLOCKWISE, this._inputLine = t || null }, Mp = { INIT: {configurable: !0}, DELETE: {configurable: !0}, KEEP: {configurable: !0}, NUM_PTS_TO_CHECK: {configurable: !0} }; Pp.prototype.isDeletable = function (t, e, n, r) { var i = this._inputLine[t], o = this._inputLine[e], s = this._inputLine[n]; return !!this.isConcave(i, o, s) && (!!this.isShallow(i, o, s, r) && this.isShallowSampled(i, o, t, n, r)) }, Pp.prototype.deleteShallowConcavities = function () { for (var t = this, e = 1, n = this.findNextNonDeletedIndex(e), r = this.findNextNonDeletedIndex(n), i = !1; r < this._inputLine.length;) { var o = !1; t.isDeletable(e, n, r, t._distanceTol) && (t._isDeleted[n] = Pp.DELETE, o = !0, i = !0), e = o ? r : n, n = t.findNextNonDeletedIndex(e), r = t.findNextNonDeletedIndex(n) } return i }, Pp.prototype.isShallowConcavity = function (t, e, n, r) { return Xl.computeOrientation(t, e, n) === this._angleOrientation && Xl.distancePointLine(e, t, n) < r }, Pp.prototype.isShallowSampled = function (t, e, n, r, i) { var o = Math.trunc((r - n) / Pp.NUM_PTS_TO_CHECK); o <= 0 && (o = 1); for (var s = n; s < r; s += o) if (!this.isShallow(t, e, this._inputLine[s], i)) return !1; return !0 }, Pp.prototype.isConcave = function (t, e, n) { var r = Xl.computeOrientation(t, e, n) === this._angleOrientation; return r }, Pp.prototype.simplify = function (t) { this._distanceTol = Math.abs(t), t < 0 && (this._angleOrientation = Xl.CLOCKWISE), this._isDeleted = new Array(this._inputLine.length).fill(null); var e = !1; do { e = this.deleteShallowConcavities() } while (e); return this.collapseLine() }, Pp.prototype.findNextNonDeletedIndex = function (t) { for (var e = t + 1; e < this._inputLine.length && this._isDeleted[e] === Pp.DELETE;) e++; return e }, Pp.prototype.isShallow = function (t, e, n, r) { return Xl.distancePointLine(e, t, n) < r }, Pp.prototype.collapseLine = function () { for (var t = new hc, e = 0; e < this._inputLine.length; e++) this._isDeleted[e] !== Pp.DELETE && t.add(this._inputLine[e]); return t.toCoordinateArray() }, Pp.prototype.interfaces_ = function () { return [] }, Pp.prototype.getClass = function () { return Pp }, Pp.simplify = function (t, e) { return new Pp(t).simplify(e) }, Mp.INIT.get = function () { return 0 }, Mp.DELETE.get = function () { return 1 }, Mp.KEEP.get = function () { return 1 }, Mp.NUM_PTS_TO_CHECK.get = function () { return 10 }, Object.defineProperties(Pp, Mp); var Lp = function () { this._ptList = null, this._precisionModel = null, this._minimimVertexDistance = 0, this._ptList = new lc }, Op = {COORDINATE_ARRAY_TYPE: {configurable: !0}}; Lp.prototype.getCoordinates = function () { return this._ptList.toArray(Lp.COORDINATE_ARRAY_TYPE) }, Lp.prototype.setPrecisionModel = function (t) { this._precisionModel = t }, Lp.prototype.addPt = function (t) { var e = new ul(t); if (this._precisionModel.makePrecise(e), this.isRedundant(e)) return null; this._ptList.add(e) }, Lp.prototype.revere = function () { }, Lp.prototype.addPts = function (t, e) { if (e) for (var n = 0; n < t.length; n++) this.addPt(t[n]); else for (var r = t.length - 1; r >= 0; r--) this.addPt(t[r]) }, Lp.prototype.isRedundant = function (t) { if (this._ptList.size() < 1) return !1; var e = this._ptList.get(this._ptList.size() - 1); return t.distance(e) < this._minimimVertexDistance }, Lp.prototype.toString = function () { return (new _h).createLineString(this.getCoordinates()).toString() }, Lp.prototype.closeRing = function () { if (this._ptList.size() < 1) return null; var t = new ul(this._ptList.get(0)), e = this._ptList.get(this._ptList.size() - 1); if (t.equals(e)) return null; this._ptList.add(t) }, Lp.prototype.setMinimumVertexDistance = function (t) { this._minimimVertexDistance = t }, Lp.prototype.interfaces_ = function () { return [] }, Lp.prototype.getClass = function () { return Lp }, Op.COORDINATE_ARRAY_TYPE.get = function () { return new Array(0).fill(null) }, Object.defineProperties(Lp, Op); var Rp = function () { }, Tp = { PI_TIMES_2: {configurable: !0}, PI_OVER_2: {configurable: !0}, PI_OVER_4: {configurable: !0}, COUNTERCLOCKWISE: {configurable: !0}, CLOCKWISE: {configurable: !0}, NONE: {configurable: !0} }; Rp.prototype.interfaces_ = function () { return [] }, Rp.prototype.getClass = function () { return Rp }, Rp.toDegrees = function (t) { return 180 * t / Math.PI }, Rp.normalize = function (t) { for (; t > Math.PI;) t -= Rp.PI_TIMES_2; for (; t <= -Math.PI;) t += Rp.PI_TIMES_2; return t }, Rp.angle = function () { if (1 === arguments.length) { var t = arguments[0]; return Math.atan2(t.y, t.x) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1], r = n.x - e.x, i = n.y - e.y; return Math.atan2(i, r) } }, Rp.isAcute = function (t, e, n) { var r = t.x - e.x, i = t.y - e.y; return r * (n.x - e.x) + i * (n.y - e.y) > 0 }, Rp.isObtuse = function (t, e, n) { var r = t.x - e.x, i = t.y - e.y; return r * (n.x - e.x) + i * (n.y - e.y) < 0 }, Rp.interiorAngle = function (t, e, n) { var r = Rp.angle(e, t), i = Rp.angle(e, n); return Math.abs(i - r) }, Rp.normalizePositive = function (t) { if (t < 0) { for (; t < 0;) t += Rp.PI_TIMES_2; t >= Rp.PI_TIMES_2 && (t = 0) } else { for (; t >= Rp.PI_TIMES_2;) t -= Rp.PI_TIMES_2; t < 0 && (t = 0) } return t }, Rp.angleBetween = function (t, e, n) { var r = Rp.angle(e, t), i = Rp.angle(e, n); return Rp.diff(r, i) }, Rp.diff = function (t, e) { var n = null; return (n = t < e ? e - t : t - e) > Math.PI && (n = 2 * Math.PI - n), n }, Rp.toRadians = function (t) { return t * Math.PI / 180 }, Rp.getTurn = function (t, e) { var n = Math.sin(e - t); return n > 0 ? Rp.COUNTERCLOCKWISE : n < 0 ? Rp.CLOCKWISE : Rp.NONE }, Rp.angleBetweenOriented = function (t, e, n) { var r = Rp.angle(e, t), i = Rp.angle(e, n) - r; return i <= -Math.PI ? i + Rp.PI_TIMES_2 : i > Math.PI ? i - Rp.PI_TIMES_2 : i }, Tp.PI_TIMES_2.get = function () { return 2 * Math.PI }, Tp.PI_OVER_2.get = function () { return Math.PI / 2 }, Tp.PI_OVER_4.get = function () { return Math.PI / 4 }, Tp.COUNTERCLOCKWISE.get = function () { return Xl.COUNTERCLOCKWISE }, Tp.CLOCKWISE.get = function () { return Xl.CLOCKWISE }, Tp.NONE.get = function () { return Xl.COLLINEAR }, Object.defineProperties(Rp, Tp); var Ap = function t() { this._maxCurveSegmentError = 0, this._filletAngleQuantum = null, this._closingSegLengthFactor = 1, this._segList = null, this._distance = 0, this._precisionModel = null, this._bufParams = null, this._li = null, this._s0 = null, this._s1 = null, this._s2 = null, this._seg0 = new vp, this._seg1 = new vp, this._offset0 = new vp, this._offset1 = new vp, this._side = 0, this._hasNarrowConcaveAngle = !1; var e = arguments[0], n = arguments[1], r = arguments[2]; this._precisionModel = e, this._bufParams = n, this._li = new jl, this._filletAngleQuantum = Math.PI / 2 / n.getQuadrantSegments(), n.getQuadrantSegments() >= 8 && n.getJoinStyle() === Sp.JOIN_ROUND && (this._closingSegLengthFactor = t.MAX_CLOSING_SEG_LEN_FACTOR), this.init(r) }, Dp = { OFFSET_SEGMENT_SEPARATION_FACTOR: {configurable: !0}, INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR: {configurable: !0}, CURVE_VERTEX_SNAP_DISTANCE_FACTOR: {configurable: !0}, MAX_CLOSING_SEG_LEN_FACTOR: {configurable: !0} }; Ap.prototype.addNextSegment = function (t, e) { if (this._s0 = this._s1, this._s1 = this._s2, this._s2 = t, this._seg0.setCoordinates(this._s0, this._s1), this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0), this._seg1.setCoordinates(this._s1, this._s2), this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1), this._s1.equals(this._s2)) return null; var n = Xl.computeOrientation(this._s0, this._s1, this._s2), r = n === Xl.CLOCKWISE && this._side === Sh.LEFT || n === Xl.COUNTERCLOCKWISE && this._side === Sh.RIGHT; 0 === n ? this.addCollinear(e) : r ? this.addOutsideTurn(n, e) : this.addInsideTurn(n, e) }, Ap.prototype.addLineEndCap = function (t, e) { var n = new vp(t, e), r = new vp; this.computeOffsetSegment(n, Sh.LEFT, this._distance, r); var i = new vp; this.computeOffsetSegment(n, Sh.RIGHT, this._distance, i); var o = e.x - t.x, s = e.y - t.y, a = Math.atan2(s, o); switch (this._bufParams.getEndCapStyle()) { case Sp.CAP_ROUND: this._segList.addPt(r.p1), this.addFilletArc(e, a + Math.PI / 2, a - Math.PI / 2, Xl.CLOCKWISE, this._distance), this._segList.addPt(i.p1); break; case Sp.CAP_FLAT: this._segList.addPt(r.p1), this._segList.addPt(i.p1); break; case Sp.CAP_SQUARE: var u = new ul; u.x = Math.abs(this._distance) * Math.cos(a), u.y = Math.abs(this._distance) * Math.sin(a); var l = new ul(r.p1.x + u.x, r.p1.y + u.y), c = new ul(i.p1.x + u.x, i.p1.y + u.y); this._segList.addPt(l), this._segList.addPt(c) } }, Ap.prototype.getCoordinates = function () { return this._segList.getCoordinates() }, Ap.prototype.addMitreJoin = function (t, e, n, r) { var i = !0, o = null; try { o = Ml.intersection(e.p0, e.p1, n.p0, n.p1), (r <= 0 ? 1 : o.distance(t) / Math.abs(r)) > this._bufParams.getMitreLimit() && (i = !1) } catch (t) { if (!(t instanceof Cl)) throw t; o = new ul(0, 0), i = !1 } i ? this._segList.addPt(o) : this.addLimitedMitreJoin(e, n, r, this._bufParams.getMitreLimit()) }, Ap.prototype.addFilletCorner = function (t, e, n, r, i) { var o = e.x - t.x, s = e.y - t.y, a = Math.atan2(s, o), u = n.x - t.x, l = n.y - t.y, c = Math.atan2(l, u); r === Xl.CLOCKWISE ? a <= c && (a += 2 * Math.PI) : a >= c && (a -= 2 * Math.PI), this._segList.addPt(e), this.addFilletArc(t, a, c, r, i), this._segList.addPt(n) }, Ap.prototype.addOutsideTurn = function (t, e) { if (this._offset0.p1.distance(this._offset1.p0) < this._distance * Ap.OFFSET_SEGMENT_SEPARATION_FACTOR) return this._segList.addPt(this._offset0.p1), null; this._bufParams.getJoinStyle() === Sp.JOIN_MITRE ? this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance) : this._bufParams.getJoinStyle() === Sp.JOIN_BEVEL ? this.addBevelJoin(this._offset0, this._offset1) : (e && this._segList.addPt(this._offset0.p1), this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, t, this._distance), this._segList.addPt(this._offset1.p0)) }, Ap.prototype.createSquare = function (t) { this._segList.addPt(new ul(t.x + this._distance, t.y + this._distance)), this._segList.addPt(new ul(t.x + this._distance, t.y - this._distance)), this._segList.addPt(new ul(t.x - this._distance, t.y - this._distance)), this._segList.addPt(new ul(t.x - this._distance, t.y + this._distance)), this._segList.closeRing() }, Ap.prototype.addSegments = function (t, e) { this._segList.addPts(t, e) }, Ap.prototype.addFirstSegment = function () { this._segList.addPt(this._offset1.p0) }, Ap.prototype.addLastSegment = function () { this._segList.addPt(this._offset1.p1) }, Ap.prototype.initSideSegments = function (t, e, n) { this._s1 = t, this._s2 = e, this._side = n, this._seg1.setCoordinates(t, e), this.computeOffsetSegment(this._seg1, n, this._distance, this._offset1) }, Ap.prototype.addLimitedMitreJoin = function (t, e, n, r) { var i = this._seg0.p1, o = Rp.angle(i, this._seg0.p0), s = Rp.angleBetweenOriented(this._seg0.p0, i, this._seg1.p1) / 2, a = Rp.normalize(o + s), u = Rp.normalize(a + Math.PI), l = r * n, c = n - l * Math.abs(Math.sin(s)), h = i.x + l * Math.cos(u), p = i.y + l * Math.sin(u), f = new ul(h, p), g = new vp(i, f), d = g.pointAlongOffset(1, c), y = g.pointAlongOffset(1, -c); this._side === Sh.LEFT ? (this._segList.addPt(d), this._segList.addPt(y)) : (this._segList.addPt(y), this._segList.addPt(d)) }, Ap.prototype.computeOffsetSegment = function (t, e, n, r) { var i = e === Sh.LEFT ? 1 : -1, o = t.p1.x - t.p0.x, s = t.p1.y - t.p0.y, a = Math.sqrt(o * o + s * s), u = i * n * o / a, l = i * n * s / a; r.p0.x = t.p0.x - l, r.p0.y = t.p0.y + u, r.p1.x = t.p1.x - l, r.p1.y = t.p1.y + u }, Ap.prototype.addFilletArc = function (t, e, n, r, i) { var o = r === Xl.CLOCKWISE ? -1 : 1, s = Math.abs(e - n), a = Math.trunc(s / this._filletAngleQuantum + .5); if (a < 1) return null; for (var u = s / a, l = 0, c = new ul; l < s;) { var h = e + o * l; c.x = t.x + i * Math.cos(h), c.y = t.y + i * Math.sin(h), this._segList.addPt(c), l += u } }, Ap.prototype.addInsideTurn = function (t, e) { if (this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1), this._li.hasIntersection()) this._segList.addPt(this._li.getIntersection(0)); else if (this._hasNarrowConcaveAngle = !0, this._offset0.p1.distance(this._offset1.p0) < this._distance * Ap.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) this._segList.addPt(this._offset0.p1); else { if (this._segList.addPt(this._offset0.p1), this._closingSegLengthFactor > 0) { var n = new ul((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1)); this._segList.addPt(n); var r = new ul((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1)); this._segList.addPt(r) } else this._segList.addPt(this._s1); this._segList.addPt(this._offset1.p0) } }, Ap.prototype.createCircle = function (t) { var e = new ul(t.x + this._distance, t.y); this._segList.addPt(e), this.addFilletArc(t, 0, 2 * Math.PI, -1, this._distance), this._segList.closeRing() }, Ap.prototype.addBevelJoin = function (t, e) { this._segList.addPt(t.p1), this._segList.addPt(e.p0) }, Ap.prototype.init = function (t) { this._distance = t, this._maxCurveSegmentError = t * (1 - Math.cos(this._filletAngleQuantum / 2)), this._segList = new Lp, this._segList.setPrecisionModel(this._precisionModel), this._segList.setMinimumVertexDistance(t * Ap.CURVE_VERTEX_SNAP_DISTANCE_FACTOR) }, Ap.prototype.addCollinear = function (t) { this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2), this._li.getIntersectionNum() >= 2 && (this._bufParams.getJoinStyle() === Sp.JOIN_BEVEL || this._bufParams.getJoinStyle() === Sp.JOIN_MITRE ? (t && this._segList.addPt(this._offset0.p1), this._segList.addPt(this._offset1.p0)) : this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, Xl.CLOCKWISE, this._distance)) }, Ap.prototype.closeRing = function () { this._segList.closeRing() }, Ap.prototype.hasNarrowConcaveAngle = function () { return this._hasNarrowConcaveAngle }, Ap.prototype.interfaces_ = function () { return [] }, Ap.prototype.getClass = function () { return Ap }, Dp.OFFSET_SEGMENT_SEPARATION_FACTOR.get = function () { return .001 }, Dp.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return .001 }, Dp.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1e-6 }, Dp.MAX_CLOSING_SEG_LEN_FACTOR.get = function () { return 80 }, Object.defineProperties(Ap, Dp); var Fp = function () { this._distance = 0, this._precisionModel = null, this._bufParams = null; var t = arguments[0], e = arguments[1]; this._precisionModel = t, this._bufParams = e }; Fp.prototype.getOffsetCurve = function (t, e) { if (this._distance = e, 0 === e) return null; var n = e < 0, r = Math.abs(e), i = this.getSegGen(r); t.length <= 1 ? this.computePointCurve(t[0], i) : this.computeOffsetCurve(t, n, i); var o = i.getCoordinates(); return n && pc.reverse(o), o }, Fp.prototype.computeSingleSidedBufferCurve = function (t, e, n) { var r = this.simplifyTolerance(this._distance); if (e) { n.addSegments(t, !0); var i = Pp.simplify(t, -r), o = i.length - 1; n.initSideSegments(i[o], i[o - 1], Sh.LEFT), n.addFirstSegment(); for (var s = o - 2; s >= 0; s--) n.addNextSegment(i[s], !0) } else { n.addSegments(t, !1); var a = Pp.simplify(t, r), u = a.length - 1; n.initSideSegments(a[0], a[1], Sh.LEFT), n.addFirstSegment(); for (var l = 2; l <= u; l++) n.addNextSegment(a[l], !0) } n.addLastSegment(), n.closeRing() }, Fp.prototype.computeRingBufferCurve = function (t, e, n) { var r = this.simplifyTolerance(this._distance); e === Sh.RIGHT && (r = -r); var i = Pp.simplify(t, r), o = i.length - 1; n.initSideSegments(i[o - 1], i[0], e); for (var s = 1; s <= o; s++) { var a = 1 !== s; n.addNextSegment(i[s], a) } n.closeRing() }, Fp.prototype.computeLineBufferCurve = function (t, e) { var n = this.simplifyTolerance(this._distance), r = Pp.simplify(t, n), i = r.length - 1; e.initSideSegments(r[0], r[1], Sh.LEFT); for (var o = 2; o <= i; o++) e.addNextSegment(r[o], !0); e.addLastSegment(), e.addLineEndCap(r[i - 1], r[i]); var s = Pp.simplify(t, -n), a = s.length - 1; e.initSideSegments(s[a], s[a - 1], Sh.LEFT); for (var u = a - 2; u >= 0; u--) e.addNextSegment(s[u], !0); e.addLastSegment(), e.addLineEndCap(s[1], s[0]), e.closeRing() }, Fp.prototype.computePointCurve = function (t, e) { switch (this._bufParams.getEndCapStyle()) { case Sp.CAP_ROUND: e.createCircle(t); break; case Sp.CAP_SQUARE: e.createSquare(t) } }, Fp.prototype.getLineCurve = function (t, e) { if (this._distance = e, e < 0 && !this._bufParams.isSingleSided()) return null; if (0 === e) return null; var n = Math.abs(e), r = this.getSegGen(n); if (t.length <= 1) this.computePointCurve(t[0], r); else if (this._bufParams.isSingleSided()) { var i = e < 0; this.computeSingleSidedBufferCurve(t, i, r) } else this.computeLineBufferCurve(t, r); return r.getCoordinates() }, Fp.prototype.getBufferParameters = function () { return this._bufParams }, Fp.prototype.simplifyTolerance = function (t) { return t * this._bufParams.getSimplifyFactor() }, Fp.prototype.getRingCurve = function (t, e, n) { if (this._distance = n, t.length <= 2) return this.getLineCurve(t, n); if (0 === n) return Fp.copyCoordinates(t); var r = this.getSegGen(n); return this.computeRingBufferCurve(t, e, r), r.getCoordinates() }, Fp.prototype.computeOffsetCurve = function (t, e, n) { var r = this.simplifyTolerance(this._distance); if (e) { var i = Pp.simplify(t, -r), o = i.length - 1; n.initSideSegments(i[o], i[o - 1], Sh.LEFT), n.addFirstSegment(); for (var s = o - 2; s >= 0; s--) n.addNextSegment(i[s], !0) } else { var a = Pp.simplify(t, r), u = a.length - 1; n.initSideSegments(a[0], a[1], Sh.LEFT), n.addFirstSegment(); for (var l = 2; l <= u; l++) n.addNextSegment(a[l], !0) } n.addLastSegment() }, Fp.prototype.getSegGen = function (t) { return new Ap(this._precisionModel, this._bufParams, t) }, Fp.prototype.interfaces_ = function () { return [] }, Fp.prototype.getClass = function () { return Fp }, Fp.copyCoordinates = function (t) { for (var e = new Array(t.length).fill(null), n = 0; n < e.length; n++) e[n] = new ul(t[n]); return e }; var kp = function () { this._subgraphs = null, this._seg = new vp, this._cga = new Xl; var t = arguments[0]; this._subgraphs = t }, Gp = {DepthSegment: {configurable: !0}}; kp.prototype.findStabbedSegments = function () { var t = this; if (1 === arguments.length) { for (var e = arguments[0], n = new lc, r = this._subgraphs.iterator(); r.hasNext();) { var i = r.next(), o = i.getEnvelope(); e.y < o.getMinY() || e.y > o.getMaxY() || t.findStabbedSegments(e, i.getDirectedEdges(), n) } return n } if (3 === arguments.length) if (gl(arguments[2], ac) && arguments[0] instanceof ul && arguments[1] instanceof Xh) for (var s = arguments[0], a = arguments[1], u = arguments[2], l = a.getEdge().getCoordinates(), c = 0; c < l.length - 1; c++) { t._seg.p0 = l[c], t._seg.p1 = l[c + 1], t._seg.p0.y > t._seg.p1.y && t._seg.reverse(); var h = Math.max(t._seg.p0.x, t._seg.p1.x); if (!(h < s.x) && !(t._seg.isHorizontal() || s.y < t._seg.p0.y || s.y > t._seg.p1.y || Xl.computeOrientation(t._seg.p0, t._seg.p1, s) === Xl.RIGHT)) { var p = a.getDepth(Sh.LEFT); t._seg.p0.equals(l[c]) || (p = a.getDepth(Sh.RIGHT)); var f = new qp(t._seg, p); u.add(f) } } else if (gl(arguments[2], ac) && arguments[0] instanceof ul && gl(arguments[1], ac)) for (var g = arguments[0], d = arguments[1], y = arguments[2], v = d.iterator(); v.hasNext();) { var _ = v.next(); _.isForward() && t.findStabbedSegments(g, _, y) } }, kp.prototype.getDepth = function (t) { var e = this.findStabbedSegments(t); return 0 === e.size() ? 0 : np.min(e)._leftDepth }, kp.prototype.interfaces_ = function () { return [] }, kp.prototype.getClass = function () { return kp }, Gp.DepthSegment.get = function () { return qp }, Object.defineProperties(kp, Gp); var qp = function () { this._upwardSeg = null, this._leftDepth = null; var t = arguments[0], e = arguments[1]; this._upwardSeg = new vp(t), this._leftDepth = e }; qp.prototype.compareTo = function (t) { var e = t; if (this._upwardSeg.minX() >= e._upwardSeg.maxX()) return 1; if (this._upwardSeg.maxX() <= e._upwardSeg.minX()) return -1; var n = this._upwardSeg.orientationIndex(e._upwardSeg); return 0 !== n || 0 !== (n = -1 * e._upwardSeg.orientationIndex(this._upwardSeg)) ? n : this._upwardSeg.compareTo(e._upwardSeg) }, qp.prototype.compareX = function (t, e) { var n = t.p0.compareTo(e.p0); return 0 !== n ? n : t.p1.compareTo(e.p1) }, qp.prototype.toString = function () { return this._upwardSeg.toString() }, qp.prototype.interfaces_ = function () { return [il] }, qp.prototype.getClass = function () { return qp }; var Bp = function (t, e, n) { this.p0 = t || null, this.p1 = e || null, this.p2 = n || null }; Bp.prototype.area = function () { return Bp.area(this.p0, this.p1, this.p2) }, Bp.prototype.signedArea = function () { return Bp.signedArea(this.p0, this.p1, this.p2) }, Bp.prototype.interpolateZ = function (t) { if (null === t) throw new el("Supplied point is null."); return Bp.interpolateZ(t, this.p0, this.p1, this.p2) }, Bp.prototype.longestSideLength = function () { return Bp.longestSideLength(this.p0, this.p1, this.p2) }, Bp.prototype.isAcute = function () { return Bp.isAcute(this.p0, this.p1, this.p2) }, Bp.prototype.circumcentre = function () { return Bp.circumcentre(this.p0, this.p1, this.p2) }, Bp.prototype.area3D = function () { return Bp.area3D(this.p0, this.p1, this.p2) }, Bp.prototype.centroid = function () { return Bp.centroid(this.p0, this.p1, this.p2) }, Bp.prototype.inCentre = function () { return Bp.inCentre(this.p0, this.p1, this.p2) }, Bp.prototype.interfaces_ = function () { return [] }, Bp.prototype.getClass = function () { return Bp }, Bp.area = function (t, e, n) { return Math.abs(((n.x - t.x) * (e.y - t.y) - (e.x - t.x) * (n.y - t.y)) / 2) }, Bp.signedArea = function (t, e, n) { return ((n.x - t.x) * (e.y - t.y) - (e.x - t.x) * (n.y - t.y)) / 2 }, Bp.det = function (t, e, n, r) { return t * r - e * n }, Bp.interpolateZ = function (t, e, n, r) { var i = e.x, o = e.y, s = n.x - i, a = r.x - i, u = n.y - o, l = r.y - o, c = s * l - a * u, h = t.x - i, p = t.y - o, f = (l * h - a * p) / c, g = (-u * h + s * p) / c; return e.z + f * (n.z - e.z) + g * (r.z - e.z) }, Bp.longestSideLength = function (t, e, n) { var r = t.distance(e), i = e.distance(n), o = n.distance(t), s = r; return i > s && (s = i), o > s && (s = o), s }, Bp.isAcute = function (t, e, n) { return !!Rp.isAcute(t, e, n) && (!!Rp.isAcute(e, n, t) && !!Rp.isAcute(n, t, e)) }, Bp.circumcentre = function (t, e, n) { var r = n.x, i = n.y, o = t.x - r, s = t.y - i, a = e.x - r, u = e.y - i, l = 2 * Bp.det(o, s, a, u), c = Bp.det(s, o * o + s * s, u, a * a + u * u), h = Bp.det(o, o * o + s * s, a, a * a + u * u); return new ul(r - c / l, i + h / l) }, Bp.perpendicularBisector = function (t, e) { var n = e.x - t.x, r = e.y - t.y, i = new Ml(t.x + n / 2, t.y + r / 2, 1), o = new Ml(t.x - r + n / 2, t.y + n + r / 2, 1); return new Ml(i, o) }, Bp.angleBisector = function (t, e, n) { var r = e.distance(t), i = r / (r + e.distance(n)), o = n.x - t.x, s = n.y - t.y; return new ul(t.x + i * o, t.y + i * s) }, Bp.area3D = function (t, e, n) { var r = e.x - t.x, i = e.y - t.y, o = e.z - t.z, s = n.x - t.x, a = n.y - t.y, u = n.z - t.z, l = i * u - o * a, c = o * s - r * u, h = r * a - i * s, p = l * l + c * c + h * h, f = Math.sqrt(p) / 2; return f }, Bp.centroid = function (t, e, n) { var r = (t.x + e.x + n.x) / 3, i = (t.y + e.y + n.y) / 3; return new ul(r, i) }, Bp.inCentre = function (t, e, n) { var r = e.distance(n), i = t.distance(n), o = t.distance(e), s = r + i + o, a = (r * t.x + i * e.x + o * n.x) / s, u = (r * t.y + i * e.y + o * n.y) / s; return new ul(a, u) }; var zp = function () { this._inputGeom = null, this._distance = null, this._curveBuilder = null, this._curveList = new lc; var t = arguments[0], e = arguments[1], n = arguments[2]; this._inputGeom = t, this._distance = e, this._curveBuilder = n }; zp.prototype.addPoint = function (t) { if (this._distance <= 0) return null; var e = t.getCoordinates(), n = this._curveBuilder.getLineCurve(e, this._distance); this.addCurve(n, pl.EXTERIOR, pl.INTERIOR) }, zp.prototype.addPolygon = function (t) { var e = this, n = this._distance, r = Sh.LEFT; this._distance < 0 && (n = -this._distance, r = Sh.RIGHT); var i = t.getExteriorRing(), o = pc.removeRepeatedPoints(i.getCoordinates()); if (this._distance < 0 && this.isErodedCompletely(i, this._distance)) return null; if (this._distance <= 0 && o.length < 3) return null; this.addPolygonRing(o, n, r, pl.EXTERIOR, pl.INTERIOR); for (var s = 0; s < t.getNumInteriorRing(); s++) { var a = t.getInteriorRingN(s), u = pc.removeRepeatedPoints(a.getCoordinates()); e._distance > 0 && e.isErodedCompletely(a, -e._distance) || e.addPolygonRing(u, n, Sh.opposite(r), pl.INTERIOR, pl.EXTERIOR) } }, zp.prototype.isTriangleErodedCompletely = function (t, e) { var n = new Bp(t[0], t[1], t[2]), r = n.inCentre(); return Xl.distancePointLine(r, n.p0, n.p1) < Math.abs(e) }, zp.prototype.addLineString = function (t) { if (this._distance <= 0 && !this._curveBuilder.getBufferParameters().isSingleSided()) return null; var e = pc.removeRepeatedPoints(t.getCoordinates()), n = this._curveBuilder.getLineCurve(e, this._distance); this.addCurve(n, pl.EXTERIOR, pl.INTERIOR) }, zp.prototype.addCurve = function (t, e, n) { if (null === t || t.length < 2) return null; var r = new yp(t, new Dh(0, pl.BOUNDARY, e, n)); this._curveList.add(r) }, zp.prototype.getCurves = function () { return this.add(this._inputGeom), this._curveList }, zp.prototype.addPolygonRing = function (t, e, n, r, i) { if (0 === e && t.length < nh.MINIMUM_VALID_SIZE) return null; var o = r, s = i; t.length >= nh.MINIMUM_VALID_SIZE && Xl.isCCW(t) && (o = i, s = r, n = Sh.opposite(n)); var a = this._curveBuilder.getRingCurve(t, n, e); this.addCurve(a, o, s) }, zp.prototype.add = function (t) { if (t.isEmpty()) return null; t instanceof th ? this.addPolygon(t) : t instanceof Zc ? this.addLineString(t) : t instanceof Qc ? this.addPoint(t) : (t instanceof eh || t instanceof Gc || t instanceof rh || t instanceof kc) && this.addCollection(t) }, zp.prototype.isErodedCompletely = function (t, e) { var n = t.getCoordinates(); if (n.length < 4) return e < 0; if (4 === n.length) return this.isTriangleErodedCompletely(n, e); var r = t.getEnvelopeInternal(), i = Math.min(r.getHeight(), r.getWidth()); return e < 0 && 2 * Math.abs(e) > i }, zp.prototype.addCollection = function (t) { for (var e = 0; e < t.getNumGeometries(); e++) { var n = t.getGeometryN(e); this.add(n) } }, zp.prototype.interfaces_ = function () { return [] }, zp.prototype.getClass = function () { return zp }; var jp = function () { }; jp.prototype.locate = function (t) { }, jp.prototype.interfaces_ = function () { return [] }, jp.prototype.getClass = function () { return jp }; var Up = function () { this._parent = null, this._atStart = null, this._max = null, this._index = null, this._subcollectionIterator = null; var t = arguments[0]; this._parent = t, this._atStart = !0, this._index = 0, this._max = t.getNumGeometries() }; Up.prototype.next = function () { if (this._atStart) return this._atStart = !1, Up.isAtomic(this._parent) && this._index++, this._parent; if (null !== this._subcollectionIterator) { if (this._subcollectionIterator.hasNext()) return this._subcollectionIterator.next(); this._subcollectionIterator = null } if (this._index >= this._max) throw new uc; var t = this._parent.getGeometryN(this._index++); return t instanceof kc ? (this._subcollectionIterator = new Up(t), this._subcollectionIterator.next()) : t }, Up.prototype.remove = function () { throw new Error(this.getClass().getName()) }, Up.prototype.hasNext = function () { if (this._atStart) return !0; if (null !== this._subcollectionIterator) { if (this._subcollectionIterator.hasNext()) return !0; this._subcollectionIterator = null } return !(this._index >= this._max) }, Up.prototype.interfaces_ = function () { return [sc] }, Up.prototype.getClass = function () { return Up }, Up.isAtomic = function (t) { return !(t instanceof kc) }; var Vp = function () { this._geom = null; var t = arguments[0]; this._geom = t }; Vp.prototype.locate = function (t) { return Vp.locate(t, this._geom) }, Vp.prototype.interfaces_ = function () { return [jp] }, Vp.prototype.getClass = function () { return Vp }, Vp.isPointInRing = function (t, e) { return !!e.getEnvelopeInternal().intersects(t) && Xl.isPointInRing(t, e.getCoordinates()) }, Vp.containsPointInPolygon = function (t, e) { if (e.isEmpty()) return !1; var n = e.getExteriorRing(); if (!Vp.isPointInRing(t, n)) return !1; for (var r = 0; r < e.getNumInteriorRing(); r++) { var i = e.getInteriorRingN(r); if (Vp.isPointInRing(t, i)) return !1 } return !0 }, Vp.containsPoint = function (t, e) { if (e instanceof th) return Vp.containsPointInPolygon(t, e); if (e instanceof kc) for (var n = new Up(e); n.hasNext();) { var r = n.next(); if (r !== e && Vp.containsPoint(t, r)) return !0 } return !1 }, Vp.locate = function (t, e) { return e.isEmpty() ? pl.EXTERIOR : Vp.containsPoint(t, e) ? pl.INTERIOR : pl.EXTERIOR }; var Xp = function () { this._edgeMap = new Cc, this._edgeList = null, this._ptInAreaLocation = [pl.NONE, pl.NONE] }; Xp.prototype.getNextCW = function (t) { this.getEdges(); var e = this._edgeList.indexOf(t), n = e - 1; return 0 === e && (n = this._edgeList.size() - 1), this._edgeList.get(n) }, Xp.prototype.propagateSideLabels = function (t) { for (var e = pl.NONE, n = this.iterator(); n.hasNext();) { var r = n.next().getLabel(); r.isArea(t) && r.getLocation(t, Sh.LEFT) !== pl.NONE && (e = r.getLocation(t, Sh.LEFT)) } if (e === pl.NONE) return null; for (var i = e, o = this.iterator(); o.hasNext();) { var s = o.next(), a = s.getLabel(); if (a.getLocation(t, Sh.ON) === pl.NONE && a.setLocation(t, Sh.ON, i), a.isArea(t)) { var u = a.getLocation(t, Sh.LEFT), l = a.getLocation(t, Sh.RIGHT); if (l !== pl.NONE) { if (l !== i) throw new Oh("side location conflict", s.getCoordinate()); u === pl.NONE && ql.shouldNeverReachHere("found single null side (at " + s.getCoordinate() + ")"), i = u } else ql.isTrue(a.getLocation(t, Sh.LEFT) === pl.NONE, "found single null side"), a.setLocation(t, Sh.RIGHT, i), a.setLocation(t, Sh.LEFT, i) } } }, Xp.prototype.getCoordinate = function () { var t = this.iterator(); return t.hasNext() ? t.next().getCoordinate() : null }, Xp.prototype.print = function (t) { Pl.out.println("EdgeEndStar: " + this.getCoordinate()); for (var e = this.iterator(); e.hasNext();) { e.next().print(t) } }, Xp.prototype.isAreaLabelsConsistent = function (t) { return this.computeEdgeEndLabels(t.getBoundaryNodeRule()), this.checkAreaLabelsConsistent(0) }, Xp.prototype.checkAreaLabelsConsistent = function (t) { var e = this.getEdges(); if (e.size() <= 0) return !0; var n = e.size() - 1, r = e.get(n).getLabel().getLocation(t, Sh.LEFT); ql.isTrue(r !== pl.NONE, "Found unlabelled area edge"); for (var i = r, o = this.iterator(); o.hasNext();) { var s = o.next().getLabel(); ql.isTrue(s.isArea(t), "Found non-area edge"); var a = s.getLocation(t, Sh.LEFT), u = s.getLocation(t, Sh.RIGHT); if (a === u) return !1; if (u !== i) return !1; i = a } return !0 }, Xp.prototype.findIndex = function (t) { this.iterator(); for (var e = 0; e < this._edgeList.size(); e++) { if (this._edgeList.get(e) === t) return e } return -1 }, Xp.prototype.iterator = function () { return this.getEdges().iterator() }, Xp.prototype.getEdges = function () { return null === this._edgeList && (this._edgeList = new lc(this._edgeMap.values())), this._edgeList }, Xp.prototype.getLocation = function (t, e, n) { return this._ptInAreaLocation[t] === pl.NONE && (this._ptInAreaLocation[t] = Vp.locate(e, n[t].getGeometry())), this._ptInAreaLocation[t] }, Xp.prototype.toString = function () { var t = new vl; t.append("EdgeEndStar: " + this.getCoordinate()), t.append("\n"); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); t.append(n), t.append("\n") } return t.toString() }, Xp.prototype.computeEdgeEndLabels = function (t) { for (var e = this.iterator(); e.hasNext();) { e.next().computeLabel(t) } }, Xp.prototype.computeLabelling = function (t) { this.computeEdgeEndLabels(t[0].getBoundaryNodeRule()), this.propagateSideLabels(0), this.propagateSideLabels(1); for (var e = [!1, !1], n = this.iterator(); n.hasNext();) for (var r = n.next().getLabel(), i = 0; i < 2; i++) r.isLine(i) && r.getLocation(i) === pl.BOUNDARY && (e[i] = !0); for (var o = this.iterator(); o.hasNext();) for (var s = o.next(), a = s.getLabel(), u = 0; u < 2; u++) if (a.isAnyNull(u)) { var l = pl.NONE; if (e[u]) l = pl.EXTERIOR; else { var c = s.getCoordinate(); l = this.getLocation(u, c, t) } a.setAllLocationsIfNull(u, l) } }, Xp.prototype.getDegree = function () { return this._edgeMap.size() }, Xp.prototype.insertEdgeEnd = function (t, e) { this._edgeMap.put(t, e), this._edgeList = null }, Xp.prototype.interfaces_ = function () { return [] }, Xp.prototype.getClass = function () { return Xp }; var Yp = function (t) { function e() { t.call(this), this._resultAreaEdgeList = null, this._label = null, this._SCANNING_FOR_INCOMING = 1, this._LINKING_TO_OUTGOING = 2 } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.linkResultDirectedEdges = function () { var t = this; this.getResultAreaEdges(); for (var e = null, n = null, r = this._SCANNING_FOR_INCOMING, i = 0; i < this._resultAreaEdgeList.size(); i++) { var o = t._resultAreaEdgeList.get(i), s = o.getSym(); if (o.getLabel().isArea()) switch (null === e && o.isInResult() && (e = o), r) { case t._SCANNING_FOR_INCOMING: if (!s.isInResult()) continue; n = s, r = t._LINKING_TO_OUTGOING; break; case t._LINKING_TO_OUTGOING: if (!o.isInResult()) continue; n.setNext(o), r = t._SCANNING_FOR_INCOMING } } if (r === this._LINKING_TO_OUTGOING) { if (null === e) throw new Oh("no outgoing dirEdge found", this.getCoordinate()); ql.isTrue(e.isInResult(), "unable to link last incoming dirEdge"), n.setNext(e) } }, e.prototype.insert = function (t) { var e = t; this.insertEdgeEnd(e, e) }, e.prototype.getRightmostEdge = function () { var t = this.getEdges(), e = t.size(); if (e < 1) return null; var n = t.get(0); if (1 === e) return n; var r = t.get(e - 1), i = n.getQuadrant(), o = r.getQuadrant(); return jh.isNorthern(i) && jh.isNorthern(o) ? n : jh.isNorthern(i) || jh.isNorthern(o) ? 0 !== n.getDy() ? n : 0 !== r.getDy() ? r : (ql.shouldNeverReachHere("found two horizontal edges incident on node"), null) : r }, e.prototype.print = function (t) { Pl.out.println("DirectedEdgeStar: " + this.getCoordinate()); for (var e = this.iterator(); e.hasNext();) { var n = e.next(); t.print("out "), n.print(t), t.println(), t.print("in "), n.getSym().print(t), t.println() } }, e.prototype.getResultAreaEdges = function () { if (null !== this._resultAreaEdgeList) return this._resultAreaEdgeList; this._resultAreaEdgeList = new lc; for (var t = this.iterator(); t.hasNext();) { var e = t.next(); (e.isInResult() || e.getSym().isInResult()) && this._resultAreaEdgeList.add(e) } return this._resultAreaEdgeList }, e.prototype.updateLabelling = function (t) { for (var e = this.iterator(); e.hasNext();) { var n = e.next().getLabel(); n.setAllLocationsIfNull(0, t.getLocation(0)), n.setAllLocationsIfNull(1, t.getLocation(1)) } }, e.prototype.linkAllDirectedEdges = function () { this.getEdges(); for (var t = null, e = null, n = this._edgeList.size() - 1; n >= 0; n--) { var r = this._edgeList.get(n), i = r.getSym(); null === e && (e = i), null !== t && i.setNext(t), t = r } e.setNext(t) }, e.prototype.computeDepths = function () { var t = this; if (1 === arguments.length) { var e = arguments[0], n = this.findIndex(e), r = e.getDepth(Sh.LEFT), i = e.getDepth(Sh.RIGHT), o = this.computeDepths(n + 1, this._edgeList.size(), r), s = this.computeDepths(0, n, o); if (s !== i) throw new Oh("depth mismatch at " + e.getCoordinate()) } else if (3 === arguments.length) { for (var a = arguments[0], u = arguments[1], l = arguments[2], c = l, h = a; h < u; h++) { var p = t._edgeList.get(h); p.setEdgeDepths(Sh.RIGHT, c), c = p.getDepth(Sh.LEFT) } return c } }, e.prototype.mergeSymLabels = function () { for (var t = this.iterator(); t.hasNext();) { var e = t.next(); e.getLabel().merge(e.getSym().getLabel()) } }, e.prototype.linkMinimalDirectedEdges = function (t) { for (var e = this, n = null, r = null, i = this._SCANNING_FOR_INCOMING, o = this._resultAreaEdgeList.size() - 1; o >= 0; o--) { var s = e._resultAreaEdgeList.get(o), a = s.getSym(); switch (null === n && s.getEdgeRing() === t && (n = s), i) { case e._SCANNING_FOR_INCOMING: if (a.getEdgeRing() !== t) continue; r = a, i = e._LINKING_TO_OUTGOING; break; case e._LINKING_TO_OUTGOING: if (s.getEdgeRing() !== t) continue; r.setNextMin(s), i = e._SCANNING_FOR_INCOMING } } i === this._LINKING_TO_OUTGOING && (ql.isTrue(null !== n, "found null for first outgoing dirEdge"), ql.isTrue(n.getEdgeRing() === t, "unable to link last incoming dirEdge"), r.setNextMin(n)) }, e.prototype.getOutgoingDegree = function () { if (0 === arguments.length) { for (var t = 0, e = this.iterator(); e.hasNext();) { var n = e.next(); n.isInResult() && t++ } return t } if (1 === arguments.length) { for (var r = arguments[0], i = 0, o = this.iterator(); o.hasNext();) { var s = o.next(); s.getEdgeRing() === r && i++ } return i } }, e.prototype.getLabel = function () { return this._label }, e.prototype.findCoveredLineEdges = function () { for (var t = pl.NONE, e = this.iterator(); e.hasNext();) { var n = e.next(), r = n.getSym(); if (!n.isLineEdge()) { if (n.isInResult()) { t = pl.INTERIOR; break } if (r.isInResult()) { t = pl.EXTERIOR; break } } } if (t === pl.NONE) return null; for (var i = t, o = this.iterator(); o.hasNext();) { var s = o.next(), a = s.getSym(); s.isLineEdge() ? s.getEdge().setCovered(i === pl.INTERIOR) : (s.isInResult() && (i = pl.EXTERIOR), a.isInResult() && (i = pl.INTERIOR)) } }, e.prototype.computeLabelling = function (e) { t.prototype.computeLabelling.call(this, e), this._label = new Dh(pl.NONE); for (var n = this.iterator(); n.hasNext();) for (var r = n.next().getEdge().getLabel(), i = 0; i < 2; i++) { var o = r.getLocation(i); o !== pl.INTERIOR && o !== pl.BOUNDARY || this._label.setLocation(i, pl.INTERIOR) } }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(Xp), Hp = function (t) { function e() { t.apply(this, arguments) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.createNode = function (t) { return new Bh(t, new Yp) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(Yh), Wp = function t() { this._pts = null, this._orientation = null; var e = arguments[0]; this._pts = e, this._orientation = t.orientation(e) }; Wp.prototype.compareTo = function (t) { var e = t; return Wp.compareOriented(this._pts, this._orientation, e._pts, e._orientation) }, Wp.prototype.interfaces_ = function () { return [il] }, Wp.prototype.getClass = function () { return Wp }, Wp.orientation = function (t) { return 1 === pc.increasingDirection(t) }, Wp.compareOriented = function (t, e, n, r) { for (var i = e ? 1 : -1, o = r ? 1 : -1, s = e ? t.length : -1, a = r ? n.length : -1, u = e ? 0 : t.length - 1, l = r ? 0 : n.length - 1; ;) { var c = t[u].compareTo(n[l]); if (0 !== c) return c; var h = (u += i) === s, p = (l += o) === a; if (h && !p) return -1; if (!h && p) return 1; if (h && p) return 0 } }; var Jp = function () { this._edges = new lc, this._ocaMap = new Cc }; Jp.prototype.print = function (t) { t.print("MULTILINESTRING ( "); for (var e = 0; e < this._edges.size(); e++) { var n = this._edges.get(e); e > 0 && t.print(","), t.print("("); for (var r = n.getCoordinates(), i = 0; i < r.length; i++) i > 0 && t.print(","), t.print(r[i].x + " " + r[i].y); t.println(")") } t.print(") ") }, Jp.prototype.addAll = function (t) { for (var e = t.iterator(); e.hasNext();) this.add(e.next()) }, Jp.prototype.findEdgeIndex = function (t) { for (var e = 0; e < this._edges.size(); e++) if (this._edges.get(e).equals(t)) return e; return -1 }, Jp.prototype.iterator = function () { return this._edges.iterator() }, Jp.prototype.getEdges = function () { return this._edges }, Jp.prototype.get = function (t) { return this._edges.get(t) }, Jp.prototype.findEqualEdge = function (t) { var e = new Wp(t.getCoordinates()); return this._ocaMap.get(e) }, Jp.prototype.add = function (t) { this._edges.add(t); var e = new Wp(t.getCoordinates()); this._ocaMap.put(e, t) }, Jp.prototype.interfaces_ = function () { return [] }, Jp.prototype.getClass = function () { return Jp }; var Zp = function () { }; Zp.prototype.processIntersections = function (t, e, n, r) { }, Zp.prototype.isDone = function () { }, Zp.prototype.interfaces_ = function () { return [] }, Zp.prototype.getClass = function () { return Zp }; var Kp = function () { this._hasIntersection = !1, this._hasProper = !1, this._hasProperInterior = !1, this._hasInterior = !1, this._properIntersectionPoint = null, this._li = null, this._isSelfIntersection = null, this.numIntersections = 0, this.numInteriorIntersections = 0, this.numProperIntersections = 0, this.numTests = 0; var t = arguments[0]; this._li = t }; Kp.prototype.isTrivialIntersection = function (t, e, n, r) { if (t === n && 1 === this._li.getIntersectionNum()) { if (Kp.isAdjacentSegments(e, r)) return !0; if (t.isClosed()) { var i = t.size() - 1; if (0 === e && r === i || 0 === r && e === i) return !0 } } return !1 }, Kp.prototype.getProperIntersectionPoint = function () { return this._properIntersectionPoint }, Kp.prototype.hasProperInteriorIntersection = function () { return this._hasProperInterior }, Kp.prototype.getLineIntersector = function () { return this._li }, Kp.prototype.hasProperIntersection = function () { return this._hasProper }, Kp.prototype.processIntersections = function (t, e, n, r) { if (t === n && e === r) return null; this.numTests++; var i = t.getCoordinates()[e], o = t.getCoordinates()[e + 1], s = n.getCoordinates()[r], a = n.getCoordinates()[r + 1]; this._li.computeIntersection(i, o, s, a), this._li.hasIntersection() && (this.numIntersections++, this._li.isInteriorIntersection() && (this.numInteriorIntersections++, this._hasInterior = !0), this.isTrivialIntersection(t, e, n, r) || (this._hasIntersection = !0, t.addIntersections(this._li, e, 0), n.addIntersections(this._li, r, 1), this._li.isProper() && (this.numProperIntersections++, this._hasProper = !0, this._hasProperInterior = !0))) }, Kp.prototype.hasIntersection = function () { return this._hasIntersection }, Kp.prototype.isDone = function () { return !1 }, Kp.prototype.hasInteriorIntersection = function () { return this._hasInterior }, Kp.prototype.interfaces_ = function () { return [Zp] }, Kp.prototype.getClass = function () { return Kp }, Kp.isAdjacentSegments = function (t, e) { return 1 === Math.abs(t - e) }; var Qp = function () { this.coord = null, this.segmentIndex = null, this.dist = null; var t = arguments[0], e = arguments[1], n = arguments[2]; this.coord = new ul(t), this.segmentIndex = e, this.dist = n }; Qp.prototype.getSegmentIndex = function () { return this.segmentIndex }, Qp.prototype.getCoordinate = function () { return this.coord }, Qp.prototype.print = function (t) { t.print(this.coord), t.print(" seg # = " + this.segmentIndex), t.println(" dist = " + this.dist) }, Qp.prototype.compareTo = function (t) { var e = t; return this.compare(e.segmentIndex, e.dist) }, Qp.prototype.isEndPoint = function (t) { return 0 === this.segmentIndex && 0 === this.dist || this.segmentIndex === t }, Qp.prototype.toString = function () { return this.coord + " seg # = " + this.segmentIndex + " dist = " + this.dist }, Qp.prototype.getDistance = function () { return this.dist }, Qp.prototype.compare = function (t, e) { return this.segmentIndex < t ? -1 : this.segmentIndex > t ? 1 : this.dist < e ? -1 : this.dist > e ? 1 : 0 }, Qp.prototype.interfaces_ = function () { return [il] }, Qp.prototype.getClass = function () { return Qp }; var $p = function () { this._nodeMap = new Cc, this.edge = null; var t = arguments[0]; this.edge = t }; $p.prototype.print = function (t) { t.println("Intersections:"); for (var e = this.iterator(); e.hasNext();) { e.next().print(t) } }, $p.prototype.iterator = function () { return this._nodeMap.values().iterator() }, $p.prototype.addSplitEdges = function (t) { this.addEndpoints(); for (var e = this.iterator(), n = e.next(); e.hasNext();) { var r = e.next(), i = this.createSplitEdge(n, r); t.add(i), n = r } }, $p.prototype.addEndpoints = function () { var t = this.edge.pts.length - 1; this.add(this.edge.pts[0], 0, 0), this.add(this.edge.pts[t], t, 0) }, $p.prototype.createSplitEdge = function (t, e) { var n = e.segmentIndex - t.segmentIndex + 2, r = this.edge.pts[e.segmentIndex], i = e.dist > 0 || !e.coord.equals2D(r); i || n--; var o = new Array(n).fill(null), s = 0; o[s++] = new ul(t.coord); for (var a = t.segmentIndex + 1; a <= e.segmentIndex; a++) o[s++] = this.edge.pts[a]; return i && (o[s] = e.coord), new of(o, new Dh(this.edge._label)) }, $p.prototype.add = function (t, e, n) { var r = new Qp(t, e, n), i = this._nodeMap.get(r); return null !== i ? i : (this._nodeMap.put(r, r), r) }, $p.prototype.isIntersection = function (t) { for (var e = this.iterator(); e.hasNext();) { if (e.next().coord.equals(t)) return !0 } return !1 }, $p.prototype.interfaces_ = function () { return [] }, $p.prototype.getClass = function () { return $p }; var tf = function () { }; tf.prototype.getChainStartIndices = function (t) { var e = 0, n = new lc; n.add(new _l(e)); do { var r = this.findChainEnd(t, e); n.add(new _l(r)), e = r } while (e < t.length - 1); return tf.toIntArray(n) }, tf.prototype.findChainEnd = function (t, e) { for (var n = jh.quadrant(t[e], t[e + 1]), r = e + 1; r < t.length;) { if (jh.quadrant(t[r - 1], t[r]) !== n) break; r++ } return r - 1 }, tf.prototype.interfaces_ = function () { return [] }, tf.prototype.getClass = function () { return tf }, tf.toIntArray = function (t) { for (var e = new Array(t.size()).fill(null), n = 0; n < e.length; n++) e[n] = t.get(n).intValue(); return e }; var ef = function () { this.e = null, this.pts = null, this.startIndex = null, this.env1 = new Ll, this.env2 = new Ll; var t = arguments[0]; this.e = t, this.pts = t.getCoordinates(); var e = new tf; this.startIndex = e.getChainStartIndices(this.pts) }; ef.prototype.getCoordinates = function () { return this.pts }, ef.prototype.getMaxX = function (t) { var e = this.pts[this.startIndex[t]].x, n = this.pts[this.startIndex[t + 1]].x; return e > n ? e : n }, ef.prototype.getMinX = function (t) { var e = this.pts[this.startIndex[t]].x, n = this.pts[this.startIndex[t + 1]].x; return e < n ? e : n }, ef.prototype.computeIntersectsForChain = function () { if (4 === arguments.length) { var t = arguments[0], e = arguments[1], n = arguments[2], r = arguments[3]; this.computeIntersectsForChain(this.startIndex[t], this.startIndex[t + 1], e, e.startIndex[n], e.startIndex[n + 1], r) } else if (6 === arguments.length) { var i = arguments[0], o = arguments[1], s = arguments[2], a = arguments[3], u = arguments[4], l = arguments[5], c = this.pts[i], h = this.pts[o], p = s.pts[a], f = s.pts[u]; if (o - i == 1 && u - a == 1) return l.addIntersections(this.e, i, s.e, a), null; if (this.env1.init(c, h), this.env2.init(p, f), !this.env1.intersects(this.env2)) return null; var g = Math.trunc((i + o) / 2), d = Math.trunc((a + u) / 2); i < g && (a < d && this.computeIntersectsForChain(i, g, s, a, d, l), d < u && this.computeIntersectsForChain(i, g, s, d, u, l)), g < o && (a < d && this.computeIntersectsForChain(g, o, s, a, d, l), d < u && this.computeIntersectsForChain(g, o, s, d, u, l)) } }, ef.prototype.getStartIndexes = function () { return this.startIndex }, ef.prototype.computeIntersects = function (t, e) { for (var n = 0; n < this.startIndex.length - 1; n++) for (var r = 0; r < t.startIndex.length - 1; r++) this.computeIntersectsForChain(n, t, r, e) }, ef.prototype.interfaces_ = function () { return [] }, ef.prototype.getClass = function () { return ef }; var nf = function t() { this._depth = Array(2).fill().map((function () { return Array(3) })); for (var e = 0; e < 2; e++) for (var n = 0; n < 3; n++) this._depth[e][n] = t.NULL_VALUE }, rf = {NULL_VALUE: {configurable: !0}}; nf.prototype.getDepth = function (t, e) { return this._depth[t][e] }, nf.prototype.setDepth = function (t, e, n) { this._depth[t][e] = n }, nf.prototype.isNull = function () { var t = this; if (0 === arguments.length) { for (var e = 0; e < 2; e++) for (var n = 0; n < 3; n++) if (t._depth[e][n] !== nf.NULL_VALUE) return !1; return !0 } if (1 === arguments.length) { var r = arguments[0]; return this._depth[r][1] === nf.NULL_VALUE } if (2 === arguments.length) { var i = arguments[0], o = arguments[1]; return this._depth[i][o] === nf.NULL_VALUE } }, nf.prototype.normalize = function () { for (var t = this, e = 0; e < 2; e++) if (!t.isNull(e)) { var n = t._depth[e][1]; t._depth[e][2] < n && (n = t._depth[e][2]), n < 0 && (n = 0); for (var r = 1; r < 3; r++) { var i = 0; t._depth[e][r] > n && (i = 1), t._depth[e][r] = i } } }, nf.prototype.getDelta = function (t) { return this._depth[t][Sh.RIGHT] - this._depth[t][Sh.LEFT] }, nf.prototype.getLocation = function (t, e) { return this._depth[t][e] <= 0 ? pl.EXTERIOR : pl.INTERIOR }, nf.prototype.toString = function () { return "A: " + this._depth[0][1] + "," + this._depth[0][2] + " B: " + this._depth[1][1] + "," + this._depth[1][2] }, nf.prototype.add = function () { var t = this; if (1 === arguments.length) for (var e = arguments[0], n = 0; n < 2; n++) for (var r = 1; r < 3; r++) { var i = e.getLocation(n, r); i !== pl.EXTERIOR && i !== pl.INTERIOR || (t.isNull(n, r) ? t._depth[n][r] = nf.depthAtLocation(i) : t._depth[n][r] += nf.depthAtLocation(i)) } else if (3 === arguments.length) { var o = arguments[0], s = arguments[1], a = arguments[2]; a === pl.INTERIOR && this._depth[o][s]++ } }, nf.prototype.interfaces_ = function () { return [] }, nf.prototype.getClass = function () { return nf }, nf.depthAtLocation = function (t) { return t === pl.EXTERIOR ? 0 : t === pl.INTERIOR ? 1 : nf.NULL_VALUE }, rf.NULL_VALUE.get = function () { return -1 }, Object.defineProperties(nf, rf); var of = function (t) { function e() { if (t.call(this), this.pts = null, this._env = null, this.eiList = new $p(this), this._name = null, this._mce = null, this._isIsolated = !0, this._depth = new nf, this._depthDelta = 0, 1 === arguments.length) { var n = arguments[0]; e.call(this, n, null) } else if (2 === arguments.length) { var r = arguments[0], i = arguments[1]; this.pts = r, this._label = i } } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.getDepth = function () { return this._depth }, e.prototype.getCollapsedEdge = function () { var t = new Array(2).fill(null); return t[0] = this.pts[0], t[1] = this.pts[1], new e(t, Dh.toLineLabel(this._label)) }, e.prototype.isIsolated = function () { return this._isIsolated }, e.prototype.getCoordinates = function () { return this.pts }, e.prototype.setIsolated = function (t) { this._isIsolated = t }, e.prototype.setName = function (t) { this._name = t }, e.prototype.equals = function (t) { if (!(t instanceof e)) return !1; var n = t; if (this.pts.length !== n.pts.length) return !1; for (var r = !0, i = !0, o = this.pts.length, s = 0; s < this.pts.length; s++) if (this.pts[s].equals2D(n.pts[s]) || (r = !1), this.pts[s].equals2D(n.pts[--o]) || (i = !1), !r && !i) return !1; return !0 }, e.prototype.getCoordinate = function () { if (0 === arguments.length) return this.pts.length > 0 ? this.pts[0] : null; if (1 === arguments.length) { var t = arguments[0]; return this.pts[t] } }, e.prototype.print = function (t) { t.print("edge " + this._name + ": "), t.print("LINESTRING ("); for (var e = 0; e < this.pts.length; e++) e > 0 && t.print(","), t.print(this.pts[e].x + " " + this.pts[e].y); t.print(") " + this._label + " " + this._depthDelta) }, e.prototype.computeIM = function (t) { e.updateIM(this._label, t) }, e.prototype.isCollapsed = function () { return !!this._label.isArea() && (3 === this.pts.length && !!this.pts[0].equals(this.pts[2])) }, e.prototype.isClosed = function () { return this.pts[0].equals(this.pts[this.pts.length - 1]) }, e.prototype.getMaximumSegmentIndex = function () { return this.pts.length - 1 }, e.prototype.getDepthDelta = function () { return this._depthDelta }, e.prototype.getNumPoints = function () { return this.pts.length }, e.prototype.printReverse = function (t) { t.print("edge " + this._name + ": "); for (var e = this.pts.length - 1; e >= 0; e--) t.print(this.pts[e] + " "); t.println("") }, e.prototype.getMonotoneChainEdge = function () { return null === this._mce && (this._mce = new ef(this)), this._mce }, e.prototype.getEnvelope = function () { if (null === this._env) { this._env = new Ll; for (var t = 0; t < this.pts.length; t++) this._env.expandToInclude(this.pts[t]) } return this._env }, e.prototype.addIntersection = function (t, e, n, r) { var i = new ul(t.getIntersection(r)), o = e, s = t.getEdgeDistance(n, r), a = o + 1; if (a < this.pts.length) { var u = this.pts[a]; i.equals2D(u) && (o = a, s = 0) } this.eiList.add(i, o, s) }, e.prototype.toString = function () { var t = new vl; t.append("edge " + this._name + ": "), t.append("LINESTRING ("); for (var e = 0; e < this.pts.length; e++) e > 0 && t.append(","), t.append(this.pts[e].x + " " + this.pts[e].y); return t.append(") " + this._label + " " + this._depthDelta), t.toString() }, e.prototype.isPointwiseEqual = function (t) { if (this.pts.length !== t.pts.length) return !1; for (var e = 0; e < this.pts.length; e++) if (!this.pts[e].equals2D(t.pts[e])) return !1; return !0 }, e.prototype.setDepthDelta = function (t) { this._depthDelta = t }, e.prototype.getEdgeIntersectionList = function () { return this.eiList }, e.prototype.addIntersections = function (t, e, n) { for (var r = 0; r < t.getIntersectionNum(); r++) this.addIntersection(t, e, n, r) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e.updateIM = function () { if (2 !== arguments.length) return t.prototype.updateIM.apply(this, arguments); var e = arguments[0], n = arguments[1]; n.setAtLeastIfValid(e.getLocation(0, Sh.ON), e.getLocation(1, Sh.ON), 1), e.isArea() && (n.setAtLeastIfValid(e.getLocation(0, Sh.LEFT), e.getLocation(1, Sh.LEFT), 2), n.setAtLeastIfValid(e.getLocation(0, Sh.RIGHT), e.getLocation(1, Sh.RIGHT), 2)) }, e }(qh), sf = function (t) { this._workingPrecisionModel = null, this._workingNoder = null, this._geomFact = null, this._graph = null, this._edgeList = new Jp, this._bufParams = t || null }; sf.prototype.setWorkingPrecisionModel = function (t) { this._workingPrecisionModel = t }, sf.prototype.insertUniqueEdge = function (t) { var e = this._edgeList.findEqualEdge(t); if (null !== e) { var n = e.getLabel(), r = t.getLabel(); e.isPointwiseEqual(t) || (r = new Dh(t.getLabel())).flip(), n.merge(r); var i = sf.depthDelta(r), o = e.getDepthDelta() + i; e.setDepthDelta(o) } else this._edgeList.add(t), t.setDepthDelta(sf.depthDelta(t.getLabel())) }, sf.prototype.buildSubgraphs = function (t, e) { for (var n = new lc, r = t.iterator(); r.hasNext();) { var i = r.next(), o = i.getRightmostCoordinate(), s = new kp(n).getDepth(o); i.computeDepth(s), i.findResultEdges(), n.add(i), e.add(i.getDirectedEdges(), i.getNodes()) } }, sf.prototype.createSubgraphs = function (t) { for (var e = new lc, n = t.getNodes().iterator(); n.hasNext();) { var r = n.next(); if (!r.isVisited()) { var i = new Th; i.create(r), e.add(i) } } return np.sort(e, np.reverseOrder()), e }, sf.prototype.createEmptyResultGeometry = function () { return this._geomFact.createPolygon() }, sf.prototype.getNoder = function (t) { if (null !== this._workingNoder) return this._workingNoder; var e = new Ip, n = new jl; return n.setPrecisionModel(t), e.setSegmentIntersector(new Kp(n)), e }, sf.prototype.buffer = function (t, e) { var n = this._workingPrecisionModel; null === n && (n = t.getPrecisionModel()), this._geomFact = t.getFactory(); var r = new Fp(n, this._bufParams), i = new zp(t, e, r).getCurves(); if (i.size() <= 0) return this.createEmptyResultGeometry(); this.computeNodedEdges(i, n), this._graph = new Hh(new Hp), this._graph.addEdges(this._edgeList.getEdges()); var o = this.createSubgraphs(this._graph), s = new Wh(this._geomFact); this.buildSubgraphs(o, s); var a = s.getPolygons(); return a.size() <= 0 ? this.createEmptyResultGeometry() : this._geomFact.buildGeometry(a) }, sf.prototype.computeNodedEdges = function (t, e) { var n = this.getNoder(e); n.computeNodes(t); for (var r = n.getNodedSubstrings().iterator(); r.hasNext();) { var i = r.next(), o = i.getCoordinates(); if (2 !== o.length || !o[0].equals2D(o[1])) { var s = i.getData(), a = new of(i.getCoordinates(), new Dh(s)); this.insertUniqueEdge(a) } } }, sf.prototype.setNoder = function (t) { this._workingNoder = t }, sf.prototype.interfaces_ = function () { return [] }, sf.prototype.getClass = function () { return sf }, sf.depthDelta = function (t) { var e = t.getLocation(0, Sh.LEFT), n = t.getLocation(0, Sh.RIGHT); return e === pl.INTERIOR && n === pl.EXTERIOR ? 1 : e === pl.EXTERIOR && n === pl.INTERIOR ? -1 : 0 }, sf.convertSegStrings = function (t) { for (var e = new _h, n = new lc; t.hasNext();) { var r = t.next(), i = e.createLineString(r.getCoordinates()); n.add(i) } return e.buildGeometry(n) }; var af = function () { if (this._noder = null, this._scaleFactor = null, this._offsetX = null, this._offsetY = null, this._isScaled = !1, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; this._noder = t, this._scaleFactor = e, this._offsetX = 0, this._offsetY = 0, this._isScaled = !this.isIntegerPrecision() } else if (4 === arguments.length) { var n = arguments[0], r = arguments[1], i = arguments[2], o = arguments[3]; this._noder = n, this._scaleFactor = r, this._offsetX = i, this._offsetY = o, this._isScaled = !this.isIntegerPrecision() } }; af.prototype.rescale = function () { var t = this; if (gl(arguments[0], ic)) for (var e = arguments[0], n = e.iterator(); n.hasNext();) { var r = n.next(); t.rescale(r.getCoordinates()) } else if (arguments[0] instanceof Array) { for (var i = arguments[0], o = 0; o < i.length; o++) i[o].x = i[o].x / t._scaleFactor + t._offsetX, i[o].y = i[o].y / t._scaleFactor + t._offsetY; 2 === i.length && i[0].equals2D(i[1]) && Pl.out.println(i) } }, af.prototype.scale = function () { var t = this; if (gl(arguments[0], ic)) { for (var e = arguments[0], n = new lc, r = e.iterator(); r.hasNext();) { var i = r.next(); n.add(new yp(t.scale(i.getCoordinates()), i.getData())) } return n } if (arguments[0] instanceof Array) { for (var o = arguments[0], s = new Array(o.length).fill(null), a = 0; a < o.length; a++) s[a] = new ul(Math.round((o[a].x - t._offsetX) * t._scaleFactor), Math.round((o[a].y - t._offsetY) * t._scaleFactor), o[a].z); var u = pc.removeRepeatedPoints(s); return u } }, af.prototype.isIntegerPrecision = function () { return 1 === this._scaleFactor }, af.prototype.getNodedSubstrings = function () { var t = this._noder.getNodedSubstrings(); return this._isScaled && this.rescale(t), t }, af.prototype.computeNodes = function (t) { var e = t; this._isScaled && (e = this.scale(t)), this._noder.computeNodes(e) }, af.prototype.interfaces_ = function () { return [bp] }, af.prototype.getClass = function () { return af }; var uf = function () { this._li = new jl, this._segStrings = null; var t = arguments[0]; this._segStrings = t }, lf = {fact: {configurable: !0}}; uf.prototype.checkEndPtVertexIntersections = function () { var t = this; if (0 === arguments.length) for (var e = this._segStrings.iterator(); e.hasNext();) { var n = e.next(), r = n.getCoordinates(); t.checkEndPtVertexIntersections(r[0], t._segStrings), t.checkEndPtVertexIntersections(r[r.length - 1], t._segStrings) } else if (2 === arguments.length) for (var i = arguments[0], o = arguments[1], s = o.iterator(); s.hasNext();) for (var a = s.next(), u = a.getCoordinates(), l = 1; l < u.length - 1; l++) if (u[l].equals(i)) throw new kl("found endpt/interior pt intersection at index " + l + " :pt " + i) }, uf.prototype.checkInteriorIntersections = function () { var t = this; if (0 === arguments.length) for (var e = this._segStrings.iterator(); e.hasNext();) for (var n = e.next(), r = this._segStrings.iterator(); r.hasNext();) { var i = r.next(); t.checkInteriorIntersections(n, i) } else if (2 === arguments.length) for (var o = arguments[0], s = arguments[1], a = o.getCoordinates(), u = s.getCoordinates(), l = 0; l < a.length - 1; l++) for (var c = 0; c < u.length - 1; c++) t.checkInteriorIntersections(o, l, s, c); else if (4 === arguments.length) { var h = arguments[0], p = arguments[1], f = arguments[2], g = arguments[3]; if (h === f && p === g) return null; var d = h.getCoordinates()[p], y = h.getCoordinates()[p + 1], v = f.getCoordinates()[g], _ = f.getCoordinates()[g + 1]; if (this._li.computeIntersection(d, y, v, _), this._li.hasIntersection() && (this._li.isProper() || this.hasInteriorIntersection(this._li, d, y) || this.hasInteriorIntersection(this._li, v, _))) throw new kl("found non-noded intersection at " + d + "-" + y + " and " + v + "-" + _) } }, uf.prototype.checkValid = function () { this.checkEndPtVertexIntersections(), this.checkInteriorIntersections(), this.checkCollapses() }, uf.prototype.checkCollapses = function () { var t = this; if (0 === arguments.length) for (var e = this._segStrings.iterator(); e.hasNext();) { var n = e.next(); t.checkCollapses(n) } else if (1 === arguments.length) for (var r = arguments[0], i = r.getCoordinates(), o = 0; o < i.length - 2; o++) t.checkCollapse(i[o], i[o + 1], i[o + 2]) }, uf.prototype.hasInteriorIntersection = function (t, e, n) { for (var r = 0; r < t.getIntersectionNum(); r++) { var i = t.getIntersection(r); if (!i.equals(e) && !i.equals(n)) return !0 } return !1 }, uf.prototype.checkCollapse = function (t, e, n) { if (t.equals(n)) throw new kl("found non-noded collapse at " + uf.fact.createLineString([t, e, n])) }, uf.prototype.interfaces_ = function () { return [] }, uf.prototype.getClass = function () { return uf }, lf.fact.get = function () { return new _h }, Object.defineProperties(uf, lf); var cf = function () { this._li = null, this._pt = null, this._originalPt = null, this._ptScaled = null, this._p0Scaled = null, this._p1Scaled = null, this._scaleFactor = null, this._minx = null, this._maxx = null, this._miny = null, this._maxy = null, this._corner = new Array(4).fill(null), this._safeEnv = null; var t = arguments[0], e = arguments[1], n = arguments[2]; if (this._originalPt = t, this._pt = t, this._scaleFactor = e, this._li = n, e <= 0) throw new el("Scale factor must be non-zero"); 1 !== e && (this._pt = new ul(this.scale(t.x), this.scale(t.y)), this._p0Scaled = new ul, this._p1Scaled = new ul), this.initCorners(this._pt) }, hf = {SAFE_ENV_EXPANSION_FACTOR: {configurable: !0}}; cf.prototype.intersectsScaled = function (t, e) { var n = Math.min(t.x, e.x), r = Math.max(t.x, e.x), i = Math.min(t.y, e.y), o = Math.max(t.y, e.y), s = this._maxx < n || this._minx > r || this._maxy < i || this._miny > o; if (s) return !1; var a = this.intersectsToleranceSquare(t, e); return ql.isTrue(!(s && a), "Found bad envelope test"), a }, cf.prototype.initCorners = function (t) { var e = .5; this._minx = t.x - e, this._maxx = t.x + e, this._miny = t.y - e, this._maxy = t.y + e, this._corner[0] = new ul(this._maxx, this._maxy), this._corner[1] = new ul(this._minx, this._maxy), this._corner[2] = new ul(this._minx, this._miny), this._corner[3] = new ul(this._maxx, this._miny) }, cf.prototype.intersects = function (t, e) { return 1 === this._scaleFactor ? this.intersectsScaled(t, e) : (this.copyScaled(t, this._p0Scaled), this.copyScaled(e, this._p1Scaled), this.intersectsScaled(this._p0Scaled, this._p1Scaled)) }, cf.prototype.scale = function (t) { return Math.round(t * this._scaleFactor) }, cf.prototype.getCoordinate = function () { return this._originalPt }, cf.prototype.copyScaled = function (t, e) { e.x = this.scale(t.x), e.y = this.scale(t.y) }, cf.prototype.getSafeEnvelope = function () { if (null === this._safeEnv) { var t = cf.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor; this._safeEnv = new Ll(this._originalPt.x - t, this._originalPt.x + t, this._originalPt.y - t, this._originalPt.y + t) } return this._safeEnv }, cf.prototype.intersectsPixelClosure = function (t, e) { return this._li.computeIntersection(t, e, this._corner[0], this._corner[1]), !!this._li.hasIntersection() || (this._li.computeIntersection(t, e, this._corner[1], this._corner[2]), !!this._li.hasIntersection() || (this._li.computeIntersection(t, e, this._corner[2], this._corner[3]), !!this._li.hasIntersection() || (this._li.computeIntersection(t, e, this._corner[3], this._corner[0]), !!this._li.hasIntersection()))) }, cf.prototype.intersectsToleranceSquare = function (t, e) { var n = !1, r = !1; return this._li.computeIntersection(t, e, this._corner[0], this._corner[1]), !!this._li.isProper() || (this._li.computeIntersection(t, e, this._corner[1], this._corner[2]), !!this._li.isProper() || (this._li.hasIntersection() && (n = !0), this._li.computeIntersection(t, e, this._corner[2], this._corner[3]), !!this._li.isProper() || (this._li.hasIntersection() && (r = !0), this._li.computeIntersection(t, e, this._corner[3], this._corner[0]), !!this._li.isProper() || (!(!n || !r) || (!!t.equals(this._pt) || !!e.equals(this._pt)))))) }, cf.prototype.addSnappedNode = function (t, e) { var n = t.getCoordinate(e), r = t.getCoordinate(e + 1); return !!this.intersects(n, r) && (t.addIntersection(this.getCoordinate(), e), !0) }, cf.prototype.interfaces_ = function () { return [] }, cf.prototype.getClass = function () { return cf }, hf.SAFE_ENV_EXPANSION_FACTOR.get = function () { return .75 }, Object.defineProperties(cf, hf); var pf = function () { this.tempEnv1 = new Ll, this.selectedSegment = new vp }; pf.prototype.select = function () { if (1 === arguments.length) ; else if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; t.getLineSegment(e, this.selectedSegment), this.select(this.selectedSegment) } }, pf.prototype.interfaces_ = function () { return [] }, pf.prototype.getClass = function () { return pf }; var ff = function () { this._index = null; var t = arguments[0]; this._index = t }, gf = {HotPixelSnapAction: {configurable: !0}}; ff.prototype.snap = function () { if (1 === arguments.length) { var t = arguments[0]; return this.snap(t, null, -1) } if (3 === arguments.length) { var e = arguments[0], n = arguments[1], r = arguments[2], i = e.getSafeEnvelope(), o = new df(e, n, r); return this._index.query(i, { interfaces_: function () { return [Qh] }, visitItem: function (t) { t.select(i, o) } }), o.isNodeAdded() } }, ff.prototype.interfaces_ = function () { return [] }, ff.prototype.getClass = function () { return ff }, gf.HotPixelSnapAction.get = function () { return df }, Object.defineProperties(ff, gf); var df = function (t) { function e() { t.call(this), this._hotPixel = null, this._parentEdge = null, this._hotPixelVertexIndex = null, this._isNodeAdded = !1; var e = arguments[0], n = arguments[1], r = arguments[2]; this._hotPixel = e, this._parentEdge = n, this._hotPixelVertexIndex = r } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.isNodeAdded = function () { return this._isNodeAdded }, e.prototype.select = function () { if (2 !== arguments.length) return t.prototype.select.apply(this, arguments); var e = arguments[0], n = arguments[1], r = e.getContext(); if (null !== this._parentEdge && r === this._parentEdge && n === this._hotPixelVertexIndex) return null; this._isNodeAdded = this._hotPixel.addSnappedNode(r, n) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(pf), yf = function () { this._li = null, this._interiorIntersections = null; var t = arguments[0]; this._li = t, this._interiorIntersections = new lc }; yf.prototype.processIntersections = function (t, e, n, r) { if (t === n && e === r) return null; var i = t.getCoordinates()[e], o = t.getCoordinates()[e + 1], s = n.getCoordinates()[r], a = n.getCoordinates()[r + 1]; if (this._li.computeIntersection(i, o, s, a), this._li.hasIntersection() && this._li.isInteriorIntersection()) { for (var u = 0; u < this._li.getIntersectionNum(); u++) this._interiorIntersections.add(this._li.getIntersection(u)); t.addIntersections(this._li, e, 0), n.addIntersections(this._li, r, 1) } }, yf.prototype.isDone = function () { return !1 }, yf.prototype.getInteriorIntersections = function () { return this._interiorIntersections }, yf.prototype.interfaces_ = function () { return [Zp] }, yf.prototype.getClass = function () { return yf }; var vf = function () { this._pm = null, this._li = null, this._scaleFactor = null, this._noder = null, this._pointSnapper = null, this._nodedSegStrings = null; var t = arguments[0]; this._pm = t, this._li = new jl, this._li.setPrecisionModel(t), this._scaleFactor = t.getScale() }; vf.prototype.checkCorrectness = function (t) { var e = yp.getNodedSubstrings(t), n = new uf(e); try { n.checkValid() } catch (t) { if (!(t instanceof Sl)) throw t; t.printStackTrace() } }, vf.prototype.getNodedSubstrings = function () { return yp.getNodedSubstrings(this._nodedSegStrings) }, vf.prototype.snapRound = function (t, e) { var n = this.findInteriorIntersections(t, e); this.computeIntersectionSnaps(n), this.computeVertexSnaps(t) }, vf.prototype.findInteriorIntersections = function (t, e) { var n = new yf(e); return this._noder.setSegmentIntersector(n), this._noder.computeNodes(t), n.getInteriorIntersections() }, vf.prototype.computeVertexSnaps = function () { var t = this; if (gl(arguments[0], ic)) for (var e = arguments[0], n = e.iterator(); n.hasNext();) { var r = n.next(); t.computeVertexSnaps(r) } else if (arguments[0] instanceof yp) for (var i = arguments[0], o = i.getCoordinates(), s = 0; s < o.length; s++) { var a = new cf(o[s], t._scaleFactor, t._li), u = t._pointSnapper.snap(a, i, s); u && i.addIntersection(o[s], s) } }, vf.prototype.computeNodes = function (t) { this._nodedSegStrings = t, this._noder = new Ip, this._pointSnapper = new ff(this._noder.getIndex()), this.snapRound(t, this._li) }, vf.prototype.computeIntersectionSnaps = function (t) { for (var e = this, n = t.iterator(); n.hasNext();) { var r = n.next(), i = new cf(r, e._scaleFactor, e._li); e._pointSnapper.snap(i) } }, vf.prototype.interfaces_ = function () { return [bp] }, vf.prototype.getClass = function () { return vf }; var _f = function () { if (this._argGeom = null, this._distance = null, this._bufParams = new Sp, this._resultGeometry = null, this._saveException = null, 1 === arguments.length) { var t = arguments[0]; this._argGeom = t } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this._argGeom = e, this._bufParams = n } }, mf = { CAP_ROUND: {configurable: !0}, CAP_BUTT: {configurable: !0}, CAP_FLAT: {configurable: !0}, CAP_SQUARE: {configurable: !0}, MAX_PRECISION_DIGITS: {configurable: !0} }; _f.prototype.bufferFixedPrecision = function (t) { var e = new af(new vf(new gh(1)), t.getScale()), n = new sf(this._bufParams); n.setWorkingPrecisionModel(t), n.setNoder(e), this._resultGeometry = n.buffer(this._argGeom, this._distance) }, _f.prototype.bufferReducedPrecision = function () { var t = this; if (0 === arguments.length) { for (var e = _f.MAX_PRECISION_DIGITS; e >= 0; e--) { try { t.bufferReducedPrecision(e) } catch (e) { if (!(e instanceof Oh)) throw e; t._saveException = e } if (null !== t._resultGeometry) return null } throw this._saveException } if (1 === arguments.length) { var n = arguments[0], r = _f.precisionScaleFactor(this._argGeom, this._distance, n), i = new gh(r); this.bufferFixedPrecision(i) } }, _f.prototype.computeGeometry = function () { if (this.bufferOriginalPrecision(), null !== this._resultGeometry) return null; var t = this._argGeom.getFactory().getPrecisionModel(); t.getType() === gh.FIXED ? this.bufferFixedPrecision(t) : this.bufferReducedPrecision() }, _f.prototype.setQuadrantSegments = function (t) { this._bufParams.setQuadrantSegments(t) }, _f.prototype.bufferOriginalPrecision = function () { try { var t = new sf(this._bufParams); this._resultGeometry = t.buffer(this._argGeom, this._distance) } catch (t) { if (!(t instanceof kl)) throw t; this._saveException = t } }, _f.prototype.getResultGeometry = function (t) { return this._distance = t, this.computeGeometry(), this._resultGeometry }, _f.prototype.setEndCapStyle = function (t) { this._bufParams.setEndCapStyle(t) }, _f.prototype.interfaces_ = function () { return [] }, _f.prototype.getClass = function () { return _f }, _f.bufferOp = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new _f(t), r = n.getResultGeometry(e); return r } if (3 === arguments.length) { if (Number.isInteger(arguments[2]) && arguments[0] instanceof Wl && "number" == typeof arguments[1]) { var i = arguments[0], o = arguments[1], s = arguments[2], a = new _f(i); a.setQuadrantSegments(s); var u = a.getResultGeometry(o); return u } if (arguments[2] instanceof Sp && arguments[0] instanceof Wl && "number" == typeof arguments[1]) { var l = arguments[0], c = arguments[1], h = arguments[2], p = new _f(l, h), f = p.getResultGeometry(c); return f } } else if (4 === arguments.length) { var g = arguments[0], d = arguments[1], y = arguments[2], v = arguments[3], _ = new _f(g); _.setQuadrantSegments(y), _.setEndCapStyle(v); var m = _.getResultGeometry(d); return m } }, _f.precisionScaleFactor = function (t, e, n) { var r = t.getEnvelopeInternal(), i = dl.max(Math.abs(r.getMaxX()), Math.abs(r.getMaxY()), Math.abs(r.getMinX()), Math.abs(r.getMinY())) + 2 * (e > 0 ? e : 0), o = n - Math.trunc(Math.log(i) / Math.log(10) + 1); return Math.pow(10, o) }, mf.CAP_ROUND.get = function () { return Sp.CAP_ROUND }, mf.CAP_BUTT.get = function () { return Sp.CAP_FLAT }, mf.CAP_FLAT.get = function () { return Sp.CAP_FLAT }, mf.CAP_SQUARE.get = function () { return Sp.CAP_SQUARE }, mf.MAX_PRECISION_DIGITS.get = function () { return 12 }, Object.defineProperties(_f, mf); var xf = function () { this._pt = [new ul, new ul], this._distance = nl.NaN, this._isNull = !0 }; xf.prototype.getCoordinates = function () { return this._pt }, xf.prototype.getCoordinate = function (t) { return this._pt[t] }, xf.prototype.setMinimum = function () { if (1 === arguments.length) { var t = arguments[0]; this.setMinimum(t._pt[0], t._pt[1]) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (this._isNull) return this.initialize(e, n), null; var r = e.distance(n); r < this._distance && this.initialize(e, n, r) } }, xf.prototype.initialize = function () { if (0 === arguments.length) this._isNull = !0; else if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; this._pt[0].setCoordinate(t), this._pt[1].setCoordinate(e), this._distance = t.distance(e), this._isNull = !1 } else if (3 === arguments.length) { var n = arguments[0], r = arguments[1], i = arguments[2]; this._pt[0].setCoordinate(n), this._pt[1].setCoordinate(r), this._distance = i, this._isNull = !1 } }, xf.prototype.getDistance = function () { return this._distance }, xf.prototype.setMaximum = function () { if (1 === arguments.length) { var t = arguments[0]; this.setMaximum(t._pt[0], t._pt[1]) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (this._isNull) return this.initialize(e, n), null; var r = e.distance(n); r > this._distance && this.initialize(e, n, r) } }, xf.prototype.interfaces_ = function () { return [] }, xf.prototype.getClass = function () { return xf }; var Ef = function () { }; Ef.prototype.interfaces_ = function () { return [] }, Ef.prototype.getClass = function () { return Ef }, Ef.computeDistance = function () { if (arguments[2] instanceof xf && arguments[0] instanceof Zc && arguments[1] instanceof ul) for (var t = arguments[0], e = arguments[1], n = arguments[2], r = t.getCoordinates(), i = new vp, o = 0; o < r.length - 1; o++) { i.setCoordinates(r[o], r[o + 1]); var s = i.closestPoint(e); n.setMinimum(s, e) } else if (arguments[2] instanceof xf && arguments[0] instanceof th && arguments[1] instanceof ul) { var a = arguments[0], u = arguments[1], l = arguments[2]; Ef.computeDistance(a.getExteriorRing(), u, l); for (var c = 0; c < a.getNumInteriorRing(); c++) Ef.computeDistance(a.getInteriorRingN(c), u, l) } else if (arguments[2] instanceof xf && arguments[0] instanceof Wl && arguments[1] instanceof ul) { var h = arguments[0], p = arguments[1], f = arguments[2]; if (h instanceof Zc) Ef.computeDistance(h, p, f); else if (h instanceof th) Ef.computeDistance(h, p, f); else if (h instanceof kc) for (var g = h, d = 0; d < g.getNumGeometries(); d++) { var y = g.getGeometryN(d); Ef.computeDistance(y, p, f) } else f.setMinimum(h.getCoordinate(), p) } else if (arguments[2] instanceof xf && arguments[0] instanceof vp && arguments[1] instanceof ul) { var v = arguments[0], _ = arguments[1], m = arguments[2], x = v.closestPoint(_); m.setMinimum(x, _) } }; var bf = function (t) { this._maxPtDist = new xf, this._inputGeom = t || null }, wf = {MaxPointDistanceFilter: {configurable: !0}, MaxMidpointDistanceFilter: {configurable: !0}}; bf.prototype.computeMaxMidpointDistance = function (t) { var e = new Nf(this._inputGeom); t.apply(e), this._maxPtDist.setMaximum(e.getMaxPointDistance()) }, bf.prototype.computeMaxVertexDistance = function (t) { var e = new If(this._inputGeom); t.apply(e), this._maxPtDist.setMaximum(e.getMaxPointDistance()) }, bf.prototype.findDistance = function (t) { return this.computeMaxVertexDistance(t), this.computeMaxMidpointDistance(t), this._maxPtDist.getDistance() }, bf.prototype.getDistancePoints = function () { return this._maxPtDist }, bf.prototype.interfaces_ = function () { return [] }, bf.prototype.getClass = function () { return bf }, wf.MaxPointDistanceFilter.get = function () { return If }, wf.MaxMidpointDistanceFilter.get = function () { return Nf }, Object.defineProperties(bf, wf); var If = function (t) { this._maxPtDist = new xf, this._minPtDist = new xf, this._geom = t || null }; If.prototype.filter = function (t) { this._minPtDist.initialize(), Ef.computeDistance(this._geom, t, this._minPtDist), this._maxPtDist.setMaximum(this._minPtDist) }, If.prototype.getMaxPointDistance = function () { return this._maxPtDist }, If.prototype.interfaces_ = function () { return [Kl] }, If.prototype.getClass = function () { return If }; var Nf = function (t) { this._maxPtDist = new xf, this._minPtDist = new xf, this._geom = t || null }; Nf.prototype.filter = function (t, e) { if (0 === e) return null; var n = t.getCoordinate(e - 1), r = t.getCoordinate(e), i = new ul((n.x + r.x) / 2, (n.y + r.y) / 2); this._minPtDist.initialize(), Ef.computeDistance(this._geom, i, this._minPtDist), this._maxPtDist.setMaximum(this._minPtDist) }, Nf.prototype.isDone = function () { return !1 }, Nf.prototype.isGeometryChanged = function () { return !1 }, Nf.prototype.getMaxPointDistance = function () { return this._maxPtDist }, Nf.prototype.interfaces_ = function () { return [Fc] }, Nf.prototype.getClass = function () { return Nf }; var Sf = function (t) { this._comps = t || null }; Sf.prototype.filter = function (t) { t instanceof th && this._comps.add(t) }, Sf.prototype.interfaces_ = function () { return [Dc] }, Sf.prototype.getClass = function () { return Sf }, Sf.getPolygons = function () { if (1 === arguments.length) { var t = arguments[0]; return Sf.getPolygons(t, new lc) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return e instanceof th ? n.add(e) : e instanceof kc && e.apply(new Sf(n)), n } }; var Cf = function () { if (this._lines = null, this._isForcedToLineString = !1, 1 === arguments.length) { var t = arguments[0]; this._lines = t } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; this._lines = e, this._isForcedToLineString = n } }; Cf.prototype.filter = function (t) { if (this._isForcedToLineString && t instanceof nh) { var e = t.getFactory().createLineString(t.getCoordinateSequence()); return this._lines.add(e), null } t instanceof Zc && this._lines.add(t) }, Cf.prototype.setForceToLineString = function (t) { this._isForcedToLineString = t }, Cf.prototype.interfaces_ = function () { return [Hl] }, Cf.prototype.getClass = function () { return Cf }, Cf.getGeometry = function () { if (1 === arguments.length) { var t = arguments[0]; return t.getFactory().buildGeometry(Cf.getLines(t)) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return e.getFactory().buildGeometry(Cf.getLines(e, n)) } }, Cf.getLines = function () { if (1 === arguments.length) { var t = arguments[0]; return Cf.getLines(t, !1) } if (2 === arguments.length) { if (gl(arguments[0], ic) && gl(arguments[1], ic)) { for (var e = arguments[0], n = arguments[1], r = e.iterator(); r.hasNext();) { var i = r.next(); Cf.getLines(i, n) } return n } if (arguments[0] instanceof Wl && "boolean" == typeof arguments[1]) { var o = arguments[0], s = arguments[1], a = new lc; return o.apply(new Cf(a, s)), a } if (arguments[0] instanceof Wl && gl(arguments[1], ic)) { var u = arguments[0], l = arguments[1]; return u instanceof Zc ? l.add(u) : u.apply(new Cf(l)), l } } else if (3 === arguments.length) { if ("boolean" == typeof arguments[2] && gl(arguments[0], ic) && gl(arguments[1], ic)) { for (var c = arguments[0], h = arguments[1], p = arguments[2], f = c.iterator(); f.hasNext();) { var g = f.next(); Cf.getLines(g, h, p) } return h } if ("boolean" == typeof arguments[2] && arguments[0] instanceof Wl && gl(arguments[1], ic)) { var d = arguments[0], y = arguments[1], v = arguments[2]; return d.apply(new Cf(y, v)), y } } }; var Pf = function () { if (this._boundaryRule = Ql.OGC_SFS_BOUNDARY_RULE, this._isIn = null, this._numBoundaries = null, 0 === arguments.length) ; else if (1 === arguments.length) { var t = arguments[0]; if (null === t) throw new el("Rule must be non-null"); this._boundaryRule = t } }; Pf.prototype.locateInternal = function () { var t = this; if (arguments[0] instanceof ul && arguments[1] instanceof th) { var e = arguments[0], n = arguments[1]; if (n.isEmpty()) return pl.EXTERIOR; var r = n.getExteriorRing(), i = this.locateInPolygonRing(e, r); if (i === pl.EXTERIOR) return pl.EXTERIOR; if (i === pl.BOUNDARY) return pl.BOUNDARY; for (var o = 0; o < n.getNumInteriorRing(); o++) { var s = n.getInteriorRingN(o), a = t.locateInPolygonRing(e, s); if (a === pl.INTERIOR) return pl.EXTERIOR; if (a === pl.BOUNDARY) return pl.BOUNDARY } return pl.INTERIOR } if (arguments[0] instanceof ul && arguments[1] instanceof Zc) { var u = arguments[0], l = arguments[1]; if (!l.getEnvelopeInternal().intersects(u)) return pl.EXTERIOR; var c = l.getCoordinates(); return l.isClosed() || !u.equals(c[0]) && !u.equals(c[c.length - 1]) ? Xl.isOnLine(u, c) ? pl.INTERIOR : pl.EXTERIOR : pl.BOUNDARY } if (arguments[0] instanceof ul && arguments[1] instanceof Qc) { var h = arguments[0], p = arguments[1], f = p.getCoordinate(); return f.equals2D(h) ? pl.INTERIOR : pl.EXTERIOR } }, Pf.prototype.locateInPolygonRing = function (t, e) { return e.getEnvelopeInternal().intersects(t) ? Xl.locatePointInRing(t, e.getCoordinates()) : pl.EXTERIOR }, Pf.prototype.intersects = function (t, e) { return this.locate(t, e) !== pl.EXTERIOR }, Pf.prototype.updateLocationInfo = function (t) { t === pl.INTERIOR && (this._isIn = !0), t === pl.BOUNDARY && this._numBoundaries++ }, Pf.prototype.computeLocation = function (t, e) { var n = this; if (e instanceof Qc && this.updateLocationInfo(this.locateInternal(t, e)), e instanceof Zc) this.updateLocationInfo(this.locateInternal(t, e)); else if (e instanceof th) this.updateLocationInfo(this.locateInternal(t, e)); else if (e instanceof Gc) for (var r = e, i = 0; i < r.getNumGeometries(); i++) { var o = r.getGeometryN(i); n.updateLocationInfo(n.locateInternal(t, o)) } else if (e instanceof rh) for (var s = e, a = 0; a < s.getNumGeometries(); a++) { var u = s.getGeometryN(a); n.updateLocationInfo(n.locateInternal(t, u)) } else if (e instanceof kc) for (var l = new Up(e); l.hasNext();) { var c = l.next(); c !== e && n.computeLocation(t, c) } }, Pf.prototype.locate = function (t, e) { return e.isEmpty() ? pl.EXTERIOR : e instanceof Zc || e instanceof th ? this.locateInternal(t, e) : (this._isIn = !1, this._numBoundaries = 0, this.computeLocation(t, e), this._boundaryRule.isInBoundary(this._numBoundaries) ? pl.BOUNDARY : this._numBoundaries > 0 || this._isIn ? pl.INTERIOR : pl.EXTERIOR) }, Pf.prototype.interfaces_ = function () { return [] }, Pf.prototype.getClass = function () { return Pf }; var Mf = function t() { if (this._component = null, this._segIndex = null, this._pt = null, 2 === arguments.length) { var e = arguments[0], n = arguments[1]; t.call(this, e, t.INSIDE_AREA, n) } else if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2]; this._component = r, this._segIndex = i, this._pt = o } }, Lf = {INSIDE_AREA: {configurable: !0}}; Mf.prototype.isInsideArea = function () { return this._segIndex === Mf.INSIDE_AREA }, Mf.prototype.getCoordinate = function () { return this._pt }, Mf.prototype.getGeometryComponent = function () { return this._component }, Mf.prototype.getSegmentIndex = function () { return this._segIndex }, Mf.prototype.interfaces_ = function () { return [] }, Mf.prototype.getClass = function () { return Mf }, Lf.INSIDE_AREA.get = function () { return -1 }, Object.defineProperties(Mf, Lf); var Of = function (t) { this._pts = t || null }; Of.prototype.filter = function (t) { t instanceof Qc && this._pts.add(t) }, Of.prototype.interfaces_ = function () { return [Dc] }, Of.prototype.getClass = function () { return Of }, Of.getPoints = function () { if (1 === arguments.length) { var t = arguments[0]; return t instanceof Qc ? np.singletonList(t) : Of.getPoints(t, new lc) } if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; return e instanceof Qc ? n.add(e) : e instanceof kc && e.apply(new Of(n)), n } }; var Rf = function () { this._locations = null; var t = arguments[0]; this._locations = t }; Rf.prototype.filter = function (t) { (t instanceof Qc || t instanceof Zc || t instanceof th) && this._locations.add(new Mf(t, 0, t.getCoordinate())) }, Rf.prototype.interfaces_ = function () { return [Dc] }, Rf.prototype.getClass = function () { return Rf }, Rf.getLocations = function (t) { var e = new lc; return t.apply(new Rf(e)), e }; var Tf = function () { if (this._geom = null, this._terminateDistance = 0, this._ptLocator = new Pf, this._minDistanceLocation = null, this._minDistance = nl.MAX_VALUE, 2 === arguments.length) { var t = arguments[0], e = arguments[1]; this._geom = [t, e], this._terminateDistance = 0 } else if (3 === arguments.length) { var n = arguments[0], r = arguments[1], i = arguments[2]; this._geom = new Array(2).fill(null), this._geom[0] = n, this._geom[1] = r, this._terminateDistance = i } }; Tf.prototype.computeContainmentDistance = function () { var t = this; if (0 === arguments.length) { var e = new Array(2).fill(null); if (this.computeContainmentDistance(0, e), this._minDistance <= this._terminateDistance) return null; this.computeContainmentDistance(1, e) } else if (2 === arguments.length) { var n = arguments[0], r = arguments[1], i = 1 - n, o = Sf.getPolygons(this._geom[n]); if (o.size() > 0) { var s = Rf.getLocations(this._geom[i]); if (this.computeContainmentDistance(s, o, r), this._minDistance <= this._terminateDistance) return this._minDistanceLocation[i] = r[0], this._minDistanceLocation[n] = r[1], null } } else if (3 === arguments.length) if (arguments[2] instanceof Array && gl(arguments[0], ac) && gl(arguments[1], ac)) { for (var a = arguments[0], u = arguments[1], l = arguments[2], c = 0; c < a.size(); c++) for (var h = a.get(c), p = 0; p < u.size(); p++) if (t.computeContainmentDistance(h, u.get(p), l), t._minDistance <= t._terminateDistance) return null } else if (arguments[2] instanceof Array && arguments[0] instanceof Mf && arguments[1] instanceof th) { var f = arguments[0], g = arguments[1], d = arguments[2], y = f.getCoordinate(); if (pl.EXTERIOR !== this._ptLocator.locate(y, g)) return this._minDistance = 0, d[0] = f, d[1] = new Mf(g, y), null } }, Tf.prototype.computeMinDistanceLinesPoints = function (t, e, n) { for (var r = this, i = 0; i < t.size(); i++) for (var o = t.get(i), s = 0; s < e.size(); s++) { var a = e.get(s); if (r.computeMinDistance(o, a, n), r._minDistance <= r._terminateDistance) return null } }, Tf.prototype.computeFacetDistance = function () { var t = new Array(2).fill(null), e = Cf.getLines(this._geom[0]), n = Cf.getLines(this._geom[1]), r = Of.getPoints(this._geom[0]), i = Of.getPoints(this._geom[1]); return this.computeMinDistanceLines(e, n, t), this.updateMinDistance(t, !1), this._minDistance <= this._terminateDistance ? null : (t[0] = null, t[1] = null, this.computeMinDistanceLinesPoints(e, i, t), this.updateMinDistance(t, !1), this._minDistance <= this._terminateDistance ? null : (t[0] = null, t[1] = null, this.computeMinDistanceLinesPoints(n, r, t), this.updateMinDistance(t, !0), this._minDistance <= this._terminateDistance ? null : (t[0] = null, t[1] = null, this.computeMinDistancePoints(r, i, t), void this.updateMinDistance(t, !1)))) }, Tf.prototype.nearestLocations = function () { return this.computeMinDistance(), this._minDistanceLocation }, Tf.prototype.updateMinDistance = function (t, e) { if (null === t[0]) return null; e ? (this._minDistanceLocation[0] = t[1], this._minDistanceLocation[1] = t[0]) : (this._minDistanceLocation[0] = t[0], this._minDistanceLocation[1] = t[1]) }, Tf.prototype.nearestPoints = function () { return this.computeMinDistance(), [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()] }, Tf.prototype.computeMinDistance = function () { var t = this; if (0 === arguments.length) { if (null !== this._minDistanceLocation) return null; if (this._minDistanceLocation = new Array(2).fill(null), this.computeContainmentDistance(), this._minDistance <= this._terminateDistance) return null; this.computeFacetDistance() } else if (3 === arguments.length) if (arguments[2] instanceof Array && arguments[0] instanceof Zc && arguments[1] instanceof Qc) { var e = arguments[0], n = arguments[1], r = arguments[2]; if (e.getEnvelopeInternal().distance(n.getEnvelopeInternal()) > this._minDistance) return null; for (var i = e.getCoordinates(), o = n.getCoordinate(), s = 0; s < i.length - 1; s++) { var a = Xl.distancePointLine(o, i[s], i[s + 1]); if (a < t._minDistance) { t._minDistance = a; var u = new vp(i[s], i[s + 1]), l = u.closestPoint(o); r[0] = new Mf(e, s, l), r[1] = new Mf(n, 0, o) } if (t._minDistance <= t._terminateDistance) return null } } else if (arguments[2] instanceof Array && arguments[0] instanceof Zc && arguments[1] instanceof Zc) { var c = arguments[0], h = arguments[1], p = arguments[2]; if (c.getEnvelopeInternal().distance(h.getEnvelopeInternal()) > this._minDistance) return null; for (var f = c.getCoordinates(), g = h.getCoordinates(), d = 0; d < f.length - 1; d++) for (var y = 0; y < g.length - 1; y++) { var v = Xl.distanceLineLine(f[d], f[d + 1], g[y], g[y + 1]); if (v < t._minDistance) { t._minDistance = v; var _ = new vp(f[d], f[d + 1]), m = new vp(g[y], g[y + 1]), x = _.closestPoints(m); p[0] = new Mf(c, d, x[0]), p[1] = new Mf(h, y, x[1]) } if (t._minDistance <= t._terminateDistance) return null } } }, Tf.prototype.computeMinDistancePoints = function (t, e, n) { for (var r = this, i = 0; i < t.size(); i++) for (var o = t.get(i), s = 0; s < e.size(); s++) { var a = e.get(s), u = o.getCoordinate().distance(a.getCoordinate()); if (u < r._minDistance && (r._minDistance = u, n[0] = new Mf(o, 0, o.getCoordinate()), n[1] = new Mf(a, 0, a.getCoordinate())), r._minDistance <= r._terminateDistance) return null } }, Tf.prototype.distance = function () { if (null === this._geom[0] || null === this._geom[1]) throw new el("null geometries are not supported"); return this._geom[0].isEmpty() || this._geom[1].isEmpty() ? 0 : (this.computeMinDistance(), this._minDistance) }, Tf.prototype.computeMinDistanceLines = function (t, e, n) { for (var r = this, i = 0; i < t.size(); i++) for (var o = t.get(i), s = 0; s < e.size(); s++) { var a = e.get(s); if (r.computeMinDistance(o, a, n), r._minDistance <= r._terminateDistance) return null } }, Tf.prototype.interfaces_ = function () { return [] }, Tf.prototype.getClass = function () { return Tf }, Tf.distance = function (t, e) { return new Tf(t, e).distance() }, Tf.isWithinDistance = function (t, e, n) { return new Tf(t, e, n).distance() <= n }, Tf.nearestPoints = function (t, e) { return new Tf(t, e).nearestPoints() }; var Af = function () { this._pt = [new ul, new ul], this._distance = nl.NaN, this._isNull = !0 }; Af.prototype.getCoordinates = function () { return this._pt }, Af.prototype.getCoordinate = function (t) { return this._pt[t] }, Af.prototype.setMinimum = function () { if (1 === arguments.length) { var t = arguments[0]; this.setMinimum(t._pt[0], t._pt[1]) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (this._isNull) return this.initialize(e, n), null; var r = e.distance(n); r < this._distance && this.initialize(e, n, r) } }, Af.prototype.initialize = function () { if (0 === arguments.length) this._isNull = !0; else if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; this._pt[0].setCoordinate(t), this._pt[1].setCoordinate(e), this._distance = t.distance(e), this._isNull = !1 } else if (3 === arguments.length) { var n = arguments[0], r = arguments[1], i = arguments[2]; this._pt[0].setCoordinate(n), this._pt[1].setCoordinate(r), this._distance = i, this._isNull = !1 } }, Af.prototype.toString = function () { return Fl.toLineString(this._pt[0], this._pt[1]) }, Af.prototype.getDistance = function () { return this._distance }, Af.prototype.setMaximum = function () { if (1 === arguments.length) { var t = arguments[0]; this.setMaximum(t._pt[0], t._pt[1]) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1]; if (this._isNull) return this.initialize(e, n), null; var r = e.distance(n); r > this._distance && this.initialize(e, n, r) } }, Af.prototype.interfaces_ = function () { return [] }, Af.prototype.getClass = function () { return Af }; var Df = function () { }; Df.prototype.interfaces_ = function () { return [] }, Df.prototype.getClass = function () { return Df }, Df.computeDistance = function () { if (arguments[2] instanceof Af && arguments[0] instanceof Zc && arguments[1] instanceof ul) for (var t = arguments[0], e = arguments[1], n = arguments[2], r = new vp, i = t.getCoordinates(), o = 0; o < i.length - 1; o++) { r.setCoordinates(i[o], i[o + 1]); var s = r.closestPoint(e); n.setMinimum(s, e) } else if (arguments[2] instanceof Af && arguments[0] instanceof th && arguments[1] instanceof ul) { var a = arguments[0], u = arguments[1], l = arguments[2]; Df.computeDistance(a.getExteriorRing(), u, l); for (var c = 0; c < a.getNumInteriorRing(); c++) Df.computeDistance(a.getInteriorRingN(c), u, l) } else if (arguments[2] instanceof Af && arguments[0] instanceof Wl && arguments[1] instanceof ul) { var h = arguments[0], p = arguments[1], f = arguments[2]; if (h instanceof Zc) Df.computeDistance(h, p, f); else if (h instanceof th) Df.computeDistance(h, p, f); else if (h instanceof kc) for (var g = h, d = 0; d < g.getNumGeometries(); d++) { var y = g.getGeometryN(d); Df.computeDistance(y, p, f) } else f.setMinimum(h.getCoordinate(), p) } else if (arguments[2] instanceof Af && arguments[0] instanceof vp && arguments[1] instanceof ul) { var v = arguments[0], _ = arguments[1], m = arguments[2], x = v.closestPoint(_); m.setMinimum(x, _) } }; var Ff = function () { this._g0 = null, this._g1 = null, this._ptDist = new Af, this._densifyFrac = 0; var t = arguments[0], e = arguments[1]; this._g0 = t, this._g1 = e }, kf = {MaxPointDistanceFilter: {configurable: !0}, MaxDensifiedByFractionDistanceFilter: {configurable: !0}}; Ff.prototype.getCoordinates = function () { return this._ptDist.getCoordinates() }, Ff.prototype.setDensifyFraction = function (t) { if (t > 1 || t <= 0) throw new el("Fraction is not in range (0.0 - 1.0]"); this._densifyFrac = t }, Ff.prototype.compute = function (t, e) { this.computeOrientedDistance(t, e, this._ptDist), this.computeOrientedDistance(e, t, this._ptDist) }, Ff.prototype.distance = function () { return this.compute(this._g0, this._g1), this._ptDist.getDistance() }, Ff.prototype.computeOrientedDistance = function (t, e, n) { var r = new Gf(e); if (t.apply(r), n.setMaximum(r.getMaxPointDistance()), this._densifyFrac > 0) { var i = new qf(e, this._densifyFrac); t.apply(i), n.setMaximum(i.getMaxPointDistance()) } }, Ff.prototype.orientedDistance = function () { return this.computeOrientedDistance(this._g0, this._g1, this._ptDist), this._ptDist.getDistance() }, Ff.prototype.interfaces_ = function () { return [] }, Ff.prototype.getClass = function () { return Ff }, Ff.distance = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new Ff(t, e); return n.distance() } if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2], s = new Ff(r, i); return s.setDensifyFraction(o), s.distance() } }, kf.MaxPointDistanceFilter.get = function () { return Gf }, kf.MaxDensifiedByFractionDistanceFilter.get = function () { return qf }, Object.defineProperties(Ff, kf); var Gf = function () { this._maxPtDist = new Af, this._minPtDist = new Af, this._euclideanDist = new Df, this._geom = null; var t = arguments[0]; this._geom = t }; Gf.prototype.filter = function (t) { this._minPtDist.initialize(), Df.computeDistance(this._geom, t, this._minPtDist), this._maxPtDist.setMaximum(this._minPtDist) }, Gf.prototype.getMaxPointDistance = function () { return this._maxPtDist }, Gf.prototype.interfaces_ = function () { return [Kl] }, Gf.prototype.getClass = function () { return Gf }; var qf = function () { this._maxPtDist = new Af, this._minPtDist = new Af, this._geom = null, this._numSubSegs = 0; var t = arguments[0], e = arguments[1]; this._geom = t, this._numSubSegs = Math.trunc(Math.round(1 / e)) }; qf.prototype.filter = function (t, e) { var n = this; if (0 === e) return null; for (var r = t.getCoordinate(e - 1), i = t.getCoordinate(e), o = (i.x - r.x) / this._numSubSegs, s = (i.y - r.y) / this._numSubSegs, a = 0; a < this._numSubSegs; a++) { var u = r.x + a * o, l = r.y + a * s, c = new ul(u, l); n._minPtDist.initialize(), Df.computeDistance(n._geom, c, n._minPtDist), n._maxPtDist.setMaximum(n._minPtDist) } }, qf.prototype.isDone = function () { return !1 }, qf.prototype.isGeometryChanged = function () { return !1 }, qf.prototype.getMaxPointDistance = function () { return this._maxPtDist }, qf.prototype.interfaces_ = function () { return [Fc] }, qf.prototype.getClass = function () { return qf }; var Bf = function (t, e, n) { this._minValidDistance = null, this._maxValidDistance = null, this._minDistanceFound = null, this._maxDistanceFound = null, this._isValid = !0, this._errMsg = null, this._errorLocation = null, this._errorIndicator = null, this._input = t || null, this._bufDistance = e || null, this._result = n || null }, zf = {VERBOSE: {configurable: !0}, MAX_DISTANCE_DIFF_FRAC: {configurable: !0}}; Bf.prototype.checkMaximumDistance = function (t, e, n) { var r = new Ff(e, t); if (r.setDensifyFraction(.25), this._maxDistanceFound = r.orientedDistance(), this._maxDistanceFound > n) { this._isValid = !1; var i = r.getCoordinates(); this._errorLocation = i[1], this._errorIndicator = t.getFactory().createLineString(i), this._errMsg = "Distance between buffer curve and input is too large (" + this._maxDistanceFound + " at " + Fl.toLineString(i[0], i[1]) + ")" } }, Bf.prototype.isValid = function () { var t = Math.abs(this._bufDistance), e = Bf.MAX_DISTANCE_DIFF_FRAC * t; return this._minValidDistance = t - e, this._maxValidDistance = t + e, !(!this._input.isEmpty() && !this._result.isEmpty()) || (this._bufDistance > 0 ? this.checkPositiveValid() : this.checkNegativeValid(), Bf.VERBOSE && Pl.out.println("Min Dist= " + this._minDistanceFound + " err= " + (1 - this._minDistanceFound / this._bufDistance) + " Max Dist= " + this._maxDistanceFound + " err= " + (this._maxDistanceFound / this._bufDistance - 1)), this._isValid) }, Bf.prototype.checkNegativeValid = function () { if (!(this._input instanceof th || this._input instanceof rh || this._input instanceof kc)) return null; var t = this.getPolygonLines(this._input); if (this.checkMinimumDistance(t, this._result, this._minValidDistance), !this._isValid) return null; this.checkMaximumDistance(t, this._result, this._maxValidDistance) }, Bf.prototype.getErrorIndicator = function () { return this._errorIndicator }, Bf.prototype.checkMinimumDistance = function (t, e, n) { var r = new Tf(t, e, n); if (this._minDistanceFound = r.distance(), this._minDistanceFound < n) { this._isValid = !1; var i = r.nearestPoints(); this._errorLocation = r.nearestPoints()[1], this._errorIndicator = t.getFactory().createLineString(i), this._errMsg = "Distance between buffer curve and input is too small (" + this._minDistanceFound + " at " + Fl.toLineString(i[0], i[1]) + " )" } }, Bf.prototype.checkPositiveValid = function () { var t = this._result.getBoundary(); if (this.checkMinimumDistance(this._input, t, this._minValidDistance), !this._isValid) return null; this.checkMaximumDistance(this._input, t, this._maxValidDistance) }, Bf.prototype.getErrorLocation = function () { return this._errorLocation }, Bf.prototype.getPolygonLines = function (t) { for (var e = new lc, n = new Cf(e), r = Sf.getPolygons(t).iterator(); r.hasNext();) { r.next().apply(n) } return t.getFactory().buildGeometry(e) }, Bf.prototype.getErrorMessage = function () { return this._errMsg }, Bf.prototype.interfaces_ = function () { return [] }, Bf.prototype.getClass = function () { return Bf }, zf.VERBOSE.get = function () { return !1 }, zf.MAX_DISTANCE_DIFF_FRAC.get = function () { return .012 }, Object.defineProperties(Bf, zf); var jf = function (t, e, n) { this._isValid = !0, this._errorMsg = null, this._errorLocation = null, this._errorIndicator = null, this._input = t || null, this._distance = e || null, this._result = n || null }, Uf = {VERBOSE: {configurable: !0}, MAX_ENV_DIFF_FRAC: {configurable: !0}}; jf.prototype.isValid = function () { return this.checkPolygonal(), this._isValid ? (this.checkExpectedEmpty(), this._isValid ? (this.checkEnvelope(), this._isValid ? (this.checkArea(), this._isValid ? (this.checkDistance(), this._isValid) : this._isValid) : this._isValid) : this._isValid) : this._isValid }, jf.prototype.checkEnvelope = function () { if (this._distance < 0) return null; var t = this._distance * jf.MAX_ENV_DIFF_FRAC; 0 === t && (t = .001); var e = new Ll(this._input.getEnvelopeInternal()); e.expandBy(this._distance); var n = new Ll(this._result.getEnvelopeInternal()); n.expandBy(t), n.contains(e) || (this._isValid = !1, this._errorMsg = "Buffer envelope is incorrect", this._errorIndicator = this._input.getFactory().toGeometry(n)), this.report("Envelope") }, jf.prototype.checkDistance = function () { var t = new Bf(this._input, this._distance, this._result); t.isValid() || (this._isValid = !1, this._errorMsg = t.getErrorMessage(), this._errorLocation = t.getErrorLocation(), this._errorIndicator = t.getErrorIndicator()), this.report("Distance") }, jf.prototype.checkArea = function () { var t = this._input.getArea(), e = this._result.getArea(); this._distance > 0 && t > e && (this._isValid = !1, this._errorMsg = "Area of positive buffer is smaller than input", this._errorIndicator = this._result), this._distance < 0 && t < e && (this._isValid = !1, this._errorMsg = "Area of negative buffer is larger than input", this._errorIndicator = this._result), this.report("Area") }, jf.prototype.checkPolygonal = function () { this._result instanceof th || this._result instanceof rh || (this._isValid = !1), this._errorMsg = "Result is not polygonal", this._errorIndicator = this._result, this.report("Polygonal") }, jf.prototype.getErrorIndicator = function () { return this._errorIndicator }, jf.prototype.getErrorLocation = function () { return this._errorLocation }, jf.prototype.checkExpectedEmpty = function () { return this._input.getDimension() >= 2 || this._distance > 0 ? null : (this._result.isEmpty() || (this._isValid = !1, this._errorMsg = "Result is non-empty", this._errorIndicator = this._result), void this.report("ExpectedEmpty")) }, jf.prototype.report = function (t) { if (!jf.VERBOSE) return null; Pl.out.println("Check " + t + ": " + (this._isValid ? "passed" : "FAILED")) }, jf.prototype.getErrorMessage = function () { return this._errorMsg }, jf.prototype.interfaces_ = function () { return [] }, jf.prototype.getClass = function () { return jf }, jf.isValidMsg = function (t, e, n) { var r = new jf(t, e, n); return r.isValid() ? null : r.getErrorMessage() }, jf.isValid = function (t, e, n) { return !!new jf(t, e, n).isValid() }, Uf.VERBOSE.get = function () { return !1 }, Uf.MAX_ENV_DIFF_FRAC.get = function () { return .012 }, Object.defineProperties(jf, Uf); var Vf = function () { this._pts = null, this._data = null; var t = arguments[0], e = arguments[1]; this._pts = t, this._data = e }; Vf.prototype.getCoordinates = function () { return this._pts }, Vf.prototype.size = function () { return this._pts.length }, Vf.prototype.getCoordinate = function (t) { return this._pts[t] }, Vf.prototype.isClosed = function () { return this._pts[0].equals(this._pts[this._pts.length - 1]) }, Vf.prototype.getSegmentOctant = function (t) { return t === this._pts.length - 1 ? -1 : fp.octant(this.getCoordinate(t), this.getCoordinate(t + 1)) }, Vf.prototype.setData = function (t) { this._data = t }, Vf.prototype.getData = function () { return this._data }, Vf.prototype.toString = function () { return Fl.toLineString(new lh(this._pts)) }, Vf.prototype.interfaces_ = function () { return [gp] }, Vf.prototype.getClass = function () { return Vf }; var Xf = function () { this._findAllIntersections = !1, this._isCheckEndSegmentsOnly = !1, this._li = null, this._interiorIntersection = null, this._intSegments = null, this._intersections = new lc, this._intersectionCount = 0, this._keepIntersections = !0; var t = arguments[0]; this._li = t, this._interiorIntersection = null }; Xf.prototype.getInteriorIntersection = function () { return this._interiorIntersection }, Xf.prototype.setCheckEndSegmentsOnly = function (t) { this._isCheckEndSegmentsOnly = t }, Xf.prototype.getIntersectionSegments = function () { return this._intSegments }, Xf.prototype.count = function () { return this._intersectionCount }, Xf.prototype.getIntersections = function () { return this._intersections }, Xf.prototype.setFindAllIntersections = function (t) { this._findAllIntersections = t }, Xf.prototype.setKeepIntersections = function (t) { this._keepIntersections = t }, Xf.prototype.processIntersections = function (t, e, n, r) { if (!this._findAllIntersections && this.hasIntersection()) return null; if (t === n && e === r) return null; if (this._isCheckEndSegmentsOnly && !(this.isEndSegment(t, e) || this.isEndSegment(n, r))) return null; var i = t.getCoordinates()[e], o = t.getCoordinates()[e + 1], s = n.getCoordinates()[r], a = n.getCoordinates()[r + 1]; this._li.computeIntersection(i, o, s, a), this._li.hasIntersection() && this._li.isInteriorIntersection() && (this._intSegments = new Array(4).fill(null), this._intSegments[0] = i, this._intSegments[1] = o, this._intSegments[2] = s, this._intSegments[3] = a, this._interiorIntersection = this._li.getIntersection(0), this._keepIntersections && this._intersections.add(this._interiorIntersection), this._intersectionCount++) }, Xf.prototype.isEndSegment = function (t, e) { return 0 === e || e >= t.size() - 2 }, Xf.prototype.hasIntersection = function () { return null !== this._interiorIntersection }, Xf.prototype.isDone = function () { return !this._findAllIntersections && null !== this._interiorIntersection }, Xf.prototype.interfaces_ = function () { return [Zp] }, Xf.prototype.getClass = function () { return Xf }, Xf.createAllIntersectionsFinder = function (t) { var e = new Xf(t); return e.setFindAllIntersections(!0), e }, Xf.createAnyIntersectionFinder = function (t) { return new Xf(t) }, Xf.createIntersectionCounter = function (t) { var e = new Xf(t); return e.setFindAllIntersections(!0), e.setKeepIntersections(!1), e }; var Yf = function () { this._li = new jl, this._segStrings = null, this._findAllIntersections = !1, this._segInt = null, this._isValid = !0; var t = arguments[0]; this._segStrings = t }; Yf.prototype.execute = function () { if (null !== this._segInt) return null; this.checkInteriorIntersections() }, Yf.prototype.getIntersections = function () { return this._segInt.getIntersections() }, Yf.prototype.isValid = function () { return this.execute(), this._isValid }, Yf.prototype.setFindAllIntersections = function (t) { this._findAllIntersections = t }, Yf.prototype.checkInteriorIntersections = function () { this._isValid = !0, this._segInt = new Xf(this._li), this._segInt.setFindAllIntersections(this._findAllIntersections); var t = new Ip; if (t.setSegmentIntersector(this._segInt), t.computeNodes(this._segStrings), this._segInt.hasIntersection()) return this._isValid = !1, null }, Yf.prototype.checkValid = function () { if (this.execute(), !this._isValid) throw new Oh(this.getErrorMessage(), this._segInt.getInteriorIntersection()) }, Yf.prototype.getErrorMessage = function () { if (this._isValid) return "no intersections found"; var t = this._segInt.getIntersectionSegments(); return "found non-noded intersection between " + Fl.toLineString(t[0], t[1]) + " and " + Fl.toLineString(t[2], t[3]) }, Yf.prototype.interfaces_ = function () { return [] }, Yf.prototype.getClass = function () { return Yf }, Yf.computeIntersections = function (t) { var e = new Yf(t); return e.setFindAllIntersections(!0), e.isValid(), e.getIntersections() }; var Hf = function t() { this._nv = null; var e = arguments[0]; this._nv = new Yf(t.toSegmentStrings(e)) }; Hf.prototype.checkValid = function () { this._nv.checkValid() }, Hf.prototype.interfaces_ = function () { return [] }, Hf.prototype.getClass = function () { return Hf }, Hf.toSegmentStrings = function (t) { for (var e = new lc, n = t.iterator(); n.hasNext();) { var r = n.next(); e.add(new Vf(r.getCoordinates(), r)) } return e }, Hf.checkValid = function (t) { new Hf(t).checkValid() }; var Wf = function (t) { this._mapOp = t }; Wf.prototype.map = function (t) { for (var e = new lc, n = 0; n < t.getNumGeometries(); n++) { var r = this._mapOp.map(t.getGeometryN(n)); r.isEmpty() || e.add(r) } return t.getFactory().createGeometryCollection(_h.toGeometryArray(e)) }, Wf.prototype.interfaces_ = function () { return [] }, Wf.prototype.getClass = function () { return Wf }, Wf.map = function (t, e) { return new Wf(e).map(t) }; var Jf = function () { this._op = null, this._geometryFactory = null, this._ptLocator = null, this._lineEdgesList = new lc, this._resultLineList = new lc; var t = arguments[0], e = arguments[1], n = arguments[2]; this._op = t, this._geometryFactory = e, this._ptLocator = n }; Jf.prototype.collectLines = function (t) { for (var e = this, n = this._op.getGraph().getEdgeEnds().iterator(); n.hasNext();) { var r = n.next(); e.collectLineEdge(r, t, e._lineEdgesList), e.collectBoundaryTouchEdge(r, t, e._lineEdgesList) } }, Jf.prototype.labelIsolatedLine = function (t, e) { var n = this._ptLocator.locate(t.getCoordinate(), this._op.getArgGeometry(e)); t.getLabel().setLocation(e, n) }, Jf.prototype.build = function (t) { return this.findCoveredLineEdges(), this.collectLines(t), this.buildLines(t), this._resultLineList }, Jf.prototype.collectLineEdge = function (t, e, n) { var r = t.getLabel(), i = t.getEdge(); t.isLineEdge() && (t.isVisited() || !Mg.isResultOfOp(r, e) || i.isCovered() || (n.add(i), t.setVisitedEdge(!0))) }, Jf.prototype.findCoveredLineEdges = function () { for (var t = this._op.getGraph().getNodes().iterator(); t.hasNext();) { t.next().getEdges().findCoveredLineEdges() } for (var e = this._op.getGraph().getEdgeEnds().iterator(); e.hasNext();) { var n = e.next(), r = n.getEdge(); if (n.isLineEdge() && !r.isCoveredSet()) { var i = this._op.isCoveredByA(n.getCoordinate()); r.setCovered(i) } } }, Jf.prototype.labelIsolatedLines = function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(), r = n.getLabel(); n.isIsolated() && (r.isNull(0) ? this.labelIsolatedLine(n, 0) : this.labelIsolatedLine(n, 1)) } }, Jf.prototype.buildLines = function (t) { for (var e = this._lineEdgesList.iterator(); e.hasNext();) { var n = e.next(), r = this._geometryFactory.createLineString(n.getCoordinates()); this._resultLineList.add(r), n.setInResult(!0) } }, Jf.prototype.collectBoundaryTouchEdge = function (t, e, n) { var r = t.getLabel(); return t.isLineEdge() || t.isVisited() || t.isInteriorAreaEdge() || t.getEdge().isInResult() ? null : (ql.isTrue(!(t.isInResult() || t.getSym().isInResult()) || !t.getEdge().isInResult()), void (Mg.isResultOfOp(r, e) && e === Mg.INTERSECTION && (n.add(t.getEdge()), t.setVisitedEdge(!0)))) }, Jf.prototype.interfaces_ = function () { return [] }, Jf.prototype.getClass = function () { return Jf }; var Zf = function () { this._op = null, this._geometryFactory = null, this._resultPointList = new lc; var t = arguments[0], e = arguments[1]; this._op = t, this._geometryFactory = e }; Zf.prototype.filterCoveredNodeToPoint = function (t) { var e = t.getCoordinate(); if (!this._op.isCoveredByLA(e)) { var n = this._geometryFactory.createPoint(e); this._resultPointList.add(n) } }, Zf.prototype.extractNonCoveredResultNodes = function (t) { for (var e = this._op.getGraph().getNodes().iterator(); e.hasNext();) { var n = e.next(); if (!n.isInResult() && (!n.isIncidentEdgeInResult() && (0 === n.getEdges().getDegree() || t === Mg.INTERSECTION))) { var r = n.getLabel(); Mg.isResultOfOp(r, t) && this.filterCoveredNodeToPoint(n) } } }, Zf.prototype.build = function (t) { return this.extractNonCoveredResultNodes(t), this._resultPointList }, Zf.prototype.interfaces_ = function () { return [] }, Zf.prototype.getClass = function () { return Zf }; var Kf = function () { this._inputGeom = null, this._factory = null, this._pruneEmptyGeometry = !0, this._preserveGeometryCollectionType = !0, this._preserveCollections = !1, this._preserveType = !1 }; Kf.prototype.transformPoint = function (t, e) { return this._factory.createPoint(this.transformCoordinates(t.getCoordinateSequence(), t)) }, Kf.prototype.transformPolygon = function (t, e) { var n = !0, r = this.transformLinearRing(t.getExteriorRing(), t); null !== r && r instanceof nh && !r.isEmpty() || (n = !1); for (var i = new lc, o = 0; o < t.getNumInteriorRing(); o++) { var s = this.transformLinearRing(t.getInteriorRingN(o), t); null === s || s.isEmpty() || (s instanceof nh || (n = !1), i.add(s)) } if (n) return this._factory.createPolygon(r, i.toArray([])); var a = new lc; return null !== r && a.add(r), a.addAll(i), this._factory.buildGeometry(a) }, Kf.prototype.createCoordinateSequence = function (t) { return this._factory.getCoordinateSequenceFactory().create(t) }, Kf.prototype.getInputGeometry = function () { return this._inputGeom }, Kf.prototype.transformMultiLineString = function (t, e) { for (var n = new lc, r = 0; r < t.getNumGeometries(); r++) { var i = this.transformLineString(t.getGeometryN(r), t); null !== i && (i.isEmpty() || n.add(i)) } return this._factory.buildGeometry(n) }, Kf.prototype.transformCoordinates = function (t, e) { return this.copy(t) }, Kf.prototype.transformLineString = function (t, e) { return this._factory.createLineString(this.transformCoordinates(t.getCoordinateSequence(), t)) }, Kf.prototype.transformMultiPoint = function (t, e) { for (var n = new lc, r = 0; r < t.getNumGeometries(); r++) { var i = this.transformPoint(t.getGeometryN(r), t); null !== i && (i.isEmpty() || n.add(i)) } return this._factory.buildGeometry(n) }, Kf.prototype.transformMultiPolygon = function (t, e) { for (var n = new lc, r = 0; r < t.getNumGeometries(); r++) { var i = this.transformPolygon(t.getGeometryN(r), t); null !== i && (i.isEmpty() || n.add(i)) } return this._factory.buildGeometry(n) }, Kf.prototype.copy = function (t) { return t.copy() }, Kf.prototype.transformGeometryCollection = function (t, e) { for (var n = new lc, r = 0; r < t.getNumGeometries(); r++) { var i = this.transform(t.getGeometryN(r)); null !== i && (this._pruneEmptyGeometry && i.isEmpty() || n.add(i)) } return this._preserveGeometryCollectionType ? this._factory.createGeometryCollection(_h.toGeometryArray(n)) : this._factory.buildGeometry(n) }, Kf.prototype.transform = function (t) { if (this._inputGeom = t, this._factory = t.getFactory(), t instanceof Qc) return this.transformPoint(t, null); if (t instanceof eh) return this.transformMultiPoint(t, null); if (t instanceof nh) return this.transformLinearRing(t, null); if (t instanceof Zc) return this.transformLineString(t, null); if (t instanceof Gc) return this.transformMultiLineString(t, null); if (t instanceof th) return this.transformPolygon(t, null); if (t instanceof rh) return this.transformMultiPolygon(t, null); if (t instanceof kc) return this.transformGeometryCollection(t, null); throw new el("Unknown Geometry subtype: " + t.getClass().getName()) }, Kf.prototype.transformLinearRing = function (t, e) { var n = this.transformCoordinates(t.getCoordinateSequence(), t); if (null === n) return this._factory.createLinearRing(null); var r = n.size(); return r > 0 && r < 4 && !this._preserveType ? this._factory.createLineString(n) : this._factory.createLinearRing(n) }, Kf.prototype.interfaces_ = function () { return [] }, Kf.prototype.getClass = function () { return Kf }; var Qf = function t() { if (this._snapTolerance = 0, this._srcPts = null, this._seg = new vp, this._allowSnappingToSourceVertices = !1, this._isClosed = !1, arguments[0] instanceof Zc && "number" == typeof arguments[1]) { var e = arguments[0], n = arguments[1]; t.call(this, e.getCoordinates(), n) } else if (arguments[0] instanceof Array && "number" == typeof arguments[1]) { var r = arguments[0], i = arguments[1]; this._srcPts = r, this._isClosed = t.isClosed(r), this._snapTolerance = i } }; Qf.prototype.snapVertices = function (t, e) { for (var n = this._isClosed ? t.size() - 1 : t.size(), r = 0; r < n; r++) { var i = t.get(r), o = this.findSnapForVertex(i, e); null !== o && (t.set(r, new ul(o)), 0 === r && this._isClosed && t.set(t.size() - 1, new ul(o))) } }, Qf.prototype.findSnapForVertex = function (t, e) { for (var n = 0; n < e.length; n++) { if (t.equals2D(e[n])) return null; if (t.distance(e[n]) < this._snapTolerance) return e[n] } return null }, Qf.prototype.snapTo = function (t) { var e = new hc(this._srcPts); return this.snapVertices(e, t), this.snapSegments(e, t), e.toCoordinateArray() }, Qf.prototype.snapSegments = function (t, e) { if (0 === e.length) return null; var n = e.length; e[0].equals2D(e[e.length - 1]) && (n = e.length - 1); for (var r = 0; r < n; r++) { var i = e[r], o = this.findSegmentIndexToSnap(i, t); o >= 0 && t.add(o + 1, new ul(i), !1) } }, Qf.prototype.findSegmentIndexToSnap = function (t, e) { for (var n = this, r = nl.MAX_VALUE, i = -1, o = 0; o < e.size() - 1; o++) { if (n._seg.p0 = e.get(o), n._seg.p1 = e.get(o + 1), n._seg.p0.equals2D(t) || n._seg.p1.equals2D(t)) { if (n._allowSnappingToSourceVertices) continue; return -1 } var s = n._seg.distance(t); s < n._snapTolerance && s < r && (r = s, i = o) } return i }, Qf.prototype.setAllowSnappingToSourceVertices = function (t) { this._allowSnappingToSourceVertices = t }, Qf.prototype.interfaces_ = function () { return [] }, Qf.prototype.getClass = function () { return Qf }, Qf.isClosed = function (t) { return !(t.length <= 1) && t[0].equals2D(t[t.length - 1]) }; var $f = function (t) { this._srcGeom = t || null }, tg = {SNAP_PRECISION_FACTOR: {configurable: !0}}; $f.prototype.snapTo = function (t, e) { var n = this.extractTargetCoordinates(t); return new eg(e, n).transform(this._srcGeom) }, $f.prototype.snapToSelf = function (t, e) { var n = this.extractTargetCoordinates(this._srcGeom), r = new eg(t, n, !0).transform(this._srcGeom), i = r; return e && gl(i, $c) && (i = r.buffer(0)), i }, $f.prototype.computeSnapTolerance = function (t) { return this.computeMinimumSegmentLength(t) / 10 }, $f.prototype.extractTargetCoordinates = function (t) { for (var e = new Lc, n = t.getCoordinates(), r = 0; r < n.length; r++) e.add(n[r]); return e.toArray(new Array(0).fill(null)) }, $f.prototype.computeMinimumSegmentLength = function (t) { for (var e = nl.MAX_VALUE, n = 0; n < t.length - 1; n++) { var r = t[n].distance(t[n + 1]); r < e && (e = r) } return e }, $f.prototype.interfaces_ = function () { return [] }, $f.prototype.getClass = function () { return $f }, $f.snap = function (t, e, n) { var r = new Array(2).fill(null), i = new $f(t); r[0] = i.snapTo(e, n); var o = new $f(e); return r[1] = o.snapTo(r[0], n), r }, $f.computeOverlaySnapTolerance = function () { if (1 === arguments.length) { var t = arguments[0], e = $f.computeSizeBasedSnapTolerance(t), n = t.getPrecisionModel(); if (n.getType() === gh.FIXED) { var r = 1 / n.getScale() * 2 / 1.415; r > e && (e = r) } return e } if (2 === arguments.length) { var i = arguments[0], o = arguments[1]; return Math.min($f.computeOverlaySnapTolerance(i), $f.computeOverlaySnapTolerance(o)) } }, $f.computeSizeBasedSnapTolerance = function (t) { var e = t.getEnvelopeInternal(); return Math.min(e.getHeight(), e.getWidth()) * $f.SNAP_PRECISION_FACTOR }, $f.snapToSelf = function (t, e, n) { return new $f(t).snapToSelf(e, n) }, tg.SNAP_PRECISION_FACTOR.get = function () { return 1e-9 }, Object.defineProperties($f, tg); var eg = function (t) { function e(e, n, r) { t.call(this), this._snapTolerance = e || null, this._snapPts = n || null, this._isSelfSnap = void 0 !== r && r } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.snapLine = function (t, e) { var n = new Qf(t, this._snapTolerance); return n.setAllowSnappingToSourceVertices(this._isSelfSnap), n.snapTo(e) }, e.prototype.transformCoordinates = function (t, e) { var n = t.toCoordinateArray(), r = this.snapLine(n, this._snapPts); return this._factory.getCoordinateSequenceFactory().create(r) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(Kf), ng = function () { this._isFirst = !0, this._commonMantissaBitsCount = 53, this._commonBits = 0, this._commonSignExp = null }; ng.prototype.getCommon = function () { return nl.longBitsToDouble(this._commonBits) }, ng.prototype.add = function (t) { var e = nl.doubleToLongBits(t); return this._isFirst ? (this._commonBits = e, this._commonSignExp = ng.signExpBits(this._commonBits), this._isFirst = !1, null) : ng.signExpBits(e) !== this._commonSignExp ? (this._commonBits = 0, null) : (this._commonMantissaBitsCount = ng.numCommonMostSigMantissaBits(this._commonBits, e), void (this._commonBits = ng.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount)))) }, ng.prototype.toString = function () { if (1 === arguments.length) { var t = arguments[0], e = nl.longBitsToDouble(t), n = nl.toBinaryString(t), r = "0000000000000000000000000000000000000000000000000000000000000000" + n, i = r.substring(r.length - 64), o = i.substring(0, 1) + " " + i.substring(1, 12) + "(exp) " + i.substring(12) + " [ " + e + " ]"; return o } }, ng.prototype.interfaces_ = function () { return [] }, ng.prototype.getClass = function () { return ng }, ng.getBit = function (t, e) { return 0 != (t & 1 << e) ? 1 : 0 }, ng.signExpBits = function (t) { return t >> 52 }, ng.zeroLowerBits = function (t, e) { return t & ~((1 << e) - 1) }, ng.numCommonMostSigMantissaBits = function (t, e) { for (var n = 0, r = 52; r >= 0; r--) { if (ng.getBit(t, r) !== ng.getBit(e, r)) return n; n++ } return 52 }; var rg = function () { this._commonCoord = null, this._ccFilter = new og }, ig = {CommonCoordinateFilter: {configurable: !0}, Translater: {configurable: !0}}; rg.prototype.addCommonBits = function (t) { var e = new sg(this._commonCoord); t.apply(e), t.geometryChanged() }, rg.prototype.removeCommonBits = function (t) { if (0 === this._commonCoord.x && 0 === this._commonCoord.y) return t; var e = new ul(this._commonCoord); e.x = -e.x, e.y = -e.y; var n = new sg(e); return t.apply(n), t.geometryChanged(), t }, rg.prototype.getCommonCoordinate = function () { return this._commonCoord }, rg.prototype.add = function (t) { t.apply(this._ccFilter), this._commonCoord = this._ccFilter.getCommonCoordinate() }, rg.prototype.interfaces_ = function () { return [] }, rg.prototype.getClass = function () { return rg }, ig.CommonCoordinateFilter.get = function () { return og }, ig.Translater.get = function () { return sg }, Object.defineProperties(rg, ig); var og = function () { this._commonBitsX = new ng, this._commonBitsY = new ng }; og.prototype.filter = function (t) { this._commonBitsX.add(t.x), this._commonBitsY.add(t.y) }, og.prototype.getCommonCoordinate = function () { return new ul(this._commonBitsX.getCommon(), this._commonBitsY.getCommon()) }, og.prototype.interfaces_ = function () { return [Kl] }, og.prototype.getClass = function () { return og }; var sg = function () { this.trans = null; var t = arguments[0]; this.trans = t }; sg.prototype.filter = function (t, e) { var n = t.getOrdinate(e, 0) + this.trans.x, r = t.getOrdinate(e, 1) + this.trans.y; t.setOrdinate(e, 0, n), t.setOrdinate(e, 1, r) }, sg.prototype.isDone = function () { return !1 }, sg.prototype.isGeometryChanged = function () { return !0 }, sg.prototype.interfaces_ = function () { return [Fc] }, sg.prototype.getClass = function () { return sg }; var ag = function (t, e) { this._geom = new Array(2).fill(null), this._snapTolerance = null, this._cbr = null, this._geom[0] = t, this._geom[1] = e, this.computeSnapTolerance() }; ag.prototype.selfSnap = function (t) { return new $f(t).snapTo(t, this._snapTolerance) }, ag.prototype.removeCommonBits = function (t) { this._cbr = new rg, this._cbr.add(t[0]), this._cbr.add(t[1]); var e = new Array(2).fill(null); return e[0] = this._cbr.removeCommonBits(t[0].copy()), e[1] = this._cbr.removeCommonBits(t[1].copy()), e }, ag.prototype.prepareResult = function (t) { return this._cbr.addCommonBits(t), t }, ag.prototype.getResultGeometry = function (t) { var e = this.snap(this._geom), n = Mg.overlayOp(e[0], e[1], t); return this.prepareResult(n) }, ag.prototype.checkValid = function (t) { t.isValid() || Pl.out.println("Snapped geometry is invalid") }, ag.prototype.computeSnapTolerance = function () { this._snapTolerance = $f.computeOverlaySnapTolerance(this._geom[0], this._geom[1]) }, ag.prototype.snap = function (t) { var e = this.removeCommonBits(t); return $f.snap(e[0], e[1], this._snapTolerance) }, ag.prototype.interfaces_ = function () { return [] }, ag.prototype.getClass = function () { return ag }, ag.overlayOp = function (t, e, n) { return new ag(t, e).getResultGeometry(n) }, ag.union = function (t, e) { return ag.overlayOp(t, e, Mg.UNION) }, ag.intersection = function (t, e) { return ag.overlayOp(t, e, Mg.INTERSECTION) }, ag.symDifference = function (t, e) { return ag.overlayOp(t, e, Mg.SYMDIFFERENCE) }, ag.difference = function (t, e) { return ag.overlayOp(t, e, Mg.DIFFERENCE) }; var ug = function (t, e) { this._geom = new Array(2).fill(null), this._geom[0] = t, this._geom[1] = e }; ug.prototype.getResultGeometry = function (t) { var e = null, n = !1, r = null; try { e = Mg.overlayOp(this._geom[0], this._geom[1], t); n = !0 } catch (t) { if (!(t instanceof kl)) throw t; r = t } if (!n) try { e = ag.overlayOp(this._geom[0], this._geom[1], t) } catch (t) { throw t instanceof kl ? r : t } return e }, ug.prototype.interfaces_ = function () { return [] }, ug.prototype.getClass = function () { return ug }, ug.overlayOp = function (t, e, n) { return new ug(t, e).getResultGeometry(n) }, ug.union = function (t, e) { return ug.overlayOp(t, e, Mg.UNION) }, ug.intersection = function (t, e) { return ug.overlayOp(t, e, Mg.INTERSECTION) }, ug.symDifference = function (t, e) { return ug.overlayOp(t, e, Mg.SYMDIFFERENCE) }, ug.difference = function (t, e) { return ug.overlayOp(t, e, Mg.DIFFERENCE) }; var lg = function () { this.mce = null, this.chainIndex = null; var t = arguments[0], e = arguments[1]; this.mce = t, this.chainIndex = e }; lg.prototype.computeIntersections = function (t, e) { this.mce.computeIntersectsForChain(this.chainIndex, t.mce, t.chainIndex, e) }, lg.prototype.interfaces_ = function () { return [] }, lg.prototype.getClass = function () { return lg }; var cg = function t() { if (this._label = null, this._xValue = null, this._eventType = null, this._insertEvent = null, this._deleteEventIndex = null, this._obj = null, 2 === arguments.length) { var e = arguments[0], n = arguments[1]; this._eventType = t.DELETE, this._xValue = e, this._insertEvent = n } else if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2]; this._eventType = t.INSERT, this._label = r, this._xValue = i, this._obj = o } }, hg = {INSERT: {configurable: !0}, DELETE: {configurable: !0}}; cg.prototype.isDelete = function () { return this._eventType === cg.DELETE }, cg.prototype.setDeleteEventIndex = function (t) { this._deleteEventIndex = t }, cg.prototype.getObject = function () { return this._obj }, cg.prototype.compareTo = function (t) { var e = t; return this._xValue < e._xValue ? -1 : this._xValue > e._xValue ? 1 : this._eventType < e._eventType ? -1 : this._eventType > e._eventType ? 1 : 0 }, cg.prototype.getInsertEvent = function () { return this._insertEvent }, cg.prototype.isInsert = function () { return this._eventType === cg.INSERT }, cg.prototype.isSameLabel = function (t) { return null !== this._label && this._label === t._label }, cg.prototype.getDeleteEventIndex = function () { return this._deleteEventIndex }, cg.prototype.interfaces_ = function () { return [il] }, cg.prototype.getClass = function () { return cg }, hg.INSERT.get = function () { return 1 }, hg.DELETE.get = function () { return 2 }, Object.defineProperties(cg, hg); var pg = function () { }; pg.prototype.interfaces_ = function () { return [] }, pg.prototype.getClass = function () { return pg }; var fg = function () { this._hasIntersection = !1, this._hasProper = !1, this._hasProperInterior = !1, this._properIntersectionPoint = null, this._li = null, this._includeProper = null, this._recordIsolated = null, this._isSelfIntersection = null, this._numIntersections = 0, this.numTests = 0, this._bdyNodes = null, this._isDone = !1, this._isDoneWhenProperInt = !1; var t = arguments[0], e = arguments[1], n = arguments[2]; this._li = t, this._includeProper = e, this._recordIsolated = n }; fg.prototype.isTrivialIntersection = function (t, e, n, r) { if (t === n && 1 === this._li.getIntersectionNum()) { if (fg.isAdjacentSegments(e, r)) return !0; if (t.isClosed()) { var i = t.getNumPoints() - 1; if (0 === e && r === i || 0 === r && e === i) return !0 } } return !1 }, fg.prototype.getProperIntersectionPoint = function () { return this._properIntersectionPoint }, fg.prototype.setIsDoneIfProperInt = function (t) { this._isDoneWhenProperInt = t }, fg.prototype.hasProperInteriorIntersection = function () { return this._hasProperInterior }, fg.prototype.isBoundaryPointInternal = function (t, e) { for (var n = e.iterator(); n.hasNext();) { var r = n.next().getCoordinate(); if (t.isIntersection(r)) return !0 } return !1 }, fg.prototype.hasProperIntersection = function () { return this._hasProper }, fg.prototype.hasIntersection = function () { return this._hasIntersection }, fg.prototype.isDone = function () { return this._isDone }, fg.prototype.isBoundaryPoint = function (t, e) { return null !== e && (!!this.isBoundaryPointInternal(t, e[0]) || !!this.isBoundaryPointInternal(t, e[1])) }, fg.prototype.setBoundaryNodes = function (t, e) { this._bdyNodes = new Array(2).fill(null), this._bdyNodes[0] = t, this._bdyNodes[1] = e }, fg.prototype.addIntersections = function (t, e, n, r) { if (t === n && e === r) return null; this.numTests++; var i = t.getCoordinates()[e], o = t.getCoordinates()[e + 1], s = n.getCoordinates()[r], a = n.getCoordinates()[r + 1]; this._li.computeIntersection(i, o, s, a), this._li.hasIntersection() && (this._recordIsolated && (t.setIsolated(!1), n.setIsolated(!1)), this._numIntersections++, this.isTrivialIntersection(t, e, n, r) || (this._hasIntersection = !0, !this._includeProper && this._li.isProper() || (t.addIntersections(this._li, e, 0), n.addIntersections(this._li, r, 1)), this._li.isProper() && (this._properIntersectionPoint = this._li.getIntersection(0).copy(), this._hasProper = !0, this._isDoneWhenProperInt && (this._isDone = !0), this.isBoundaryPoint(this._li, this._bdyNodes) || (this._hasProperInterior = !0)))) }, fg.prototype.interfaces_ = function () { return [] }, fg.prototype.getClass = function () { return fg }, fg.isAdjacentSegments = function (t, e) { return 1 === Math.abs(t - e) }; var gg = function (t) { function e() { t.call(this), this.events = new lc, this.nOverlaps = null } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.prepareEvents = function () { np.sort(this.events); for (var t = 0; t < this.events.size(); t++) { var e = this.events.get(t); e.isDelete() && e.getInsertEvent().setDeleteEventIndex(t) } }, e.prototype.computeIntersections = function () { var t = this; if (1 === arguments.length) { var e = arguments[0]; this.nOverlaps = 0, this.prepareEvents(); for (var n = 0; n < this.events.size(); n++) { var r = t.events.get(n); if (r.isInsert() && t.processOverlaps(n, r.getDeleteEventIndex(), r, e), e.isDone()) break } } else if (3 === arguments.length) if (arguments[2] instanceof fg && gl(arguments[0], ac) && gl(arguments[1], ac)) { var i = arguments[0], o = arguments[1], s = arguments[2]; this.addEdges(i, i), this.addEdges(o, o), this.computeIntersections(s) } else if ("boolean" == typeof arguments[2] && gl(arguments[0], ac) && arguments[1] instanceof fg) { var a = arguments[0], u = arguments[1], l = arguments[2]; l ? this.addEdges(a, null) : this.addEdges(a), this.computeIntersections(u) } }, e.prototype.addEdge = function (t, e) { for (var n = t.getMonotoneChainEdge(), r = n.getStartIndexes(), i = 0; i < r.length - 1; i++) { var o = new lg(n, i), s = new cg(e, n.getMinX(i), o); this.events.add(s), this.events.add(new cg(n.getMaxX(i), s)) } }, e.prototype.processOverlaps = function (t, e, n, r) { for (var i = n.getObject(), o = t; o < e; o++) { var s = this.events.get(o); if (s.isInsert()) { var a = s.getObject(); n.isSameLabel(s) || (i.computeIntersections(a, r), this.nOverlaps++) } } }, e.prototype.addEdges = function () { var t = this; if (1 === arguments.length) for (var e = arguments[0], n = e.iterator(); n.hasNext();) { var r = n.next(); t.addEdge(r, r) } else if (2 === arguments.length) for (var i = arguments[0], o = arguments[1], s = i.iterator(); s.hasNext();) { var a = s.next(); t.addEdge(a, o) } }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(pg), dg = function () { this._min = nl.POSITIVE_INFINITY, this._max = nl.NEGATIVE_INFINITY }, yg = {NodeComparator: {configurable: !0}}; dg.prototype.getMin = function () { return this._min }, dg.prototype.intersects = function (t, e) { return !(this._min > e || this._max < t) }, dg.prototype.getMax = function () { return this._max }, dg.prototype.toString = function () { return Fl.toLineString(new ul(this._min, 0), new ul(this._max, 0)) }, dg.prototype.interfaces_ = function () { return [] }, dg.prototype.getClass = function () { return dg }, yg.NodeComparator.get = function () { return vg }, Object.defineProperties(dg, yg); var vg = function () { }; vg.prototype.compare = function (t, e) { var n = t, r = e, i = (n._min + n._max) / 2, o = (r._min + r._max) / 2; return i < o ? -1 : i > o ? 1 : 0 }, vg.prototype.interfaces_ = function () { return [sl] }, vg.prototype.getClass = function () { return vg }; var _g = function (t) { function e() { t.call(this), this._item = null; var e = arguments[0], n = arguments[1], r = arguments[2]; this._min = e, this._max = n, this._item = r } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.query = function (t, e, n) { if (!this.intersects(t, e)) return null; n.visitItem(this._item) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(dg), mg = function (t) { function e() { t.call(this), this._node1 = null, this._node2 = null; var e = arguments[0], n = arguments[1]; this._node1 = e, this._node2 = n, this.buildExtent(this._node1, this._node2) } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.buildExtent = function (t, e) { this._min = Math.min(t._min, e._min), this._max = Math.max(t._max, e._max) }, e.prototype.query = function (t, e, n) { if (!this.intersects(t, e)) return null; null !== this._node1 && this._node1.query(t, e, n), null !== this._node2 && this._node2.query(t, e, n) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(dg), xg = function () { this._leaves = new lc, this._root = null, this._level = 0 }; xg.prototype.buildTree = function () { np.sort(this._leaves, new dg.NodeComparator); for (var t = this._leaves, e = null, n = new lc; ;) { if (this.buildLevel(t, n), 1 === n.size()) return n.get(0); e = t, t = n, n = e } }, xg.prototype.insert = function (t, e, n) { if (null !== this._root) throw new Error("Index cannot be added to once it has been queried"); this._leaves.add(new _g(t, e, n)) }, xg.prototype.query = function (t, e, n) { this.init(), this._root.query(t, e, n) }, xg.prototype.buildRoot = function () { if (null !== this._root) return null; this._root = this.buildTree() }, xg.prototype.printNode = function (t) { Pl.out.println(Fl.toLineString(new ul(t._min, this._level), new ul(t._max, this._level))) }, xg.prototype.init = function () { if (null !== this._root) return null; this.buildRoot() }, xg.prototype.buildLevel = function (t, e) { this._level++, e.clear(); for (var n = 0; n < t.size(); n += 2) { var r = t.get(n); if (null === (n + 1 < t.size() ? t.get(n) : null)) e.add(r); else { var i = new mg(t.get(n), t.get(n + 1)); e.add(i) } } }, xg.prototype.interfaces_ = function () { return [] }, xg.prototype.getClass = function () { return xg }; var Eg = function () { this._items = new lc }; Eg.prototype.visitItem = function (t) { this._items.add(t) }, Eg.prototype.getItems = function () { return this._items }, Eg.prototype.interfaces_ = function () { return [Qh] }, Eg.prototype.getClass = function () { return Eg }; var bg = function () { this._index = null; var t = arguments[0]; if (!gl(t, $c)) throw new el("Argument must be Polygonal"); this._index = new Ng(t) }, wg = {SegmentVisitor: {configurable: !0}, IntervalIndexedGeometry: {configurable: !0}}; bg.prototype.locate = function (t) { var e = new Vl(t), n = new Ig(e); return this._index.query(t.y, t.y, n), e.getLocation() }, bg.prototype.interfaces_ = function () { return [jp] }, bg.prototype.getClass = function () { return bg }, wg.SegmentVisitor.get = function () { return Ig }, wg.IntervalIndexedGeometry.get = function () { return Ng }, Object.defineProperties(bg, wg); var Ig = function () { this._counter = null; var t = arguments[0]; this._counter = t }; Ig.prototype.visitItem = function (t) { var e = t; this._counter.countSegment(e.getCoordinate(0), e.getCoordinate(1)) }, Ig.prototype.interfaces_ = function () { return [Qh] }, Ig.prototype.getClass = function () { return Ig }; var Ng = function () { this._index = new xg; var t = arguments[0]; this.init(t) }; Ng.prototype.init = function (t) { for (var e = Cf.getLines(t).iterator(); e.hasNext();) { var n = e.next().getCoordinates(); this.addLine(n) } }, Ng.prototype.addLine = function (t) { for (var e = 1; e < t.length; e++) { var n = new vp(t[e - 1], t[e]), r = Math.min(n.p0.y, n.p1.y), i = Math.max(n.p0.y, n.p1.y); this._index.insert(r, i, n) } }, Ng.prototype.query = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new Eg; return this._index.query(t, e, n), n.getItems() } if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2]; this._index.query(r, i, o) } }, Ng.prototype.interfaces_ = function () { return [] }, Ng.prototype.getClass = function () { return Ng }; var Sg = function (t) { function e() { if (t.call(this), this._parentGeom = null, this._lineEdgeMap = new fh, this._boundaryNodeRule = null, this._useBoundaryDeterminationRule = !0, this._argIndex = null, this._boundaryNodes = null, this._hasTooFewPoints = !1, this._invalidPoint = null, this._areaPtLocator = null, this._ptLocator = new Pf, 2 === arguments.length) { var e = arguments[0], n = arguments[1], r = Ql.OGC_SFS_BOUNDARY_RULE; this._argIndex = e, this._parentGeom = n, this._boundaryNodeRule = r, null !== n && this.add(n) } else if (3 === arguments.length) { var i = arguments[0], o = arguments[1], s = arguments[2]; this._argIndex = i, this._parentGeom = o, this._boundaryNodeRule = s, null !== o && this.add(o) } } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.insertBoundaryPoint = function (t, n) { var r = this._nodes.addNode(n).getLabel(), i = 1; r.getLocation(t, Sh.ON) === pl.BOUNDARY && i++; var o = e.determineBoundary(this._boundaryNodeRule, i); r.setLocation(t, o) }, e.prototype.computeSelfNodes = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1]; return this.computeSelfNodes(t, e, !1) } if (3 === arguments.length) { var n = arguments[0], r = arguments[1], i = arguments[2], o = new fg(n, !0, !1); o.setIsDoneIfProperInt(i); var s = this.createEdgeSetIntersector(), a = this._parentGeom instanceof nh || this._parentGeom instanceof th || this._parentGeom instanceof rh, u = r || !a; return s.computeIntersections(this._edges, o, u), this.addSelfIntersectionNodes(this._argIndex), o } }, e.prototype.computeSplitEdges = function (t) { for (var e = this._edges.iterator(); e.hasNext();) { e.next().eiList.addSplitEdges(t) } }, e.prototype.computeEdgeIntersections = function (t, e, n) { var r = new fg(e, n, !0); return r.setBoundaryNodes(this.getBoundaryNodes(), t.getBoundaryNodes()), this.createEdgeSetIntersector().computeIntersections(this._edges, t._edges, r), r }, e.prototype.getGeometry = function () { return this._parentGeom }, e.prototype.getBoundaryNodeRule = function () { return this._boundaryNodeRule }, e.prototype.hasTooFewPoints = function () { return this._hasTooFewPoints }, e.prototype.addPoint = function () { if (arguments[0] instanceof Qc) { var t = arguments[0], e = t.getCoordinate(); this.insertPoint(this._argIndex, e, pl.INTERIOR) } else if (arguments[0] instanceof ul) { var n = arguments[0]; this.insertPoint(this._argIndex, n, pl.INTERIOR) } }, e.prototype.addPolygon = function (t) { this.addPolygonRing(t.getExteriorRing(), pl.EXTERIOR, pl.INTERIOR); for (var e = 0; e < t.getNumInteriorRing(); e++) { var n = t.getInteriorRingN(e); this.addPolygonRing(n, pl.INTERIOR, pl.EXTERIOR) } }, e.prototype.addEdge = function (t) { this.insertEdge(t); var e = t.getCoordinates(); this.insertPoint(this._argIndex, e[0], pl.BOUNDARY), this.insertPoint(this._argIndex, e[e.length - 1], pl.BOUNDARY) }, e.prototype.addLineString = function (t) { var e = pc.removeRepeatedPoints(t.getCoordinates()); if (e.length < 2) return this._hasTooFewPoints = !0, this._invalidPoint = e[0], null; var n = new of(e, new Dh(this._argIndex, pl.INTERIOR)); this._lineEdgeMap.put(t, n), this.insertEdge(n), ql.isTrue(e.length >= 2, "found LineString with single point"), this.insertBoundaryPoint(this._argIndex, e[0]), this.insertBoundaryPoint(this._argIndex, e[e.length - 1]) }, e.prototype.getInvalidPoint = function () { return this._invalidPoint }, e.prototype.getBoundaryPoints = function () { for (var t = this.getBoundaryNodes(), e = new Array(t.size()).fill(null), n = 0, r = t.iterator(); r.hasNext();) { var i = r.next(); e[n++] = i.getCoordinate().copy() } return e }, e.prototype.getBoundaryNodes = function () { return null === this._boundaryNodes && (this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex)), this._boundaryNodes }, e.prototype.addSelfIntersectionNode = function (t, e, n) { if (this.isBoundaryNode(t, e)) return null; n === pl.BOUNDARY && this._useBoundaryDeterminationRule ? this.insertBoundaryPoint(t, e) : this.insertPoint(t, e, n) }, e.prototype.addPolygonRing = function (t, e, n) { if (t.isEmpty()) return null; var r = pc.removeRepeatedPoints(t.getCoordinates()); if (r.length < 4) return this._hasTooFewPoints = !0, this._invalidPoint = r[0], null; var i = e, o = n; Xl.isCCW(r) && (i = n, o = e); var s = new of(r, new Dh(this._argIndex, pl.BOUNDARY, i, o)); this._lineEdgeMap.put(t, s), this.insertEdge(s), this.insertPoint(this._argIndex, r[0], pl.BOUNDARY) }, e.prototype.insertPoint = function (t, e, n) { var r = this._nodes.addNode(e), i = r.getLabel(); null === i ? r._label = new Dh(t, n) : i.setLocation(t, n) }, e.prototype.createEdgeSetIntersector = function () { return new gg }, e.prototype.addSelfIntersectionNodes = function (t) { for (var e = this._edges.iterator(); e.hasNext();) for (var n = e.next(), r = n.getLabel().getLocation(t), i = n.eiList.iterator(); i.hasNext();) { var o = i.next(); this.addSelfIntersectionNode(t, o.coord, r) } }, e.prototype.add = function () { if (1 !== arguments.length) return t.prototype.add.apply(this, arguments); var e = arguments[0]; if (e.isEmpty()) return null; if (e instanceof rh && (this._useBoundaryDeterminationRule = !1), e instanceof th) this.addPolygon(e); else if (e instanceof Zc) this.addLineString(e); else if (e instanceof Qc) this.addPoint(e); else if (e instanceof eh) this.addCollection(e); else if (e instanceof Gc) this.addCollection(e); else if (e instanceof rh) this.addCollection(e); else { if (!(e instanceof kc)) throw new Error(e.getClass().getName()); this.addCollection(e) } }, e.prototype.addCollection = function (t) { for (var e = 0; e < t.getNumGeometries(); e++) { var n = t.getGeometryN(e); this.add(n) } }, e.prototype.locate = function (t) { return gl(this._parentGeom, $c) && this._parentGeom.getNumGeometries() > 50 ? (null === this._areaPtLocator && (this._areaPtLocator = new bg(this._parentGeom)), this._areaPtLocator.locate(t)) : this._ptLocator.locate(t, this._parentGeom) }, e.prototype.findEdge = function () { if (1 === arguments.length) { var e = arguments[0]; return this._lineEdgeMap.get(e) } return t.prototype.findEdge.apply(this, arguments) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e.determineBoundary = function (t, e) { return t.isInBoundary(e) ? pl.BOUNDARY : pl.INTERIOR }, e }(Hh), Cg = function () { if (this._li = new jl, this._resultPrecisionModel = null, this._arg = null, 1 === arguments.length) { var t = arguments[0]; this.setComputationPrecision(t.getPrecisionModel()), this._arg = new Array(1).fill(null), this._arg[0] = new Sg(0, t) } else if (2 === arguments.length) { var e = arguments[0], n = arguments[1], r = Ql.OGC_SFS_BOUNDARY_RULE; e.getPrecisionModel().compareTo(n.getPrecisionModel()) >= 0 ? this.setComputationPrecision(e.getPrecisionModel()) : this.setComputationPrecision(n.getPrecisionModel()), this._arg = new Array(2).fill(null), this._arg[0] = new Sg(0, e, r), this._arg[1] = new Sg(1, n, r) } else if (3 === arguments.length) { var i = arguments[0], o = arguments[1], s = arguments[2]; i.getPrecisionModel().compareTo(o.getPrecisionModel()) >= 0 ? this.setComputationPrecision(i.getPrecisionModel()) : this.setComputationPrecision(o.getPrecisionModel()), this._arg = new Array(2).fill(null), this._arg[0] = new Sg(0, i, s), this._arg[1] = new Sg(1, o, s) } }; Cg.prototype.getArgGeometry = function (t) { return this._arg[t].getGeometry() }, Cg.prototype.setComputationPrecision = function (t) { this._resultPrecisionModel = t, this._li.setPrecisionModel(this._resultPrecisionModel) }, Cg.prototype.interfaces_ = function () { return [] }, Cg.prototype.getClass = function () { return Cg }; var Pg = function () { }; Pg.prototype.interfaces_ = function () { return [] }, Pg.prototype.getClass = function () { return Pg }, Pg.map = function () { if (arguments[0] instanceof Wl && gl(arguments[1], Pg.MapOp)) { for (var t = arguments[0], e = arguments[1], n = new lc, r = 0; r < t.getNumGeometries(); r++) { var i = e.map(t.getGeometryN(r)); null !== i && n.add(i) } return t.getFactory().buildGeometry(n) } if (gl(arguments[0], ic) && gl(arguments[1], Pg.MapOp)) { for (var o = arguments[0], s = arguments[1], a = new lc, u = o.iterator(); u.hasNext();) { var l = u.next(), c = s.map(l); null !== c && a.add(c) } return a } }, Pg.MapOp = function () { }; var Mg = function (t) { function e() { var e = arguments[0], n = arguments[1]; t.call(this, e, n), this._ptLocator = new Pf, this._geomFact = null, this._resultGeom = null, this._graph = null, this._edgeList = new Jp, this._resultPolyList = new lc, this._resultLineList = new lc, this._resultPointList = new lc, this._graph = new Hh(new Hp), this._geomFact = e.getFactory() } return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.insertUniqueEdge = function (t) { var e = this._edgeList.findEqualEdge(t); if (null !== e) { var n = e.getLabel(), r = t.getLabel(); e.isPointwiseEqual(t) || (r = new Dh(t.getLabel())).flip(); var i = e.getDepth(); i.isNull() && i.add(n), i.add(r), n.merge(r) } else this._edgeList.add(t) }, e.prototype.getGraph = function () { return this._graph }, e.prototype.cancelDuplicateResultEdges = function () { for (var t = this._graph.getEdgeEnds().iterator(); t.hasNext();) { var e = t.next(), n = e.getSym(); e.isInResult() && n.isInResult() && (e.setInResult(!1), n.setInResult(!1)) } }, e.prototype.isCoveredByLA = function (t) { return !!this.isCovered(t, this._resultLineList) || !!this.isCovered(t, this._resultPolyList) }, e.prototype.computeGeometry = function (t, n, r, i) { var o = new lc; return o.addAll(t), o.addAll(n), o.addAll(r), o.isEmpty() ? e.createEmptyResult(i, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact) : this._geomFact.buildGeometry(o) }, e.prototype.mergeSymLabels = function () { for (var t = this._graph.getNodes().iterator(); t.hasNext();) { t.next().getEdges().mergeSymLabels() } }, e.prototype.isCovered = function (t, e) { for (var n = e.iterator(); n.hasNext();) { var r = n.next(); if (this._ptLocator.locate(t, r) !== pl.EXTERIOR) return !0 } return !1 }, e.prototype.replaceCollapsedEdges = function () { for (var t = new lc, e = this._edgeList.iterator(); e.hasNext();) { var n = e.next(); n.isCollapsed() && (e.remove(), t.add(n.getCollapsedEdge())) } this._edgeList.addAll(t) }, e.prototype.updateNodeLabelling = function () { for (var t = this._graph.getNodes().iterator(); t.hasNext();) { var e = t.next(), n = e.getEdges().getLabel(); e.getLabel().merge(n) } }, e.prototype.getResultGeometry = function (t) { return this.computeOverlay(t), this._resultGeom }, e.prototype.insertUniqueEdges = function (t) { for (var e = t.iterator(); e.hasNext();) { var n = e.next(); this.insertUniqueEdge(n) } }, e.prototype.computeOverlay = function (t) { this.copyPoints(0), this.copyPoints(1), this._arg[0].computeSelfNodes(this._li, !1), this._arg[1].computeSelfNodes(this._li, !1), this._arg[0].computeEdgeIntersections(this._arg[1], this._li, !0); var e = new lc; this._arg[0].computeSplitEdges(e), this._arg[1].computeSplitEdges(e), this.insertUniqueEdges(e), this.computeLabelsFromDepths(), this.replaceCollapsedEdges(), Hf.checkValid(this._edgeList.getEdges()), this._graph.addEdges(this._edgeList.getEdges()), this.computeLabelling(), this.labelIncompleteNodes(), this.findResultAreaEdges(t), this.cancelDuplicateResultEdges(); var n = new Wh(this._geomFact); n.add(this._graph), this._resultPolyList = n.getPolygons(); var r = new Jf(this, this._geomFact, this._ptLocator); this._resultLineList = r.build(t); var i = new Zf(this, this._geomFact, this._ptLocator); this._resultPointList = i.build(t), this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, t) }, e.prototype.labelIncompleteNode = function (t, e) { var n = this._ptLocator.locate(t.getCoordinate(), this._arg[e].getGeometry()); t.getLabel().setLocation(e, n) }, e.prototype.copyPoints = function (t) { for (var e = this._arg[t].getNodeIterator(); e.hasNext();) { var n = e.next(); this._graph.addNode(n.getCoordinate()).setLabel(t, n.getLabel().getLocation(t)) } }, e.prototype.findResultAreaEdges = function (t) { for (var n = this._graph.getEdgeEnds().iterator(); n.hasNext();) { var r = n.next(), i = r.getLabel(); i.isArea() && !r.isInteriorAreaEdge() && e.isResultOfOp(i.getLocation(0, Sh.RIGHT), i.getLocation(1, Sh.RIGHT), t) && r.setInResult(!0) } }, e.prototype.computeLabelsFromDepths = function () { for (var t = this._edgeList.iterator(); t.hasNext();) { var e = t.next(), n = e.getLabel(), r = e.getDepth(); if (!r.isNull()) { r.normalize(); for (var i = 0; i < 2; i++) n.isNull(i) || !n.isArea() || r.isNull(i) || (0 === r.getDelta(i) ? n.toLine(i) : (ql.isTrue(!r.isNull(i, Sh.LEFT), "depth of LEFT side has not been initialized"), n.setLocation(i, Sh.LEFT, r.getLocation(i, Sh.LEFT)), ql.isTrue(!r.isNull(i, Sh.RIGHT), "depth of RIGHT side has not been initialized"), n.setLocation(i, Sh.RIGHT, r.getLocation(i, Sh.RIGHT)))) } } }, e.prototype.computeLabelling = function () { for (var t = this._graph.getNodes().iterator(); t.hasNext();) { t.next().getEdges().computeLabelling(this._arg) } this.mergeSymLabels(), this.updateNodeLabelling() }, e.prototype.labelIncompleteNodes = function () { for (var t = this._graph.getNodes().iterator(); t.hasNext();) { var e = t.next(), n = e.getLabel(); e.isIsolated() && (n.isNull(0) ? this.labelIncompleteNode(e, 0) : this.labelIncompleteNode(e, 1)), e.getEdges().updateLabelling(n) } }, e.prototype.isCoveredByA = function (t) { return !!this.isCovered(t, this._resultPolyList) }, e.prototype.interfaces_ = function () { return [] }, e.prototype.getClass = function () { return e }, e }(Cg); Mg.overlayOp = function (t, e, n) { return new Mg(t, e).getResultGeometry(n) }, Mg.intersection = function (t, e) { if (t.isEmpty() || e.isEmpty()) return Mg.createEmptyResult(Mg.INTERSECTION, t, e, t.getFactory()); if (t.isGeometryCollection()) { var n = e; return Wf.map(t, { interfaces_: function () { return [Pg.MapOp] }, map: function (t) { return t.intersection(n) } }) } return t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), ug.overlayOp(t, e, Mg.INTERSECTION) }, Mg.symDifference = function (t, e) { if (t.isEmpty() || e.isEmpty()) { if (t.isEmpty() && e.isEmpty()) return Mg.createEmptyResult(Mg.SYMDIFFERENCE, t, e, t.getFactory()); if (t.isEmpty()) return e.copy(); if (e.isEmpty()) return t.copy() } return t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), ug.overlayOp(t, e, Mg.SYMDIFFERENCE) }, Mg.resultDimension = function (t, e, n) { var r = e.getDimension(), i = n.getDimension(), o = -1; switch (t) { case Mg.INTERSECTION: o = Math.min(r, i); break; case Mg.UNION: o = Math.max(r, i); break; case Mg.DIFFERENCE: o = r; break; case Mg.SYMDIFFERENCE: o = Math.max(r, i) } return o }, Mg.createEmptyResult = function (t, e, n, r) { var i = null; switch (Mg.resultDimension(t, e, n)) { case -1: i = r.createGeometryCollection(new Array(0).fill(null)); break; case 0: i = r.createPoint(); break; case 1: i = r.createLineString(); break; case 2: i = r.createPolygon() } return i }, Mg.difference = function (t, e) { return t.isEmpty() ? Mg.createEmptyResult(Mg.DIFFERENCE, t, e, t.getFactory()) : e.isEmpty() ? t.copy() : (t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), ug.overlayOp(t, e, Mg.DIFFERENCE)) }, Mg.isResultOfOp = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = t.getLocation(0), r = t.getLocation(1); return Mg.isResultOfOp(n, r, e) } if (3 === arguments.length) { var i = arguments[0], o = arguments[1], s = arguments[2]; switch (i === pl.BOUNDARY && (i = pl.INTERIOR), o === pl.BOUNDARY && (o = pl.INTERIOR), s) { case Mg.INTERSECTION: return i === pl.INTERIOR && o === pl.INTERIOR; case Mg.UNION: return i === pl.INTERIOR || o === pl.INTERIOR; case Mg.DIFFERENCE: return i === pl.INTERIOR && o !== pl.INTERIOR; case Mg.SYMDIFFERENCE: return i === pl.INTERIOR && o !== pl.INTERIOR || i !== pl.INTERIOR && o === pl.INTERIOR } return !1 } }, Mg.INTERSECTION = 1, Mg.UNION = 2, Mg.DIFFERENCE = 3, Mg.SYMDIFFERENCE = 4; var Lg = function () { this._g = null, this._boundaryDistanceTolerance = null, this._linework = null, this._ptLocator = new Pf, this._seg = new vp; var t = arguments[0], e = arguments[1]; this._g = t, this._boundaryDistanceTolerance = e, this._linework = this.extractLinework(t) }; Lg.prototype.isWithinToleranceOfBoundary = function (t) { for (var e = this, n = 0; n < this._linework.getNumGeometries(); n++) for (var r = e._linework.getGeometryN(n).getCoordinateSequence(), i = 0; i < r.size() - 1; i++) { if (r.getCoordinate(i, e._seg.p0), r.getCoordinate(i + 1, e._seg.p1), e._seg.distance(t) <= e._boundaryDistanceTolerance) return !0 } return !1 }, Lg.prototype.getLocation = function (t) { return this.isWithinToleranceOfBoundary(t) ? pl.BOUNDARY : this._ptLocator.locate(t, this._g) }, Lg.prototype.extractLinework = function (t) { var e = new Og; t.apply(e); var n = e.getLinework(), r = _h.toLineStringArray(n); return t.getFactory().createMultiLineString(r) }, Lg.prototype.interfaces_ = function () { return [] }, Lg.prototype.getClass = function () { return Lg }; var Og = function () { this._linework = null, this._linework = new lc }; Og.prototype.getLinework = function () { return this._linework }, Og.prototype.filter = function (t) { if (t instanceof th) { var e = t; this._linework.add(e.getExteriorRing()); for (var n = 0; n < e.getNumInteriorRing(); n++) this._linework.add(e.getInteriorRingN(n)) } }, Og.prototype.interfaces_ = function () { return [Dc] }, Og.prototype.getClass = function () { return Og }; var Rg = function () { this._g = null, this._doLeft = !0, this._doRight = !0; var t = arguments[0]; this._g = t }; Rg.prototype.extractPoints = function (t, e, n) { for (var r = t.getCoordinates(), i = 0; i < r.length - 1; i++) this.computeOffsetPoints(r[i], r[i + 1], e, n) }, Rg.prototype.setSidesToGenerate = function (t, e) { this._doLeft = t, this._doRight = e }, Rg.prototype.getPoints = function (t) { for (var e = new lc, n = Cf.getLines(this._g).iterator(); n.hasNext();) { var r = n.next(); this.extractPoints(r, t, e) } return e }, Rg.prototype.computeOffsetPoints = function (t, e, n, r) { var i = e.x - t.x, o = e.y - t.y, s = Math.sqrt(i * i + o * o), a = n * i / s, u = n * o / s, l = (e.x + t.x) / 2, c = (e.y + t.y) / 2; if (this._doLeft) { var h = new ul(l - u, c + a); r.add(h) } if (this._doRight) { var p = new ul(l + u, c - a); r.add(p) } }, Rg.prototype.interfaces_ = function () { return [] }, Rg.prototype.getClass = function () { return Rg }; var Tg = function t() { this._geom = null, this._locFinder = null, this._location = new Array(3).fill(null), this._invalidLocation = null, this._boundaryDistanceTolerance = t.TOLERANCE, this._testCoords = new lc; var e = arguments[0], n = arguments[1], r = arguments[2]; this._boundaryDistanceTolerance = t.computeBoundaryDistanceTolerance(e, n), this._geom = [e, n, r], this._locFinder = [new Lg(this._geom[0], this._boundaryDistanceTolerance), new Lg(this._geom[1], this._boundaryDistanceTolerance), new Lg(this._geom[2], this._boundaryDistanceTolerance)] }, Ag = {TOLERANCE: {configurable: !0}}; Tg.prototype.reportResult = function (t, e, n) { Pl.out.println("Overlay result invalid - A:" + pl.toLocationSymbol(e[0]) + " B:" + pl.toLocationSymbol(e[1]) + " expected:" + (n ? "i" : "e") + " actual:" + pl.toLocationSymbol(e[2])) }, Tg.prototype.isValid = function (t) { this.addTestPts(this._geom[0]), this.addTestPts(this._geom[1]); var e = this.checkValid(t); return e }, Tg.prototype.checkValid = function () { var t = this; if (1 === arguments.length) { for (var e = arguments[0], n = 0; n < this._testCoords.size(); n++) { var r = t._testCoords.get(n); if (!t.checkValid(e, r)) return t._invalidLocation = r, !1 } return !0 } if (2 === arguments.length) { var i = arguments[0], o = arguments[1]; return this._location[0] = this._locFinder[0].getLocation(o), this._location[1] = this._locFinder[1].getLocation(o), this._location[2] = this._locFinder[2].getLocation(o), !!Tg.hasLocation(this._location, pl.BOUNDARY) || this.isValidResult(i, this._location) } }, Tg.prototype.addTestPts = function (t) { var e = new Rg(t); this._testCoords.addAll(e.getPoints(5 * this._boundaryDistanceTolerance)) }, Tg.prototype.isValidResult = function (t, e) { var n = Mg.isResultOfOp(e[0], e[1], t), r = !(n ^ e[2] === pl.INTERIOR); return r || this.reportResult(t, e, n), r }, Tg.prototype.getInvalidLocation = function () { return this._invalidLocation }, Tg.prototype.interfaces_ = function () { return [] }, Tg.prototype.getClass = function () { return Tg }, Tg.hasLocation = function (t, e) { for (var n = 0; n < 3; n++) if (t[n] === e) return !0; return !1 }, Tg.computeBoundaryDistanceTolerance = function (t, e) { return Math.min($f.computeSizeBasedSnapTolerance(t), $f.computeSizeBasedSnapTolerance(e)) }, Tg.isValid = function (t, e, n, r) { return new Tg(t, e, r).isValid(n) }, Ag.TOLERANCE.get = function () { return 1e-6 }, Object.defineProperties(Tg, Ag); var Dg = function t(e) { this._geomFactory = null, this._skipEmpty = !1, this._inputGeoms = null, this._geomFactory = t.extractFactory(e), this._inputGeoms = e }; Dg.prototype.extractElements = function (t, e) { if (null === t) return null; for (var n = 0; n < t.getNumGeometries(); n++) { var r = t.getGeometryN(n); this._skipEmpty && r.isEmpty() || e.add(r) } }, Dg.prototype.combine = function () { for (var t = new lc, e = this._inputGeoms.iterator(); e.hasNext();) { var n = e.next(); this.extractElements(n, t) } return 0 === t.size() ? null !== this._geomFactory ? this._geomFactory.createGeometryCollection(null) : null : this._geomFactory.buildGeometry(t) }, Dg.prototype.interfaces_ = function () { return [] }, Dg.prototype.getClass = function () { return Dg }, Dg.combine = function () { if (1 === arguments.length) { var t = arguments[0], e = new Dg(t); return e.combine() } if (2 === arguments.length) { var n = arguments[0], r = arguments[1], i = new Dg(Dg.createList(n, r)); return i.combine() } if (3 === arguments.length) { var o = arguments[0], s = arguments[1], a = arguments[2], u = new Dg(Dg.createList(o, s, a)); return u.combine() } }, Dg.extractFactory = function (t) { return t.isEmpty() ? null : t.iterator().next().getFactory() }, Dg.createList = function () { if (2 === arguments.length) { var t = arguments[0], e = arguments[1], n = new lc; return n.add(t), n.add(e), n } if (3 === arguments.length) { var r = arguments[0], i = arguments[1], o = arguments[2], s = new lc; return s.add(r), s.add(i), s.add(o), s } }; var Fg = function () { this._inputPolys = null, this._geomFactory = null; var t = arguments[0]; this._inputPolys = t, null === this._inputPolys && (this._inputPolys = new lc) }, kg = {STRTREE_NODE_CAPACITY: {configurable: !0}}; Fg.prototype.reduceToGeometries = function (t) { for (var e = new lc, n = t.iterator(); n.hasNext();) { var r = n.next(), i = null; gl(r, ac) ? i = this.unionTree(r) : r instanceof Wl && (i = r), e.add(i) } return e }, Fg.prototype.extractByEnvelope = function (t, e, n) { for (var r = new lc, i = 0; i < e.getNumGeometries(); i++) { var o = e.getGeometryN(i); o.getEnvelopeInternal().intersects(t) ? r.add(o) : n.add(o) } return this._geomFactory.buildGeometry(r) }, Fg.prototype.unionOptimized = function (t, e) { var n = t.getEnvelopeInternal(), r = e.getEnvelopeInternal(); if (!n.intersects(r)) return Dg.combine(t, e); if (t.getNumGeometries() <= 1 && e.getNumGeometries() <= 1) return this.unionActual(t, e); var i = n.intersection(r); return this.unionUsingEnvelopeIntersection(t, e, i) }, Fg.prototype.union = function () { if (null === this._inputPolys) throw new Error("union() method cannot be called twice"); if (this._inputPolys.isEmpty()) return null; this._geomFactory = this._inputPolys.iterator().next().getFactory(); for (var t = new up(Fg.STRTREE_NODE_CAPACITY), e = this._inputPolys.iterator(); e.hasNext();) { var n = e.next(); t.insert(n.getEnvelopeInternal(), n) } this._inputPolys = null; var r = t.itemsTree(); return this.unionTree(r) }, Fg.prototype.binaryUnion = function () { if (1 === arguments.length) { var t = arguments[0]; return this.binaryUnion(t, 0, t.size()) } if (3 === arguments.length) { var e = arguments[0], n = arguments[1], r = arguments[2]; if (r - n <= 1) { var i = Fg.getGeometry(e, n); return this.unionSafe(i, null) } if (r - n == 2) return this.unionSafe(Fg.getGeometry(e, n), Fg.getGeometry(e, n + 1)); var o = Math.trunc((r + n) / 2), s = this.binaryUnion(e, n, o), a = this.binaryUnion(e, o, r); return this.unionSafe(s, a) } }, Fg.prototype.repeatedUnion = function (t) { for (var e = null, n = t.iterator(); n.hasNext();) { var r = n.next(); e = null === e ? r.copy() : e.union(r) } return e }, Fg.prototype.unionSafe = function (t, e) { return null === t && null === e ? null : null === t ? e.copy() : null === e ? t.copy() : this.unionOptimized(t, e) }, Fg.prototype.unionActual = function (t, e) { return Fg.restrictToPolygons(t.union(e)) }, Fg.prototype.unionTree = function (t) { var e = this.reduceToGeometries(t); return this.binaryUnion(e) }, Fg.prototype.unionUsingEnvelopeIntersection = function (t, e, n) { var r = new lc, i = this.extractByEnvelope(n, t, r), o = this.extractByEnvelope(n, e, r), s = this.unionActual(i, o); return r.add(s), Dg.combine(r) }, Fg.prototype.bufferUnion = function () { if (1 === arguments.length) { var t = arguments[0], e = t.get(0).getFactory(), n = e.buildGeometry(t), r = n.buffer(0); return r } if (2 === arguments.length) { var i = arguments[0], o = arguments[1], s = i.getFactory(), a = s.createGeometryCollection([i, o]), u = a.buffer(0); return u } }, Fg.prototype.interfaces_ = function () { return [] }, Fg.prototype.getClass = function () { return Fg }, Fg.restrictToPolygons = function (t) { if (gl(t, $c)) return t; var e = Sf.getPolygons(t); return 1 === e.size() ? e.get(0) : t.getFactory().createMultiPolygon(_h.toPolygonArray(e)) }, Fg.getGeometry = function (t, e) { return e >= t.size() ? null : t.get(e) }, Fg.union = function (t) { return new Fg(t).union() }, kg.STRTREE_NODE_CAPACITY.get = function () { return 4 }, Object.defineProperties(Fg, kg); var Gg = function () { }; function qg() { return new Bg } function Bg() { this.reset() } Gg.prototype.interfaces_ = function () { return [] }, Gg.prototype.getClass = function () { return Gg }, Gg.union = function (t, e) { if (t.isEmpty() || e.isEmpty()) { if (t.isEmpty() && e.isEmpty()) return Mg.createEmptyResult(Mg.UNION, t, e, t.getFactory()); if (t.isEmpty()) return e.copy(); if (e.isEmpty()) return t.copy() } return t.checkNotGeometryCollection(t), t.checkNotGeometryCollection(e), ug.overlayOp(t, e, Mg.UNION) }, Bg.prototype = { constructor: Bg, reset: function () { this.s = this.t = 0 }, add: function (t) { jg(zg, t, this.t), jg(this, zg.s, this.s), this.s ? this.t += zg.t : this.s = zg.t }, valueOf: function () { return this.s } }; var zg = new Bg; function jg(t, e, n) { var r = t.s = e + n, i = r - e, o = r - i; t.t = e - o + (n - i) } var Ug = 1e-6, Vg = Math.PI, Xg = Vg / 2, Yg = Vg / 4, Hg = 2 * Vg, Wg = 180 / Vg, Jg = Vg / 180, Zg = Math.abs, Kg = Math.atan, Qg = Math.atan2, $g = Math.cos, td = Math.sin, ed = Math.sqrt; function nd(t) { return t > 1 ? 0 : t < -1 ? Vg : Math.acos(t) } function rd(t) { return t > 1 ? Xg : t < -1 ? -Xg : Math.asin(t) } function id() { } function od(t, e) { t && ad.hasOwnProperty(t.type) && ad[t.type](t, e) } var sd = { Feature: function (t, e) { od(t.geometry, e) }, FeatureCollection: function (t, e) { for (var n = t.features, r = -1, i = n.length; ++r < i;) od(n[r].geometry, e) } }, ad = { Sphere: function (t, e) { e.sphere() }, Point: function (t, e) { t = t.coordinates, e.point(t[0], t[1], t[2]) }, MultiPoint: function (t, e) { for (var n = t.coordinates, r = -1, i = n.length; ++r < i;) t = n[r], e.point(t[0], t[1], t[2]) }, LineString: function (t, e) { ud(t.coordinates, e, 0) }, MultiLineString: function (t, e) { for (var n = t.coordinates, r = -1, i = n.length; ++r < i;) ud(n[r], e, 0) }, Polygon: function (t, e) { ld(t.coordinates, e) }, MultiPolygon: function (t, e) { for (var n = t.coordinates, r = -1, i = n.length; ++r < i;) ld(n[r], e) }, GeometryCollection: function (t, e) { for (var n = t.geometries, r = -1, i = n.length; ++r < i;) od(n[r], e) } }; function ud(t, e, n) { var r, i = -1, o = t.length - n; for (e.lineStart(); ++i < o;) r = t[i], e.point(r[0], r[1], r[2]); e.lineEnd() } function ld(t, e) { var n = -1, r = t.length; for (e.polygonStart(); ++n < r;) ud(t[n], e, 1); e.polygonEnd() } qg(), qg(); function cd(t) { return [Qg(t[1], t[0]), rd(t[2])] } function hd(t) { var e = t[0], n = t[1], r = $g(n); return [r * $g(e), r * td(e), td(n)] } function pd(t, e) { return t[0] * e[0] + t[1] * e[1] + t[2] * e[2] } function fd(t, e) { return [t[1] * e[2] - t[2] * e[1], t[2] * e[0] - t[0] * e[2], t[0] * e[1] - t[1] * e[0]] } function gd(t, e) { t[0] += e[0], t[1] += e[1], t[2] += e[2] } function dd(t, e) { return [t[0] * e, t[1] * e, t[2] * e] } function yd(t) { var e = ed(t[0] * t[0] + t[1] * t[1] + t[2] * t[2]); t[0] /= e, t[1] /= e, t[2] /= e } qg(); function vd(t, e) { function n(n, r) { return n = t(n, r), e(n[0], n[1]) } return t.invert && e.invert && (n.invert = function (n, r) { return (n = e.invert(n, r)) && t.invert(n[0], n[1]) }), n } function _d(t, e) { return [t > Vg ? t - Hg : t < -Vg ? t + Hg : t, e] } function md(t) { return function (e, n) { return [(e += t) > Vg ? e - Hg : e < -Vg ? e + Hg : e, n] } } function xd(t) { var e = md(t); return e.invert = md(-t), e } function Ed(t, e) { var n = $g(t), r = td(t), i = $g(e), o = td(e); function s(t, e) { var s = $g(e), a = $g(t) * s, u = td(t) * s, l = td(e), c = l * n + a * r; return [Qg(u * i - c * o, a * n - l * r), rd(c * i + u * o)] } return s.invert = function (t, e) { var s = $g(e), a = $g(t) * s, u = td(t) * s, l = td(e), c = l * i - u * o; return [Qg(u * i + l * o, a * n + c * r), rd(c * n - a * r)] }, s } function bd(t, e) { (e = hd(e))[0] -= t, yd(e); var n = nd(-e[1]); return ((-e[2] < 0 ? -n : n) + Hg - Ug) % Hg } function wd() { var t, e = []; return { point: function (e, n) { t.push([e, n]) }, lineStart: function () { e.push(t = []) }, lineEnd: id, rejoin: function () { e.length > 1 && e.push(e.pop().concat(e.shift())) }, result: function () { var n = e; return e = [], t = null, n } } } function Id(t, e) { return Zg(t[0] - e[0]) < Ug && Zg(t[1] - e[1]) < Ug } function Nd(t, e, n, r) { this.x = t, this.z = e, this.o = n, this.e = r, this.v = !1, this.n = this.p = null } function Sd(t, e, n, r, i) { var o, s, a = [], u = []; if (t.forEach((function (t) { if (!((e = t.length - 1) <= 0)) { var e, n, r = t[0], s = t[e]; if (Id(r, s)) { for (i.lineStart(), o = 0; o < e; ++o) i.point((r = t[o])[0], r[1]); i.lineEnd() } else a.push(n = new Nd(r, t, null, !0)), u.push(n.o = new Nd(r, null, n, !1)), a.push(n = new Nd(s, t, null, !1)), u.push(n.o = new Nd(s, null, n, !0)) } })), a.length) { for (u.sort(e), Cd(a), Cd(u), o = 0, s = u.length; o < s; ++o) u[o].e = n = !n; for (var l, c, h = a[0]; ;) { for (var p = h, f = !0; p.v;) if ((p = p.n) === h) return; l = p.z, i.lineStart(); do { if (p.v = p.o.v = !0, p.e) { if (f) for (o = 0, s = l.length; o < s; ++o) i.point((c = l[o])[0], c[1]); else r(p.x, p.n.x, 1, i); p = p.n } else { if (f) for (l = p.p.z, o = l.length - 1; o >= 0; --o) i.point((c = l[o])[0], c[1]); else r(p.x, p.p.x, -1, i); p = p.p } l = (p = p.o).z, f = !f } while (!p.v); i.lineEnd() } } } function Cd(t) { if (e = t.length) { for (var e, n, r = 0, i = t[0]; ++r < e;) i.n = n = t[r], n.p = i, i = n; i.n = n = t[0], n.p = i } } function Pd(t, e) { return t < e ? -1 : t > e ? 1 : t >= e ? 0 : NaN } _d.invert = _d; var Md, Ld; 1 === (Md = Pd).length && (Ld = Md, Md = function (t, e) { return Pd(Ld(t), e) }); function Od(t) { for (var e, n, r, i = t.length, o = -1, s = 0; ++o < i;) s += t[o].length; for (n = new Array(s); --i >= 0;) for (e = (r = t[i]).length; --e >= 0;) n[--s] = r[e]; return n } var Rd = 1e9, Td = -Rd; function Ad(t, e, n, r) { function i(i, o) { return t <= i && i <= n && e <= o && o <= r } function o(i, o, a, l) { var c = 0, h = 0; if (null == i || (c = s(i, a)) !== (h = s(o, a)) || u(i, o) < 0 ^ a > 0) do { l.point(0 === c || 3 === c ? t : n, c > 1 ? r : e) } while ((c = (c + a + 4) % 4) !== h); else l.point(o[0], o[1]) } function s(r, i) { return Zg(r[0] - t) < Ug ? i > 0 ? 0 : 3 : Zg(r[0] - n) < Ug ? i > 0 ? 2 : 1 : Zg(r[1] - e) < Ug ? i > 0 ? 1 : 0 : i > 0 ? 3 : 2 } function a(t, e) { return u(t.x, e.x) } function u(t, e) { var n = s(t, 1), r = s(e, 1); return n !== r ? n - r : 0 === n ? e[1] - t[1] : 1 === n ? t[0] - e[0] : 2 === n ? t[1] - e[1] : e[0] - t[0] } return function (s) { var u, l, c, h, p, f, g, d, y, v, _, m = s, x = wd(), E = { point: b, lineStart: function () { E.point = w, l && l.push(c = []); v = !0, y = !1, g = d = NaN }, lineEnd: function () { u && (w(h, p), f && y && x.rejoin(), u.push(x.result())); E.point = b, y && m.lineEnd() }, polygonStart: function () { m = x, u = [], l = [], _ = !0 }, polygonEnd: function () { var e = function () { for (var e = 0, n = 0, i = l.length; n < i; ++n) for (var o, s, a = l[n], u = 1, c = a.length, h = a[0], p = h[0], f = h[1]; u < c; ++u) o = p, s = f, p = (h = a[u])[0], f = h[1], s <= r ? f > r && (p - o) * (r - s) > (f - s) * (t - o) && ++e : f <= r && (p - o) * (r - s) < (f - s) * (t - o) && --e; return e }(), n = _ && e, i = (u = Od(u)).length; (n || i) && (s.polygonStart(), n && (s.lineStart(), o(null, null, 1, s), s.lineEnd()), i && Sd(u, a, e, o, s), s.polygonEnd()); m = s, u = l = c = null } }; function b(t, e) { i(t, e) && m.point(t, e) } function w(o, s) { var a = i(o, s); if (l && c.push([o, s]), v) h = o, p = s, f = a, v = !1, a && (m.lineStart(), m.point(o, s)); else if (a && y) m.point(o, s); else { var u = [g = Math.max(Td, Math.min(Rd, g)), d = Math.max(Td, Math.min(Rd, d))], x = [o = Math.max(Td, Math.min(Rd, o)), s = Math.max(Td, Math.min(Rd, s))]; !function (t, e, n, r, i, o) { var s, a = t[0], u = t[1], l = 0, c = 1, h = e[0] - a, p = e[1] - u; if (s = n - a, h || !(s > 0)) { if (s /= h, h < 0) { if (s < l) return; s < c && (c = s) } else if (h > 0) { if (s > c) return; s > l && (l = s) } if (s = i - a, h || !(s < 0)) { if (s /= h, h < 0) { if (s > c) return; s > l && (l = s) } else if (h > 0) { if (s < l) return; s < c && (c = s) } if (s = r - u, p || !(s > 0)) { if (s /= p, p < 0) { if (s < l) return; s < c && (c = s) } else if (p > 0) { if (s > c) return; s > l && (l = s) } if (s = o - u, p || !(s < 0)) { if (s /= p, p < 0) { if (s > c) return; s > l && (l = s) } else if (p > 0) { if (s < l) return; s < c && (c = s) } return l > 0 && (t[0] = a + l * h, t[1] = u + l * p), c < 1 && (e[0] = a + c * h, e[1] = u + c * p), !0 } } } } }(u, x, t, e, n, r) ? a && (m.lineStart(), m.point(o, s), _ = !1) : (y || (m.lineStart(), m.point(u[0], u[1])), m.point(x[0], x[1]), a || m.lineEnd(), _ = !1) } g = o, d = s, y = a } return E } } var Dd = qg(); qg(); function Fd(t) { return t } qg(), qg(); var kd = 1 / 0, Gd = kd, qd = -kd, Bd = qd, zd = { point: function (t, e) { t < kd && (kd = t); t > qd && (qd = t); e < Gd && (Gd = e); e > Bd && (Bd = e) }, lineStart: id, lineEnd: id, polygonStart: id, polygonEnd: id, result: function () { var t = [ [kd, Gd], [qd, Bd] ]; return qd = Bd = -(Gd = kd = 1 / 0), t } }; qg(); function jd(t, e, n, r) { return function (i, o) { var s, a, u, l = e(o), c = i.invert(r[0], r[1]), h = wd(), p = e(h), f = !1, g = { point: d, lineStart: v, lineEnd: _, polygonStart: function () { g.point = m, g.lineStart = x, g.lineEnd = E, a = [], s = [] }, polygonEnd: function () { g.point = d, g.lineStart = v, g.lineEnd = _, a = Od(a); var t = function (t, e) { var n = e[0], r = e[1], i = [td(n), -$g(n), 0], o = 0, s = 0; Dd.reset(); for (var a = 0, u = t.length; a < u; ++a) if (c = (l = t[a]).length) for (var l, c, h = l[c - 1], p = h[0], f = h[1] / 2 + Yg, g = td(f), d = $g(f), y = 0; y < c; ++y, p = _, g = x, d = E, h = v) { var v = l[y], _ = v[0], m = v[1] / 2 + Yg, x = td(m), E = $g(m), b = _ - p, w = b >= 0 ? 1 : -1, I = w * b, N = I > Vg, S = g * x; if (Dd.add(Qg(S * w * td(I), d * E + S * $g(I))), o += N ? b + w * Hg : b, N ^ p >= n ^ _ >= n) { var C = fd(hd(h), hd(v)); yd(C); var P = fd(i, C); yd(P); var M = (N ^ b >= 0 ? -1 : 1) * rd(P[2]); (r > M || r === M && (C[0] || C[1])) && (s += N ^ b >= 0 ? 1 : -1) } } return (o < -1e-6 || o < Ug && Dd < -1e-6) ^ 1 & s }(s, c); a.length ? (f || (o.polygonStart(), f = !0), Sd(a, Vd, t, n, o)) : t && (f || (o.polygonStart(), f = !0), o.lineStart(), n(null, null, 1, o), o.lineEnd()), f && (o.polygonEnd(), f = !1), a = s = null }, sphere: function () { o.polygonStart(), o.lineStart(), n(null, null, 1, o), o.lineEnd(), o.polygonEnd() } }; function d(e, n) { var r = i(e, n); t(e = r[0], n = r[1]) && o.point(e, n) } function y(t, e) { var n = i(t, e); l.point(n[0], n[1]) } function v() { g.point = y, l.lineStart() } function _() { g.point = d, l.lineEnd() } function m(t, e) { u.push([t, e]); var n = i(t, e); p.point(n[0], n[1]) } function x() { p.lineStart(), u = [] } function E() { m(u[0][0], u[0][1]), p.lineEnd(); var t, e, n, r, i = p.clean(), l = h.result(), c = l.length; if (u.pop(), s.push(u), u = null, c) if (1 & i) { if ((e = (n = l[0]).length - 1) > 0) { for (f || (o.polygonStart(), f = !0), o.lineStart(), t = 0; t < e; ++t) o.point((r = n[t])[0], r[1]); o.lineEnd() } } else c > 1 && 2 & i && l.push(l.pop().concat(l.shift())), a.push(l.filter(Ud)) } return g } } function Ud(t) { return t.length > 1 } function Vd(t, e) { return ((t = t.x)[0] < 0 ? t[1] - Xg - Ug : Xg - t[1]) - ((e = e.x)[0] < 0 ? e[1] - Xg - Ug : Xg - e[1]) } var Xd = jd((function () { return !0 }), (function (t) { var e, n = NaN, r = NaN, i = NaN; return { lineStart: function () { t.lineStart(), e = 1 }, point: function (o, s) { var a = o > 0 ? Vg : -Vg, u = Zg(o - n); Zg(u - Vg) < Ug ? (t.point(n, r = (r + s) / 2 > 0 ? Xg : -Xg), t.point(i, r), t.lineEnd(), t.lineStart(), t.point(a, r), t.point(o, r), e = 0) : i !== a && u >= Vg && (Zg(n - i) < Ug && (n -= i * Ug), Zg(o - a) < Ug && (o -= a * Ug), r = function (t, e, n, r) { var i, o, s = td(t - n); return Zg(s) > Ug ? Kg((td(e) * (o = $g(r)) * td(n) - td(r) * (i = $g(e)) * td(t)) / (i * o * s)) : (e + r) / 2 }(n, r, o, s), t.point(i, r), t.lineEnd(), t.lineStart(), t.point(a, r), e = 0), t.point(n = o, r = s), i = a }, lineEnd: function () { t.lineEnd(), n = r = NaN }, clean: function () { return 2 - e } } }), (function (t, e, n, r) { var i; if (null == t) i = n * Xg, r.point(-Vg, i), r.point(0, i), r.point(Vg, i), r.point(Vg, 0), r.point(Vg, -i), r.point(0, -i), r.point(-Vg, -i), r.point(-Vg, 0), r.point(-Vg, i); else if (Zg(t[0] - e[0]) > Ug) { var o = t[0] < e[0] ? Vg : -Vg; i = n * o / 2, r.point(-o, i), r.point(0, i), r.point(o, i) } else r.point(e[0], e[1]) }), [-Vg, -Xg]); function Yd(t, e) { var n = $g(t), r = n > 0, i = Zg(n) > Ug; function o(t, e) { return $g(t) * $g(e) > n } function s(t, e, r) { var i = [1, 0, 0], o = fd(hd(t), hd(e)), s = pd(o, o), a = o[0], u = s - a * a; if (!u) return !r && t; var l = n * s / u, c = -n * a / u, h = fd(i, o), p = dd(i, l); gd(p, dd(o, c)); var f = h, g = pd(p, f), d = pd(f, f), y = g * g - d * (pd(p, p) - 1); if (!(y < 0)) { var v = ed(y), _ = dd(f, (-g - v) / d); if (gd(_, p), _ = cd(_), !r) return _; var m, x = t[0], E = e[0], b = t[1], w = e[1]; E < x && (m = x, x = E, E = m); var I = E - x, N = Zg(I - Vg) < Ug; if (!N && w < b && (m = b, b = w, w = m), N || I < Ug ? N ? b + w > 0 ^ _[1] < (Zg(_[0] - x) < Ug ? b : w) : b <= _[1] && _[1] <= w : I > Vg ^ (x <= _[0] && _[0] <= E)) { var S = dd(f, (-g + v) / d); return gd(S, p), [_, cd(S)] } } } function a(e, n) { var i = r ? t : Vg - t, o = 0; return e < -i ? o |= 1 : e > i && (o |= 2), n < -i ? o |= 4 : n > i && (o |= 8), o } return jd(o, (function (t) { var e, n, u, l, c; return { lineStart: function () { l = u = !1, c = 1 }, point: function (h, p) { var f, g = [h, p], d = o(h, p), y = r ? d ? 0 : a(h, p) : d ? a(h + (h < 0 ? Vg : -Vg), p) : 0; if (!e && (l = u = d) && t.lineStart(), d !== u && (!(f = s(e, g)) || Id(e, f) || Id(g, f)) && (g[0] += Ug, g[1] += Ug, d = o(g[0], g[1])), d !== u) c = 0, d ? (t.lineStart(), f = s(g, e), t.point(f[0], f[1])) : (f = s(e, g), t.point(f[0], f[1]), t.lineEnd()), e = f; else if (i && e && r ^ d) { var v; y & n || !(v = s(g, e, !0)) || (c = 0, r ? (t.lineStart(), t.point(v[0][0], v[0][1]), t.point(v[1][0], v[1][1]), t.lineEnd()) : (t.point(v[1][0], v[1][1]), t.lineEnd(), t.lineStart(), t.point(v[0][0], v[0][1]))) } !d || e && Id(e, g) || t.point(g[0], g[1]), e = g, u = d, n = y }, lineEnd: function () { u && t.lineEnd(), e = null }, clean: function () { return c | (l && u) << 1 } } }), (function (n, r, i, o) { !function (t, e, n, r, i, o) { if (n) { var s = $g(e), a = td(e), u = r * n; null == i ? (i = e + r * Hg, o = e - u / 2) : (i = bd(s, i), o = bd(s, o), (r > 0 ? i < o : i > o) && (i += r * Hg)); for (var l, c = i; r > 0 ? c > o : c < o; c -= u) l = cd([s, -a * $g(c), -a * td(c)]), t.point(l[0], l[1]) } }(o, t, e, i, n, r) }), r ? [0, -t] : [-Vg, t - Vg]) } function Hd(t) { return function (e) { var n = new Wd; for (var r in t) n[r] = t[r]; return n.stream = e, n } } function Wd() { } function Jd(t, e, n) { var r = e[1][0] - e[0][0], i = e[1][1] - e[0][1], o = t.clipExtent && t.clipExtent(); t.scale(150).translate([0, 0]), null != o && t.clipExtent(null), function (t, e) { t && sd.hasOwnProperty(t.type) ? sd[t.type](t, e) : od(t, e) }(n, t.stream(zd)); var s = zd.result(), a = Math.min(r / (s[1][0] - s[0][0]), i / (s[1][1] - s[0][1])), u = +e[0][0] + (r - a * (s[1][0] + s[0][0])) / 2, l = +e[0][1] + (i - a * (s[1][1] + s[0][1])) / 2; return null != o && t.clipExtent(o), t.scale(150 * a).translate([u, l]) } Wd.prototype = { constructor: Wd, point: function (t, e) { this.stream.point(t, e) }, sphere: function () { this.stream.sphere() }, lineStart: function () { this.stream.lineStart() }, lineEnd: function () { this.stream.lineEnd() }, polygonStart: function () { this.stream.polygonStart() }, polygonEnd: function () { this.stream.polygonEnd() } }; var Zd = $g(30 * Jg); function Kd(t, e) { return +e ? function (t, e) { function n(r, i, o, s, a, u, l, c, h, p, f, g, d, y) { var v = l - r, _ = c - i, m = v * v + _ * _; if (m > 4 * e && d--) { var x = s + p, E = a + f, b = u + g, w = ed(x * x + E * E + b * b), I = rd(b /= w), N = Zg(Zg(b) - 1) < Ug || Zg(o - h) < Ug ? (o + h) / 2 : Qg(E, x), S = t(N, I), C = S[0], P = S[1], M = C - r, L = P - i, O = _ * M - v * L; (O * O / m > e || Zg((v * M + _ * L) / m - .5) > .3 || s * p + a * f + u * g < Zd) && (n(r, i, o, s, a, u, C, P, N, x /= w, E /= w, b, d, y), y.point(C, P), n(C, P, N, x, E, b, l, c, h, p, f, g, d, y)) } } return function (e) { var r, i, o, s, a, u, l, c, h, p, f, g, d = { point: y, lineStart: v, lineEnd: m, polygonStart: function () { e.polygonStart(), d.lineStart = x }, polygonEnd: function () { e.polygonEnd(), d.lineStart = v } }; function y(n, r) { n = t(n, r), e.point(n[0], n[1]) } function v() { c = NaN, d.point = _, e.lineStart() } function _(r, i) { var o = hd([r, i]), s = t(r, i); n(c, h, l, p, f, g, c = s[0], h = s[1], l = r, p = o[0], f = o[1], g = o[2], 16, e), e.point(c, h) } function m() { d.point = y, e.lineEnd() } function x() { v(), d.point = E, d.lineEnd = b } function E(t, e) { _(r = t, e), i = c, o = h, s = p, a = f, u = g, d.point = _ } function b() { n(c, h, l, p, f, g, i, o, r, s, a, u, 16, e), d.lineEnd = m, m() } return d } }(t, e) : function (t) { return Hd({ point: function (e, n) { e = t(e, n), this.stream.point(e[0], e[1]) } }) }(t) } var Qd = Hd({ point: function (t, e) { this.stream.point(t * Jg, e * Jg) } }); function $d(t) { return function (t) { var e, n, r, i, o, s, a, u, l, c, h = 150, p = 480, f = 250, g = 0, d = 0, y = 0, v = 0, _ = 0, m = null, x = Xd, E = null, b = Fd, w = .5, I = Kd(C, w); function N(t) { return [(t = o(t[0] * Jg, t[1] * Jg))[0] * h + n, r - t[1] * h] } function S(t) { return (t = o.invert((t[0] - n) / h, (r - t[1]) / h)) && [t[0] * Wg, t[1] * Wg] } function C(t, i) { return [(t = e(t, i))[0] * h + n, r - t[1] * h] } function P() { o = vd(i = function (t, e, n) { return (t %= Hg) ? e || n ? vd(xd(t), Ed(e, n)) : xd(t) : e || n ? Ed(e, n) : _d }(y, v, _), e); var t = e(g, d); return n = p - t[0] * h, r = f + t[1] * h, M() } function M() { return l = c = null, N } return N.stream = function (t) { return l && c === t ? l : l = Qd(x(i, I(b(c = t)))) }, N.clipAngle = function (t) { return arguments.length ? (x = +t ? Yd(m = t * Jg, 6 * Jg) : (m = null, Xd), M()) : m * Wg }, N.clipExtent = function (t) { return arguments.length ? (b = null == t ? (E = s = a = u = null, Fd) : Ad(E = +t[0][0], s = +t[0][1], a = +t[1][0], u = +t[1][1]), M()) : null == E ? null : [ [E, s], [a, u] ] }, N.scale = function (t) { return arguments.length ? (h = +t, P()) : h }, N.translate = function (t) { return arguments.length ? (p = +t[0], f = +t[1], P()) : [p, f] }, N.center = function (t) { return arguments.length ? (g = t[0] % 360 * Jg, d = t[1] % 360 * Jg, P()) : [g * Wg, d * Wg] }, N.rotate = function (t) { return arguments.length ? (y = t[0] % 360 * Jg, v = t[1] % 360 * Jg, _ = t.length > 2 ? t[2] % 360 * Jg : 0, P()) : [y * Wg, v * Wg, _ * Wg] }, N.precision = function (t) { return arguments.length ? (I = Kd(C, w = t * t), M()) : ed(w) }, N.fitExtent = function (t, e) { return Jd(N, t, e) }, N.fitSize = function (t, e) { return function (t, e, n) { return Jd(t, [ [0, 0], e ], n) }(N, t, e) }, function () { return e = t.apply(this, arguments), N.invert = e.invert && S, P() } }((function () { return t }))() } var ty = function (t) { return function (e, n) { var r = $g(e), i = $g(n), o = t(r * i); return [o * i * td(e), o * td(n)] } }((function (t) { return (t = nd(t)) && t / td(t) })); function ey() { return $d(ty).scale(79.4188).clipAngle(179.999) } function ny(t, n, r, i) { var s = t.properties || {}, a = "Feature" === t.type ? t.geometry : t; if ("GeometryCollection" === a.type) { var u = []; return q(t, (function (t) { var e = ny(t, n, r, i); e && u.push(e) })), f(u) } var l = function (t) { var n = xn(t).geometry.coordinates, r = [-n[0], -n[1]]; return ey().rotate(r).scale(e) }(a), c = {type: a.type, coordinates: iy(a.coordinates, l)}, h = (new Ih).read(c), p = m(x(n, r), "meters"), g = _f.bufferOp(h, p, i); if (!ry((g = (new Nh).write(g)).coordinates)) return o({type: g.type, coordinates: oy(g.coordinates, l)}, s) } function ry(t) { return Array.isArray(t[0]) ? ry(t[0]) : isNaN(t[0]) } function iy(t, e) { return "object" != typeof t[0] ? e(t) : t.map((function (t) { return iy(t, e) })) } function oy(t, e) { return "object" != typeof t[0] ? e.invert(t) : t.map((function (t) { return oy(t, e) })) } function sy(t, e, n) { void 0 === n && (n = {}); var r = rt(t), i = rt(e), o = $u.intersection(r.coordinates, i.coordinates); return 0 === o.length ? null : 1 === o.length ? l(o[0], n.properties) : y(o, n.properties) } function ay(t, e, n) { void 0 === n && (n = {}); var r = JSON.stringify(n.properties || {}), i = t[0], o = t[1], s = t[2], a = t[3], u = (o + a) / 2, l = (i + s) / 2, c = 2 * e / me([i, u], [s, u], n) * (s - i), h = 2 * e / me([l, o], [l, a], n) * (a - o), p = c / 2, g = 2 * p, d = Math.sqrt(3) / 2 * h, y = s - i, v = a - o, _ = 3 / 4 * g, m = d, x = (y - g) / (g - p / 2), E = Math.floor(x), b = (E * _ - p / 2 - y) / 2 - p / 2 + _ / 2, w = Math.floor((v - d) / d), I = (v - w * d) / 2, N = w * d - v > d / 2; N && (I -= d / 4); for (var S = [], C = [], P = 0; P < 6; P++) { var M = 2 * Math.PI / 6 * P; S.push(Math.cos(M)), C.push(Math.sin(M)) } for (var L = [], O = 0; O <= E; O++) for (var R = 0; R <= w; R++) { var T = O % 2 == 1; if ((0 !== R || !T) && (0 !== R || !N)) { var A = O * _ + i - b, D = R * m + o + I; if (T && (D -= d / 2), !0 === n.triangles) ly([A, D], c / 2, h / 2, JSON.parse(r), S, C).forEach((function (t) { n.mask ? sy(n.mask, t) && L.push(t) : L.push(t) })); else { var F = uy([A, D], c / 2, h / 2, JSON.parse(r), S, C); n.mask ? sy(n.mask, F) && L.push(F) : L.push(F) } } } return f(L) } function uy(t, e, n, r, i, o) { for (var s = [], a = 0; a < 6; a++) { var u = t[0] + e * i[a], c = t[1] + n * o[a]; s.push([u, c]) } return s.push(s[0].slice()), l([s], r) } function ly(t, e, n, r, i, o) { for (var s = [], a = 0; a < 6; a++) { var u = []; u.push(t), u.push([t[0] + e * i[a], t[1] + n * o[a]]), u.push([t[0] + e * i[(a + 1) % 6], t[1] + n * o[(a + 1) % 6]]), u.push(t), s.push(l([u], r)) } return s } function cy(t) { return y(t) } function hy(t) { return l(t && t.geometry.coordinates || [ [ [180, 90], [-180, 90], [-180, -90], [180, -90], [180, 90] ] ]) } function py(t, e, n) { return void 0 === n && (n = {}), function (t, e, n, r) { void 0 === r && (r = {}); for (var i = [], o = t[0], s = t[1], a = t[2], u = t[3], c = e / me([o, s], [a, s], r) * (a - o), h = n / me([o, s], [o, u], r) * (u - s), p = a - o, g = u - s, d = Math.floor(p / c), y = Math.floor(g / h), v = (g - y * h) / 2, _ = o + (p - d * c) / 2, m = 0; m < d; m++) { for (var x = s + v, E = 0; E < y; E++) { var b = l([ [ [_, x], [_, x + h], [_ + c, x + h], [_ + c, x], [_, x] ] ], r.properties); r.mask ? Ps(r.mask, b) && i.push(b) : i.push(b), x += h } _ += c } return f(i) }(t, e, e, n) } function fy(t, e, n) { void 0 === n && (n = {}); for (var r = [], i = e / me([t[0], t[1]], [t[2], t[1]], n) * (t[2] - t[0]), o = e / me([t[0], t[1]], [t[0], t[3]], n) * (t[3] - t[1]), s = 0, a = t[0]; a <= t[2];) { for (var u = 0, c = t[1]; c <= t[3];) { var h = null, p = null; s % 2 == 0 && u % 2 == 0 ? (h = l([ [ [a, c], [a, c + o], [a + i, c], [a, c] ] ], n.properties), p = l([ [ [a, c + o], [a + i, c + o], [a + i, c], [a, c + o] ] ], n.properties)) : s % 2 == 0 && u % 2 == 1 ? (h = l([ [ [a, c], [a + i, c + o], [a + i, c], [a, c] ] ], n.properties), p = l([ [ [a, c], [a, c + o], [a + i, c + o], [a, c] ] ], n.properties)) : u % 2 == 0 && s % 2 == 1 ? (h = l([ [ [a, c], [a, c + o], [a + i, c + o], [a, c] ] ], n.properties), p = l([ [ [a, c], [a + i, c + o], [a + i, c], [a, c] ] ], n.properties)) : u % 2 == 1 && s % 2 == 1 && (h = l([ [ [a, c], [a, c + o], [a + i, c], [a, c] ] ], n.properties), p = l([ [ [a, c + o], [a + i, c + o], [a + i, c], [a, c + o] ] ], n.properties)), n.mask ? (sy(n.mask, h) && r.push(h), sy(n.mask, p) && r.push(p)) : (r.push(h), r.push(p)), c += o, u++ } s++, a += i } return f(r) } ty.invert = function (t) { return function (e, n) { var r = ed(e * e + n * n), i = t(r), o = td(i), s = $g(i); return [Qg(e * o, r * s), rd(r && n * o / r)] } }((function (t) { return t })), t.along = function (t, e, n) { void 0 === n && (n = {}); for (var r = rt(t).coordinates, i = 0, o = 0; o < r.length && !(e >= i && o === r.length - 1); o++) { if (i >= e) { var s = e - i; if (s) { var u = mn(r[o], r[o - 1]) - 180; return vn(r[o], s, u, n) } return a(r[o]) } i += me(r[o], r[o + 1], n) } return a(r[r.length - 1]) }, t.angle = function (t, e, n, r) { if (void 0 === r && (r = {}), !P(r)) throw new Error("options is invalid"); if (!t) throw new Error("startPoint is required"); if (!e) throw new Error("midPoint is required"); if (!n) throw new Error("endPoint is required"); var i = t, o = e, s = n, a = b(!0 !== r.mercator ? mn(i, o) : Bi(i, o)), u = b(!0 !== r.mercator ? mn(s, o) : Bi(s, o)), l = Math.abs(a - u); return !0 === r.explementary ? 360 - l : l }, t.applyFilter = uu, t.area = jr, t.areaFactors = i, t.bbox = Z, t.bboxClip = function (t, e) { var n = rt(t), r = n.type, i = "Feature" === t.type ? t.properties : {}, o = n.coordinates; switch (r) { case "LineString": case "MultiLineString": var s = []; return "LineString" === r && (o = [o]), o.forEach((function (t) { !function (t, e, n) { var r, i, o, s, a, u = t.length, l = Ri(t[0], e), c = []; for (n || (n = []), r = 1; r < u; r++) { for (s = t[r - 1], i = o = Ri(a = t[r], e); ;) { if (!(l | i)) { c.push(s), i !== o ? (c.push(a), r < u - 1 && (n.push(c), c = [])) : r === u - 1 && c.push(a); break } if (l & i) break; l ? l = Ri(s = Oi(s, a, l, e), e) : i = Ri(a = Oi(s, a, i, e), e) } l = o } c.length && n.push(c) }(t, e, s) })), 1 === s.length ? h(s[0], i) : g(s, i); case "Polygon": return l(Ti(o, e), i); case "MultiPolygon": return y(o.map((function (t) { return Ti(t, e) })), i); default: throw new Error("geometry " + r + " not supported") } }, t.bboxPolygon = gn, t.bearing = mn, t.bearingToAngle = b, t.bearingToAzimuth = b, t.bezier = fn, t.bezierSpline = fn, t.booleanClockwise = Yi, t.booleanContains = function (t, e) { var n = rt(t), r = rt(e), i = n.type, o = r.type, s = n.coordinates, a = r.coordinates; switch (i) { case "Point": switch (o) { case "Point": return vs(s, a); default: throw new Error("feature2 " + o + " geometry not supported") } case "MultiPoint": switch (o) { case "Point": return function (t, e) { var n, r = !1; for (n = 0; n < t.coordinates.length; n++) if (vs(t.coordinates[n], e.coordinates)) { r = !0; break } return r }(n, r); case "MultiPoint": return function (t, e) { for (var n = 0, r = e.coordinates; n < r.length; n++) { for (var i = r[n], o = !1, s = 0, a = t.coordinates; s < a.length; s++) { if (vs(i, a[s])) { o = !0; break } } if (!o) return !1 } return !0 }(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } case "LineString": switch (o) { case "Point": return Wr(r, n, {ignoreEndVertices: !0}); case "LineString": return function (t, e) { for (var n = !1, r = 0, i = e.coordinates; r < i.length; r++) { var o = i[r]; if (Wr({type: "Point", coordinates: o}, t, {ignoreEndVertices: !0}) && (n = !0), !Wr({ type: "Point", coordinates: o }, t, {ignoreEndVertices: !1})) return !1 } return n }(n, r); case "MultiPoint": return function (t, e) { for (var n = !1, r = 0, i = e.coordinates; r < i.length; r++) { var o = i[r]; if (Wr(o, t, {ignoreEndVertices: !0}) && (n = !0), !Wr(o, t)) return !1 } if (n) return !0; return !1 }(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } case "Polygon": switch (o) { case "Point": return ye(r, n, {ignoreBoundary: !0}); case "LineString": return function (t, e) { var n = !1, r = 0, i = Z(t), o = Z(e); if (!ys(i, o)) return !1; for (; r < e.coordinates.length - 1; r++) { if (ye({ type: "Point", coordinates: _s(e.coordinates[r], e.coordinates[r + 1]) }, t, {ignoreBoundary: !0})) { n = !0; break } } return n }(n, r); case "Polygon": return function (t, e) { if ("Feature" === t.type && null === t.geometry) return !1; if ("Feature" === e.type && null === e.geometry) return !1; var n = Z(t), r = Z(e); if (!ys(n, r)) return !1; for (var i = rt(e).coordinates, o = 0, s = i; o < s.length; o++) for (var a = 0, u = s[o]; a < u.length; a++) { if (!ye(u[a], t)) return !1 } return !0 }(n, r); case "MultiPoint": return function (t, e) { for (var n = 0, r = e.coordinates; n < r.length; n++) { if (!ye(r[n], t, {ignoreBoundary: !0})) return !1 } return !0 }(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } default: throw new Error("feature1 " + i + " geometry not supported") } }, t.booleanCrosses = function (t, e) { var n = rt(t), r = rt(e), i = n.type, o = r.type; switch (i) { case "MultiPoint": switch (o) { case "LineString": return ms(n, r); case "Polygon": return Es(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } case "LineString": switch (o) { case "MultiPoint": return ms(r, n); case "LineString": return function (t, e) { if (Or(t, e).features.length > 0) for (var n = 0; n < t.coordinates.length - 1; n++) for (var r = 0; r < e.coordinates.length - 1; r++) { var i = !0; if (0 !== r && r !== e.coordinates.length - 2 || (i = !1), bs(t.coordinates[n], t.coordinates[n + 1], e.coordinates[r], i)) return !0 } return !1 }(n, r); case "Polygon": return xs(n, r); default: throw new Error("feature2 " + o + " geometry not supported") } case "Polygon": switch (o) { case "MultiPoint": return Es(r, n); case "LineString": return xs(r, n); default: throw new Error("feature2 " + o + " geometry not supported") } default: throw new Error("feature1 " + i + " geometry not supported") } }, t.booleanDisjoint = ps, t.booleanEqual = function (t, e) { return rt(t).type === rt(e).type && new Cs({precision: 6}).compare(tn(t), tn(e)) }, t.booleanIntersects = Ps, t.booleanOverlap = function (t, e) { var n = rt(t), r = rt(e), i = n.type, o = r.type; if ("MultiPoint" === i && "MultiPoint" !== o || ("LineString" === i || "MultiLineString" === i) && "LineString" !== o && "MultiLineString" !== o || ("Polygon" === i || "MultiPolygon" === i) && "Polygon" !== o && "MultiPolygon" !== o) throw new Error("features must be of the same type"); if ("Point" === i) throw new Error("Point geometry not supported"); if (new Cs({precision: 6}).compare(t, e)) return !1; var s = 0; switch (i) { case "MultiPoint": for (var a = 0; a < n.coordinates.length; a++) for (var u = 0; u < r.coordinates.length; u++) { var l = n.coordinates[a], c = r.coordinates[u]; if (l[0] === c[0] && l[1] === c[1]) return !0 } return !1; case "LineString": case "MultiLineString": U(t, (function (t) { U(e, (function (e) { ki(t, e).features.length && s++ })) })); break; case "Polygon": case "MultiPolygon": U(t, (function (t) { U(e, (function (e) { Or(t, e).features.length && s++ })) })) } return s > 0 }, t.booleanParallel = function (t, e) { if (!t) throw new Error("line1 is required"); if (!e) throw new Error("line2 is required"); if ("LineString" !== Us(t, "line1")) throw new Error("line1 must be a LineString"); if ("LineString" !== Us(e, "line2")) throw new Error("line2 must be a LineString"); for (var n = Zn(tn(t)).features, r = Zn(tn(e)).features, i = 0; i < n.length; i++) { var o = n[i].geometry.coordinates; if (!r[i]) break; if (!js(o, r[i].geometry.coordinates)) return !1 } return !0 }, t.booleanPointInPolygon = ye, t.booleanPointOnLine = Wr, t.booleanWithin = Zr, t.buffer = function (t, e, n) { var r = (n = n || {}).units || "kilometers", i = n.steps || 8; if (!t) throw new Error("geojson is required"); if ("object" != typeof n) throw new Error("options must be an object"); if ("number" != typeof i) throw new Error("steps must be an number"); if (void 0 === e) throw new Error("radius is required"); if (i <= 0) throw new Error("steps must be greater than 0"); var o = []; switch (t.type) { case "GeometryCollection": return q(t, (function (t) { var n = ny(t, e, r, i); n && o.push(n) })), f(o); case "FeatureCollection": return F(t, (function (t) { var n = ny(t, e, r, i); n && F(n, (function (t) { t && o.push(t) })) })), f(o) } return ny(t, e, r, i) }, t.center = xn, t.centerMean = Fa, t.centerMedian = function (t, e) { if (void 0 === e && (e = {}), !P(e = e || {})) throw new Error("options is invalid"); var n = e.counter || 10; if (!C(n)) throw new Error("counter must be a number"); var r = e.weight, i = Fa(t, {weight: e.weight}), o = f([]); F(t, (function (t) { var e; o.features.push(En(t, {properties: {weight: null === (e = t.properties) || void 0 === e ? void 0 : e[r]}})) })); var s = {tolerance: e.tolerance, medianCandidates: []}; return ka(i.geometry.coordinates, [0, 0], o, s, n) }, t.centerOfMass = function t(e, n) { switch (void 0 === n && (n = {}), it(e)) { case "Point": return a(K(e), n.properties); case "Polygon": var r = []; R(e, (function (t) { r.push(t) })); var i, o, s, u, l, c, h, p, f = En(e, {properties: n.properties}), g = f.geometry.coordinates, d = 0, y = 0, v = 0, _ = r.map((function (t) { return [t[0] - g[0], t[1] - g[1]] })); for (i = 0; i < r.length - 1; i++) u = (o = _[i])[0], c = o[1], l = (s = _[i + 1])[0], v += p = u * (h = s[1]) - l * c, d += (u + l) * p, y += (c + h) * p; if (0 === v) return f; var m = 1 / (6 * (.5 * v)); return a([g[0] + m * d, g[1] + m * y], n.properties); default: var x = de(e); return x ? t(x, {properties: n.properties}) : En(e, {properties: n.properties}) } }, t.centroid = En, t.circle = _n, t.cleanCoords = tn, t.clone = Ie, t.clusterEach = ou, t.clusterReduce = su, t.clusters = hu, t.clustersDbscan = function (t, e, n) { void 0 === n && (n = {}), !0 !== n.mutate && (t = Ie(t)), n.minPoints = n.minPoints || 3; var r = new Ts.DBSCAN, i = r.run(G(t), N(e, n.units), n.minPoints, me), o = -1; return i.forEach((function (e) { o++, e.forEach((function (e) { var n = t.features[e]; n.properties || (n.properties = {}), n.properties.cluster = o, n.properties.dbscan = "core" })) })), r.noise.forEach((function (e) { var n = t.features[e]; n.properties || (n.properties = {}), n.properties.cluster ? n.properties.dbscan = "edge" : n.properties.dbscan = "noise" })), t }, t.clustersKmeans = function (t, e) { void 0 === e && (e = {}); var n = t.features.length; e.numberOfClusters = e.numberOfClusters || Math.round(Math.sqrt(n / 2)), e.numberOfClusters > n && (e.numberOfClusters = n), !0 !== e.mutate && (t = Ie(t)); var r = G(t), i = r.slice(0, e.numberOfClusters), o = zs(r, e.numberOfClusters, i), s = {}; return o.centroids.forEach((function (t, e) { s[e] = t })), F(t, (function (t, e) { var n = o.idxs[e]; t.properties.cluster = n, t.properties.centroid = s[n] })), t }, t.collect = function (t, e, n, r) { var i = Nt(6), o = e.features.map((function (t) { var e; return { minX: t.geometry.coordinates[0], minY: t.geometry.coordinates[1], maxX: t.geometry.coordinates[0], maxY: t.geometry.coordinates[1], property: null === (e = t.properties) || void 0 === e ? void 0 : e[n] } })); return i.load(o), t.features.forEach((function (t) { t.properties || (t.properties = {}); var e = Z(t), n = i.search({minX: e[0], minY: e[1], maxX: e[2], maxY: e[3]}), o = []; n.forEach((function (e) { ye([e.minX, e.minY], t) && o.push(e.property) })), t.properties[r] = o })), t }, t.collectionOf = nt, t.combine = function (t) { var e = { MultiPoint: {coordinates: [], properties: []}, MultiLineString: {coordinates: [], properties: []}, MultiPolygon: {coordinates: [], properties: []} }; return F(t, (function (t) { var n, r, i, o; switch (null === (o = t.geometry) || void 0 === o ? void 0 : o.type) { case "Point": e.MultiPoint.coordinates.push(t.geometry.coordinates), e.MultiPoint.properties.push(t.properties); break; case "MultiPoint": (n = e.MultiPoint.coordinates).push.apply(n, t.geometry.coordinates), e.MultiPoint.properties.push(t.properties); break; case "LineString": e.MultiLineString.coordinates.push(t.geometry.coordinates), e.MultiLineString.properties.push(t.properties); break; case "MultiLineString": (r = e.MultiLineString.coordinates).push.apply(r, t.geometry.coordinates), e.MultiLineString.properties.push(t.properties); break; case "Polygon": e.MultiPolygon.coordinates.push(t.geometry.coordinates), e.MultiPolygon.properties.push(t.properties); break; case "MultiPolygon": (i = e.MultiPolygon.coordinates).push.apply(i, t.geometry.coordinates), e.MultiPolygon.properties.push(t.properties) } })), f(Object.keys(e).filter((function (t) { return e[t].coordinates.length })).sort().map((function (t) { return o({type: t, coordinates: e[t].coordinates}, {collectedProperties: e[t].properties}) }))) }, t.concave = function (t, e) { void 0 === e && (e = {}); var n = e.maxEdge || 1 / 0, r = xe(function (t) { var e = [], n = {}; return F(t, (function (t) { if (t.geometry) { var r = t.geometry.coordinates.join("-"); Object.prototype.hasOwnProperty.call(n, r) || (e.push(t), n[r] = !0) } })), f(e) }(t)); if (r.features = r.features.filter((function (t) { var r = t.geometry.coordinates[0][0], i = t.geometry.coordinates[0][1], o = t.geometry.coordinates[0][2], s = me(r, i, e), a = me(i, o, e), u = me(r, o, e); return s <= n && a <= n && u <= n })), r.features.length < 1) return null; var i = $e(r); return 1 === i.coordinates.length && (i.coordinates = i.coordinates[0], i.type = "Polygon"), o(i) }, t.containsNumber = $, t.convertArea = S, t.convertDistance = N, t.convertLength = N, t.convex = de, t.coordAll = G, t.coordEach = R, t.coordReduce = T, t.createBins = au, t.degrees2radians = I, t.degreesToRadians = I, t.destination = vn, t.difference = function (t, e) { var n = rt(t), r = rt(e), i = t.properties || {}, o = $u.difference(n.coordinates, r.coordinates); return 0 === o.length ? null : 1 === o.length ? l(o[0], i) : y(o, i) }, t.dissolve = function (t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = e.propertyName; nt(t, "Polygon", "dissolve"); var r = []; if (!e.propertyName) return ni(y($u.union.apply(null, t.features.map((function (t) { return t.geometry.coordinates }))))); var i = {}; F(t, (function (t) { Object.prototype.hasOwnProperty.call(i, t.properties[n]) || (i[t.properties[n]] = []), i[t.properties[n]].push(t) })); for (var o = Object.keys(i), s = 0; s < o.length; s++) { var a = y($u.union.apply(null, i[o[s]].map((function (t) { return t.geometry.coordinates })))); a.properties[n] = o[s], r.push(a) } return ni(f(r)) }, t.distance = me, t.distanceToDegrees = E, t.distanceToRadians = x, t.distanceWeight = ja, t.earthRadius = e, t.ellipse = Aa, t.envelope = dn, t.explode = bn, t.factors = n, t.feature = o, t.featureCollection = f, t.featureEach = F, t.featureOf = et, t.featureReduce = k, t.filterProperties = cu, t.findPoint = W, t.findSegment = H, t.flatten = ni, t.flattenEach = z, t.flattenReduce = j, t.flip = function (t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = e.mutate; if (!t) throw new Error("geojson is required"); return !1 !== n && void 0 !== n || (t = Ie(t)), R(t, (function (t) { var e = t[0], n = t[1]; t[0] = n, t[1] = e })), t }, t.geojsonType = tt, t.geomEach = q, t.geomReduce = B, t.geometry = s, t.geometryCollection = v, t.getCluster = iu, t.getCoord = K, t.getCoords = Q, t.getGeom = rt, t.getType = it, t.greatCircle = function (t, e, n) { if ("object" != typeof (n = n || {})) throw new Error("options is invalid"); var r = n.properties, i = n.npoints, o = n.offset; return t = K(t), e = K(e), r = r || {}, i = i || 100, o = o || 10, new vi({x: t[0], y: t[1]}, { x: e[0], y: e[1] }, r).Arc(i, {offset: o}).json() }, t.helpers = O, t.hexGrid = ay, t.inside = ye, t.interpolate = function (t, e, n) { if ("object" != typeof (n = n || {})) throw new Error("options is invalid"); var r = n.gridType, i = n.property, o = n.weight; if (!t) throw new Error("points is required"); if (nt(t, "Point", "input must contain Points"), !e) throw new Error("cellSize is required"); if (void 0 !== o && "number" != typeof o) throw new Error("weight must be a number"); i = i || "elevation", r = r || "square", o = o || 1; var s, a = Z(t); switch (r) { case "point": case "points": s = ti(a, e, n); break; case "square": case "squares": s = py(a, e, n); break; case "hex": case "hexes": s = ay(a, e, n); break; case "triangle": case "triangles": s = fy(a, e, n); break; default: throw new Error("invalid gridType") } var u = []; return F(s, (function (e) { var s = 0, a = 0; F(t, (function (t) { var u, l = me("point" === r ? e : En(e), t, n); if (void 0 !== i && (u = t.properties[i]), void 0 === u && (u = t.geometry.coordinates[2]), void 0 === u) throw new Error("zValue is missing"); 0 === l && (s = u); var c = 1 / Math.pow(l, o); a += c, s += c * u })); var l = Ie(e); l.properties[i] = s / a, u.push(l) })), f(u) }, t.intersect = sy, t.invariant = ot, t.isNumber = C, t.isObject = P, t.isobands = function (t, e, n) { if (!P(n = n || {})) throw new Error("options is invalid"); var r = n.zProperty || "elevation", i = n.commonProperties || {}, o = n.breaksProperties || []; if (nt(t, "Point", "Input must contain Points"), !e) throw new Error("breaks is required"); if (!Array.isArray(e)) throw new Error("breaks is not an Array"); if (!P(i)) throw new Error("commonProperties is not an Object"); if (!Array.isArray(o)) throw new Error("breaksProperties is not an Array"); var s = Zi(t, {zProperty: r, flip: !0}), a = function (t, e, n) { for (var r = [], i = 1; i < e.length; i++) { var o = +e[i - 1], s = +e[i], a = Zo(Jo($i(t, o, s - o))), u = {}; u.groupedRings = a, u[n] = o + "-" + s, r.push(u) } return r }(s, e, r); return f((a = function (t, e, n) { var r = Z(n), i = r[2] - r[0], o = r[3] - r[1], s = r[0], a = r[1], u = e[0].length - 1, l = e.length - 1, c = i / u, h = o / l, p = function (t) { t[0] = t[0] * c + s, t[1] = t[1] * h + a }; return t.forEach((function (t) { t.groupedRings.forEach((function (t) { t.forEach((function (t) { t.forEach(p) })) })) })), t }(a, s, t)).map((function (t, e) { if (o[e] && !P(o[e])) throw new Error("Each mappedProperty is required to be an Object"); var n = ct({}, i, o[e]); return n[r] = t[r], y(t.groupedRings, n) }))) }, t.isolines = function (t, e, n) { if (!P(n = n || {})) throw new Error("options is invalid"); var r = n.zProperty || "elevation", i = n.commonProperties || {}, o = n.breaksProperties || []; if (nt(t, "Point", "Input must contain Points"), !e) throw new Error("breaks is required"); if (!Array.isArray(e)) throw new Error("breaks must be an Array"); if (!P(i)) throw new Error("commonProperties must be an Object"); if (!Array.isArray(o)) throw new Error("breaksProperties must be an Array"); var s = _t(t, {zProperty: r, flip: !0}); return f(function (t, e, n) { var r = Z(n), i = r[2] - r[0], o = r[3] - r[1], s = r[0], a = r[1], u = e[0].length - 1, l = e.length - 1, c = i / u, h = o / l, p = function (t) { t[0] = t[0] * c + s, t[1] = t[1] * h + a }; return t.forEach((function (t) { R(t, p) })), t }(function (t, e, n, r, i) { for (var o = [], s = 1; s < e.length; s++) { var a = +e[s], u = ct({}, r, i[s]); u[n] = a; var l = g(ft(t, a), u); o.push(l) } return o }(s, e, r, i, o), s, t)) }, t.kinks = function (t) { var e, n, r = {type: "FeatureCollection", features: []}; if ("LineString" === (n = "Feature" === t.type ? t.geometry : t).type) e = [n.coordinates]; else if ("MultiLineString" === n.type) e = n.coordinates; else if ("MultiPolygon" === n.type) e = [].concat.apply([], n.coordinates); else { if ("Polygon" !== n.type) throw new Error("Input must be a LineString, MultiLineString, Polygon, or MultiPolygon Feature or Geometry"); e = n.coordinates } return e.forEach((function (t) { e.forEach((function (e) { for (var n = 0; n < t.length - 1; n++) for (var i = n; i < e.length - 1; i++) { if (t === e) { if (1 === Math.abs(n - i)) continue; if (0 === n && i === t.length - 2 && t[n][0] === t[t.length - 1][0] && t[n][1] === t[t.length - 1][1]) continue } var o = Gr(t[n][0], t[n][1], t[n + 1][0], t[n + 1][1], e[i][0], e[i][1], e[i + 1][0], e[i + 1][1]); o && r.features.push(a([o[0], o[1]])) } })) })), r }, t.length = Yr, t.lengthToDegrees = E, t.lengthToRadians = x, t.lineArc = bi, t.lineChunk = function (t, e, n) { if (!P(n = n || {})) throw new Error("options is invalid"); var r = n.units, i = n.reverse; if (!t) throw new Error("geojson is required"); if (e <= 0) throw new Error("segmentLength must be greater than 0"); var o = []; return z(t, (function (t) { i && (t.geometry.coordinates = t.geometry.coordinates.reverse()), function (t, e, n, r) { var i = Yr(t, {units: n}); if (i <= e) return r(t); var o = i / e; Number.isInteger(o) || (o = Math.floor(o) + 1); for (var s = 0; s < o; s++) { r(Hr(t, e * s, e * (s + 1), {units: n}), s) } }(t, e, r, (function (t) { o.push(t) })) })), f(o) }, t.lineDistance = Yr, t.lineEach = X, t.lineIntersect = Or, t.lineOffset = function (t, e, n) { if (!P(n = n || {})) throw new Error("options is invalid"); var r = n.units; if (!t) throw new Error("geojson is required"); if (null == e || isNaN(e)) throw new Error("distance is required"); var i = it(t), o = t.properties; switch (i) { case "LineString": return os(t, e, r); case "MultiLineString": var s = []; return z(t, (function (t) { s.push(os(t, e, r).geometry.coordinates) })), g(s, o); default: throw new Error("geometry " + i + " is not supported") } }, t.lineOverlap = ki, t.lineReduce = Y, t.lineSegment = Zn, t.lineSlice = function (t, e, n) { var r = Q(n); if ("LineString" !== it(n)) throw new Error("line must be a LineString"); for (var i, o = Tr(n, t), s = Tr(n, e), a = [(i = o.properties.index <= s.properties.index ? [o, s] : [s, o])[0].geometry.coordinates], u = i[0].properties.index + 1; u < i[1].properties.index + 1; u++) a.push(r[u]); return a.push(i[1].geometry.coordinates), h(a, n.properties) }, t.lineSliceAlong = Hr, t.lineSplit = function (t, e) { if (!t) throw new Error("line is required"); if (!e) throw new Error("splitter is required"); var n = it(t), r = it(e); if ("LineString" !== n) throw new Error("line must be LineString"); if ("FeatureCollection" === r) throw new Error("splitter cannot be a FeatureCollection"); if ("GeometryCollection" === r) throw new Error("splitter cannot be a GeometryCollection"); var i = ei(e, {precision: 7}); switch (r) { case "Point": return mi(t, i); case "MultiPoint": return _i(t, i); case "LineString": case "MultiLineString": case "Polygon": case "MultiPolygon": return _i(t, Or(t, i)) } }, t.lineString = h, t.lineStringToPolygon = Ci, t.lineStrings = p, t.lineToPolygon = Ci, t.mask = function (t, e) { var n, r = hy(e), i = null; return "FeatureCollection" === t.type ? i = cy(2 === (n = t).features.length ? $u.union(n.features[0].geometry.coordinates, n.features[1].geometry.coordinates) : $u.union.apply($u, n.features.map((function (t) { return t.geometry.coordinates })))) : i = cy($u.union(t.geometry.coordinates)), i.geometry.coordinates.forEach((function (t) { r.geometry.coordinates.push(t[0]) })), r }, t.meta = J, t.midpoint = function (t, e) { return vn(t, me(t, e) / 2, mn(t, e)) }, t.moranIndex = function (t, e) { var n = e.inputField, r = e.threshold || 1e5, i = e.p || 2, o = e.binary || !1, s = ja(t, {alpha: e.alpha || -1, binary: o, p: i, standardization: e.standardization || !0, threshold: r}), a = []; F(t, (function (t) { var e = t.properties || {}; a.push(e[n]) })); for (var u = Ua(a), l = function (t) { for (var e = Ua(t), n = 0, r = 0, i = t; r < i.length; r++) { var o = i[r]; n += Math.pow(o - e, 2) } return n / t.length }(a), c = 0, h = 0, p = 0, f = 0, g = s.length, d = 0; d < g; d++) { for (var y = 0, v = 0; v < g; v++) c += s[d][v] * (a[d] - u) * (a[v] - u), h += s[d][v], p += Math.pow(s[d][v] + s[v][d], 2), y += s[d][v] + s[v][d]; f += Math.pow(y, 2) } var _ = c / h / l, m = -1 / (g - 1), x = (g * g * (p *= .5) - g * f + h * h * 3) / ((g - 1) * (g + 1) * (h * h)) - m * m, E = Math.sqrt(x); return {expectedMoranIndex: m, moranIndex: _, stdNorm: E, zNorm: (_ - m) / E} }, t.multiLineString = g, t.multiPoint = d, t.multiPolygon = y, t.nearest = Jn, t.nearestPoint = Jn, t.nearestPointOnLine = Tr, t.nearestPointToLine = function (t, e, n) { void 0 === n && (n = {}); var r = n.units, i = n.properties || {}, o = function (t) { var e = []; switch (t.geometry ? t.geometry.type : t.type) { case "GeometryCollection": return q(t, (function (t) { "Point" === t.type && e.push({type: "Feature", properties: {}, geometry: t}) })), {type: "FeatureCollection", features: e}; case "FeatureCollection": return t.features = t.features.filter((function (t) { return "Point" === t.geometry.type })), t; default: throw new Error("points must be a Point Collection") } }(t); if (!o.features.length) throw new Error("points must contain features"); if (!e) throw new Error("line is required"); if ("LineString" !== it(e)) throw new Error("line must be a LineString"); var s = 1 / 0, a = null; return F(o, (function (t) { var n = Dr(t, e, {units: r}); n < s && (s = n, a = t) })), a && (a.properties = ct({dist: s}, a.properties, i)), a }, t.planepoint = function (t, e) { var n = K(t), r = rt(e).coordinates[0]; if (r.length < 4) throw new Error("OuterRing of a Polygon must have 4 or more Positions."); var i = e.properties || {}, o = i.a, s = i.b, a = i.c, u = n[0], l = n[1], c = r[0][0], h = r[0][1], p = void 0 !== o ? o : r[0][2], f = r[1][0], g = r[1][1], d = void 0 !== s ? s : r[1][2], y = r[2][0], v = r[2][1], _ = void 0 !== a ? a : r[2][2]; return (_ * (u - c) * (l - g) + p * (u - f) * (l - v) + d * (u - y) * (l - h) - d * (u - c) * (l - v) - _ * (u - f) * (l - h) - p * (u - y) * (l - g)) / ((u - c) * (l - g) + (u - f) * (l - v) + (u - y) * (l - h) - (u - c) * (l - v) - (u - f) * (l - h) - (u - y) * (l - g)) }, t.point = a, t.pointGrid = ti, t.pointOnFeature = qr, t.pointOnLine = Tr, t.pointOnSurface = qr, t.pointToLineDistance = Dr, t.points = u, t.pointsWithinPolygon = _e, t.polygon = l, t.polygonSmooth = function (t, e) { var n = [], r = e.iterations || 1; if (!t) throw new Error("inputPolys is required"); return q(t, (function (t, e, i) { var o, s, a; switch (t.type) { case "Polygon": o = [ [] ]; for (var u = 0; u < r; u++) a = [ [] ], s = t, u > 0 && (s = l(o).geometry), qa(s, a), o = a.slice(0); n.push(l(o, i)); break; case "MultiPolygon": o = [ [ [] ] ]; for (var c = 0; c < r; c++) a = [ [ [] ] ], s = t, c > 0 && (s = y(o).geometry), Ba(s, a), o = a.slice(0); n.push(y(o, i)); break; default: throw new Error("geometry is invalid, must be Polygon or MultiPolygon") } })), f(n) }, t.polygonTangents = function (t, e) { var n, r, i, o, s = Q(t), u = Q(e), l = Z(e), c = 0, h = null; switch (s[0] > l[0] && s[0] < l[2] && s[1] > l[1] && s[1] < l[3] && (c = (h = Jn(t, bn(e))).properties.featureIndex), it(e)) { case "Polygon": n = u[0][c], r = u[0][0], null !== h && h.geometry.coordinates[1] < s[1] && (r = u[0][c]), o = Xi(u[0][0], u[0][u[0].length - 1], s); var p = Ui(u[0], s, o, i, n, r); n = p[0], r = p[1]; break; case "MultiPolygon": for (var g = 0, d = 0, y = 0, v = 0; v < u[0].length; v++) { g = v; for (var _ = !1, m = 0; m < u[0][v].length; m++) { if (d = m, y === c) { _ = !0; break } y++ } if (_) break } n = u[0][g][d], r = u[0][g][d], o = Xi(u[0][0][0], u[0][0][u[0][0].length - 1], s), u.forEach((function (t) { var e = Ui(t[0], s, o, i, n, r); n = e[0], r = e[1] })) } return f([a(n), a(r)]) }, t.polygonToLine = Ii, t.polygonToLineString = Ii, t.polygonize = function (t) { var e = hs.fromGeoJson(t); e.deleteDangles(), e.deleteCutEdges(); var n = [], r = []; return e.getEdgeRings().filter((function (t) { return t.isValid() })).forEach((function (t) { t.isHole() ? n.push(t) : r.push(t) })), n.forEach((function (t) { cs.findEdgeRingContaining(t, r) && r.push(t) })), f(r.map((function (t) { return t.toPolygon() }))) }, t.polygons = c, t.projection = Ja, t.propEach = A, t.propReduce = D, t.propertiesContainsFilter = lu, t.radians2degrees = w, t.radiansToDegrees = w, t.radiansToDistance = m, t.radiansToLength = m, t.random = ru, t.randomLineString = tu, t.randomPoint = Qa, t.randomPolygon = $a, t.randomPosition = Ka, t.rewind = function (t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = e.reverse || !1, r = e.mutate || !1; if (!t) throw new Error(" is required"); if ("boolean" != typeof n) throw new Error(" must be a boolean"); if ("boolean" != typeof r) throw new Error(" must be a boolean"); !1 === r && (t = Ie(t)); var i = []; switch (t.type) { case "GeometryCollection": return q(t, (function (t) { Hi(t, n) })), t; case "FeatureCollection": return F(t, (function (t) { F(Hi(t, n), (function (t) { i.push(t) })) })), f(i) } return Hi(t, n) }, t.rhumbBearing = Bi, t.rhumbDestination = ji, t.rhumbDistance = Ar, t.round = _, t.sample = function (t, e) { if (!t) throw new Error("featurecollection is required"); if (null == e) throw new Error("num is required"); if ("number" != typeof e) throw new Error("num must be a number"); return f(function (t, e) { var n, r, i = t.slice(0), o = t.length, s = o - e; for (; o-- > s;) n = i[r = Math.floor((o + 1) * Math.random())], i[r] = i[o], i[o] = n; return i.slice(s) }(t.features, e)) }, t.sector = function (t, e, n, r, i) { if (!P(i = i || {})) throw new Error("options is invalid"); var o = i.properties; if (!t) throw new Error("center is required"); if (null == n) throw new Error("bearing1 is required"); if (null == r) throw new Error("bearing2 is required"); if (!e) throw new Error("radius is required"); if ("object" != typeof i) throw new Error("options must be an object"); if (qi(n) === qi(r)) return _n(t, e, i); var s = Q(t), a = bi(t, e, n, r, i), u = [ [s] ]; return R(a, (function (t) { u[0].push(t) })), u[0].push(s), l(u, o) }, t.segmentEach = U, t.segmentReduce = V, t.shortestPath = function (t, e, n) { if (!P(n = n || {})) throw new Error("options is invalid"); var r = n.resolution, i = n.minDistance, s = n.obstacles || f([]); if (!t) throw new Error("start is required"); if (!e) throw new Error("end is required"); if (r && !C(r) || r <= 0) throw new Error("options.resolution must be a number, greater than 0"); if (i) throw new Error("options.minDistance is not yet implemented"); var u = K(t), l = K(e); switch (t = a(u), e = a(l), it(s)) { case "FeatureCollection": if (0 === s.features.length) return h([u, l]); break; case "Polygon": s = f([o(rt(s))]); break; default: throw new Error("invalid obstacles") } var c = s; c.features.push(t), c.features.push(e); var p = Z(ts(gn(Z(c)), 1.15)); r || (r = me([p[0], p[1]], [p[2], p[1]], n) / 100), c.features.pop(), c.features.pop(); for (var g = p[0], d = p[1], y = p[2], v = p[3], _ = r / me([g, d], [y, d], n) * (y - g), m = r / me([g, d], [g, v], n) * (v - d), x = y - g, E = v - d, b = Math.floor(x / _), w = Math.floor(E / m), I = (x - b * _) / 2, N = [], S = [], M = [], L = [], O = 1 / 0, R = 1 / 0, T = v - (E - w * m) / 2, A = 0; T >= d;) { for (var D = [], F = [], k = g + I, G = 0; k <= y;) { var q = a([k, T]), B = Js(q, s); D.push(B ? 0 : 1), F.push(k + "|" + T); var z = me(q, t); !B && z < O && (O = z, M = {x: G, y: A}); var j = me(q, e); !B && j < R && (R = j, L = {x: G, y: A}), k += _, G++ } S.push(D), N.push(F), T -= m, A++ } var U = new Ys(S, {diagonal: !0}), V = U.grid[M.y][M.x], X = U.grid[L.y][L.x], Y = Xs.search(U, V, X), H = [u]; return Y.forEach((function (t) { var e = N[t.x][t.y].split("|"); H.push([+e[0], +e[1]]) })), H.push(l), tn(h(H)) }, t.simplify = function (t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = void 0 !== e.tolerance ? e.tolerance : 1, r = e.highQuality || !1, i = e.mutate || !1; if (!t) throw new Error("geojson is required"); if (n && n < 0) throw new Error("invalid tolerance"); return !0 !== i && (t = Ie(t)), q(t, (function (t) { !function (t, e, n) { var r = t.type; if ("Point" === r || "MultiPoint" === r) return t; tn(t, !0); var i = t.coordinates; switch (r) { case "LineString": t.coordinates = ln(i, e, n); break; case "MultiLineString": t.coordinates = i.map((function (t) { return ln(t, e, n) })); break; case "Polygon": t.coordinates = cn(i, e, n); break; case "MultiPolygon": t.coordinates = i.map((function (t) { return cn(t, e, n) })) } }(t, n, r) })), t }, t.square = yn, t.squareGrid = py, t.standardDeviationalEllipse = function (t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = e.steps || 64, r = e.weight, i = e.properties || {}; if (!C(n)) throw new Error("steps must be a number"); if (!P(i)) throw new Error("properties must be a number"); var o = G(t).length, s = Fa(t, {weight: r}), a = 0, u = 0, l = 0; F(t, (function (t) { var e = t.properties[r] || 1, n = Ga(Q(t), Q(s)); a += Math.pow(n.x, 2) * e, u += Math.pow(n.y, 2) * e, l += n.x * n.y * e })); var c = a - u, h = Math.sqrt(Math.pow(c, 2) + 4 * Math.pow(l, 2)), p = 2 * l, g = Math.atan((c + h) / p), d = 180 * g / Math.PI, y = 0, v = 0, _ = 0; F(t, (function (t) { var e = t.properties[r] || 1, n = Ga(Q(t), Q(s)); y += Math.pow(n.x * Math.cos(g) - n.y * Math.sin(g), 2) * e, v += Math.pow(n.x * Math.sin(g) + n.y * Math.cos(g), 2) * e, _ += e })); var m = Math.sqrt(2 * y / _), x = Math.sqrt(2 * v / _), E = Aa(s, m, x, {units: "degrees", angle: d, steps: n, properties: i}), b = _e(t, f([E])), w = { meanCenterCoordinates: Q(s), semiMajorAxis: m, semiMinorAxis: x, numberOfFeatures: o, angle: d, percentageWithinEllipse: 100 * G(b).length / o }; return E.properties.standardDeviationalEllipse = w, E }, t.tag = function (t, e, n, r) { return t = Ie(t), e = Ie(e), F(t, (function (t) { t.properties || (t.properties = {}), F(e, (function (e) { void 0 === t.properties[r] && ye(t, e) && (t.properties[r] = e.properties[n]) })) })), t }, t.tesselate = function (t) { if (!t.geometry || "Polygon" !== t.geometry.type && "MultiPolygon" !== t.geometry.type) throw new Error("input must be a Polygon or MultiPolygon"); var e = {type: "FeatureCollection", features: []}; return "Polygon" === t.geometry.type ? e.features = Wn(t.geometry.coordinates) : t.geometry.coordinates.forEach((function (t) { e.features = e.features.concat(Wn(t)) })), e }, t.tin = xe, t.toMercator = Va, t.toWgs84 = Xa, t.transformRotate = $o, t.transformScale = ts, t.transformTranslate = function (t, e, n, r) { if (!P(r = r || {})) throw new Error("options is invalid"); var i = r.units, o = r.zTranslation, s = r.mutate; if (!t) throw new Error("geojson is required"); if (null == e || isNaN(e)) throw new Error("distance is required"); if (o && "number" != typeof o && isNaN(o)) throw new Error("zTranslation is not a number"); if (o = void 0 !== o ? o : 0, 0 === e && 0 === o) return t; if (null == n || isNaN(n)) throw new Error("direction is required"); return e < 0 && (e = -e, n += 180), !1 !== s && void 0 !== s || (t = Ie(t)), R(t, (function (t) { var r = Q(ji(t, e, n, {units: i})); t[0] = r[0], t[1] = r[1], o && 3 === t.length && (t[2] += o) })), t }, t.triangleGrid = fy, t.truncate = ei, t.union = function (t, e, n) { void 0 === n && (n = {}); var r = rt(t), i = rt(e), o = $u.union(r.coordinates, i.coordinates); return 0 === o.length ? null : 1 === o.length ? l(o[0], n.properties) : y(o, n.properties) }, t.unitsFactors = r, t.unkinkPolygon = function (t) { var e = []; return z(t, (function (t) { "Polygon" === t.geometry.type && F(oi(t), (function (n) { e.push(l(n.geometry.coordinates, t.properties)) })) })), f(e) }, t.validateBBox = M, t.validateId = L, t.voronoi = function (t, e) { if (!P(e = e || {})) throw new Error("options is invalid"); var n = e.bbox || [-180, -85, 180, 85]; if (!t) throw new Error("points is required"); if (!Array.isArray(n)) throw new Error("bbox is invalid"); return nt(t, "Point", "points"), f(function () { var t = Ks, e = Qs, n = null; function r(r) { return new Ra(r.map((function (n, i) { var o = [Math.round(t(n, i, r) / Ma) * Ma, Math.round(e(n, i, r) / Ma) * Ma]; return o.index = i, o.data = n, o })), n) } return r.polygons = function (t) { return r(t).polygons() }, r.links = function (t) { return r(t).links() }, r.triangles = function (t) { return r(t).triangles() }, r.x = function (e) { return arguments.length ? (t = "function" == typeof e ? e : Zs(+e), r) : t }, r.y = function (t) { return arguments.length ? (e = "function" == typeof t ? t : Zs(+t), r) : e }, r.extent = function (t) { return arguments.length ? (n = null == t ? null : [ [+t[0][0], +t[0][1]], [+t[1][0], +t[1][1]] ], r) : n && [ [n[0][0], n[0][1]], [n[1][0], n[1][1]] ] }, r.size = function (t) { return arguments.length ? (n = null == t ? null : [ [0, 0], [+t[0], +t[1]] ], r) : n && [n[1][0] - n[0][0], n[1][1] - n[0][1]] }, r }().x((function (t) { return t.geometry.coordinates[0] })).y((function (t) { return t.geometry.coordinates[1] })).extent([ [n[0], n[1]], [n[2], n[3]] ]).polygons(t.features).map(Ta)) }, t.within = _e, Object.defineProperty(t, "__esModule", {value: !0}) }));